@@ -141,6 +141,8 @@ data ForwardResult = ForwardDuplicate {} | ForwardRejected {} | ForwardStored {}
141141
142142*pollWakeup : Timestamp
143143
144+*messageSignal : Timestamp
145+
144146-- ============================================
145147-- Routes
146148-- ============================================
@@ -396,7 +398,7 @@ isBadServerName = \sn ->
396398
397399authenticateSession : [Session] -> Text -> Timestamp -> AuthResult
398400authenticateSession = \sessions token t ->
399− case headOf (do s <- sessions; where s.expiresAt > t && s.token == token; yield s) of
401+ case headOf (do s <- sessions; where s.expiresAt > t && safeCompare s.token token; yield s) of
400402 Nothing {} -> Unauthorized {}
401403 Just {value: s} -> Authorized {pubkey: s.pubkey}
402404
@@ -771,6 +773,7 @@ pollOnce = \token cursor -> do
771773 startWakeup <- *pollWakeup
772774 atomic do
773775 wakeup <- *pollWakeup
776+ messageSignal <- *messageSignal
774777 allMessages <- *messages
775778 let limitedMsgs = takeRelation maxPollEvents (sortBy (\m -> m.receivedAt) (pollableMessages allMessages pubkey clampedCursor t))
776779 if count limitedMsgs > 0
@@ -978,6 +981,7 @@ serve = \req -> case req of
978981 set *messages = union messages
979982 [{messageId: effectiveMsgId, toKey: to,
980983 encryptedBlob: encryptedBlob, timestamp: clampedTs, originServer: "", receivedAt: seqTs}]
984+ set *messageSignal = seqTs
981985 let toPresence = presenceForKey presence to t
982986 let localOnline = hasLocalPresence toPresence
983987 let remoteServers = collectPeerServers toPresence (\p -> p.server)
@@ -1105,6 +1109,7 @@ serve = \req -> case req of
11051109 [{messageId: messageId, toKey: toKey,
11061110 encryptedBlob: encryptedBlob, timestamp: clampedTs, originServer: originServer, receivedAt: seqTs}]
11071111 set *messages = updatedMessages
1112+ set *messageSignal = seqTs
11081113 yield {pr: pr, forward: ForwardStored {}}
11091114 forkBroadcastOffline t result.pr
11101115 yield (respond {ok: case result.forward of