diff --git a/frontend/electron/main.cjs b/frontend/electron/main.cjs index 80644f1..5ae00b6 100644 --- a/frontend/electron/main.cjs +++ b/frontend/electron/main.cjs @@ -10,10 +10,19 @@ const VITE_PORT = 5173 let mainWindow = null // ── Wallet storage directory ─────────────────────────────────────────────────── -const WALLET_DIR = path.join(os.homedir(), '.wallet-generator', 'wallet') +const WALLET_ROOT_DIR = path.join(os.homedir(), '.wallet-generator') +const WALLET_DIRS = { + hd: path.join(WALLET_ROOT_DIR, 'hdwallet'), + single: path.join(WALLET_ROOT_DIR, 'single'), +} -function ensureWalletDir() { - fs.mkdirSync(WALLET_DIR, { recursive: true }) +function ensureWalletDir(kind) { + const walletDir = WALLET_DIRS[kind] + if (!walletDir) { + throw new Error(`Unsupported wallet kind: '${kind}'. Use 'hd' or 'single'.`) + } + fs.mkdirSync(walletDir, { recursive: true }) + return walletDir } // ── Resolve Python executable ────────────────────────────────────────────────── @@ -54,16 +63,16 @@ ipcMain.handle('p2wpkh', (_, args) => callPython('p2wpkh', args)) ipcMain.handle('p2tr', (_, args) => callPython('p2tr', args)) ipcMain.handle('single-encrypt', (_, args) => callPython('single_encrypt', args)) -ipcMain.handle('save-wallet', (_, { filename, data }) => { - ensureWalletDir() - const filePath = path.join(WALLET_DIR, filename) +ipcMain.handle('save-wallet', (_, { filename, data, kind }) => { + const walletDir = ensureWalletDir(kind) + const filePath = path.join(walletDir, filename) fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8') return filePath }) ipcMain.handle('get-wallet-dir', () => { - ensureWalletDir() - return WALLET_DIR + fs.mkdirSync(WALLET_ROOT_DIR, { recursive: true }) + return WALLET_ROOT_DIR }) // ── Create window ────────────────────────────────────────────────────────────── diff --git a/frontend/electron/preload.cjs b/frontend/electron/preload.cjs index d33fc31..4c62610 100644 --- a/frontend/electron/preload.cjs +++ b/frontend/electron/preload.cjs @@ -10,6 +10,6 @@ contextBridge.exposeInMainWorld('electronAPI', { p2wpkh: (args) => ipcRenderer.invoke('p2wpkh', args), p2tr: (args) => ipcRenderer.invoke('p2tr', args), singleEncrypt:(args) => ipcRenderer.invoke('single-encrypt', args), - saveWallet: (filename, data) => ipcRenderer.invoke('save-wallet', { filename, data }), + saveWallet: (filename, data, kind) => ipcRenderer.invoke('save-wallet', { filename, data, kind }), getWalletDir: () => ipcRenderer.invoke('get-wallet-dir'), }) diff --git a/frontend/src/components/HDWallet.jsx b/frontend/src/components/HDWallet.jsx index 0b720eb..70f2d4d 100644 --- a/frontend/src/components/HDWallet.jsx +++ b/frontend/src/components/HDWallet.jsx @@ -52,7 +52,7 @@ export default function HDWallet() { data = await window.electronAPI.hdEncrypt({ wallet, password: savePassword }) } const filename = `wallet_${form.network}_${form.bip_type}_${Date.now()}.json` - const savedPath = await window.electronAPI.saveWallet(filename, data) + const savedPath = await window.electronAPI.saveWallet(filename, data, 'hd') const encrypted = savePassword ? ' (encrypted)' : '' setSaveMsg(`Saved${encrypted}: ${savedPath}`) } catch (e) { diff --git a/frontend/src/components/SingleAddress.jsx b/frontend/src/components/SingleAddress.jsx index 7d43319..e89ac18 100644 --- a/frontend/src/components/SingleAddress.jsx +++ b/frontend/src/components/SingleAddress.jsx @@ -60,7 +60,7 @@ export default function SingleAddress({ initialTab = 'p2pkh' }) { data = await window.electronAPI.singleEncrypt({ wallet: result, password: savePassword }) } const name = filename.trim().endsWith('.json') ? filename.trim() : `${filename.trim()}.json` - const savedPath = await window.electronAPI.saveWallet(name, data) + const savedPath = await window.electronAPI.saveWallet(name, data, 'single') setSaveMsg(savePassword.trim() ? `Saved (encrypted): ${savedPath}` : `Saved: ${savedPath}`) } catch (e) { setSaveMsg('Error: ' + e.message) @@ -141,7 +141,7 @@ export default function SingleAddress({ initialTab = 'p2pkh' }) { value={filename} onChange={e => setFilename(e.target.value)} /> - .json · saved to ~/.wallet-generator/wallet/ + .json · saved to ~/.wallet-generator/single/