From e5f37b003d93a17c2a9958697269b2d3228d8830 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 4 Mar 2026 23:06:35 -0800 Subject: tuning --- src/components/Account.svelte | 75 +++++++++++++++----------- src/components/AppHeader.svelte | 12 ++--- src/components/InvoiceActions.svelte | 73 +++++++++++++------------ src/components/InvoiceData.svelte | 11 +++- src/components/WalletPass.svelte | 100 ----------------------------------- 5 files changed, 97 insertions(+), 174 deletions(-) delete mode 100644 src/components/WalletPass.svelte (limited to 'src/components') diff --git a/src/components/Account.svelte b/src/components/Account.svelte index e29e1765..2d4b1e48 100644 --- a/src/components/Account.svelte +++ b/src/components/Account.svelte @@ -23,27 +23,27 @@ let arkBalance = $state(0); let arkLoading = $state(false); - let tryUnlockArk = async (): Promise => { - const deriveArkKey = async (key: ArrayBuffer): Promise => { - const [{ HDKey }, { entropyToMnemonic, mnemonicToSeed }, { wordlist }] = await Promise.all([ - import("@scure/bip32"), - import("@scure/bip39"), - import("@scure/bip39/wordlists/english.js"), - ]); - let mnemonicStr: string; - if (account.seed && isPrfEncrypted(account.seed)) { - const ent = await prfDecrypt(key, account.seed); - mnemonicStr = entropyToMnemonic(ent, wordlist); - } else { - const entropy = new Uint8Array(key).slice(0, 16); - mnemonicStr = entropyToMnemonic(entropy, wordlist); - } - const s = await mnemonicToSeed(mnemonicStr); - const master = HDKey.fromMasterSeed(s, versions); - const arkChild = master.derive("m/86'/0'/0'/0/0"); - return bytesToHex(arkChild.privateKey!); - }; + let deriveArkKey = async (key: ArrayBuffer): Promise => { + const [{ HDKey }, { entropyToMnemonic, mnemonicToSeed }, { wordlist }] = await Promise.all([ + import("@scure/bip32"), + import("@scure/bip39"), + import("@scure/bip39/wordlists/english.js"), + ]); + let mnemonicStr: string; + if (account.seed && isPrfEncrypted(account.seed)) { + const ent = await prfDecrypt(key, account.seed); + mnemonicStr = entropyToMnemonic(ent, wordlist); + } else { + const entropy = new Uint8Array(key).slice(0, 16); + mnemonicStr = entropyToMnemonic(entropy, wordlist); + } + const s = await mnemonicToSeed(mnemonicStr); + const master = HDKey.fromMasterSeed(s, versions); + const arkChild = master.derive("m/86'/0'/0'/0/0"); + return bytesToHex(arkChild.privateKey!); + }; + let tryUnlockArk = async (): Promise => { // Try cached PRF key or silent nsec const { getWalletEntropy, deriveNostrEntropy } = await import("$lib/walletEntropy"); const entropy = await getWalletEntropy(); @@ -65,24 +65,38 @@ } }; - let setAccount = async (event, url) => { + let aidParam = $derived(`aid=${id}`); + let withAid = (url: string) => url + (url.includes("?") ? "&" : "?") + aidParam; + + let setAccount = async (event, url, requireKey = false) => { event.preventDefault(); event.stopPropagation(); - document.cookie = `aid=${id}; path=/; max-age=86400`; if (isArk) { if ($arkkey && $arkaid === id) { - await goto(url); - } else { + await goto(withAid(url)); + } else if (requireKey) { const key = await tryUnlockArk(); if (key) { - await goto(url); + await goto(withAid(url)); $arkkey = key; $arkaid = id; } + } else { + // Try silent unlock only, navigate regardless + const { getWalletEntropy } = await import("$lib/walletEntropy"); + const entropy = await getWalletEntropy(); + if (entropy) { + try { + const key = await deriveArkKey(entropy); + $arkkey = key; + $arkaid = id; + } catch {} + } + goto(withAid(url)); } } else { $arkkey = undefined; - goto(url); + goto(withAid(url)); } }; @@ -106,8 +120,7 @@ let goSettings = (e) => { e.preventDefault(); e.stopPropagation(); - document.cookie = `aid=${id}; path=/; max-age=86400`; - goto(`/account/${id}`); + goto(`/account/${id}?${aidParam}`); }; @@ -145,7 +158,7 @@
- setAccount(e, receiveUrl)}> + e.stopPropagation()}> - setAccount(e, "/send")}> + setAccount(e, "/send")}> {/each} @@ -90,15 +89,14 @@ {/if} - {#if subject} + {#if subject || user}
- +
{/if} -{/if}