on master help sign in
Remove dead /federation/forward-batch endpoint
commit300edbae0461f1b7c2d3066495707081370b7855 authoriko <mail@iko.soy> dateFri 8 May 2026, 16:22 (5 months ago) parent9863dd9
1 file changed+8−28
server.knot+8−28
server.knot+8−28
@@ -309,7 +309,6 @@ route ClientApi where
309309route FederationApi where
310310 POST {events: [GossipEventType], fromServer: ServerName} /federation/gossip -> {} = RecvGossip
311311 POST {toKey: PubkeyHex, encryptedBlob: BlobHex} /federation/forward -> {} = ForwardMessage
312− POST {forwards: [{toKey: PubkeyHex, encryptedBlob: BlobHex}]} /federation/forward-batch -> {results: [{ok: Bool}]} = FederationBatchForward
313312
314313route Api = AuthApi | ClientApi | FederationApi
315314
@@ -1108,29 +1107,24 @@ handleRecvGossip = \events fromServer -> do
11081107 yield (Ok {value: {}})
11091108
11101109-- Store a federated/forwarded message into the local mailbox. Caller wraps in `atomic`.
1111−-- Returns "" on success, otherwise an error code:
1112−-- "no_presence" | "rate_limited" (only when checkRecvRate).
1110+-- Returns "" on success, otherwise an error code: "no_presence" | "rate_limited".
11131111--
11141112-- The presence gate requires the recipient to be **currently locally online**
11151113-- (not just visible to gossip somewhere). Without that, an A → B forward based
11161114-- on stale gossip about R could land on B with no actively-polling client and
11171115-- get stuck. If B refuses, A retries via `retryPendingForwards` against the
11181116-- next presence target.
1119−storeFederated : PubkeyHex -> BlobHex -> Bool -> Int<Ms> -> IO {rw *messages, rw *pollWakeup, r *presence, rw *recvRates, rw *seqCounter} Text
1120−storeFederated = \toKey encryptedBlob checkRecvRate t -> do
1117+storeFederated : PubkeyHex -> BlobHex -> Int<Ms> -> IO {rw *messages, rw *pollWakeup, r *presence, rw *recvRates, rw *seqCounter} Text
1118+storeFederated = \toKey encryptedBlob t -> do
11211119 pres <- *presence
11221120 msgs <- *messages
11231121 if not any pres (\p -> p.pubkey == toKey && isLocalServer p.server && p.expiresAt > t)
11241122 then yield "no_presence"
11251123 else do
1126− limited <- if checkRecvRate
1127− then do
1128− rRates <- *recvRates
1129− let r = checkRate rRates toKey maxRecvRatePerKey recvRateWindowMs t
1130− *recvRates = r.entries
1131− yield r.limited
1132− else yield (False {})
1133− if limited
1124+ rRates <- *recvRates
1125+ let r = checkRate rRates toKey maxRecvRatePerKey recvRateWindowMs t
1126+ *recvRates = r.entries
1127+ if r.limited
11341128 then yield "rate_limited"
11351129 else do
11361130 seq <- *seqCounter
@@ -1146,24 +1140,11 @@ storeFederated = \toKey encryptedBlob checkRecvRate t -> do
11461140handleForwardMessage : PubkeyHex -> BlobHex -> IO {rw *messages, rw *pollWakeup, r *presence, rw *recvRates, rw *seqCounter, clock} (Result HttpError {})
11471141handleForwardMessage = \toKey encryptedBlob -> do
11481142 t <- now
1149− result <- atomic storeFederated toKey encryptedBlob (True {}) t
1143+ result <- atomic storeFederated toKey encryptedBlob t
11501144 if result == ""
11511145 then yield (Ok {value: {}})
11521146 else yield (Err {error: {status: if result == "no_presence" then 404 else 429, message: result}})
11531147
1154−-- POST /federation/forward-batch: bulk variant of `handleForwardMessage`.
1155−-- Skips per-entry recv-rate charging.
1156−handleFederationBatchForward : [{encryptedBlob: BlobHex, toKey: PubkeyHex | a}] -> IO {clock} (Result HttpError {results: [{ok: Bool}]})
1157−handleFederationBatchForward = \forwards -> do
1158− t <- now
1159− if count forwards > maxBatchSize
1160− then yield (Err {error: {status: 400, message: "invalid_request"}})
1161− else do
1162− results <- mapEach (takeRelation maxBatchSize forwards) (\e -> do
1163− result <- atomic storeFederated e.toKey e.encryptedBlob (False {}) t
1164− yield {ok: result == ""})
1165− yield (Ok {value: {results}})
1166−
11671148-- ============================================
11681149-- Dispatch
11691150-- ============================================
@@ -1181,7 +1162,6 @@ api = serve Api where
11811162 SendMessages = \{messages, authorization, xForwardedFor} -> handleSendMessages messages authorization (clientIpOf xForwardedFor)
11821163 RecvGossip = \{events, fromServer} -> handleRecvGossip events fromServer
11831164 ForwardMessage = \{toKey, encryptedBlob} -> handleForwardMessage toKey encryptedBlob
1184− FederationBatchForward = \{forwards} -> handleFederationBatchForward forwards
11851165
11861166-- ============================================
11871167-- Background loops