@@ -787,9 +787,7 @@ clampTimestamp : Timestamp -> Timestamp -> Timestamp
787clampTimestamp = \timestamp t -> clamp (t - messageMaxAge) t timestamp
787clampTimestamp = \timestamp t -> clamp (t - messageMaxAge) t timestamp
789effectiveMessageTtl : Int<Ms> -> Int<Ms>
789effectiveMessageTtl : Int<Ms> -> Int<Ms>
790−effectiveMessageTtl = \expiresInMs ->
791− if expiresInMs <= 0 then unackedMessageMaxAge
792− else clamp minMessageTtl unackedMessageMaxAge expiresInMs
790+effectiveMessageTtl = \e -> if e <= 0 then unackedMessageMaxAge else clamp minMessageTtl unackedMessageMaxAge e
794nextSeqTs : Timestamp -> Timestamp -> Timestamp
792nextSeqTs : Timestamp -> Timestamp -> Timestamp
795nextSeqTs = \t seqCounter -> max t (seqCounter + 1)
793nextSeqTs = \t seqCounter -> max t (seqCounter + 1)
@@ -802,9 +800,8 @@ presenceForKey = \presence pubkey t ->
803-- Resolve a key's server for client lookup, masking remote identities behind "remote".
801-- Resolve a key's server for client lookup, masking remote identities behind "remote".
804maskedServer = \pres pubkey t ->
802maskedServer = \pres pubkey t ->
805− let entries = presenceForKey pres pubkey t in
806− if any entries (\p -> isLocalServer p.server) then serverHostN
803+ if any (presenceForKey pres pubkey t) (\p -> isLocalServer p.server) then serverHostN
807− else if count entries > 0 then "remote"
804+ else if count (presenceForKey pres pubkey t) > 0 then "remote"
810hasMessage : MessageIdHex -> PubkeyHex -> [{messageId: MessageIdHex, toKey: PubkeyHex | a}] -> Bool
807hasMessage : MessageIdHex -> PubkeyHex -> [{messageId: MessageIdHex, toKey: PubkeyHex | a}] -> Bool
@@ -843,10 +840,9 @@ pruneExpired = \t -> atomic do
843 pruneRef pendingFederationCancels (\x -> t - x.createdAt < messageMaxAge)
840 pruneRef pendingFederationCancels (\x -> t - x.createdAt < messageMaxAge)
844 -- presence: remember locally-expired keys for offline gossip
841 -- presence: remember locally-expired keys for offline gossip
845 pres <- *presence
842 pres <- *presence
846− let keptPres = filter pres (\p -> p.expiresAt > t)
843+ pruneRef presence (\p -> p.expiresAt > t)
847− let stillLocal = filter keptPres (\k -> isLocalServer k.server)
848− set *presence = keptPres
844+ newPres <- *presence
849− yield (filter pres (\p -> p.expiresAt <= t && isLocalServer p.server && none stillLocal (\k -> k.pubkey == p.pubkey)))
845+ yield (filter pres (\p -> p.expiresAt <= t && isLocalServer p.server && none newPres (\k -> isLocalServer k.server && k.pubkey == p.pubkey)))
851-- ============================================
847-- ============================================
852-- Federation gossip
848-- Federation gossip
@@ -1409,7 +1405,7 @@ handleVerifyToken = \token scope clientIp respond -> do
1409 found <- atomic do
1405 found <- atomic do
1410 pending <- *pendingVerifications
1406 pending <- *pendingVerifications
1411 let match = any pending (\p -> p.scope == scope && p.token == token && t - p.createdAt < verificationTokenExpiry)
1407 let match = any pending (\p -> p.scope == scope && p.token == token && t - p.createdAt < verificationTokenExpiry)
1412− when match (set *pendingVerifications = filter pending (\p -> p.scope != scope || p.token != token))
1408+ when match (set *pendingVerifications = removeWhere pending (\p -> p.scope == scope && p.token == token))
1413 yield match
1409 yield match
1414 yield (respond {ok: found})
1410 yield (respond {ok: found})