aboutsummaryrefslogtreecommitdiffstats
path: root/src/i18n.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-06-26 11:29:24 -0700
committerAdam Soltys <[email protected]>2026-06-26 11:29:24 -0700
commit92626d18830c34d223b2174e0b81ced6a24ec91f (patch)
tree6dd81297525f22422c7a247dac3b957317717d89 /src/i18n.js
parentf090a29e9a208e67716cd61e43443ec7e095002f (diff)
downloadcoinosv3-92626d18830c34d223b2174e0b81ced6a24ec91f.tar.gz
coinosv3-92626d18830c34d223b2174e0b81ced6a24ec91f.zip
Persist wallets as watch-only across sessions; re-enter seed to spend
Closing the browser without 'Save to device' used to wipe the wallet entirely. Now every wallet's account xpub is mirrored to a durable localStorage directory (never the seed), so it survives a session wipe as a watch-only entry — you keep seeing balance and history, and re-enter the seed to spend again. - Durable account directory: saveDirectory() mirrors {id,label,xpub} for every account; restore falls back to it as watch-only when there's no session/vault. - Instant view: a full wallet also caches under its xpub key, so the downgraded watch-only shows balance/history immediately (no rescan). Verified round-trip. - Re-enter seed to spend: the Send tab (now shown for watch-only) and Settings prompt for the recovery phrase / xprv; it must derive to this wallet's xpub (verified via accountXpubFor — wrong seed/passphrase rejected), with an option to Save to device at the same time. Upgrade is in place (id/label/cache kept). - Vault merge now dedupes by xpub so saved + non-saved wallets coexist without duplicates. Privacy note: the xpub now persists by default (someone with device access can see balance/history without the seed); 'Remove' clears it. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Diffstat (limited to 'src/i18n.js')
-rw-r--r--src/i18n.js13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/i18n.js b/src/i18n.js
index e3341a7..d36f301 100644
--- a/src/i18n.js
+++ b/src/i18n.js
@@ -47,6 +47,18 @@ const STR = {
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.',
+ loadSeedTitle: 'Load recovery phrase',
+ loadSeedDesc: "Enter this wallet's recovery phrase (or private key) to spend from it — it must match this wallet.",
+ loadSeedBtn: 'Load recovery phrase',
+ seedPlaceholder: 'Recovery phrase or xprv',
+ bip39PassphraseOpt: 'BIP39 passphrase (optional)',
+ alsoSaveDevice: 'Also save to this device',
+ enterSeedToSpend: 'Enter your recovery phrase.',
+ seedMismatch: "That recovery phrase doesn't match this wallet.",
+ seedNeedsPrivate: "That's a public key — enter the recovery phrase or private key to spend.",
+ seedInvalid: 'Not a valid recovery phrase or key.',
+ watchOnlySendTitle: 'Load your seed to send',
+ watchOnlySendDesc: "You're viewing this wallet without its seed, so you can't spend yet. Load your recovery phrase to send.",
watchXpubLabel: 'Account xpub or zpub',
labelOptional: 'Label (optional)',
walletLabelN: 'Wallet {n}',
@@ -85,6 +97,7 @@ const STR = {
wordN: 'Word #{n}',
reenterPassphrase: 'Re-enter passphrase',
back: '← Back',
+ cancel: 'Cancel',
openWallet: 'Open wallet',
wordsMismatch: 'Those words don’t match your phrase. Check your backup.',
passphraseMismatch: 'That passphrase doesn’t match the one you entered.',