@@ -115,7 +115,6 @@ type PresenceEntry = {pubkey: PubkeyHex, server: AnyServerName, expiresAt: Times
115type ForwardEntry = {messageId: MessageIdHex, toServer: ServerName, createdAt: Timestamp, toKey: PubkeyHex, fromKey: PubkeyHex, encryptedBlob: BlobHex, timestamp: Timestamp}
115type ForwardEntry = {messageId: MessageIdHex, toServer: ServerName, createdAt: Timestamp, toKey: PubkeyHex, fromKey: PubkeyHex, encryptedBlob: BlobHex, timestamp: Timestamp}
116type AckedEntry = {messageId: MessageIdHex, toKey: PubkeyHex, ackedAt: Timestamp, originServer: ServerName}
116type AckedEntry = {messageId: MessageIdHex, toKey: PubkeyHex, ackedAt: Timestamp, originServer: ServerName}
117type AuthResult = Authorized {pubkey: PubkeyHex} | Unauthorized {}
117type AuthResult = Authorized {pubkey: PubkeyHex} | Unauthorized {}
118−type PruneResult = {expiredLocal: [PresenceEntry], peerServers: [ServerName]}
119type SendResult = SendUnauthorized {} | SendRejected {} | SendDone {status: MessageStatus, remoteServers: [ServerName], fromKey: PubkeyHex}
118type SendResult = SendUnauthorized {} | SendRejected {} | SendDone {status: MessageStatus, remoteServers: [ServerName], fromKey: PubkeyHex}
@@ -943,10 +942,7 @@ serve = \req -> case req of
943 e <- offlineEntries
942 e <- offlineEntries
944 where none onlineEntries (\o -> samePubkeyServer o e && o.timestamp > e.timestamp)
943 where none onlineEntries (\o -> samePubkeyServer o e && o.timestamp > e.timestamp)
946− let trustedOffline = do
945+ let trustedOffline = do e <- offlineEntries; where e.server == fromServer; yield e
947− e <- allValidEntries
948− where not (isGossipOnline e.eventType) && e.server == fromServer
950 let deduped = mergeByPubkeyServer [] filteredOnline
946 let deduped = mergeByPubkeyServer [] filteredOnline
951 gossipResult <- atomic do
947 gossipResult <- atomic do
952 pr <- maybePrune t
948 pr <- maybePrune t
@@ -964,11 +960,8 @@ serve = \req -> case req of
964 e <- allValidEntries
960 e <- allValidEntries
965 where none trustedDeduped (\d -> samePubkeyServer d e)
961 where none trustedDeduped (\d -> samePubkeyServer d 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}
971 let afterOffline = removeOffline merged offlineOnlyKeys trustedOffline t
963 let afterOffline = removeOffline merged offlineOnlyKeys trustedOffline t
964+ let appliedOffline = do p <- diff merged afterOffline; yield {pubkey: p.pubkey, server: p.server}
972 let capResult = capGossipPresence afterOffline appliedOnline trustedDeduped presence offlineOnlyKeys trustedOffline t
965 let capResult = capGossipPresence afterOffline appliedOnline trustedDeduped presence offlineOnlyKeys trustedOffline t
973 set *presence = capResult.finalPresence
966 set *presence = capResult.finalPresence
974 let gossipPeerServers = collectPeerServers capResult.finalPresence (\p -> p.server)
967 let gossipPeerServers = collectPeerServers capResult.finalPresence (\p -> p.server)