From 78bf71bdf9ed1f2b67f859a356b1645649436692 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 28 Oct 2024 16:28:14 -0500 Subject: [PATCH] NBunker: DRY the subscription --- src/features/nostr/NBunker.ts | 38 +++++++++++++---------------------- 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/src/features/nostr/NBunker.ts b/src/features/nostr/NBunker.ts index 0d2600697..91ee10110 100644 --- a/src/features/nostr/NBunker.ts +++ b/src/features/nostr/NBunker.ts @@ -63,48 +63,43 @@ export class NBunker { private async subscribeAuthorization(authorization: NBunkerAuthorization): Promise { const { signers } = authorization; - const bunkerPubkey = await signers.bunker.getPublicKey(); - const signal = this.controller.signal; const filters: NostrFilter[] = [ { kinds: [24133], '#p': [bunkerPubkey], limit: 0 }, ]; - for await (const msg of this.relay.req(filters, { signal })) { - if (msg[0] === 'EVENT') { - const [,, event] = msg; - - try { - const request = await this.decryptRequest(event, signers); - - if (request.method === 'connect') { - this.handleConnect(event, request, authorization); - } - } catch (error) { - console.warn(error); - } + for await (const { event, request } of this.subscribe(filters, signers)) { + if (request.method === 'connect') { + this.handleConnect(event, request, authorization); } } } private async subscribeConnection(connection: NBunkerConnection): Promise { const { authorizedPubkey, signers } = connection; - const bunkerPubkey = await signers.bunker.getPublicKey(); - const signal = this.controller.signal; const filters: NostrFilter[] = [ { kinds: [24133], authors: [authorizedPubkey], '#p': [bunkerPubkey], limit: 0 }, ]; + for await (const { event, request } of this.subscribe(filters, signers)) { + this.handleRequest(event, request, connection); + } + } + + private async *subscribe(filters: NostrFilter[], signers: NBunkerSigners): AsyncIterable<{ event: NostrEvent; request: NostrConnectRequest }> { + const signal = this.controller.signal; + for await (const msg of this.relay.req(filters, { signal })) { if (msg[0] === 'EVENT') { const [,, event] = msg; try { - const request = await this.decryptRequest(event, signers); - this.handleRequest(event, request, connection); + const decrypted = await this.decrypt(signers.bunker, event.pubkey, event.content); + const request = n.json().pipe(n.connectRequest()).parse(decrypted); + yield { event, request }; } catch (error) { console.warn(error); } @@ -112,11 +107,6 @@ export class NBunker { } } - private async decryptRequest(event: NostrEvent, signers: NBunkerSigners): Promise { - const decrypted = await this.decrypt(signers.bunker, event.pubkey, event.content); - return n.json().pipe(n.connectRequest()).parse(decrypted); - } - private async handleRequest(event: NostrEvent, request: NostrConnectRequest, connection: NBunkerConnection): Promise { const { signers, authorizedPubkey } = connection; const { user } = signers;