From b00af9a30af87fd2cd4fca7a3a0d2dd2caac9b34 Mon Sep 17 00:00:00 2001 From: BilligsterUser Date: Thu, 9 Mar 2023 02:39:16 +0100 Subject: [PATCH] call ensurerelay() before calling pool.publish() fixes #153 --- pool.ts | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/pool.ts b/pool.ts index e724845..f6cf085 100644 --- a/pool.ts +++ b/pool.ts @@ -47,9 +47,11 @@ export class SimplePool { sub(relays: string[], filters: Filter[], opts?: SubscriptionOptions): Sub { let _knownIds: Set = 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() {} - } -}