Refine outbox loader

This commit is contained in:
Jon Staab
2026-01-16 12:32:13 -08:00
parent 7a3af853c5
commit 79a5c0104e
2 changed files with 18 additions and 14 deletions
+17 -13
View File
@@ -1,10 +1,10 @@
import {uniq, batcher, flatten} from "@welshman/lib"
import { import {
RELAYS, RELAYS,
asDecryptedEvent, asDecryptedEvent,
readList, readList,
TrustedEvent, TrustedEvent,
getRelaysFromList, unionFilters,
RelayMode,
Filter, Filter,
} from "@welshman/util" } from "@welshman/util"
import { import {
@@ -52,20 +52,24 @@ export const deriveRelayList = makeDeriveItem(relayListsByPubkey, loadRelayList)
// Outbox loader // Outbox loader
export const loadUsingOutbox = batcher(100, async (filterses: Filter[][]) => {
const filters = unionFilters(flatten(filterses))
const pubkeys = uniq(filters.flatMap(f => f.authors || []))
await Promise.all(pubkeys.map(pubkey => loadRelayList(pubkey)))
const relays = Router.get().FromPubkeys(pubkeys).policy(addMinimalFallbacks).getUrls()
await load({filters, relays})
return filterses.map(() => undefined)
})
export const makeOutboxLoader = export const makeOutboxLoader =
(kind: number, filter: Filter = {}) => (kind: number, filter: Filter = {}) =>
async (pubkey: string, relayHints: string[] = []) => { async (pubkey: string, relayHints: string[] = []) => {
const filters = [{...filter, kinds: [kind], authors: [pubkey]}] const filters = [{...filter, kinds: [kind], authors: [pubkey]}]
const relays = Router.get().FromRelays(relayHints).policy(addMinimalFallbacks).getUrls() const relays = Router.get().FromRelays(relayHints).getUrls()
await Promise.all([ await Promise.all([load({filters, relays}), loadUsingOutbox(filters)])
load({filters, relays}),
loadRelayList(pubkey).then(async () => {
const relayList = getRelayList(pubkey)
const writeRelays = getRelaysFromList(relayList, RelayMode.Write)
const relays = Router.get().FromRelays(writeRelays).getUrls()
await load({filters, relays})
}),
])
} }
+1 -1
View File
@@ -113,7 +113,7 @@ export const updateSession = (pubkey: string, f: (session: Session) => Session)
putSession(f(getSession(pubkey))) putSession(f(getSession(pubkey)))
export const dropSession = (_pubkey: string) => { export const dropSession = (_pubkey: string) => {
getSigner.pop(getSession(_pubkey))?.cleanup() getSigner.pop(getSession(_pubkey))?.cleanup?.()
pubkey.update($pubkey => ($pubkey === _pubkey ? undefined : $pubkey)) pubkey.update($pubkey => ($pubkey === _pubkey ? undefined : $pubkey))
sessions.update($sessions => omit([_pubkey], $sessions)) sessions.update($sessions => omit([_pubkey], $sessions))
} }