@@ -115,7 +115,6 @@ type PresenceEntry = {pubkey: PubkeyHex, server: AnyServerName, expiresAt: Times
115115type ForwardEntry = {messageId: MessageIdHex, toServer: ServerName, createdAt: Timestamp, toKey: PubkeyHex, fromKey: PubkeyHex, encryptedBlob: BlobHex, timestamp: Timestamp}
116116type AckedEntry = {messageId: MessageIdHex, toKey: PubkeyHex, ackedAt: Timestamp, originServer: ServerName}
117117type AuthResult = Authorized {pubkey: PubkeyHex} | Unauthorized {}
118−type PruneResult = {expiredLocal: [PresenceEntry], peerServers: [ServerName]}
119118type SendResult = SendUnauthorized {} | SendRejected {} | SendDone {status: MessageStatus, remoteServers: [ServerName], fromKey: PubkeyHex}
120119
121120
@@ -943,10 +942,7 @@ serve = \req -> case req of
943942 e <- offlineEntries
944943 where none onlineEntries (\o -> samePubkeyServer o e && o.timestamp > e.timestamp)
945944 yield e
946− let trustedOffline = do
947− e <- allValidEntries
948− where not (isGossipOnline e.eventType) && e.server == fromServer
949− yield e
945+ let trustedOffline = do e <- offlineEntries; where e.server == fromServer; yield e
950946 let deduped = mergeByPubkeyServer [] filteredOnline
951947 gossipResult <- atomic do
952948 pr <- maybePrune t
@@ -964,11 +960,8 @@ serve = \req -> case req of
964960 e <- allValidEntries
965961 where none trustedDeduped (\d -> samePubkeyServer d e)
966962 yield e
967− let appliedOffline = do
968− k <- offlineOnlyKeys
969− where any presence (\p -> samePubkeyServer p k && any trustedOffline (\o -> samePubkeyServer o k && (if o.timestamp > t then t else o.timestamp) > p.timestamp))
970− yield {pubkey: k.pubkey, server: k.server}
971963 let afterOffline = removeOffline merged offlineOnlyKeys trustedOffline t
964+ let appliedOffline = do p <- diff merged afterOffline; yield {pubkey: p.pubkey, server: p.server}
972965 let capResult = capGossipPresence afterOffline appliedOnline trustedDeduped presence offlineOnlyKeys trustedOffline t
973966 set *presence = capResult.finalPresence
974967 let gossipPeerServers = collectPeerServers capResult.finalPresence (\p -> p.server)