From df511734058ec9d209ace2d47a1b8dd917bdf721 Mon Sep 17 00:00:00 2001 From: Gigi Date: Thu, 16 Oct 2025 22:41:04 +0200 Subject: [PATCH] debug: wrap nip04/nip44 methods with [bunker] logging - Log when decrypt/encrypt methods are called - Log when they complete or fail - Show pubkey and ciphertext/plaintext lengths - This will tell us if decrypt is hanging in the signer or never returning --- src/services/nostrConnect.ts | 48 +++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/src/services/nostrConnect.ts b/src/services/nostrConnect.ts index 208562c1..c7268a6f 100644 --- a/src/services/nostrConnect.ts +++ b/src/services/nostrConnect.ts @@ -78,18 +78,60 @@ export async function reconnectBunkerSigner( account.signer.isConnected = true console.log('[bunker] Signer marked as connected, ready for signing/decryption') - // Expose nip04/nip44 at account level for compatibility + // Expose nip04/nip44 at account level for compatibility with logging // This allows bookmark decryption to work without accessing account.signer if (!('nip04' in account)) { Object.defineProperty(account, 'nip04', { - get() { return this.signer.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 + } + } + } + }, enumerable: true, configurable: true }) } if (!('nip44' in account)) { Object.defineProperty(account, 'nip44', { - get() { return this.signer.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 + } + } + } + }, enumerable: true, configurable: true })