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
1 changed files with 12 additions and 17 deletions

29
pool.ts
View File

@ -47,9 +47,11 @@ export class SimplePool {
sub(relays: string[], filters: Filter[], opts?: SubscriptionOptions): Sub {
let _knownIds: Set<string> = new Set()
let modifiedOpts = {...opts || {}}
modifiedOpts.alreadyHaveEvent = (id, url) => {
if (opts?.alreadyHaveEvent?.(id, url)) { return true }
let modifiedOpts = {...(opts || {})}
modifiedOpts.alreadyHaveEvent = (id, url) => {
if (opts?.alreadyHaveEvent?.(id, url)) {
return true
}
let set = this._seenOn[id] || new Set()
set.add(url)
this._seenOn[id] = set
@ -165,12 +167,14 @@ export class SimplePool {
}
publish(relays: string[], event: Event): Pub {
let pubs = relays.map(relay => {
let r = this._conn[normalizeURL(relay)]
if (!r) return badPub(relay)
return r.publish(event)
const pubs: Pub[] = []
relays.forEach(async relay => {
let r
try {
r = await this.ensureRelay(relay)
pubs.push(r.publish(event))
} catch (_) {}
})
return {
on(type, cb) {
pubs.forEach((pub, i) => {
@ -187,12 +191,3 @@ export class SimplePool {
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() {}
}
}