From bb1e6f435609dbb0cac7697433f2364aba42f720 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Fri, 16 Feb 2024 07:43:20 -0300 Subject: [PATCH] nip46: only handle the first auth_url for every command. --- nip46.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nip46.ts b/nip46.ts index 293efa9..073efae 100644 --- a/nip46.ts +++ b/nip46.ts @@ -83,6 +83,7 @@ export class BunkerSigner { reject: (_: string) => void } } + private waitingForAuth: { [id: string]: boolean } private secretKey: Uint8Array public bp: BunkerPointer @@ -104,8 +105,10 @@ export class BunkerSigner { this.idPrefix = Math.random().toString(36).substring(7) this.serial = 0 this.listeners = {} + this.waitingForAuth = {} const listeners = this.listeners + const waitingForAuth = this.waitingForAuth this.subCloser = this.pool.subscribeMany( this.bp.relays, @@ -114,7 +117,9 @@ export class BunkerSigner { async onevent(event: NostrEvent) { const { id, result, error } = JSON.parse(await decrypt(clientSecretKey, event.pubkey, event.content)) - if (result === 'auth_url') { + if (result === 'auth_url' && waitingForAuth[id]) { + delete listeners[id] + if (params.onauth) { params.onauth(error) } else { @@ -165,6 +170,7 @@ export class BunkerSigner { // setup callback listener this.listeners[id] = { resolve, reject } + this.waitingForAuth[id] = true // publish the event await Promise.any(this.pool.publish(this.bp.relays, verifiedEvent))