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(MM-146): DID ceremony flow — relay keys endpoint, SE signing, Tauri command, UI screens #32

Summary#

  • Phase 1 (relay): Add GET /v1/relay/keys public endpoint returning the active signing key as { keyId, publicKey, algorithm } or 503 if unprovisioned. 4 integration tests. Bruno file added.
  • Phase 2 (crypto): Add build_did_plc_genesis_op_with_external_signer — callback-based genesis op builder enabling Secure Enclave signing without exposing raw private key bytes. build_did_plc_genesis_op refactored to thin wrapper. 2 new tests.
  • Phase 3 (identity-wallet Rust): Add perform_did_ceremony Tauri command — 7-step orchestration (device key → relay key → genesis op → pending token → POST /v1/dids → persist DID + session token → return). Extend RelayClient with get(), post_with_bearer(), base_url(). 8 serde serialization tests.
  • Phase 4 (identity-wallet TS/Svelte): Wire performDIDCeremony() IPC wrapper, DIDCeremonyScreen.svelte (loading/error/retry), DIDSuccessScreen.svelte (truncated DID + Continue), and +page.svelte step machine (did_ceremonydid_successshamir_backup).

Test Plan#

  • cargo test -p relay get_relay — 4/4 pass (AC1.1–AC1.4)
  • cargo test -p crypto — 44/44 pass (AC2.1–AC2.3)
  • cargo test -p identity-wallet — 23/23 non-keychain tests pass, 8 pre-existing sandbox failures unaffected (AC3.4–AC3.7 serde contracts)
  • pnpm check — 262 files, 0 errors (AC4 TypeScript contracts)
  • iOS Simulator: full onboarding flow end-to-end (see docs/test-plans/2026-03-20-MM-146.md)
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:web:malpercio.dev/sh.tangled.repo.pull/3mhjqgzh7k522
Diff #0

No differences found between the selected revisions.

History

1 round 0 comments
sign up or login to add to the discussion
malpercio.dev submitted #0
patch application failed: error: No valid patches in input (allow with "--allow-empty")
expand 0 comments