From ddcba79565c797d06d1f1cc066f78197d0e8ce70 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 4 Aug 2026 01:13:33 -0700 Subject: A restored login ends the wizard instead of stalling in it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signing in mid-wizard with a key whose wallet was restored left you on the sign-in step: the back-button hold matched the restored account and blocked the auto-advance. A login now clears the hold explicitly — and a restored wallet skips the rest of onboarding entirely; it was already onboarded wherever it came from. Co-Authored-By: Claude Fable 5 --- src/app.js | 8 ++++++++ src/features/nostrlogin.js | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/app.js b/src/app.js index 4d0f9e0..2124927 100644 --- a/src/app.js +++ b/src/app.js @@ -3597,6 +3597,14 @@ const ctx = { getAccount: () => accountSel(), // Open (or create) a wallet from a mnemonic — used by nostr login. openMnemonic: async (mnemonic, passphrase, opts) => enterWallet(mnemonic, passphrase, opts), + // A nostr login that lands mid-wizard: a restored wallet has been through + // onboarding elsewhere, so the wizard ends; a fresh one just releases the + // back-button hold so the wizard advances to naming it. + onbNostrLogin: (restored) => { + if (!ui.onb) return; + if (restored) { ui.onb = null; try { localStorage.removeItem(ONB_STEP_KEY); } catch {} } + else ui.onb.heldFor = null; + }, }; const FEATURES = buildFeatures(ctx); diff --git a/src/features/nostrlogin.js b/src/features/nostrlogin.js index 731c1b9..222b516 100644 --- a/src/features/nostrlogin.js +++ b/src/features/nostrlogin.js @@ -98,6 +98,7 @@ export function nostrLoginFeature(ctx) { save({ ...load(), pubkey: signer.pubkey, linked: Date.now(), ...sessionOf(signer) }); // claim the real npub as the payment address while this signer is live ctx.hook('namesAdoptIdentity', signer, npubOf(signer.pubkey))?.catch?.(() => {}); + ctx.onbNostrLogin(res.mode === 'restored'); toast(res.mode === 'derived' ? t('nlOpenedDerived') : t('nlOpenedRestored')); busy(false); } catch (e) { fail(e); } @@ -119,6 +120,7 @@ export function nostrLoginFeature(ctx) { await ctx.openMnemonic(mnemonic, (existing && existing.passphrase) || '', { nostrPubkey: st.signer.pubkey }); save({ ...load(), pubkey: st.signer.pubkey, linked: Date.now(), ...sessionOf(st.signer) }); ctx.hook('namesAdoptIdentity', st.signer, npubOf(st.signer.pubkey))?.catch?.(() => {}); + ctx.onbNostrLogin(!!existing); toast(existing ? t('nlOpenedRestored') : t('nlCreated')); busy(false); } catch (e) { fail(e); } -- cgit v1.2.3