From 2399a268cace98686147ddd96178584b9ea8fe5c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 15 Jan 2026 15:47:06 +0000 Subject: [PATCH] Add comprehensive logging for wallet decryption debugging Add detailed console logging at every step of the decryption process: - Log event IDs, pubkeys, and encrypted content snippets - Log when calling signer.nip44.decrypt - Log decrypted plaintext before JSON parsing - Log parsed data structures (config, tokens, transactions) - Log counts (number of proofs, transactions) - Log detailed error information including: * Error name * Error message * Stack trace This will help diagnose decryption issues by showing exactly: - Which events are being processed - Whether decryption succeeds or fails - What the decrypted data looks like - Where in the process failures occur All logs are prefixed with function names for easy filtering: - [decryptWalletConfig] - [decryptUnspentTokens] - [decryptTransactionHistory] --- src/lib/wallet-utils.ts | 89 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 80 insertions(+), 9 deletions(-) diff --git a/src/lib/wallet-utils.ts b/src/lib/wallet-utils.ts index abf269a..b9b83f9 100644 --- a/src/lib/wallet-utils.ts +++ b/src/lib/wallet-utils.ts @@ -87,15 +87,36 @@ export async function decryptWalletConfig( event: NostrEvent, signer: ISigner, ): Promise { + console.log("[decryptWalletConfig] Starting decryption"); + console.log("[decryptWalletConfig] Event ID:", event.id); + console.log("[decryptWalletConfig] Event pubkey:", event.pubkey); + console.log( + "[decryptWalletConfig] Event content (encrypted):", + event.content.substring(0, 50) + "...", + ); + if (!signer.nip44) { - throw new Error("Signer does not support NIP-44 encryption"); + const error = "Signer does not support NIP-44 encryption"; + console.error("[decryptWalletConfig]", error); + throw new Error(error); } try { + console.log("[decryptWalletConfig] Calling signer.nip44.decrypt..."); const decrypted = await signer.nip44.decrypt(event.pubkey, event.content); - return JSON.parse(decrypted) as WalletConfig; + console.log("[decryptWalletConfig] Decrypted plaintext:", decrypted); + + const parsed = JSON.parse(decrypted) as WalletConfig; + console.log("[decryptWalletConfig] Parsed config:", parsed); + + return parsed; } catch (error) { - console.error("Failed to decrypt wallet config:", error); + console.error("[decryptWalletConfig] Decryption failed:", error); + console.error("[decryptWalletConfig] Error details:", { + name: error instanceof Error ? error.name : "Unknown", + message: error instanceof Error ? error.message : String(error), + stack: error instanceof Error ? error.stack : undefined, + }); return null; } } @@ -110,15 +131,40 @@ export async function decryptUnspentTokens( event: NostrEvent, signer: ISigner, ): Promise { + console.log("[decryptUnspentTokens] Starting decryption"); + console.log("[decryptUnspentTokens] Event ID:", event.id); + console.log("[decryptUnspentTokens] Event pubkey:", event.pubkey); + console.log( + "[decryptUnspentTokens] Event content (encrypted):", + event.content.substring(0, 50) + "...", + ); + if (!signer.nip44) { - throw new Error("Signer does not support NIP-44 encryption"); + const error = "Signer does not support NIP-44 encryption"; + console.error("[decryptUnspentTokens]", error); + throw new Error(error); } try { + console.log("[decryptUnspentTokens] Calling signer.nip44.decrypt..."); const decrypted = await signer.nip44.decrypt(event.pubkey, event.content); - return JSON.parse(decrypted) as UnspentTokens; + console.log("[decryptUnspentTokens] Decrypted plaintext:", decrypted); + + const parsed = JSON.parse(decrypted) as UnspentTokens; + console.log("[decryptUnspentTokens] Parsed tokens:", parsed); + console.log( + "[decryptUnspentTokens] Number of proofs:", + parsed.proofs?.length || 0, + ); + + return parsed; } catch (error) { - console.error("Failed to decrypt unspent tokens:", error); + console.error("[decryptUnspentTokens] Decryption failed:", error); + console.error("[decryptUnspentTokens] Error details:", { + name: error instanceof Error ? error.name : "Unknown", + message: error instanceof Error ? error.message : String(error), + stack: error instanceof Error ? error.stack : undefined, + }); return null; } } @@ -133,15 +179,40 @@ export async function decryptTransactionHistory( event: NostrEvent, signer: ISigner, ): Promise { + console.log("[decryptTransactionHistory] Starting decryption"); + console.log("[decryptTransactionHistory] Event ID:", event.id); + console.log("[decryptTransactionHistory] Event pubkey:", event.pubkey); + console.log( + "[decryptTransactionHistory] Event content (encrypted):", + event.content.substring(0, 50) + "...", + ); + if (!signer.nip44) { - throw new Error("Signer does not support NIP-44 encryption"); + const error = "Signer does not support NIP-44 encryption"; + console.error("[decryptTransactionHistory]", error); + throw new Error(error); } try { + console.log("[decryptTransactionHistory] Calling signer.nip44.decrypt..."); const decrypted = await signer.nip44.decrypt(event.pubkey, event.content); - return JSON.parse(decrypted) as TransactionHistory; + console.log("[decryptTransactionHistory] Decrypted plaintext:", decrypted); + + const parsed = JSON.parse(decrypted) as TransactionHistory; + console.log("[decryptTransactionHistory] Parsed history:", parsed); + console.log( + "[decryptTransactionHistory] Number of transactions:", + parsed.transactions?.length || 0, + ); + + return parsed; } catch (error) { - console.error("Failed to decrypt transaction history:", error); + console.error("[decryptTransactionHistory] Decryption failed:", error); + console.error("[decryptTransactionHistory] Error details:", { + name: error instanceof Error ? error.name : "Unknown", + message: error instanceof Error ? error.message : String(error), + stack: error instanceof Error ? error.stack : undefined, + }); return null; } }