Add relay package

This commit is contained in:
Jon Staab
2025-03-31 10:16:28 -07:00
parent 5245993d4e
commit cfd2e3aac7
21 changed files with 234 additions and 106 deletions
+1 -2
View File
@@ -1,10 +1,9 @@
import {throttle} from "@welshman/lib"
import {Repository, Relay} from "@welshman/util"
import type {TrustedEvent} from "@welshman/util"
import {Tracker} from "@welshman/net"
import {custom} from "@welshman/store"
export const repository = new Repository<TrustedEvent>()
export const repository = Repository.getSingleton()
export const relay = new Relay(repository)
+6 -13
View File
@@ -35,7 +35,9 @@ export const pull = async ({relays, filters}: AppSyncOpts) => {
relays.map(async relay => {
await (hasNegentropy(relay)
? basePull({filters, events, relays: [relay]})
: pullWithoutNegentropy({filters, relays: [relay]}))
: new Promise(resolve => {
new SingleRequest({filters, relay, closeOnEose: true}).on(RequestEvent.Close, resolve)
})
}),
)
}
@@ -47,19 +49,10 @@ export const push = async ({relays, filters}: AppSyncOpts) => {
relays.map(async relay => {
await (hasNegentropy(relay)
? basePush({filters, events, relays: [relay]})
: pushWithoutNegentropy({events, relays: [relay]}))
: new Promise(resolve => {
new SinglePublish({events, relay}).on(PublishEvent.Complete, resolve)
}))
}),
)
}
export const sync = async ({relays, filters}: AppSyncOpts) => {
const events = query(filters).filter(isSignedEvent)
await Promise.all(
relays.map(async relay => {
await (hasNegentropy(relay)
? baseSync({filters, events, relays: [relay]})
: syncWithoutNegentropy({filters, events, relays: [relay]}))
}),
)
}
+2 -2
View File
@@ -18,7 +18,7 @@ import {
isUnwrappedEvent,
isSignedEvent,
} from "@welshman/util"
import {publish, PublishStatus} from "@welshman/net"
import {MultiPublish, PublishStatus} from "@welshman/net"
import {repository, tracker} from "./core.js"
import {pubkey, getSession, getSigner} from "./session.js"
@@ -225,7 +225,7 @@ thunkWorker.addGlobalHandler((thunk: Thunk) => {
}
// Send it off
const pub = publish({event: signedEvent, relays: thunk.request.relays})
const pub = new MultiPublish({event: signedEvent, relays: thunk.request.relays})
// Copy the signature over since we had deferred it
const savedEvent = repository.getEvent(signedEvent.id) as SignedEvent
+3 -6
View File
@@ -1,6 +1,6 @@
import {writable, derived} from "svelte/store"
import {type Zapper} from "@welshman/util"
import {type SubscribeRequestWithHandlers} from "@welshman/net"
import {Zapper} from "@welshman/util"
import {MultiRequestOptions} from "@welshman/net"
import {
ctx,
identity,
@@ -80,10 +80,7 @@ export const {
}),
})
export const deriveZapperForPubkey = (
pubkey: string,
request: Partial<SubscribeRequestWithHandlers> = {},
) =>
export const deriveZapperForPubkey = (pubkey: string, request: Partial<MultiRequestOptions> = {}) =>
derived([zappersByLnurl, deriveProfile(pubkey, request)], ([$zappersByLnurl, $profile]) => {
if (!$profile?.lnurl) {
return undefined