Accept multiple filters to request

This commit is contained in:
Jon Staab
2025-04-01 13:15:50 -07:00
parent fd0cdf2c19
commit 05a9d6461b
16 changed files with 105 additions and 93 deletions
+4
View File
@@ -3,12 +3,16 @@ import {verifyEvent, isEphemeralKind, isDVMKind} from "@welshman/util"
import {Repository} from "@welshman/relay"
import {Pool, Tracker, SocketEvent, isRelayEvent} from "@welshman/net"
import {custom} from "@welshman/store"
import {loadRelay, trackRelayStats} from "./relays.js"
export const repository = Repository.getSingleton()
export const tracker = new Tracker()
Pool.getSingleton().subscribe(socket => {
loadRelay(socket.url)
trackRelayStats(socket)
socket.on(SocketEvent.Receive, message => {
if (isRelayEvent(message)) {
const event = message[2]
+5 -10
View File
@@ -11,17 +11,12 @@ import {wotGraph, maxWot, getFollows, getNetwork, getFollowers} from "./wot.js"
export const request = async ({filters = [{}], relays = [], onEvent}: RequestOpts) => {
if (relays.length > 0) {
await Promise.all(
filters.map(
filter =>
new Promise<void>(resolve => {
const sub = new MultiRequest({filter, relays, timeout: 5000, autoClose: true})
await new Promise<void>(resolve => {
const sub = new MultiRequest({filters, relays, timeout: 5000, autoClose: true})
sub.on(RequestEvent.Event, onEvent)
sub.on(RequestEvent.Close, resolve)
}),
),
)
sub.on(RequestEvent.Event, onEvent)
sub.on(RequestEvent.Close, resolve)
})
} else {
await Promise.all(getFilterSelections(filters).map(opts => request({...opts, onEvent})))
}
+2 -2
View File
@@ -24,9 +24,9 @@ export const {
load: async (pubkey: string, request: Partial<MultiRequestOptions> = {}) => {
await loadRelaySelections(pubkey, request)
const filter = {kinds: [FOLLOWS], authors: [pubkey]}
const filters = [{kinds: [FOLLOWS], authors: [pubkey]}]
const relays = Router.get().FromPubkey(pubkey).getUrls()
await load({relays, ...request, filter})
await load({relays, ...request, filters})
},
})
+2 -2
View File
@@ -30,9 +30,9 @@ export const {
load: async (pubkey: string, request: Partial<MultiRequestOptions> = {}) => {
await loadRelaySelections(pubkey, request)
const filter = {kinds: [MUTES], authors: [pubkey]}
const filters = [{kinds: [MUTES], authors: [pubkey]}]
const relays = Router.get().FromPubkey(pubkey).getUrls()
await load({relays, ...request, filter})
await load({relays, ...request, filters})
},
})
+2 -2
View File
@@ -24,9 +24,9 @@ export const {
load: async (pubkey: string, request: Partial<MultiRequestOptions> = {}) => {
await loadRelaySelections(pubkey, request)
const filter = {kinds: [PINS], authors: [pubkey]}
const filters = [{kinds: [PINS], authors: [pubkey]}]
const relays = Router.get().FromPubkey(pubkey).getUrls()
await load({relays, ...request, filter})
await load({relays, ...request, filters})
},
})
+2 -2
View File
@@ -28,10 +28,10 @@ export const {
await loadRelaySelections(pubkey, request)
const router = Router.get()
const filter = {kinds: [PROFILE], authors: [pubkey]}
const filters = [{kinds: [PROFILE], authors: [pubkey]}]
const relays = router.merge([router.Index(), router.FromPubkey(pubkey)]).getUrls()
await load({relays, ...request, filter})
await load({relays, ...request, filters})
},
})
+2 -2
View File
@@ -53,7 +53,7 @@ export const {
await load({
relays: router.merge([router.Index(), router.FromPubkey(pubkey)]).getUrls(),
...request,
filter: {kinds: [RELAYS], authors: [pubkey]},
filters: [{kinds: [RELAYS], authors: [pubkey]}],
})
},
})
@@ -78,7 +78,7 @@ export const {
await load({
relays: router.merge([router.Index(), router.FromPubkey(pubkey)]).getUrls(),
...request,
filter: {kinds: [INBOX_RELAYS], authors: [pubkey]},
filters: [{kinds: [INBOX_RELAYS], authors: [pubkey]}],
})
},
})
+1 -1
View File
@@ -55,7 +55,7 @@ export const createSearch = <V, T>(options: T[], opts: SearchOptions<V, T>): Sea
export const searchProfiles = debounce(500, (search: string) => {
if (search.length > 2) {
load({
filter: {kinds: [PROFILE], search},
filters: [{kinds: [PROFILE], search}],
relays: Router.get().Search().getUrls(),
})
}
+3 -11
View File
@@ -35,17 +35,9 @@ export const pull = async ({relays, filters}: AppSyncOpts) => {
relays.map(async relay => {
await (hasNegentropy(relay)
? basePull({filters, events, relays: [relay]})
: Promise.all(
filters.map(
filter =>
new Promise<void>(resolve => {
new SingleRequest({filter, relay, autoClose: true}).on(
RequestEvent.Close,
resolve,
)
}),
),
))
: new Promise<void>(resolve => {
new SingleRequest({filters, relay, autoClose: true}).on(RequestEvent.Close, resolve)
}))
}),
)
}