diff options
| author | Adam Soltys <[email protected]> | 2026-08-04 01:59:29 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-08-04 01:59:29 -0700 |
| commit | 215f51526a3d8d0c185887674bd9532d83ea3564 (patch) | |
| tree | cab13d18d0bc8b2eb64601b192fa2ca084130c49 /src | |
| parent | 7ff9861f545aaa8e05a61b43d73cf762eec72595 (diff) | |
| download | coinosv3-215f51526a3d8d0c185887674bd9532d83ea3564.tar.gz coinosv3-215f51526a3d8d0c185887674bd9532d83ea3564.zip | |
The wizard can no longer trap anyone
Publishing the profile on the avatar step is best-effort now — a signer
that can't sign (a sleeping phone bunker) skips it with a toast instead
of erroring the Continue button forever. And once a wallet exists, the
logo leads home even out of a resumed wizard.
Co-Authored-By: Claude Fable 5 <[email protected]>
Diffstat (limited to 'src')
| -rw-r--r-- | src/app.js | 12 | ||||
| -rw-r--r-- | src/i18n.js | 1 |
2 files changed, 11 insertions, 2 deletions
@@ -1808,7 +1808,10 @@ function goHome() { // so the logo is always a way back to your wallet. if (activeAccount()) { ui.screen = 'wallet'; - // Home means home: clear every takeover a feature or subpage may hold — + // Home means home: with a wallet already minted, even the wizard yields — + // its remaining steps are niceties, not something to be trapped in. + if (ui.onb || onbInProgress()) { ui.onb = null; try { localStorage.removeItem(ONB_STEP_KEY); } catch {} } + // Clear every takeover a feature or subpage may hold — // chat, profile, ark exit, settings subpages, the address rescan list. ui.chatOpen = false; ui.profilePk = null; @@ -2306,7 +2309,12 @@ function onboardScreen() { // their face on every nostr client, not just here const picture = o.avatar || (me ? 'https://v3.coinos.io/' + punkUrl(me) : undefined); const fields = { name: addr ? addr.split('@')[0] : undefined, picture }; - if (fields.name || fields.picture) await featureHook('publishProfile', fields); + // Publishing the profile is a nicety — a signer that can't sign + // right now (a sleeping phone bunker) must not trap the wizard. + if (fields.name || fields.picture) { + try { await featureHook('publishProfile', fields); } + catch (e) { toast(t('onbProfileSkipped')); console.warn('onboarding: profile publish failed —', e.message); } + } o.step = 'success'; } catch (e) { ui.onbError = e.message; } ui.onbBusy = false; render(); diff --git a/src/i18n.js b/src/i18n.js index d29accc..3e82eca 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -544,6 +544,7 @@ const STR = { onbAvatarBody: 'Pick a punk or upload your own picture. You can change it anytime.', onbUpload: 'Upload a photo', onbUploadFailed: 'Upload failed — try a punk for now', + onbProfileSkipped: 'Couldn’t publish your profile — set it later from Edit profile', onbContinue: 'Continue', onbSkipAvatar: 'Continue with my default', onbDoneTitle: "You're all set!", |
