@seams/wallet-server 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/artifact-manifest.json +21 -21
  2. package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
  3. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  4. package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
  5. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  6. package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
  7. package/cloudflare-router-ab/build/router/index.js +1 -1
  8. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  9. package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
  10. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  11. package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
  12. package/dist/esm/cloud-host.js +2 -2
  13. package/dist/esm/hosted-wallet-gateway.js +1 -1
  14. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +2 -2
  15. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
  16. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +1 -1
  17. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +1 -1
  18. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -1
  19. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +17 -45
  20. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +5 -5
  21. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +1 -1
  22. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +1 -17
  23. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +31 -34
  24. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +3 -2
  25. package/dist/esm/router/cloudflare/d1/registration/registrationCompletionWrite.js +20 -0
  26. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +1 -1
  27. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +2 -2
  28. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +3 -3
  29. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +1 -1
  30. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +1 -1
  31. package/dist/esm/router/cloudflare.js +2562 -2505
  32. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +3 -2
  33. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +44 -8
  34. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +15 -1
  35. package/dist/esm/router/domains/passkeyCustody/registrationCustodyOutcome.js +8 -8
  36. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +1 -19
  37. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +7 -7
  38. package/dist/esm/router/framework/registrationSetupDispatch.js +1 -1
  39. package/dist/esm/router/framework/registrationTiming.js +21 -0
  40. package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +1 -1
  41. package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +2 -2
  42. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +0 -9
  43. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +0 -1
  44. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +5 -42
  45. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +0 -9
  46. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +1 -2
  47. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/registrationCompletionWrite.d.ts +5 -0
  48. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -0
  49. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +6 -4
  50. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +2 -0
  51. package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +16 -24
  52. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +1 -3
  53. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +7 -17
  54. package/dist/types/wallet-server/src/router/framework/registrationTiming.d.ts +10 -0
  55. package/package.json +1 -1
@@ -21,33 +21,35 @@ import { ROUTER_AB_ED25519_NORMAL_SIGNING_STATE_KIND } from "../../../../shared-
21
21
  import { normalizeThresholdEd25519ParticipantIds } from "../../../../shared-ts/src/threshold/participants.js";
22
22
  import { nearEd25519SigningKeyIdFromString, registrationEd25519AuthorityScopeFromAuthority, walletIdFromString } from "../../../../shared-ts/src/utils/registrationIds.js";
23
23
  import { admitRegistrationReservationHome, cancelRegistrationHome } from "../../../domains/walletRegistration/walletRegistrationReservation.js";
24
+ import { recordRegistrationPromiseTiming, recordRegistrationServerTiming } from "../../../framework/registrationTiming.js";
25
+ import { walletCustodyCeremonyCommitPayloadFromWire } from "../../../../shared-ts/src/passkey-custody/ceremonyCommitPayload.js";
26
+ import "../../../../shared-ts/src/passkey-custody/index.js";
24
27
  import { parseImplicitNearAccountId, parseNamedNearAccountId } from "../../../../shared-ts/src/utils/near.js";
25
28
  import { registrationNearEd25519BranchKey } from "../../../../shared-ts/src/utils/registrationSignerPlan.js";
26
- import { buildStoredWalletRegistrationEvmFamilyEcdsaFinalizedBranch, buildStoredWalletRegistrationNearEd25519YaoAuthorizedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch, findStoredWalletRegistrationNearEd25519YaoBranch, replaceStoredWalletRegistrationSignerBranch, storedRegistrationAuthoritiesMatch, verifiedRegistrationCeremonyAuthority } from "../../../../core/RegistrationCeremonyStore.js";
27
29
  import { registrationIntentGrantFromString } from "../../../../shared-ts/src/utils/registrationIntent.js";
