Tweak outbox again
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
import {uniq, batcher, flatten} from "@welshman/lib"
|
import {chunk, first} from "@welshman/lib"
|
||||||
import {
|
import {
|
||||||
RELAYS,
|
RELAYS,
|
||||||
asDecryptedEvent,
|
asDecryptedEvent,
|
||||||
readList,
|
readList,
|
||||||
TrustedEvent,
|
TrustedEvent,
|
||||||
unionFilters,
|
sortEventsDesc,
|
||||||
|
getRelaysFromList,
|
||||||
|
RelayMode,
|
||||||
Filter,
|
Filter,
|
||||||
} from "@welshman/util"
|
} from "@welshman/util"
|
||||||
import {
|
import {
|
||||||
@@ -20,7 +22,7 @@ import {Router, addMinimalFallbacks} from "@welshman/router"
|
|||||||
import {repository} from "./core.js"
|
import {repository} from "./core.js"
|
||||||
|
|
||||||
export const fetchRelayList = async (pubkey: string, relayHints: string[] = []) => {
|
export const fetchRelayList = async (pubkey: string, relayHints: string[] = []) => {
|
||||||
const filters = [{kinds: [RELAYS], authors: [pubkey]}]
|
const filters = [{kinds: [RELAYS], authors: [pubkey], limit: 1}]
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
load({filters, relays: Router.get().FromRelays(relayHints).getUrls()}),
|
load({filters, relays: Router.get().FromRelays(relayHints).getUrls()}),
|
||||||
@@ -52,18 +54,23 @@ export const deriveRelayList = makeDeriveItem(relayListsByPubkey, loadRelayList)
|
|||||||
|
|
||||||
// Outbox loader
|
// Outbox loader
|
||||||
|
|
||||||
export const loadUsingOutbox = batcher(100, async (filterses: Filter[][]) => {
|
export const loadUsingOutbox = async (kind: number, pubkey: string, filter: Filter = {}) => {
|
||||||
const filters = unionFilters(flatten(filterses))
|
const filters = [{...filter, kinds: [kind], authors: [pubkey], limit: 1}]
|
||||||
const pubkeys = uniq(filters.flatMap(f => f.authors || []))
|
const writeRelays = getRelaysFromList(await loadRelayList(pubkey), RelayMode.Write)
|
||||||
|
const allRelays = Router.get()
|
||||||
|
.FromRelays(writeRelays)
|
||||||
|
.policy(addMinimalFallbacks)
|
||||||
|
.limit(8)
|
||||||
|
.getUrls()
|
||||||
|
|
||||||
await Promise.all(pubkeys.map(pubkey => loadRelayList(pubkey)))
|
for (const relays of chunk(2, allRelays)) {
|
||||||
|
const events = await load({filters, relays})
|
||||||
|
|
||||||
const relays = Router.get().FromPubkeys(pubkeys).policy(addMinimalFallbacks).getUrls()
|
if (events.length > 0) {
|
||||||
|
return first(sortEventsDesc(events))
|
||||||
await load({filters, relays})
|
}
|
||||||
|
}
|
||||||
return filterses.map(() => undefined)
|
}
|
||||||
})
|
|
||||||
|
|
||||||
export const makeOutboxLoader =
|
export const makeOutboxLoader =
|
||||||
(kind: number, filter: Filter = {}) =>
|
(kind: number, filter: Filter = {}) =>
|
||||||
@@ -71,5 +78,5 @@ export const makeOutboxLoader =
|
|||||||
const filters = [{...filter, kinds: [kind], authors: [pubkey]}]
|
const filters = [{...filter, kinds: [kind], authors: [pubkey]}]
|
||||||
const relays = Router.get().FromRelays(relayHints).getUrls()
|
const relays = Router.get().FromRelays(relayHints).getUrls()
|
||||||
|
|
||||||
await Promise.all([load({filters, relays}), loadUsingOutbox(filters)])
|
await Promise.all([load({filters, relays}), loadUsingOutbox(kind, pubkey, filter)])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ export type SocketEvents = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class Socket extends EventEmitter {
|
export class Socket extends EventEmitter {
|
||||||
static batchSize = 10
|
static batchSize = 20
|
||||||
static batchDelay = 50
|
static batchDelay = 100
|
||||||
|
|
||||||
auth: AuthState
|
auth: AuthState
|
||||||
status = SocketStatus.Closed
|
status = SocketStatus.Closed
|
||||||
|
|||||||
Reference in New Issue
Block a user