@@ -69,10 +69,10 @@ type PresenceEntry = {pubkey: PubkeyHex, server: Text, expiresAt: Timestamp, tim
6969type ForwardEntry = {messageId: MessageIdHex, toServer: ServerName, createdAt: Timestamp, toKey: PubkeyHex, fromKey: PubkeyHex, encryptedBlob: BlobHex, timestamp: Timestamp}
7070type AckedEntry = {messageId: MessageIdHex, toKey: PubkeyHex, ackedAt: Timestamp, originServer: ServerName}
7171type AuthResult = Authorized {pubkey: PubkeyHex} | Unauthorized {}
72−type PruneResult = {expiredLocal: [PresenceEntry], peerServers: [Text]}
72+type PruneResult = {expiredLocal: [PresenceEntry], peerServers: [ServerName]}
7373type PollResult = PollUnauthorized {} | PollAuthorized {events: [PollEvent], cursor: Timestamp}
74−type VerifyResult = VerifyFailed {} | VerifyOk {peerServers: [Text]}
75−type SendResult = SendUnauthorized {} | SendRejected {} | SendDone {status: MessageStatus, remoteServers: [Text], fromKey: PubkeyHex}
74+type VerifyResult = VerifyFailed {} | VerifyOk {peerServers: [ServerName]}
75+type SendResult = SendUnauthorized {} | SendRejected {} | SendDone {status: MessageStatus, remoteServers: [ServerName], fromKey: PubkeyHex}
7676type AckResult = AckUnauthorized {} | AckDone {pendingAcks: [AckedEntry], evictedEntries: [AckedEntry]}
7777type LookupResult = LookupUnauthorized {} | LookupDone {foundServer: OptionalServerName}
7878
@@ -371,6 +371,9 @@ authenticateSession = \sessions token t ->
371371 Nothing {} -> Unauthorized {}
372372 Just {value: s} -> Authorized {pubkey: s.pubkey}
373373
374+authenticateRequest = \sessions authorization t ->
375+ authenticateSession sessions (extractToken authorization) t
376+
374377extractToken = \authHeader ->
375378 let token = drop 7 authHeader in
376379 if toLower (take 7 authHeader) == "bearer " && not (tooLong token maxTokenLen)
@@ -771,11 +774,7 @@ serve = \req -> case req of
771774 case result.verify of
772775 VerifyOk {peerServers} ->
773776 when federationEnabled
774− (sendToEach peerServers (\server -> do
775− _ <- fetch (federationScheme ++ server) (RecvGossip {
776− authorization: "Bearer " ++ federationSecret,
777− events: [{eventType: "online", pubkey: pubkey, server: serverHostN, timestamp: t, ttl: onlineGossipTtl}], hopsRemaining: 2, fromServer: serverHostN})
778− yield {}))
777+ (sendBatchedGossip peerServers [{eventType: "online", pubkey: pubkey, server: serverHostN, timestamp: t, ttl: onlineGossipTtl}] 2)
779778 _ -> yield {}
780779 broadcastOfflineGossip t result.pr.peerServers expiredLocal)
781780 yield (case result.verify of
@@ -797,14 +796,13 @@ serve = \req -> case req of
797796 SendMessage {to, encryptedBlob, timestamp, authorization, respond} -> do
798797 let to = normalizeHex to
799798 let encryptedBlob = normalizeHex encryptedBlob
800− let token = extractToken authorization
801799 t <- now
802800 msgId <- genToken
803801 let clampedTs = clampTimestamp timestamp t
804802 result <- atomic do
805803 pr <- maybePrune t
806804 sessions <- *sessions
807− let auth = authenticateSession sessions token t
805+ let auth = authenticateRequest sessions authorization t
808806 case auth of
809807 Unauthorized {} ->
810808 yield {pr: pr, send: SendUnauthorized {}}
@@ -853,13 +851,12 @@ serve = \req -> case req of
853851 SendDone {status} -> respond {status: status, messageId: msgId})
854852
855853 AckMessages {messageIds, authorization, respond} -> do
856− let token = extractToken authorization
857854 t <- now
858855 let dedupedIds = dedupMessageIds messageIds
859856 result <- atomic do
860857 pr <- maybePrune t
861858 sessions <- *sessions
862− let auth = authenticateSession sessions token t
859+ let auth = authenticateRequest sessions authorization t
863860 case auth of
864861 Unauthorized {} ->
865862 yield {pr: pr, ack: AckUnauthorized {}}
@@ -921,12 +918,11 @@ serve = \req -> case req of
921918
922919 LookupPresence {pubkey, authorization, respond} -> do
923920 let pubkey = normalizeHex pubkey
924− let token = extractToken authorization
925921 t <- now
926922 result <- atomic do
927923 pr <- maybePrune t
928924 sessions <- *sessions
929− let auth = authenticateSession sessions token t
925+ let auth = authenticateRequest sessions authorization t
930926 case auth of
931927 Unauthorized {} ->
932928 yield {pr: pr, lookup: LookupUnauthorized {}}