const { $, showView, showFlash } = require("./helpers"); const { state, saveState } = require("../../shared/state"); const { decryptWithPassword } = require("../../shared/vault"); let deleteWalletIndex = null; let ctx = null; function show(walletIdx) { deleteWalletIndex = walletIdx; const wallet = state.wallets[walletIdx]; $("delete-wallet-name").textContent = wallet.name || "Wallet " + (walletIdx + 1); $("delete-wallet-password").value = ""; $("delete-wallet-flash").textContent = ""; $("delete-wallet-flash").classList.add("hidden"); showView("delete-wallet-confirm"); } function init(_ctx) { ctx = _ctx; $("btn-delete-wallet-back").addEventListener("click", () => { deleteWalletIndex = null; ctx.showSettingsView(); }); $("btn-delete-wallet-confirm").addEventListener("click", async () => { const pw = $("delete-wallet-password").value; if (!pw) { $("delete-wallet-flash").textContent = "Please enter your password."; $("delete-wallet-flash").classList.remove("hidden"); return; } if (deleteWalletIndex === null) { $("delete-wallet-flash").textContent = "No wallet selected for deletion."; $("delete-wallet-flash").classList.remove("hidden"); return; } const btn = $("btn-delete-wallet-confirm"); btn.disabled = true; btn.classList.add("text-muted"); const walletIdx = deleteWalletIndex; const wallet = state.wallets[walletIdx]; // Verify password against the wallet's encrypted data try { await decryptWithPassword(wallet.encryptedSecret, pw); } catch (_e) { $("delete-wallet-flash").textContent = "Wrong password."; $("delete-wallet-flash").classList.remove("hidden"); btn.disabled = false; btn.classList.remove("text-muted"); return; } // Collect addresses to clean up from allowedSites/deniedSites const addresses = (wallet.addresses || []).map((a) => a.address); // Remove wallet state.wallets.splice(walletIdx, 1); // Clean up site permissions for deleted addresses for (const addr of addresses) { delete state.allowedSites[addr]; delete state.deniedSites[addr]; } deleteWalletIndex = null; if (state.wallets.length === 0) { // No wallets left — reset selection and show welcome state.selectedWallet = null; state.selectedAddress = null; state.activeAddress = null; await saveState(); showView("welcome"); } else { // Switch to first wallet if deleted wallet was active state.selectedWallet = 0; state.selectedAddress = 0; state.activeAddress = state.wallets[0].addresses[0]?.address || null; await saveState(); ctx.renderWalletList(); ctx.showSettingsView(); showFlash("Wallet deleted."); } }); } module.exports = { init, show };