Accept multiple filters to request
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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})))
|
||||
}
|
||||
|
||||
@@ -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})
|
||||
},
|
||||
})
|
||||
|
||||
@@ -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})
|
||||
},
|
||||
})
|
||||
|
||||
@@ -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})
|
||||
},
|
||||
})
|
||||
|
||||
@@ -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})
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -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]}],
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
@@ -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(),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}))
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user