From a76b703d3645bef4d23430ff358c38b5241b4aea Mon Sep 17 00:00:00 2001 From: Gigi Date: Thu, 16 Oct 2025 22:42:47 +0200 Subject: [PATCH] fix: cache wrapped nip04/nip44 objects instead of using getters - Getters were returning new objects each time - Code was getting reference then calling decrypt on it - Now assign wrapped objects directly as properties - This ensures our logging wrappers are actually used --- src/services/nostrConnect.ts | 91 ++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 51 deletions(-) diff --git a/src/services/nostrConnect.ts b/src/services/nostrConnect.ts index c7268a6f..39620015 100644 --- a/src/services/nostrConnect.ts +++ b/src/services/nostrConnect.ts @@ -79,62 +79,51 @@ export async function reconnectBunkerSigner( console.log('[bunker] Signer marked as connected, ready for signing/decryption') // Expose nip04/nip44 at account level for compatibility with logging - // This allows bookmark decryption to work without accessing account.signer + // Cache wrapped methods to ensure they're used consistently if (!('nip04' in account)) { - Object.defineProperty(account, 'nip04', { - get() { - const original = this.signer.nip04 - return { - encrypt: async (pubkey: string, plaintext: string) => { - console.log('[bunker] 🔐 nip04.encrypt called', { pubkey: pubkey.slice(0, 8) }) - const result = await original.encrypt(pubkey, plaintext) - console.log('[bunker] ✅ nip04.encrypt completed') - return result - }, - decrypt: async (pubkey: string, ciphertext: string) => { - console.log('[bunker] 🔓 nip04.decrypt called', { pubkey: pubkey.slice(0, 8), ciphertextLength: ciphertext.length }) - try { - const result = await original.decrypt(pubkey, ciphertext) - console.log('[bunker] ✅ nip04.decrypt completed') - return result - } catch (err) { - console.error('[bunker] ❌ nip04.decrypt failed:', err) - throw err - } - } - } + const nip04Wrapped = { + encrypt: async (pubkey: string, plaintext: string) => { + console.log('[bunker] 🔐 nip04.encrypt called', { pubkey: pubkey.slice(0, 8) }) + const result = await account.signer.nip04!.encrypt(pubkey, plaintext) + console.log('[bunker] ✅ nip04.encrypt completed') + return result }, - enumerable: true, - configurable: true - }) + decrypt: async (pubkey: string, ciphertext: string) => { + console.log('[bunker] 🔓 nip04.decrypt called', { pubkey: pubkey.slice(0, 8), ciphertextLength: ciphertext.length }) + try { + const result = await account.signer.nip04!.decrypt(pubkey, ciphertext) + console.log('[bunker] ✅ nip04.decrypt completed') + return result + } catch (err) { + console.error('[bunker] ❌ nip04.decrypt failed:', err) + throw err + } + } + }; + (account as any).nip04 = nip04Wrapped } + if (!('nip44' in account)) { - Object.defineProperty(account, 'nip44', { - get() { - const original = this.signer.nip44 - return { - encrypt: async (pubkey: string, plaintext: string) => { - console.log('[bunker] 🔐 nip44.encrypt called', { pubkey: pubkey.slice(0, 8) }) - const result = await original.encrypt(pubkey, plaintext) - console.log('[bunker] ✅ nip44.encrypt completed') - return result - }, - decrypt: async (pubkey: string, ciphertext: string) => { - console.log('[bunker] 🔓 nip44.decrypt called', { pubkey: pubkey.slice(0, 8), ciphertextLength: ciphertext.length }) - try { - const result = await original.decrypt(pubkey, ciphertext) - console.log('[bunker] ✅ nip44.decrypt completed', { plaintextLength: result.length }) - return result - } catch (err) { - console.error('[bunker] ❌ nip44.decrypt failed:', err) - throw err - } - } - } + const nip44Wrapped = { + encrypt: async (pubkey: string, plaintext: string) => { + console.log('[bunker] 🔐 nip44.encrypt called', { pubkey: pubkey.slice(0, 8) }) + const result = await account.signer.nip44!.encrypt(pubkey, plaintext) + console.log('[bunker] ✅ nip44.encrypt completed') + return result }, - enumerable: true, - configurable: true - }) + decrypt: async (pubkey: string, ciphertext: string) => { + console.log('[bunker] 🔓 nip44.decrypt called', { pubkey: pubkey.slice(0, 8), ciphertextLength: ciphertext.length }) + try { + const result = await account.signer.nip44!.decrypt(pubkey, ciphertext) + console.log('[bunker] ✅ nip44.decrypt completed', { plaintextLength: result.length }) + return result + } catch (err) { + console.error('[bunker] ❌ nip44.decrypt failed:', err) + throw err + } + } + }; + (account as any).nip44 = nip44Wrapped } }