mirror of
https://github.com/nbd-wtf/nostr-tools.git
synced 2025-12-08 16:28:49 +00:00
29
pool.ts
29
pool.ts
@@ -47,9 +47,11 @@ export class SimplePool {
|
|||||||
|
|
||||||
sub(relays: string[], filters: Filter[], opts?: SubscriptionOptions): Sub {
|
sub(relays: string[], filters: Filter[], opts?: SubscriptionOptions): Sub {
|
||||||
let _knownIds: Set<string> = new Set()
|
let _knownIds: Set<string> = new Set()
|
||||||
let modifiedOpts = {...opts || {}}
|
let modifiedOpts = {...(opts || {})}
|
||||||
modifiedOpts.alreadyHaveEvent = (id, url) => {
|
modifiedOpts.alreadyHaveEvent = (id, url) => {
|
||||||
if (opts?.alreadyHaveEvent?.(id, url)) { return true }
|
if (opts?.alreadyHaveEvent?.(id, url)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
let set = this._seenOn[id] || new Set()
|
let set = this._seenOn[id] || new Set()
|
||||||
set.add(url)
|
set.add(url)
|
||||||
this._seenOn[id] = set
|
this._seenOn[id] = set
|
||||||
@@ -165,12 +167,14 @@ export class SimplePool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
publish(relays: string[], event: Event): Pub {
|
publish(relays: string[], event: Event): Pub {
|
||||||
let pubs = relays.map(relay => {
|
const pubs: Pub[] = []
|
||||||
let r = this._conn[normalizeURL(relay)]
|
relays.forEach(async relay => {
|
||||||
if (!r) return badPub(relay)
|
let r
|
||||||
return r.publish(event)
|
try {
|
||||||
|
r = await this.ensureRelay(relay)
|
||||||
|
pubs.push(r.publish(event))
|
||||||
|
} catch (_) {}
|
||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
on(type, cb) {
|
on(type, cb) {
|
||||||
pubs.forEach((pub, i) => {
|
pubs.forEach((pub, i) => {
|
||||||
@@ -187,12 +191,3 @@ export class SimplePool {
|
|||||||
return Array.from(this._seenOn[id]?.values?.() || [])
|
return Array.from(this._seenOn[id]?.values?.() || [])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function badPub(relay: string): Pub {
|
|
||||||
return {
|
|
||||||
on(typ, cb) {
|
|
||||||
if (typ === 'failed') cb(`relay ${relay} not connected`)
|
|
||||||
},
|
|
||||||
off() {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user