From c81616ed0024c0cec693b552de5c5b6d7056eff3 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 24 Jun 2026 14:41:36 -0700 Subject: Add account switching and watch-only wallets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Accounts: a switcher (header chip → Accounts screen) lets you keep several wallets loaded and flip between them without re-importing. Per the chosen model, full (seed) accounts live only in sessionStorage — ephemeral, no seed on disk; watch-only accounts (no seed) are persisted in localStorage and reload across restarts. enterWallet is refactored around an accounts list (add/switch/remove/lock); Add wallet reaches the unlock screen with a back button. Watch-only: load any wallet from its account xpub/zpub (parseAccountKey normalizes zpub→xpub; the existing public-derivation path yields the same addresses). Signing is blocked, the Send tab and seed/sync/offline cards are hidden, and a watch-only note is shown. Settings gains a "Public key" card (export this wallet's zpub) so it can be watched read-only elsewhere. Password-encrypted persistence for full accounts is the planned next step. New strings translated across all 19 locales. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/i18n.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/i18n.js') diff --git a/src/i18n.js b/src/i18n.js index abb9015..f75e014 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -36,6 +36,23 @@ const STR = { appTitle: 'Hal Wallet', home: 'Home', logout: 'Logout', + accounts: 'Accounts', + addWallet: 'Add wallet', + lockAll: 'Lock all', + remove: 'Remove', + watchOnly: 'Watch-only', + watchOnlyTag: 'watch-only', + watchOnlyAdd: 'Add watch-only', + watchOnlyDesc: 'Watch any wallet from its account public key. You can receive and view balance and history, but not send.', + watchOnlyNote: 'This is a watch-only wallet. You can receive and view, but you cannot send.', + watchXpubLabel: 'Account xpub or zpub', + labelOptional: 'Label (optional)', + walletLabelN: 'Wallet {n}', + watchLabelN: 'Watch {n}', + publicKey: 'Public key', + publicKeyDesc: 'Share this to watch this wallet read-only on another device or app. It reveals your addresses, not your keys.', + copyKey: 'Copy key', + showPublicKey: 'Show public key', createNew: 'Create new', importExisting: 'Import existing', genIntro: 'Generate a new 12-word seed phrase. Write it down. It’s the only way to recover this wallet.', -- cgit v1.2.3