@@ -912,12 +912,11 @@ serve = \req -> case req of
912 p <- presence
912 p <- presence
913 where p.pubkey == pubkey && p.expiresAt > t
913 where p.pubkey == pubkey && p.expiresAt > t
915− let localPresent = any valid (\p -> p.server == serverHostN)
915+ let foundServer = (fold (\acc p ->
916− let bestRemote = (fold (\acc p ->
916+ if acc.local then acc
917− if p.server != serverHostN && p.expiresAt > acc.best
917+ else if p.server == serverHostN then {server: serverHostN, best: 0, local: True {}}
918− then {server: p.server, best: p.expiresAt}
918+ else if p.expiresAt > acc.best then {server: p.server, best: p.expiresAt, local: False {}}
919− else acc) {server: "", best: 0} valid).server
919+ else acc) {server: "", best: 0, local: False {}} valid).server
920− let foundServer = if localPresent then serverHostN else bestRemote
921 yield {pr: pr, authorized: True {}, foundServer: foundServer}
920 yield {pr: pr, authorized: True {}, foundServer: foundServer}
922 forkBroadcastOffline t result.pr
921 forkBroadcastOffline t result.pr
923 yield (respond {online: result.foundServer != "", server: result.foundServer, authorized: result.authorized})
922 yield (respond {online: result.foundServer != "", server: result.foundServer, authorized: result.authorized})
@@ -958,7 +957,7 @@ serve = \req -> case req of
958 let merged = mergeByPubkeyServer presence trustedDeduped
957 let merged = mergeByPubkeyServer presence trustedDeduped
959 let offlineOnlyKeys = do
958 let offlineOnlyKeys = do
960 e <- allValidEntries
959 e <- allValidEntries
961− where none trustedDeduped (\d -> samePubkeyServer d e)
960+ where e.server == fromServer && none trustedDeduped (\d -> samePubkeyServer d e)
963 let afterOffline = removeOffline merged offlineOnlyKeys trustedOffline t
962 let afterOffline = removeOffline merged offlineOnlyKeys trustedOffline t
964 let appliedOffline = do p <- diff merged afterOffline; yield {pubkey: p.pubkey, server: p.server}
963 let appliedOffline = do p <- diff merged afterOffline; yield {pubkey: p.pubkey, server: p.server}
@@ -979,8 +978,7 @@ serve = \req -> case req of
979 where s != fromServer
978 where s != fromServer
981 in sendBatchedGossip targets effectiveEvents (cappedHops - 1))
980 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)
984 yield (respond {ok: True {}})
982 yield (respond {ok: True {}})
986 ForwardMessage {toKey, fromKey, encryptedBlob, timestamp, originServer, messageId, authorization, respond} -> do
984 ForwardMessage {toKey, fromKey, encryptedBlob, timestamp, originServer, messageId, authorization, respond} -> do