28
- import { walletCustodyCeremonyCommitPayloadFromWire } from "../../../../shared-ts/src/passkey-custody/ceremonyCommitPayload.js";
29
- import "../../../../shared-ts/src/passkey-custody/index.js";
30
- import { parseEcdsaDerivationPublicIdentity, thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
31
30
  import { createRouterAbTraceContextV1 } from "../../../../shared-ts/src/utils/routerAbTraceContext.js";
32
- import { routerAbEcdsaStrictRegistrationRequestBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
33
- import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, buildD1WalletRecord, parseWalletIdForIntent, thresholdEcdsaChainTargetsEqual } from "./d1RegistrationCeremonyRecords.js";
34
- import { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, recordRegistrationPromiseTiming, recordRegistrationServerTiming, registrationSignerBranchesFromPlan, startD1RegistrationRouteTiming } from "./d1RegistrationSetupSupport.js";
35
31
  import { buildTenantRootIdentityFromAuthenticatedDeploymentV1 } from "../../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
36
32
  import { DEFAULT_WALLET_SESSION_TTL_MS } from "../../../../shared-ts/src/threshold/sessionPolicy.js";
33
+ import { parseEcdsaDerivationPublicIdentity, thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
37
34
  import { walletAuthAuthorityFromRegistrationAuthority, walletRegistrationFinalizeAuthMethodFromAuthority } from "../wallet/d1WalletAuthMethodBoundary.js";
38
35
  import { buildRouterAbEd25519YaoRegistrationCapabilityRecordV1 } from "../../../domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js";
39
36
  import { buildRouterAbEd25519YaoProductAdmissionRequestV1, projectRouterAbEd25519YaoExactWalletSession } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
40
37
  import { routerAbEd25519YaoRegistrationExecutionTimingEntriesV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js";
41
38
  import { runRouterAbEd25519YaoRegistrationSideEffectV2, throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
42
39
  import { buildYaoEd25519WalletSignerRecord, ed25519NearPublicKeyFromBytes, implicitNearAccountIdFromEd25519PublicKeyBytes } from "../ed25519Yao/d1Ed25519YaoWalletSigner.js";
40
+ import { buildStoredWalletRegistrationEvmFamilyEcdsaFinalizedBranch, buildStoredWalletRegistrationNearEd25519YaoAuthorizedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch, findStoredWalletRegistrationNearEd25519YaoBranch, replaceStoredWalletRegistrationSignerBranch, storedRegistrationAuthoritiesMatch, verifiedRegistrationCeremonyAuthority } from "../../../../core/RegistrationCeremonyStore.js";
41
+ import { routerAbEcdsaStrictRegistrationRequestBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
42
+ import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, buildD1WalletRecord, parseWalletIdForIntent, thresholdEcdsaChainTargetsEqual } from "./d1RegistrationCeremonyRecords.js";
43
43
  import { deriveThresholdEcdsaKeyHandle } from "../../../../shared-ts/src/utils/thresholdEcdsaKeyHandle.js";
44
44
  import { isTransientD1Error, retryTransientD1 } from "../../../../storage/d1Retry.js";
45
+ import { registrationCommitCompletionWrite } from "./registrationCompletionWrite.js";
45
46
  import { listThresholdEcdsaKeyIdentityTargetsForUser } from "../../../../core/authService/thresholdEcdsaKeyInventory.js";
46
47
  import { routerAbEd25519YaoLifecycleDecisionLookupV1, routerAbEd25519YaoLifecycleDecisionV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js";
47
48
  import { reserveRegistrationCustody } from "../../../domains/passkeyCustody/registrationCustodyOutcome.js";
48
49
  import { resolveTenantRootIdentityV1 } from "../../../domains/tenantRoot/tenantRootIdentityResolution.js";
49
50
  import { walletRegistrationOperationPreparedFromCeremony } from "./d1WalletRegistrationPreparation.js";
50
51
  import { computeWalletRegistrationSetupDigestB64u, parseWalletRegistrationSetupClaims, verifySignedWalletRegistrationSetup, verifyWalletRegistrationSetupClaims } from "../../../domains/walletRegistration/walletRegistrationSetupPayload.js";
52
+ import { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, registrationSignerBranchesFromPlan, startD1RegistrationRouteTiming } from "./d1RegistrationSetupSupport.js";
51
53
  import { projectWalletRegistrationSessionCommitReceiptV2, registrationCommitActivation, registrationReplayAuthMethodFields, replayedRegistrationCommit, unissuedRegistrationCommit } from "./walletRegistrationSessionCommitReceipt.js";
52
54
  import { assertDirectWalletSessionOwnerProof, buildRegistrationOwnerProof, issueDirectRegistrationEstablishedEcdsaSession, issueDirectRegistrationEstablishedEd25519Session, projectCurrentNearRegistrationSession, replayDirectRegistrationEstablishedEcdsaSession, replayDirectRegistrationEstablishedEd25519Session, walletSessionPrincipalId } from "./walletRegistrationEstablishedSessionIssuer.js";
53
55
  import { commitWalletRegistration } from "./d1WalletRegistrationInitialSession.js";
@@ -2202,7 +2204,7 @@ var CloudflareD1WalletRegistrationService = class {
2202
2204
  if (issuance.status === "rejected") throw issuance.reason;
2203
2205
  if (custody.status === "rejected") throw custody.reason;
2204
2206
  const issuedRegistrationSession = issuance.value;
2205
- const custodyField = custody.value.status === "not_requested" ? {} : { walletCustody: custody.value };
2207
+ const custodyField = custody.value.outcome.status === "not_requested" ? {} : { walletCustody: custody.value.outcome };
2206
2208
  switch (issuedRegistrationSession.kind) {
2207
2209
  case "issued": return {
2208
2210
  kind: "session_issued",
@@ -2216,7 +2218,8 @@ var CloudflareD1WalletRegistrationService = class {
2216
2218
  },
2217
2219
  issuedAtMs: issuedRegistrationSession.issuedAtMs,
2218
2220
  expectedOrigin: ownerProofContext.expectedOrigin,
2219
- activation: issuedRegistrationSession.activation
2221
+ activation: issuedRegistrationSession.activation,
2222
+ custodyWrite: custody.value.kind === "prepared" ? custody.value.write : null
2220
2223
  };
2221
2224
  case "already_committed": return {
2222
2225
  kind: "session_issued",
@@ -2231,7 +2234,8 @@ var CloudflareD1WalletRegistrationService = class {
2231
2234
  },
2232
2235
  issuedAtMs: issuedRegistrationSession.issuedAtMs,
2233
2236
  expectedOrigin: ownerProofContext.expectedOrigin,
2234
- activation: issuedRegistrationSession.activation
2237
+ activation: issuedRegistrationSession.activation,
2238
+ custodyWrite: custody.value.kind === "prepared" ? custody.value.write : null
2235
2239
  };
2236
2240
  default: return assertNeverD1RegistrationSessionIssuance(issuedRegistrationSession);
2237
2241
  }
@@ -2430,7 +2434,7 @@ var CloudflareD1WalletRegistrationService = class {
2430
2434
  registrationCeremonyId: input.registrationCeremonyId,
2431
2435
  execution
2432
2436
  }),
2433
- completionWrite: registrationCommitActivation,
2437
+ completionWrite: registrationCommitCompletionWrite,
2434
2438
  replay: this.replayWalletRegistrationNearProvisioningCommit.bind(this)
2435
2439
  });
2436
2440
  recordRegistrationServerTiming(serverTiming, "near_finalize_side_effect", sideEffectStartedAtMs);
@@ -2656,7 +2660,7 @@ var CloudflareD1WalletRegistrationService = class {
2656
2660
  }, stored ? null : (bound) => ceremonyStore.prepareEcdsaClaimCommit({
2657
2661
  expected: input.snapshot,
2658
2662
  next: authorizedCeremony(bound)
2659
- }), input.startedDispatchRoot, requireRegistrationEd25519YaoMint(ceremony).sessionId);
2663
+ }), input.startedDispatchRoot, requireRegistrationEd25519YaoMint(ceremony).sessionId, input.serverTiming);
2660
2664
  recordRegistrationServerTiming(input.serverTiming, "yao_admission_bind", bindStartedAtMs);
