Change requests from classes to functions

This commit is contained in:
Jon Staab
2025-04-10 10:38:47 -07:00
parent 0c43bf199f
commit 989fc74374
8 changed files with 336 additions and 342 deletions
+8 -5
View File
@@ -1,7 +1,7 @@
import {now} from "@welshman/lib"
import {Nip01Signer} from "@welshman/signer"
import {TrustedEvent, StampedEvent, Filter} from "@welshman/util"
import {MultiRequest, MultiPublish, PublishEvent, RequestEvent, AdapterContext} from "@welshman/net"
import {request, MultiPublish, PublishEvent, AdapterContext} from "@welshman/net"
export type DVMHandler = {
stop?: () => void
@@ -50,10 +50,13 @@ export class DVM {
filter["#p"] = [pubkey]
}
const req = new MultiRequest({relays, filters: [filter], context})
req.on(RequestEvent.Event, this.onEvent)
req.on(RequestEvent.Close, resolve)
request({
relays,
filters: [filter],
context,
onClose: resolve,
onEvent: this.onEvent,
})
})
}
}
+24 -17
View File
@@ -1,6 +1,6 @@
import {Emitter, now} from "@welshman/lib"
import {TrustedEvent, SignedEvent, Filter} from "@welshman/util"
import {MultiRequest, MultiPublish, RequestEvent, AdapterContext} from "@welshman/net"
import {request, MultiPublish, AdapterContext} from "@welshman/net"
export enum DVMEvent {
Progress = "progress",
@@ -17,13 +17,12 @@ export type DVMRequestOptions = {
}
export type DVMRequest = {
request: DVMRequestOptions
options: DVMRequestOptions
emitter: Emitter
sub: MultiRequest
pub: MultiPublish
}
export const makeDvmRequest = (request: DVMRequestOptions) => {
export const makeDvmRequest = (options: DVMRequestOptions) => {
const emitter = new Emitter()
const {
event,
@@ -32,25 +31,33 @@ export const makeDvmRequest = (request: DVMRequestOptions) => {
timeout = 30_000,
autoClose = true,
reportProgress = true,
} = request
} = options
const kind = event.kind + 1000
const kinds = reportProgress ? [kind, 7000] : [kind]
const filters: Filter[] = [{kinds, since: now() - 60, "#e": [event.id]}]
const abortController = new AbortController()
const signal = AbortSignal.any([abortController.signal, AbortSignal.timeout(timeout)])
const sub = new MultiRequest({relays, filters, timeout, context})
const pub = new MultiPublish({relays, event, timeout, context})
request({
signal,
relays,
filters,
context,
onEvent: (event: TrustedEvent, url: string) => {
if (event.kind === 7000) {
emitter.emit(DVMEvent.Progress, url, event)
} else {
emitter.emit(DVMEvent.Result, url, event)
sub.on(RequestEvent.Event, (event: TrustedEvent, url: string) => {
if (event.kind === 7000) {
emitter.emit(DVMEvent.Progress, url, event)
} else {
emitter.emit(DVMEvent.Result, url, event)
if (autoClose) {
sub.close()
if (autoClose) {
abortController.abort()
}
}
}
},
})
return {request, emitter, sub, pub} as DVMRequest
const pub = new MultiPublish({relays, event, timeout, context})
return {options, emitter, pub} as DVMRequest
}