An easy-to-host PDS on the ATProtocol, iPhone and MacOS. Maintain control of your keys and data, always.
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: wire home, did_document, and recovery_info steps into OnboardingStep state machine

- Replace 'authenticated' step with 'home', 'did_document', 'recovery_info' steps
- Add homeData state to page level so sub-screens receive already-loaded data
- Create stub DIDDocumentScreen and RecoveryInfoScreen components (replaced by Phases 5-6)
- Wire HomeScreen callbacks to navigate to sub-screens and back
- Update auth_ready listener to navigate to 'home' instead of 'authenticated'
- Update AuthenticatingScreen callback to navigate to 'home'
- Clean up unused .oauth-body CSS from removed authenticated block

Verifies: MM-150.AC3.4, MM-150.AC3.9, MM-150.AC3.10, MM-150.AC3.14, MM-150.AC5.1, MM-150.AC5.2

authored by

Malpercio and committed by
Tangled
b7d81d55 e2693fe1

+51 -16
+11
apps/identity-wallet/src/lib/components/home/DIDDocumentScreen.svelte
··· 1 + <script lang="ts"> 2 + let { 3 + didDoc, 4 + onback, 5 + }: { 6 + didDoc: Record<string, unknown>; 7 + onback: () => void; 8 + } = $props(); 9 + </script> 10 + 11 + <div>DIDDocumentScreen stub — replaced by Phase 5</div>
+11
apps/identity-wallet/src/lib/components/home/RecoveryInfoScreen.svelte
··· 1 + <script lang="ts"> 2 + let { 3 + share1InKeychain, 4 + onback, 5 + }: { 6 + share1InKeychain: boolean; 7 + onback: () => void; 8 + } = $props(); 9 + </script> 10 + 11 + <div>RecoveryInfoScreen stub — replaced by Phase 6</div>
+29 -16
apps/identity-wallet/src/routes/+page.svelte
··· 11 11 import DIDSuccessScreen from '$lib/components/onboarding/DIDSuccessScreen.svelte'; 12 12 import ShamirBackupScreen from '$lib/components/onboarding/ShamirBackupScreen.svelte'; 13 13 import AuthenticatingScreen from '$lib/components/onboarding/AuthenticatingScreen.svelte'; 14 - import { createAccount, type CreateAccountError, type OAuthError } from '$lib/ipc'; 14 + import HomeScreen from '$lib/components/home/HomeScreen.svelte'; 15 + import DIDDocumentScreen from '$lib/components/home/DIDDocumentScreen.svelte'; 16 + import RecoveryInfoScreen from '$lib/components/home/RecoveryInfoScreen.svelte'; 17 + import { createAccount, type CreateAccountError, type OAuthError, type HomeData } from '$lib/ipc'; 15 18 16 19 // ── Onboarding step type ───────────────────────────────────────────────── 17 20 // ··· 35 38 | 'shamir_backup' 36 39 | 'complete' 37 40 | 'authenticating' 38 - | 'authenticated' 41 + | 'home' 42 + | 'did_document' 43 + | 'recovery_info' 39 44 | 'auth_failed'; 40 45 41 46 // ── State ──────────────────────────────────────────────────────────────── ··· 53 58 54 59 let authError = $state<OAuthError | null>(null); 55 60 61 + let homeData = $state<HomeData | null>(null); 62 + 56 63 // ── Navigation helpers ─────────────────────────────────────────────────── 57 64 58 65 function goTo(next: OnboardingStep) { ··· 64 71 65 72 onMount(() => { 66 73 listen('auth_ready', () => { 67 - goTo('authenticated'); 74 + goTo('home'); 68 75 }); 69 76 // Note: We intentionally don't await listen() or return a cleanup function here. 70 77 // Svelte 5's onMount does not await async cleanup return values (it would receive a ··· 197 204 198 205 {:else if step === 'authenticating'} 199 206 <AuthenticatingScreen 200 - onresolved={() => goTo('authenticated')} 207 + onresolved={() => goTo('home')} 201 208 onfailed={(err) => { 202 209 authError = err; 203 210 goTo('auth_failed'); 204 211 }} 205 212 /> 206 213 207 - {:else if step === 'authenticated'} 208 - <div class="oauth-screen"> 209 - <div class="oauth-icon" aria-hidden="true">✓</div> 210 - <h2 class="oauth-title">Authenticated</h2> 211 - <p class="oauth-body">Your identity wallet is ready.</p> 212 - </div> 214 + {:else if step === 'home'} 215 + <HomeScreen 216 + onnavdiddoc={(data) => { homeData = data; goTo('did_document'); }} 217 + onnavrecovery={(data) => { homeData = data; goTo('recovery_info'); }} 218 + onlogout={() => goTo('welcome')} 219 + /> 220 + 221 + {:else if step === 'did_document'} 222 + <DIDDocumentScreen 223 + didDoc={homeData?.session?.didDoc ?? {}} 224 + onback={() => goTo('home')} 225 + /> 226 + 227 + {:else if step === 'recovery_info'} 228 + <RecoveryInfoScreen 229 + share1InKeychain={homeData?.share1InKeychain ?? false} 230 + onback={() => goTo('home')} 231 + /> 213 232 214 233 {:else if step === 'auth_failed'} 215 234 <div class="oauth-screen"> ··· 304 323 font-size: 1.5rem; 305 324 font-weight: 700; 306 325 color: #111827; 307 - margin: 0; 308 - } 309 - 310 - .oauth-body { 311 - color: #6b7280; 312 - font-size: 1rem; 313 326 margin: 0; 314 327 } 315 328