Move net2 to net, update dvm

This commit is contained in:
Jon Staab
2025-03-31 09:13:10 -07:00
parent 3081d1e6b4
commit 7389b3a6c3
67 changed files with 819 additions and 6330 deletions
+15 -9
View File
@@ -1,8 +1,14 @@
import {hexToBytes} from "@noble/hashes/utils"
import {getPublicKey, finalizeEvent} from "nostr-tools/pure"
import {now} from "@welshman/lib"
import type {TrustedEvent, StampedEvent, Filter} from "@welshman/util"
import {subscribe, publish} from "@welshman/net"
import {TrustedEvent, StampedEvent, Filter} from "@welshman/util"
import {
multireq,
multicast,
PublishEventType,
RequestEventType,
AdapterContext,
} from "@welshman/net"
export type DVMHandler = {
stop?: () => void
@@ -14,6 +20,7 @@ export type CreateDVMHandler = (dvm: DVM) => DVMHandler
export type DVMOpts = {
sk: string
relays: string[]
context: AdapterContext
handlers: Record<string, CreateDVMHandler>
expireAfter?: number
requireMention?: boolean
@@ -34,7 +41,7 @@ export class DVM {
async start() {
this.active = true
const {sk, relays, requireMention = false} = this.opts
const {sk, relays, context, requireMention = false} = this.opts
while (this.active) {
await new Promise<void>(resolve => {
@@ -46,11 +53,10 @@ export class DVM {
filter["#p"] = [getPublicKey(hexToBytes(sk))]
}
const filters = [filter]
const sub = subscribe({relays, filters})
const sub = multireq({relays, filter, context})
sub.on("event", (url: string, e: TrustedEvent) => this.onEvent(e))
sub.on("complete", () => resolve())
sub.on(RequestEventType.Event, (e: TrustedEvent, url: string) => this.onEvent(e))
sub.on(RequestEventType.Close, () => resolve())
})
}
}
@@ -109,11 +115,11 @@ export class DVM {
}
async publish(template: StampedEvent) {
const {sk, relays} = this.opts
const {sk, relays, context} = this.opts
const event = finalizeEvent(template, hexToBytes(sk))
await new Promise<void>(resolve => {
publish({event, relays}).emitter.on("success", () => resolve())
multicast({event, relays, context}).on(PublishEventType.Complete, resolve)
})
}
}
+24 -10
View File
@@ -1,7 +1,13 @@
import {Emitter, now} from "@welshman/lib"
import type {TrustedEvent, SignedEvent, Filter} from "@welshman/util"
import {subscribe, publish, SubscriptionEvent} from "@welshman/net"
import type {Subscription, Publish} from "@welshman/net"
import {TrustedEvent, SignedEvent, Filter} from "@welshman/util"
import {
multireq,
multicast,
Multireq,
Multicast,
RequestEventType,
AdapterContext,
} from "@welshman/net"
export enum DVMEvent {
Progress = "progress",
@@ -11,6 +17,7 @@ export enum DVMEvent {
export type DVMRequestOptions = {
event: SignedEvent
relays: string[]
context: AdapterContext
timeout?: number
autoClose?: boolean
reportProgress?: boolean
@@ -19,21 +26,28 @@ export type DVMRequestOptions = {
export type DVMRequest = {
request: DVMRequestOptions
emitter: Emitter
sub: Subscription
pub: Publish
sub: Multireq
pub: Multicast
}
export const makeDvmRequest = (request: DVMRequestOptions) => {
const emitter = new Emitter()
const {event, relays, timeout = 30_000, autoClose = true, reportProgress = true} = request
const {
event,
relays,
context,
timeout = 30_000,
autoClose = true,
reportProgress = true,
} = request
const kind = event.kind + 1000
const kinds = reportProgress ? [kind, 7000] : [kind]
const filters: Filter[] = [{kinds, since: now() - 60, "#e": [event.id]}]
const filter: Filter = {kinds, since: now() - 60, "#e": [event.id]}
const sub = subscribe({relays, timeout, filters})
const pub = publish({event, relays, timeout})
const sub = multireq({relays, filter, timeout, context})
const pub = multicast({relays, event, timeout, context})
sub.on(SubscriptionEvent.Event, (url: string, event: TrustedEvent) => {
sub.on(RequestEventType.Event, (event: TrustedEvent, url: string) => {
if (event.kind === 7000) {
emitter.emit(DVMEvent.Progress, url, event)
} else {