2661
2665
  if (!admitted.ok) return {
2662
2666
  ok: false,
@@ -2692,6 +2696,7 @@ var CloudflareD1WalletRegistrationService = class {
2692
2696
  admissionReceipt: admitted.value
2693
2697
  };
2694
2698
  const execution = input.ed25519Execution ? await runtime.executeAdmittedRegistration({
2699
+ admission: admitted.executionAdmission,
2695
2700
  request: input.ed25519Execution,
2696
2701
  credential: input.registrationBearerToken,
2697
2702
  trace: input.traceContext ?? createRouterAbTraceContextV1()
@@ -2712,8 +2717,7 @@ var CloudflareD1WalletRegistrationService = class {
2712
2717
  }
2713
2718
  };
2714
2719
  }
2715
- /**
2716
- * Derives the authority-bound Yao admission now that the proof is verified.
2720
+ /** Derives the authority-bound Yao admission after proof verification.
2717
2721
  * Both auth methods take this path — the scope comes from the verified
2718
2722
  * authority, so Email OTP's `providerUserId` is established rather than
2719
2723
  * assumed.
@@ -2837,17 +2841,21 @@ var CloudflareD1WalletRegistrationService = class {
2837
2841
  registrationCeremonyId: claims.registrationCeremonyId,
2838
2842
  execution
2839
2843
  }),
2840
- completionWrite: registrationCommitActivation,
2844
+ completionWrite: registrationCommitCompletionWrite,
2841
2845
  replay: this.replayWalletRegistrationActivateCommit.bind(this)
2842
2846
  });
2843
2847
  switch (run.kind) {
2844
2848
  case "executed":
2845
2849
  case "exact_replay":
2846
2850
  await publishCompletedRegistration(run.value, waitUntil);
2847
- if (run.value.response.ok && run.value.response.kind === "evm_family_ecdsa") await cleanupFinalizedRegistrationCeremony({
2848
- store: this.getRegistrationCeremonyIntentStore(),
2849
- registrationCeremonyId: claims.registrationCeremonyId
2850
- });
2851
+ if (run.value.response.ok && run.value.response.kind === "evm_family_ecdsa") {
2852
+ const cleanup = cleanupFinalizedRegistrationCeremony({
2853
+ store: this.getRegistrationCeremonyIntentStore(),
2854
+ registrationCeremonyId: claims.registrationCeremonyId
2855
+ });
2856
+ if (waitUntil) waitUntil(cleanup);
2857
+ else await cleanup;
2858
+ }
2851
2859
  return run.value.response;
2852
2860
  case "request_conflict": return {
2853
2861
  ok: false,
@@ -2983,7 +2991,7 @@ var CloudflareD1WalletRegistrationService = class {
2983
2991
  foundingAuthority: commit.foundingAuthority,
2984
2992
  foundingAuthMethod: commit.foundingAuthMethod,
2985
2993
  ...commit.registrationDiagnostics ? { registrationDiagnostics: commit.registrationDiagnostics } : {},
2986
- ...custody.value.status === "not_requested" ? {} : { walletCustody: custody.value },
2994
+ ...custody.value.outcome.status === "not_requested" ? {} : { walletCustody: custody.value.outcome },
2987
2995
  custodyKeyManifestDigestB64u: commit.custodyKeyManifestDigestB64u,
2988
2996
  ecdsa: {
2989
2997
  ...commit.ecdsa,
@@ -2996,7 +3004,8 @@ var CloudflareD1WalletRegistrationService = class {
2996
3004
  const issuedContext = {
2997
3005
  issuedAtMs: registrationEstablishedSession.issuedAtMs,
2998
3006
  expectedOrigin: ownerProofContext.expectedOrigin,
2999
- activation: registrationEstablishedSession.activation
3007
+ activation: registrationEstablishedSession.activation,
3008
+ custodyWrite: custody.value.kind === "prepared" ? custody.value.write : null
3000
3009
  };
3001
3010
  if (commit.authMethod.kind === "passkey") {
3002
3011
  if (!commit.rpId) throw new Error("Passkey registration activation is missing its RP ID");
@@ -3847,19 +3856,7 @@ var CloudflareD1WalletRegistrationService = class {
3847
3856
  };
3848
3857
  const foundingAuthority = persistedFoundingRecords.authority;
3849
3858
  const foundingAuthMethod = persistedFoundingRecords.authMethod;
3850
- const custody = custodyReservation.then(async (commitCustody) => {
3851
- const walletCustody = await recordRegistrationPromiseTiming({
3852
- sink: serverTiming,
3853
- name: "near_finalize_custody_commit",
3854
- startedAtMs: Date.now(),
3855
- promise: commitCustody()
3856
- });
3857
- if (walletCustody.status === "rejected") console.warn("[wallet-registration] custody commit rejected", {
3858
- registrationCeremonyId: ceremony.registrationCeremonyId,
3859
- reason: walletCustody.reason
3860
- });
3861
- return walletCustody;
3862
- });
3859
+ const custody = custodyReservation;
3863
3860
  startedCustody = custody;
3864
3861
  const authMethod = walletRegistrationFinalizeAuthMethodFromAuthority(ceremonyAuthority);
3865
3862
  let response;
@@ -1,12 +1,13 @@
1
1
  import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
2
2
  import { deriveSigningRootId } from "../../../../shared-ts/src/threshold/signingRootScope.js";
3
3
  import { registrationPreparationIdFromString } from "../../../../core/types.js";
4
+ import { recordRegistrationPromiseTiming, recordRegistrationServerTiming } from "../../../framework/registrationTiming.js";
5
+ import { buildRouterAbEd25519YaoProductAdmissionRequestV1, mintRouterAbEd25519YaoRegistrationIdentityV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
4
6
  import { buildStoredWalletRegistrationEvmFamilyEcdsaPreparedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch } from "../../../../core/RegistrationCeremonyStore.js";
5
7
  import { routerAbEcdsaStrictRegistrationFactsBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
6
8
  import { buildRegistrationIntent, inferRuntimePolicyScopeFromSigningRoot } from "./d1RegistrationCeremonyRecords.js";
7
- import { errorMessage, recordRegistrationPromiseTiming, recordRegistrationServerTiming, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan } from "./d1RegistrationSetupSupport.js";
8
- import { buildRouterAbEd25519YaoProductAdmissionRequestV1, mintRouterAbEd25519YaoRegistrationIdentityV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
9
9
  import { isTransientD1Error } from "../../../../storage/d1Retry.js";
10
+ import { errorMessage, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan } from "./d1RegistrationSetupSupport.js";
10
11
  import { buildWalletRegistrationSetupSignature, normalizeWalletRegistrationSetupRequest, walletRegistrationSetupError, walletRegistrationSetupExpiresAtMs, walletRegistrationSetupIntentDigest } from "./d1WalletRegistrationSetup.js";
11
12
  import { buildD1EvmFamilyEcdsaRegistrationPrepare } from "./d1EvmFamilyEcdsaRegistrationBranch.js";
12
13
  //#region src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.ts
@@ -0,0 +1,20 @@
1
+ //#region src/router/cloudflare/d1/registration/registrationCompletionWrite.ts
2
+ /** Custody, home activation and the replay receipt share one durable transaction. */
3
+ function registrationCommitCompletionWrite(execution) {
4
+ switch (execution.kind) {
5
+ case "unissued":
6
+ case "replayed": return null;
7
+ case "session_issued":
8
+ case "session_issued_with_installation_projection":
9
+ if (!execution.custodyWrite) return execution.activation;
10
+ return { statements: [...execution.custodyWrite.statements, ...execution.activation?.statements ?? []] };
11
+ default: return assertNever(execution);
12
+ }
13
+ }
14
+ function assertNever(value) {
15
+ throw new Error(`Unknown registration completion state: ${String(value)}`);
16
+ }
17
+ //#endregion
18
+ export { registrationCommitCompletionWrite };
19
+
20
+ //# sourceMappingURL=registrationCompletionWrite.js.map
@@ -2,8 +2,8 @@ import { isPlainObject } from "../../../../shared-ts/src/utils/validation.js";
2
2
  import { base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
3
3
  import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
4
4
  import "../../../../shared-ts/src/utils/encoders.js";
5
- import { parseD1WalletAddSignerFinalizeTerminalResponse, parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
6
5
  import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
6
+ import { parseD1WalletAddSignerFinalizeTerminalResponse, parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
7
7
  //#region src/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.ts
8
8
  function parseWalletAddSignerFinalizePrepared(raw) {
9
9
  if (!isPlainObject(raw)) return null;
@@ -13,14 +13,14 @@ import { buildRouterAbEcdsaDerivationPublicCapabilityV1, parseRouterAbEcdsaRegis
13
13
  import { buildWalletEcdsaSignerActivationV1, extendEd25519WalletAuthorityWithEcdsa, isActiveEd25519WalletAuthorityV1 } from "../../../../shared-ts/src/authorization/walletAuthority.js";
14
14
  import { registrationPreparationIdFromString } from "../../../../core/types.js";
15
15
  import { addSignerIntentGrantFromString, computeAddSignerIntentDigestB64u, sameAddSignerIntentV1 } from "../../../../shared-ts/src/utils/registrationIntent.js";
16
- import { routerAbEcdsaStrictRegistrationRequestMatchesFacts } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
17
- import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, normalizeThresholdEcdsaChainTargets, parseD1AddSignerIntent, parseD1RuntimePolicyScope, parseD1StoredAddSignerAuth, parseD1StoredAddSignerIntent, parseD1StoredWalletAddSignerCeremony, parseWalletIdForIntent, positiveIntegerArraysEqual, runtimePolicyScopeMatches, thresholdEcdsaChainTargetsEqual } from "../registration/d1RegistrationCeremonyRecords.js";
18
16
  import { buildTenantRootIdentityFromAuthenticatedDeploymentV1 } from "../../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
19
17
  import { WalletAuthorityCommitConflictError } from "./d1WalletAuthorityStore.js";
20
18
  import { buildRouterAbEd25519YaoRegistrationCapabilityRecordV1 } from "../../../domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js";
21
19
  import { buildRouterAbEd25519YaoAddSignerAdmissionRequestV1, createRouterAbEd25519YaoMaterialActivationRefV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
22
20
  import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV1, runRouterAbEd25519YaoRegistrationSideEffectV1, throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
23
21
  import { buildYaoEd25519WalletSignerRecord, ed25519NearPublicKeyFromBytes, implicitNearAccountIdFromEd25519PublicKeyBytes } from "../ed25519Yao/d1Ed25519YaoWalletSigner.js";
22
+ import { routerAbEcdsaStrictRegistrationRequestMatchesFacts } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
23
+ import { buildD1EcdsaWalletKeysFromBootstrap, buildD1WalletEcdsaSignerRecords, normalizeThresholdEcdsaChainTargets, parseD1AddSignerIntent, parseD1RuntimePolicyScope, parseD1StoredAddSignerAuth, parseD1StoredAddSignerIntent, parseD1StoredWalletAddSignerCeremony, parseWalletIdForIntent, positiveIntegerArraysEqual, runtimePolicyScopeMatches, thresholdEcdsaChainTargetsEqual } from "../registration/d1RegistrationCeremonyRecords.js";
24
24
  import { buildD1WalletAddSignerFinalizePrepared, fingerprintD1WalletAddSignerFinalizePrepared, rejectUnexpectedWalletAddSignerFinalizePreparation, returnD1WalletAddSignerFinalizePrepared } from "./d1WalletAddSignerFinalizeRecord.js";
25
25
  import { routerAbEd25519YaoLifecycleDecisionLookupV1, routerAbEd25519YaoLifecycleDecisionV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js";
26
26
  import { buildD1EvmFamilyEcdsaRegistrationPrepare } from "../registration/d1EvmFamilyEcdsaRegistrationBranch.js";
@@ -13,15 +13,15 @@ import { deriveWebAuthnAuthenticatorDeviceInfo } from "../../../../shared-ts/src
13
13
  import { parseSessionOrigin } from "../../../../authorization/domain.js";
14
14
  import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
15
15
  import { PASSKEY_PRF_FIRST_SALT_V1, PASSKEY_PRF_SECOND_SALT_V1 } from "../../../../shared-ts/src/utils/signingSessionSeal.js";
16
- import { addAuthMethodIntentGrantFromString, computeAddAuthMethodIntentDigestB64u } from "../../../../shared-ts/src/utils/registrationIntent.js";
17
16
  import { parsePasskeyCustodyEnvelopeRecord } from "../../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
18
17
  import "../../../../shared-ts/src/passkey-custody/index.js";
19
- import { toRecordValue } from "../auth/d1RouterApiAuthBoundary.js";
20
- import { parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
18
+ import { addAuthMethodIntentGrantFromString, computeAddAuthMethodIntentDigestB64u } from "../../../../shared-ts/src/utils/registrationIntent.js";
21
19
  import { parseWebAuthnClientDataJsonBase64url, webAuthnOriginHostnameOrEmpty } from "../../../auth/webAuthnCredentialCodecs.js";
22
20
  import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS, WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
23
21
  import { resolveWalletAuthMethodIdForAuthority } from "../../../../core/signingLanes/WalletExecutionLaneProjection.js";
22
+ import { toRecordValue } from "../auth/d1RouterApiAuthBoundary.js";
24
23
  import { d1HostIsWithinWebAuthnRpId, resolveD1AddAuthMethodExistingAuth, resolveD1AddSignerExistingAuth, verifyD1LinkedDeviceFreshRevokeProofV1, walletAuthAuthorityFromRegistrationAuthority } from "./d1WalletAuthMethodBoundary.js";
24
+ import { parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
25
25
  import { runtimePolicyScopeKey } from "../../../../core/EmailOtpRecords.js";
26
26
  import { expiredGoogleEmailOtpRegistrationAttemptRecord } from "../emailOtp/d1GoogleEmailOtpRegistrationRecords.js";
27
27
  import { admitAddWalletAuthMethod } from "../../../../shared-ts/src/utils/addWalletAuthMethod.js";
@@ -4,8 +4,8 @@ import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimit
4
4
  import { WalletLifecycleLocator } from "../../../../authorization/lifecycleRouting.js";
5
5
  import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
6
6
  import { failedVerification, failure } from "../../../../shared-ts/src/utils/failure.js";
7
- import { nonNegativeSafeInteger, optionalNonNegativeInteger, parseD1BoundaryWalletId, parseD1BoundaryWalletIdResult, parseJsonObject } from "../auth/d1RouterApiAuthBoundary.js";
8
7
  import { decodeWebAuthnBase64UrlOrBase64, parseWebAuthnAuthenticationCredential, parseWebAuthnClientDataJsonBase64url, webAuthnCredentialIdB64uFromCredential, webAuthnOriginHostnameOrEmpty } from "../../../auth/webAuthnCredentialCodecs.js";
8
+ import { nonNegativeSafeInteger, optionalNonNegativeInteger, parseD1BoundaryWalletId, parseD1BoundaryWalletIdResult, parseJsonObject } from "../auth/d1RouterApiAuthBoundary.js";
9
9
  import { parseWebAuthnAuthenticatorRowDeviceInfo, webAuthnSyncWalletBindingFromCredentialBinding } from "./d1WebAuthnRecords.js";
10
10
  import { d1HostIsWithinWebAuthnRpId } from "../wallet/d1WalletAuthMethodBoundary.js";
11
11
  import { webAuthnAuthenticationFailure, webAuthnLoginEd25519, webAuthnSyncCredentialBinding } from "../../../../core/authService/webauthnVerificationOutcomes.js";
@@ -8,8 +8,8 @@ import { parseWalletAuthorityV1 } from "../../../../shared-ts/src/authorization/
8
8
  import { parseWebAuthnAuthenticatorDeviceInfoJson } from "../../../../shared-ts/src/utils/webauthnDeviceInfo.js";
9
9
  import { hasExactKeys } from "../../../../shared-ts/src/utils/exactKeys.js";
10
10
  import "../../../../shared-ts/src/passkey-custody/index.js";
11
- import { nonNegativeSafeInteger, optionalNonNegativeInteger, positiveInteger } from "../auth/d1RouterApiAuthBoundary.js";
12
11
  import { parseRecoveryCodeReservationId } from "../../../../shared-ts/src/wallet-recovery/recoveryCodeReservation.js";
12
+ import { nonNegativeSafeInteger, optionalNonNegativeInteger, positiveInteger } from "../auth/d1RouterApiAuthBoundary.js";
13
13
  //#region src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.ts
14
14
  function parseWebAuthnAuthenticatorRowDeviceInfo(raw) {
15
15
  return parseWebAuthnAuthenticatorDeviceInfoJson(raw);