- biometric-helper: use .deviceOwnerAuthentication so passcode can
unlock Touch ID when biometrics are locked out
- get-transaction-history: dedup transfers by hash+category+contract
instead of hash alone (was dropping token transfers sharing a tx hash)
- evm-wallet.svelte.ts: add missing loading declaration (caused
ReferenceError on createWallet); add flushTxCache method; comment out
monero startup from evm init to speed up loading
- get-history.ts: remove dead caching logic (now handled by sync engine);
import getTransactionHistory from alchemy directly
- backend RPC + settings UI: add flushTxCache to clear tx cache tables
- Move EVM state/methods to evm-wallet.svelte.ts with its own init/login/logout/accountType
- Move Monero state/methods to monero-wallet.svelte.ts with its own init/login/logout/accountType
- Each wallet is fully self-contained and pages import only their wallet's state
- evm-wallet imports monero-wallet internally for full app init (no circular dep)
- Welcome/settings/tx pages import evmWallet
- Monero pages import moneroWallet
- Delete old wallet.svelte.ts orchestrator
- Replace 5133props with runes-compatible () in loader.svelte
- Add SVGAttributes types to loader.svelte
- Add Loader spinner to EVM Transactions card while w.loading
- Add Loader spinners to Monero Start/Refresh buttons and Transactions card
- Remove redundant Monero top bar
- Added moneroGetStoredPassword / moneroStorePassword keychain helpers
- moneroCreateWallet and moneroRestoreWallet accept storePw flag to save password to keychain
- moneroOpenExistingWallet accepts optional password (falls back to keychain lookup)
- Monero UI: 'Save password with Touch ID' checkbox hides password field, auto-generates random password, saves to keychain
- Monero UI: 'Open with Touch ID' button uses biometric auth + retrieves stored password
- Monero Settings card: enter wallet password to save with Touch ID for existing wallets
- logout() now async, calls moneroStop() to kill RPC process so re-login requires explicit wallet open
- Removed monero from shared networks array; monero is now its own separate account type
- Added accountType state (null/'multi'/'monero') to wallet, stored in memory only
- Added login(type) method: chooses between EVM vault flow and Monero RPC flow
- Added logout() method that resets all per-account state
- On app startup, user picks Multi Coins (ETH/BSC/Polygon) or Monero
- isLocked getter now checks accountType === 'multi' instead of excluding monero by network id
- Moved ETH/BSC/Polygon routes under /multicoin/ base path
- /multicoin, /multicoin/bsc, /multicoin/polygon with updated navTarget routing
- Root / shows welcome/login choice, redirects if already logged in
- Fixed moneroListWallets timing: runs inside login('monero') after RPC manager exists
- Removed cross-tab links between monero and multicoin, only logout remains