@@ -141,6 +141,8 @@ data ForwardResult = ForwardDuplicate {} | ForwardRejected {} | ForwardStored {}
142*pollWakeup : Timestamp
142*pollWakeup : Timestamp
144+*messageSignal : Timestamp
144-- ============================================
146-- ============================================
146-- ============================================
148-- ============================================
@@ -396,7 +398,7 @@ isBadServerName = \sn ->
397authenticateSession : [Session] -> Text -> Timestamp -> AuthResult
399authenticateSession : [Session] -> Text -> Timestamp -> AuthResult
398authenticateSession = \sessions token t ->
400authenticateSession = \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
400 Nothing {} -> Unauthorized {}
402 Nothing {} -> Unauthorized {}
401 Just {value: s} -> Authorized {pubkey: s.pubkey}
403 Just {value: s} -> Authorized {pubkey: s.pubkey}
@@ -771,6 +773,7 @@ pollOnce = \token cursor -> do
771 startWakeup <- *pollWakeup
773 startWakeup <- *pollWakeup
772 atomic do
774 atomic do
773 wakeup <- *pollWakeup
775 wakeup <- *pollWakeup
776+ messageSignal <- *messageSignal
774 allMessages <- *messages
777 allMessages <- *messages
775 let limitedMsgs = takeRelation maxPollEvents (sortBy (\m -> m.receivedAt) (pollableMessages allMessages pubkey clampedCursor t))
778 let limitedMsgs = takeRelation maxPollEvents (sortBy (\m -> m.receivedAt) (pollableMessages allMessages pubkey clampedCursor t))
776 if count limitedMsgs > 0
779 if count limitedMsgs > 0
@@ -978,6 +981,7 @@ serve = \req -> case req of
978 set *messages = union messages
981 set *messages = union messages
979 [{messageId: effectiveMsgId, toKey: to,
982 [{messageId: effectiveMsgId, toKey: to,
980 encryptedBlob: encryptedBlob, timestamp: clampedTs, originServer: "", receivedAt: seqTs}]
983 encryptedBlob: encryptedBlob, timestamp: clampedTs, originServer: "", receivedAt: seqTs}]
984+ set *messageSignal = seqTs
981 let toPresence = presenceForKey presence to t
985 let toPresence = presenceForKey presence to t
982 let localOnline = hasLocalPresence toPresence
986 let localOnline = hasLocalPresence toPresence
983 let remoteServers = collectPeerServers toPresence (\p -> p.server)
987 let remoteServers = collectPeerServers toPresence (\p -> p.server)
@@ -1105,6 +1109,7 @@ serve = \req -> case req of
1105 [{messageId: messageId, toKey: toKey,
1109 [{messageId: messageId, toKey: toKey,
1106 encryptedBlob: encryptedBlob, timestamp: clampedTs, originServer: originServer, receivedAt: seqTs}]
1110 encryptedBlob: encryptedBlob, timestamp: clampedTs, originServer: originServer, receivedAt: seqTs}]
1107 set *messages = updatedMessages
1111 set *messages = updatedMessages
1112+ set *messageSignal = seqTs
1108 yield {pr: pr, forward: ForwardStored {}}
1113 yield {pr: pr, forward: ForwardStored {}}
1109 forkBroadcastOffline t result.pr
1114 forkBroadcastOffline t result.pr
1110 yield (respond {ok: case result.forward of
1115 yield (respond {ok: case result.forward of