Refine outbox loader
This commit is contained in:
@@ -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})
|
|
||||||
}),
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user