@@ -912,12 +912,11 @@ serve = \req -> case req of
912912 p <- presence
913913 where p.pubkey == pubkey && p.expiresAt > t
914914 yield p
915− let localPresent = any valid (\p -> p.server == serverHostN)
916− let bestRemote = (fold (\acc p ->
917− if p.server != serverHostN && p.expiresAt > acc.best
918− then {server: p.server, best: p.expiresAt}
919− else acc) {server: "", best: 0} valid).server
920− let foundServer = if localPresent then serverHostN else bestRemote
915+ let foundServer = (fold (\acc p ->
916+ if acc.local then acc
917+ else if p.server == serverHostN then {server: serverHostN, best: 0, local: True {}}
918+ else if p.expiresAt > acc.best then {server: p.server, best: p.expiresAt, local: False {}}
919+ else acc) {server: "", best: 0, local: False {}} valid).server
921920 yield {pr: pr, authorized: True {}, foundServer: foundServer}
922921 forkBroadcastOffline t result.pr
923922 yield (respond {online: result.foundServer != "", server: result.foundServer, authorized: result.authorized})
@@ -958,7 +957,7 @@ serve = \req -> case req of
958957 let merged = mergeByPubkeyServer presence trustedDeduped
959958 let offlineOnlyKeys = do
960959 e <- allValidEntries
961− where none trustedDeduped (\d -> samePubkeyServer d e)
960+ where e.server == fromServer && none trustedDeduped (\d -> samePubkeyServer d e)
962961 yield e
963962 let afterOffline = removeOffline merged offlineOnlyKeys trustedOffline t
964963 let appliedOffline = do p <- diff merged afterOffline; yield {pubkey: p.pubkey, server: p.server}
@@ -979,8 +978,7 @@ serve = \req -> case req of
979978 where s != fromServer
980979 yield s
981980 in sendBatchedGossip targets effectiveEvents (cappedHops - 1))
982− let pr = gossipResult.pr
983− broadcastOfflineGossip t pr.peerServers pr.expiredLocal)
981+ broadcastOfflineGossip t gossipResult.pr.peerServers gossipResult.pr.expiredLocal)
984982 yield (respond {ok: True {}})
985983
986984 ForwardMessage {toKey, fromKey, encryptedBlob, timestamp, originServer, messageId, authorization, respond} -> do