call ensurerelay() before calling pool.publish()

fixes #153
This commit is contained in:
BilligsterUser
2023-03-09 02:39:16 +01:00
committed by fiatjaf_
parent be7c981c14
commit b00af9a30a

29
pool.ts
View File

@@ -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() {}
}
}