{#each steps as _, i}
{i < getCurrentStepIndex() ? '✓' : i + 1}
{#if i < steps.length - 1}
{/if} {/each}
{steps[getCurrentStepIndex()]} · Step {getCurrentStepIndex() + 1} of {steps.length}
{#if flow.state.error}
{flow.state.error}
{/if} {#if flow.state.step === 'welcome'}

{$_('migration.inbound.welcome.title')}

{$_('migration.inbound.welcome.desc')}

{$_('migration.inbound.common.whatWillHappen')}

  1. {$_('migration.inbound.common.step1')}
  2. {$_('migration.inbound.common.step2')}
  3. {$_('migration.inbound.common.step3')}
  4. {$_('migration.inbound.common.step4')}
  5. {$_('migration.inbound.common.step5')}
{$_('migration.inbound.common.beforeProceed')}
  • {$_('migration.inbound.common.warning1')}
  • {$_('migration.inbound.common.warning2')}
  • {$_('migration.inbound.common.warning3')}
{:else if flow.state.step === 'source-handle'}

{isResuming ? $_('migration.inbound.sourceAuth.titleResume') : $_('migration.inbound.sourceAuth.title')}

{isResuming ? $_('migration.inbound.sourceAuth.descResume') : $_('migration.inbound.sourceAuth.desc')}

{#if isResuming && resumeInfo}

{$_('migration.inbound.sourceAuth.resumeTitle')}

{$_('migration.inbound.sourceAuth.resumeFrom')}: @{resumeInfo.sourceHandle}
{$_('migration.inbound.sourceAuth.resumeTo')}: @{resumeInfo.targetHandle}
{$_('migration.inbound.sourceAuth.resumeProgress')}: {resumeInfo.progressSummary}

{$_('migration.inbound.sourceAuth.resumeOAuthNote')}

{/if}

{$_('migration.inbound.sourceAuth.handleHint')}

{:else if flow.state.step === 'choose-handle'} handleInput = h} onDomainChange={(d) => selectedDomain = d} onCheckHandle={checkHandle} onEmailChange={(e) => flow.updateField('targetEmail', e)} onPasswordChange={(p) => flow.updateField('targetPassword', p)} onAuthMethodChange={(m) => selectedAuthMethod = m} onInviteCodeChange={(c) => flow.updateField('inviteCode', c)} onBack={() => flow.setStep('source-handle')} onContinue={proceedToReviewWithAuth} /> {:else if flow.state.step === 'review'}

{$_('migration.inbound.review.title')}

{$_('migration.inbound.review.desc')}

{$_('migration.inbound.review.currentHandle')}: {flow.state.sourceHandle}
{$_('migration.inbound.review.newHandle')}: {flow.state.targetHandle}
{$_('migration.inbound.review.did')}: {flow.state.sourceDid}
{$_('migration.inbound.review.sourcePds')}: {flow.state.sourcePdsUrl}
{$_('migration.inbound.review.targetPds')}: {window.location.origin}
{$_('migration.inbound.review.email')}: {flow.state.targetEmail}
{$_('migration.inbound.review.authentication')}: {flow.state.authMethod === 'passkey' ? $_('migration.inbound.review.authPasskey') : $_('migration.inbound.review.authPassword')}
{$_('migration.inbound.review.warning')}
{:else if flow.state.step === 'migrating'}

{$_('migration.inbound.migrating.title')}

{$_('migration.inbound.migrating.desc')}

{flow.state.progress.repoExported ? '✓' : '○'} {$_('migration.inbound.migrating.exportRepo')}
{flow.state.progress.repoImported ? '✓' : '○'} {$_('migration.inbound.migrating.importRepo')}
{flow.state.progress.blobsMigrated === flow.state.progress.blobsTotal && flow.state.progress.blobsTotal > 0 ? '✓' : '○'} {$_('migration.inbound.migrating.migrateBlobs')} ({flow.state.progress.blobsMigrated}/{flow.state.progress.blobsTotal})
{flow.state.progress.prefsMigrated ? '✓' : '○'} {$_('migration.inbound.migrating.migratePrefs')}
{#if flow.state.progress.blobsTotal > 0}
{/if}

{flow.state.progress.currentOperation}

{:else if flow.state.step === 'passkey-setup'} passkeyName = n} onRegister={registerPasskey} /> {:else if flow.state.step === 'app-password'} {:else if flow.state.step === 'email-verify'} flow.updateField('emailVerifyToken', t)} onSubmit={submitEmailVerify} onResend={resendEmailVerify} /> {:else if flow.state.step === 'plc-token'}

{$_('migration.inbound.plcToken.title')}

{$_('migration.inbound.plcToken.desc')}

{$_('migration.inbound.plcToken.info')}

flow.updateField('plcToken', (e.target as HTMLInputElement).value)} disabled={loading} required />
{:else if flow.state.step === 'did-web-update'}

{$_('migration.inbound.didWebUpdate.title')}

{$_('migration.inbound.didWebUpdate.desc')}

{$_('migration.inbound.didWebUpdate.yourDid')} {flow.state.sourceDid}

{$_('migration.inbound.didWebUpdate.updateInstructions')}

{`{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/multikey/v1",
    "https://w3id.org/security/suites/secp256k1-2019/v1"
  ],
  "id": "${flow.state.sourceDid}",
  "alsoKnownAs": [
    "at://${flow.state.targetHandle || '...'}"
  ],
  "verificationMethod": [
    {
      "id": "${flow.state.sourceDid}#atproto",
      "type": "Multikey",
      "controller": "${flow.state.sourceDid}",
      "publicKeyMultibase": "${flow.state.targetVerificationMethod?.replace('did:key:', '') || '...'}"
    }
  ],
  "service": [
    {
      "id": "#atproto_pds",
      "type": "AtprotoPersonalDataServer",
      "serviceEndpoint": "${window.location.origin}"
    }
  ]
}`}
{$_('migration.inbound.didWebUpdate.important')} {$_('migration.inbound.didWebUpdate.verifyFirst')} {$_('migration.inbound.didWebUpdate.fileLocation')} https://{flow.state.sourceDid.replace('did:web:', '')}/.well-known/did.json
{:else if flow.state.step === 'finalizing'}

{$_('migration.inbound.finalizing.title')}

{$_('migration.inbound.finalizing.desc')}

{flow.state.progress.plcSigned ? '✓' : '○'} {$_('migration.inbound.finalizing.signingPlc')}
{flow.state.progress.activated ? '✓' : '○'} {$_('migration.inbound.finalizing.activating')}
{flow.state.progress.deactivated ? '✓' : '○'} {$_('migration.inbound.finalizing.deactivating')}

{flow.state.progress.currentOperation}

{:else if flow.state.step === 'success'} {#snippet extraContent()} {#if flow.state.progress.blobsFailed.length > 0}
{$_('migration.inbound.success.blobsWarning', { values: { count: flow.state.progress.blobsFailed.length } })}
{/if} {/snippet}
{:else if flow.state.step === 'error'} {/if}