From 79a5c0104eded2eacd012c5d9812cdbb825018cd Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Fri, 16 Jan 2026 12:32:13 -0800 Subject: [PATCH] Refine outbox loader --- packages/app/src/relayLists.ts | 30 +++++++++++++++++------------- packages/app/src/session.ts | 2 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/app/src/relayLists.ts b/packages/app/src/relayLists.ts index f91e6e3..41b7dd5 100644 --- a/packages/app/src/relayLists.ts +++ b/packages/app/src/relayLists.ts @@ -1,10 +1,10 @@ +import {uniq, batcher, flatten} from "@welshman/lib" import { RELAYS, asDecryptedEvent, readList, TrustedEvent, - getRelaysFromList, - RelayMode, + unionFilters, Filter, } from "@welshman/util" import { @@ -52,20 +52,24 @@ export const deriveRelayList = makeDeriveItem(relayListsByPubkey, loadRelayList) // 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 = (kind: number, filter: Filter = {}) => async (pubkey: string, relayHints: string[] = []) => { 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([ - 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}) - }), - ]) + await Promise.all([load({filters, relays}), loadUsingOutbox(filters)]) } diff --git a/packages/app/src/session.ts b/packages/app/src/session.ts index 38c91ea..12f1f08 100644 --- a/packages/app/src/session.ts +++ b/packages/app/src/session.ts @@ -113,7 +113,7 @@ export const updateSession = (pubkey: string, f: (session: Session) => Session) putSession(f(getSession(pubkey))) export const dropSession = (_pubkey: string) => { - getSigner.pop(getSession(_pubkey))?.cleanup() + getSigner.pop(getSession(_pubkey))?.cleanup?.() pubkey.update($pubkey => ($pubkey === _pubkey ? undefined : $pubkey)) sessions.update($sessions => omit([_pubkey], $sessions)) }