@seams/wallet-server 0.9.3 → 0.10.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 (83) hide show
  1. package/THIRD_PARTY_NOTICES.md +33 -1
  2. package/artifact-manifest.json +57 -37
  3. package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
  4. package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
  5. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  6. package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
  7. package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
  8. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  9. package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
  10. package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
  11. package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
  12. package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
  13. package/cloudflare-router-ab/build/router/index.js +1 -1
  14. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  15. package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
  16. package/cloudflare-router-ab/build/signing-worker/index.js +1 -1
  17. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  18. package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
  19. package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +1 -1
  20. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  21. package/cloudflare-router-ab/migrations/deriver-a/0020_registration_preparation.sql +7 -0
  22. package/cloudflare-router-ab/migrations/deriver-b/0020_registration_preparation.sql +7 -0
  23. package/dist/esm/cloud-host.js +9 -9
  24. package/dist/esm/core/d1Ed25519SignerRead.js +3 -19
  25. package/dist/esm/hosted-wallet-gateway.js +15 -1
  26. package/dist/esm/localHostedWalletGatewayHandler.js +1 -1
  27. package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +26 -20
  28. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +1 -1
  29. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +21 -2
  30. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +11 -4
  31. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupRateLimit.js +34 -0
  32. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +17 -16
  33. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +45 -65
  34. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +87 -10
  35. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +1 -1
  36. package/dist/esm/router/cloudflare/runtime/walletGateway.js +2 -0
  37. package/dist/esm/router/cloudflare-adaptor.js +7 -7
  38. package/dist/esm/router/cloudflare.js +8812 -8594
  39. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js +45 -24
  40. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +52 -3
  41. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +1 -1
  42. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +13 -5
  43. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +41 -7
  44. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +1 -1
  45. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +24 -4
  46. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +24 -14
  47. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +10 -1
  48. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +45 -5
  49. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +48 -8
  50. package/dist/esm/router/express.js +107 -16
  51. package/dist/esm/router/framework/registrationSetupDispatch.js +28 -2
  52. package/dist/esm/router/framework/registrationSetupRateLimit.js +0 -0
  53. package/dist/esm/router/transport/fetch/routes/walletRegistration.js +3 -2
  54. package/dist/esm/storage/d1Retry.js +38 -0
  55. package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
  56. package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +12 -0
  57. package/dist/types/wallet-server/src/core/d1Ed25519SignerRead.d.ts +1 -4
  58. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +50 -6
  59. package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +1 -1
  60. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +7 -1
  61. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupRateLimit.d.ts +7 -0
  62. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +1 -1
  63. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +3 -0
  64. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -1
  65. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.d.ts +18 -4
  66. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +35 -4
  67. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +1 -1
  68. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +7 -0
  69. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.d.ts +2 -2
  70. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +5 -3
  71. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +18 -3
  72. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +2 -0
  73. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +39 -0
  74. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +6 -0
  75. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +16 -2
  76. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +1 -0
  77. package/dist/types/wallet-server/src/router/framework/registrationSetupRateLimit.d.ts +11 -0
  78. package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +1 -0
  79. package/dist/types/wallet-server/src/storage/d1Retry.d.ts +10 -0
  80. package/migrations/d1-signer/0079_tenant_lookup_indexes.sql +33 -0
  81. package/migrations/d1-signer/0080_registration_setup_rate_limits.sql +11 -0
  82. package/package.json +1 -1
  83. package/src/README.md +1 -1
@@ -0,0 +1,34 @@
1
+ import { sha256HexUtf8 } from "../../../../shared-ts/src/utils/digests.js";
2
+ import { prepareD1TenantStatement } from "../../../../core/d1TenantStore.js";
3
+ //#region src/router/cloudflare/d1/registration/d1RegistrationSetupRateLimit.ts
4
+ /** Regional counters bound the work that runs before a passkey is verified. */
5
+ async function consumeRegistrationSetupRateLimit(database, namespace, input) {
6
+ const scope = {
7
+ namespace,
8
+ orgId: input.orgId,
9
+ projectId: input.projectId,
10
+ envId: input.envId
11
+ };
12
+ const key = await sha256HexUtf8(JSON.stringify([input.apiKeyId, input.sourceIp]));
13
+ const now = Date.now();
14
+ const results = await database.batch([database.prepare(`DELETE FROM registration_setup_rate_limits WHERE rowid IN (
15
+ SELECT rowid FROM registration_setup_rate_limits WHERE reset_at_ms <= ? LIMIT 100
16
+ )`).bind(now), prepareD1TenantStatement(database, scope, `INSERT INTO registration_setup_rate_limits
17
+ (namespace, org_id, project_id, env_id, rate_key, consumed_count, reset_at_ms)
18
+ VALUES (?1, ?2, ?3, ?4, ?5, 1, ?7)
19
+ ON CONFLICT (namespace, org_id, project_id, env_id, rate_key) DO UPDATE SET
20
+ consumed_count = CASE WHEN reset_at_ms <= ?6 THEN 1 ELSE consumed_count + 1 END,
21
+ reset_at_ms = CASE WHEN reset_at_ms <= ?6 THEN ?7 ELSE reset_at_ms END
22
+ WHERE reset_at_ms <= ?6 OR consumed_count < 30
23
+ RETURNING consumed_count`, [
24
+ key,
25
+ now,
26
+ now + 6e4
27
+ ])]);
28
+ if (results.length !== 2 || !results[0].success || !results[1].success) throw new Error("Registration setup rate limit is unavailable");
29
+ return { allowed: results[1].results?.length === 1 };
30
+ }
31
+ //#endregion
32
+ export { consumeRegistrationSetupRateLimit };
33
+
34
+ //# sourceMappingURL=d1RegistrationSetupRateLimit.js.map
@@ -1,4 +1,4 @@
1
- import { mpcMaterialActivationRefsEqual } from "../../../../shared-ts/src/utils/domainIds.js";
1
+ import { mpcMaterialActivationRefsEqual, parseWalletId } from "../../../../shared-ts/src/utils/domainIds.js";
2
2
  import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
3
3
  import { parseWalletAuthMethodRecordV2, sameWalletAuthMethodRecordV2 } from "../../../../shared-ts/src/utils/walletAuthMethodRecord.js";
4
4
  import { parseWalletAuthorityV1 } from "../../../../shared-ts/src/authorization/walletAuthority.js";
@@ -11,8 +11,8 @@ import { prepareD1WebAuthnCredentialBindingPutStatement } from "../../../../core
11
11
  import { prepareD1WebAuthnAuthenticatorPutStatement } from "../webauthn/d1WebAuthnStore.js";
12
12
  import { prepareD1WalletSessionAuthorityProjectionStatements } from "../authorization/walletSessionAuthorityProjection.js";
13
13
  import { prepareD1WalletAuthorityExtensionCasGuard, prepareD1WalletAuthorityExtensionStatement, prepareD1WalletAuthorityPutStatement } from "../wallet/d1WalletAuthorityStore.js";
14
- import { createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1 } from "../ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js";
15
- import { commitRouterAbEd25519YaoRegistrationCapability } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js";
14
+ import { lifecycleWriteFenceStatements } from "../ed25519Yao/d1Ed25519YaoStateWriteFence.js";
15
+ import { validateRouterAbEd25519YaoRegistrationCapability } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js";
16
16
  //#region src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.ts
17
17
  function requireScopeString(value, field) {
18
18
  const normalized = normalizeOptionalTrimmedString(value);
@@ -261,14 +261,12 @@ var CloudflareD1WalletRegistrationCommitStore = class {
261
261
  }
262
262
  async commit(authority, input, executeBatch) {
263
263
  assertCommitWalletIdentity(input, authority);
264
+ const fenced = [];
264
265
  const ed25519Signer = input.walletSigners.find(isEd25519Signer);
265
266
  if (ed25519Signer) {
266
267
  const capability = ed25519Signer.activeYaoCapability;
267
268
  if (capability.version !== "wallet_ed25519_yao_registration_capability_v1") throw new Error("A registration commit requires its registration capability");
268
- const installed = await commitRouterAbEd25519YaoRegistrationCapability(createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1({
269
- database: this.database,
270
- scope: this.scope
271
- }), {
269
+ const validated = validateRouterAbEd25519YaoRegistrationCapability({
272
270
  kind: "router_ab_ed25519_yao_registration_finalize_capability_v1",
273
271
  activeCapabilityBinding: capability.activeCapabilityBinding,
274
272
  nearAccountId: capability.nearAccountId,
@@ -276,11 +274,17 @@ var CloudflareD1WalletRegistrationCommitStore = class {
276
274
  registrationAdmissionReceipt: capability.admissionReceipt,
277
275
  registrationResult: capability.activationResult,
278
276
  runtimePolicyScope: capability.runtimePolicyScope
279
- }, prepareWalletWrite(this.database, this.scope, authority, input, executeBatch));
280
- if (!installed.ok) throw new Error(installed.message);
281
- return;
277
+ });
278
+ if (!validated.ok) throw new Error(validated.message);
279
+ const capabilityWallet = parseWalletId(capability.admissionRequest.application_binding.wallet_id);
280
+ if (!capabilityWallet.ok) throw new Error("Lifecycle wallet owner is invalid");
281
+ fenced.push(...lifecycleWriteFenceStatements({
282
+ database: this.database,
283
+ scope: this.scope
284
+ }, new Set([capabilityWallet.value, input.wallet.walletId])));
282
285
  }
283
- const { statements } = await prepareWalletWrite(this.database, this.scope, authority, input);
286
+ const prepared = await prepareWalletWrite(this.database, this.scope, authority, input);
287
+ const statements = [...fenced, ...prepared.statements];
284
288
  const results = executeBatch ? await executeBatch(statements) : await this.database.batch(statements);
285
289
  assertBatchSucceeded({
286
290
  expectedStatementCount: statements.length,
@@ -288,7 +292,7 @@ var CloudflareD1WalletRegistrationCommitStore = class {
288
292
  });
289
293
  }
290
294
  };
291
- async function prepareWalletWrite(database, scope, authority, input, executeBatch) {
295
+ async function prepareWalletWrite(database, scope, authority, input) {
292
296
  const foundingStatements = await prepareFoundingStatements({
293
297
  database,
294
298
  scope,
@@ -316,10 +320,7 @@ async function prepareWalletWrite(database, scope, authority, input, executeBatc
316
320
  foundingStatements,
317
321
  now: input.now
318
322
  }), ...emailOtpCommitStatements(input), ...input.decisionStatements);
319
- return {
320
- statements,
321
- executeBatch
322
- };
323
+ return { statements };
323
324
  }
324
325
  function isEd25519Signer(signer) {
325
326
  return signer.version === "wallet_signer_ed25519_v1";
@@ -25,12 +25,14 @@ import "../../../../shared-ts/src/passkey-custody/index.js";
25
25
  import { parseImplicitNearAccountId, parseNamedNearAccountId } from "../../../../shared-ts/src/utils/near.js";
26
26
  import { registrationNearEd25519BranchKey } from "../../../../shared-ts/src/utils/registrationSignerPlan.js";
27
27
  import { registrationIntentGrantFromString } from "../../../../shared-ts/src/utils/registrationIntent.js";
28
+ import { createRouterAbTraceContextV1 } from "../../../../shared-ts/src/utils/routerAbTraceContext.js";
28
29
  import { buildTenantRootIdentityFromAuthenticatedDeploymentV1 } from "../../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
29
30
  import { DEFAULT_WALLET_SESSION_TTL_MS } from "../../../../shared-ts/src/threshold/sessionPolicy.js";
30
31
  import { parseEcdsaDerivationPublicIdentity, thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
31
32
  import { walletAuthAuthorityFromRegistrationAuthority, walletRegistrationFinalizeAuthMethodFromAuthority } from "../wallet/d1WalletAuthMethodBoundary.js";
32
33
  import { buildRouterAbEd25519YaoRegistrationCapabilityRecordV1 } from "../../../domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js";
33
- import { buildRouterAbEd25519YaoProductAdmissionRequestV1, createRouterAbEd25519YaoMaterialActivationRefV1, projectRouterAbEd25519YaoExactWalletSession } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
34
+ import { buildRouterAbEd25519YaoProductAdmissionRequestV1, projectRouterAbEd25519YaoExactWalletSession } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
35
+ import { routerAbEd25519YaoRegistrationExecutionTimingEntriesV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js";
34
36
  import { runRouterAbEd25519YaoRegistrationSideEffectV2, throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
35
37
  import { buildYaoEd25519WalletSignerRecord, ed25519NearPublicKeyFromBytes, implicitNearAccountIdFromEd25519PublicKeyBytes } from "../ed25519Yao/d1Ed25519YaoWalletSigner.js";
36
38
  import { buildStoredWalletRegistrationEvmFamilyEcdsaFinalizedBranch, buildStoredWalletRegistrationNearEd25519YaoAuthorizedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch, findStoredWalletRegistrationNearEd25519YaoBranch, replaceStoredWalletRegistrationSignerBranch, storedRegistrationAuthoritiesMatch, verifiedRegistrationCeremonyAuthority } from "../../../../core/RegistrationCeremonyStore.js";
@@ -51,7 +53,9 @@ import { commitWalletRegistration } from "./d1WalletRegistrationInitialSession.j
51
53
  import { storedRespondEd25519DeferredWork, walletRegistrationRespondResult } from "./d1WalletRegistrationSetup.js";
52
54
  import { executeD1WalletRegistrationSetup } from "./d1WalletRegistrationSetupExecution.js";
53
55
  //#region src/router/cloudflare/d1/registration/d1WalletRegistrationService.ts
56
+ /** The admission request of a NEAR branch, over the identity that setup minted. */
54
57
  async function buildRespondEd25519AdmissionRequest(input) {
58
+ const mint = requireRegistrationEd25519YaoMint(input.ceremony);
55
59
  return buildRouterAbEd25519YaoProductAdmissionRequestV1({
56
60
  registrationCeremonyId: input.ceremony.registrationCeremonyId,
57
61
  walletId: input.ceremony.intent.walletId,
@@ -60,12 +64,16 @@ async function buildRespondEd25519AdmissionRequest(input) {
60
64
  authorityScope: registrationEd25519AuthorityScopeFromAuthority(input.authority),
61
65
  branch: input.branch,
62
66
  signingWorkerId: input.signingWorkerId,
63
- materialActivation: createRouterAbEd25519YaoMaterialActivationRefV1({
64
- walletId: input.ceremony.intent.walletId,
65
- signingWorkerId: input.signingWorkerId
66
- })
67
+ materialActivation: mint.materialActivation
67
68
  });
68
69
  }
70
+ function ignoreRespondExecutionFailure() {
71
+ return null;
72
+ }
73
+ function requireRegistrationEd25519YaoMint(ceremony) {
74
+ if (!ceremony.ed25519YaoMint) throw new Error("Registration ceremony has no NEAR branch identity");
75
+ return ceremony.ed25519YaoMint;
76
+ }
69
77
  function sameEd25519ParticipantIds(left, right) {
70
78
  return left[0] === right[0] && left[1] === right[1];
71
79
  }
@@ -122,24 +130,6 @@ function linkedEcdsaProjectionMatchesSigner(projection, signer) {
122
130
  function sameLinkedEcdsaResolvedSignerIdentity(left, right) {
123
131
  return left.walletId === right.walletId && left.walletKey.keyHandle === right.walletKey.keyHandle && left.walletKey.relayerKeyId === right.walletKey.relayerKeyId && left.walletKey.participantIds[0] === right.walletKey.participantIds[0] && left.walletKey.participantIds[1] === right.walletKey.participantIds[1] && sameRouterAbEcdsaDerivationPublicCapabilityV1(left.walletKey.publicCapability, right.walletKey.publicCapability) && sameWalletRuntimePolicyScope(left.runtimePolicyScope, right.runtimePolicyScope);
124
132
  }
125
- async function ed25519ExportIdentityFromActiveCapability(descriptor) {
126
- return {
127
- scope: {
128
- lifecycle_id: descriptor.lifecycle.lifecycleId,
129
- root_share_epoch: descriptor.lifecycle.rootShareEpoch,
130
- account_id: descriptor.lifecycle.accountId,
131
- threshold_session_id: descriptor.lifecycle.thresholdSessionId,
132
- signer_set_id: descriptor.lifecycle.signerSetId,
133
- signing_worker_id: descriptor.lifecycle.signingWorkerId,
134
- material_activation: descriptor.materialActivation
135
- },
136
- application_binding: descriptor.applicationBinding,
137
- participant_ids: descriptor.participantIds,
138
- registered_public_key: descriptor.registeredPublicKey,
139
- state_epoch: descriptor.stateEpoch,
140
- runtime_policy_binding: await deriveRouterAbEd25519YaoRuntimePolicyBindingV1(descriptor.runtimePolicyScope)
141
- };
142
- }
143
133
  async function ed25519ExportIdentityFromPersistedCapability(capability) {
144
134
  const binding = capability.activationResult.binding;
145
135
  return {
@@ -939,45 +929,12 @@ var CloudflareD1WalletRegistrationService = class {
939
929
  exportIdentity: await ed25519ExportIdentityFromLinkedProjection(projection, active.capability)
940
930
  };
941
931
  }
942
- const lookup = {
943
- kind: "router_ab_ed25519_yao_active_capability_lookup_v1",
944
- walletId: input.walletId,
945
- nearEd25519SigningKeyId: signer.nearEd25519SigningKeyId,
946
- signerSlot: signer.signerSlot,
947
- signingWorkerId: signer.signingWorkerId,
948
- participantIds: signer.participantIds
949
- };
950
- const active = input.signerRead?.resolveActiveCapability(lookup) ?? await yaoRuntime.resolveActiveCapability(lookup);
951
- if (!active.ok) {
952
- if (active.code === "unknown_capability") {
953
- if (!sameRouterAbMpcMaterialActivationRef(signer.activeYaoCapability.activationResult.binding.material_activation, input.materialActivation)) return {
954
- ok: false,
955
- code: "not_found",
956
- message: "Ed25519 material activation does not match the persisted capability"
957
- };
958
- return await activeEd25519MaterialFromPersistedSigner(signer);
959
- }
960
- return {
961
- ok: false,
962
- code: "internal",
963
- message: active.message
964
- };
965
- }
966
- if (!sameRouterAbMpcMaterialActivationRef(active.capability.materialActivation, input.materialActivation)) return {
932
+ if (!sameRouterAbMpcMaterialActivationRef(signer.activeYaoCapability.activationResult.binding.material_activation, input.materialActivation)) return {
967
933
  ok: false,
968
934
  code: "not_found",
969
- message: "Ed25519 material activation does not match the active capability"
970
- };
971
- return {
972
- ok: true,
973
- materialActivation: active.capability.materialActivation,
974
- nearAccountId: active.capability.nearAccountId,
975
- signerSlot: signer.signerSlot,
976
- signingWorkerId: signer.signingWorkerId,
977
- participantIds: signer.participantIds,
978
- runtimePolicyScope: active.capability.runtimePolicyScope,
979
- exportIdentity: await ed25519ExportIdentityFromActiveCapability(active.capability)
935
+ message: "Ed25519 material activation does not match the persisted capability"
980
936
  };
937
+ return await activeEd25519MaterialFromPersistedSigner(signer);
981
938
  } catch (error) {
982
939
  return {
983
940
  ok: false,
@@ -1588,6 +1545,7 @@ var CloudflareD1WalletRegistrationService = class {
1588
1545
  reservation: this.registrationAuthority,
1589
1546
  store: this.getRegistrationCeremonyIntentStore(),
1590
1547
  ecdsaStrictRegistration: this.ecdsaStrictRegistration,
1548
+ ed25519Yao: this.getEd25519YaoProductRegistration(),
1591
1549
  startRegistrationWallets: this.startRegistrationWallets
1592
1550
  });
1593
1551
  }
@@ -1768,8 +1726,16 @@ var CloudflareD1WalletRegistrationService = class {
1768
1726
  startedDispatchRoot,
1769
1727
  expectedOrigin,
1770
1728
  waitUntil,
1729
+ ed25519Execution: input.ed25519Execution ?? null,
1730
+ traceContext: traceContext ?? null,
1731
+ serverTiming,
1771
1732
  ...input.userAgent ? { userAgent: input.userAgent } : {}
1772
1733
  });
1734
+ if (input.ed25519Execution) return {
1735
+ ok: false,
1736
+ code: "invalid_body",
1737
+ message: "only an Ed25519-only respond carries its Yao execution"
1738
+ };
1773
1739
  if (!ecdsaBranch) return {
1774
1740
  ok: false,
1775
1741
  code: "invalid_state",
@@ -2641,7 +2607,7 @@ var CloudflareD1WalletRegistrationService = class {
2641
2607
  }, stored ? null : (bound) => ceremonyStore.prepareEcdsaClaimCommit({
2642
2608
  expected: input.snapshot,
2643
2609
  next: authorizedCeremony(bound)
2644
- }), input.startedDispatchRoot);
2610
+ }), input.startedDispatchRoot, requireRegistrationEd25519YaoMint(ceremony).sessionId);
2645
2611
  if (!admitted.ok) return {
2646
2612
  ok: false,
2647
2613
  code: admitted.code,
@@ -2661,14 +2627,28 @@ var CloudflareD1WalletRegistrationService = class {
2661
2627
  reason: errorMessage(error)
2662
2628
  });
2663
2629
  }));
2630
+ const admission = {
2631
+ admissionRequest: admitted.admissionRequest,
2632
+ admissionReceipt: admitted.value
2633
+ };
2634
+ const execution = input.ed25519Execution ? await runtime.executeAdmittedRegistration({
2635
+ request: input.ed25519Execution,
2636
+ credential: input.registrationBearerToken,
2637
+ trace: input.traceContext ?? createRouterAbTraceContextV1()
2638
+ }).catch(ignoreRespondExecutionFailure) : null;
2639
+ if (execution) input.serverTiming.push(...routerAbEd25519YaoRegistrationExecutionTimingEntriesV1(execution.timing));
2640
+ const executed = execution?.result ?? null;
2664
2641
  return {
2665
2642
  ok: true,
2666
2643
  registrationCeremonyId: ceremony.registrationCeremonyId,
2667
2644
  kind: "near_ed25519",
2668
- ed25519: {
2645
+ ed25519: executed?.ok ? {
2646
+ status: "executed",
2647
+ ...admission,
2648
+ activationResult: executed.value
2649
+ } : {
2669
2650
  status: "admitted",
2670
- admissionRequest: admitted.admissionRequest,
2671
- admissionReceipt: admitted.value
2651
+ ...admission
2672
2652
  }
2673
2653
  };
2674
2654
  }
@@ -2696,14 +2676,14 @@ var CloudflareD1WalletRegistrationService = class {
2696
2676
  authority: input.authority,
2697
2677
  signingWorkerId: yaoRuntime.signingWorkerId
2698
2678
  });
2699
- const admitted = await yaoRuntime.bindVerifiedIntent({
2679
+ const admitted = await yaoRuntime.bindAndAdmitVerifiedRegistration({
2700
2680
  kind: "verified_registration_intent",
2701
2681
  ownershipGeneration: input.ownershipGeneration,
2702
2682
  registrationIntentGrant: registrationIntentGrantFromString(input.registrationBearerToken),
2703
2683
  intent: input.ceremony.intent,
2704
2684
  admissionRequest,
2705
2685
  expiresAtMs: input.ceremony.expiresAtMs
2706
- });
2686
+ }, null, null, requireRegistrationEd25519YaoMint(input.ceremony).sessionId);
2707
2687
  if (!admitted.ok) return {
2708
2688
  ok: false,
2709
2689
  code: admitted.code,
@@ -1,10 +1,12 @@
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 { buildRouterAbEd25519YaoProductAdmissionRequestV1, mintRouterAbEd25519YaoRegistrationIdentityV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
4
5
  import { buildStoredWalletRegistrationEvmFamilyEcdsaPreparedBranch, findStoredWalletRegistrationEvmFamilyEcdsaBranch } from "../../../../core/RegistrationCeremonyStore.js";
5
6
  import { routerAbEcdsaStrictRegistrationFactsBindingJson } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
6
7
  import { buildRegistrationIntent, inferRuntimePolicyScopeFromSigningRoot } from "./d1RegistrationCeremonyRecords.js";
7
- import { errorMessage, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, resolveRegistrationPreparedContextFromPlan } from "./d1RegistrationSetupSupport.js";
8
+ import { isTransientD1Error } from "../../../../storage/d1Retry.js";
9
+ import { errorMessage, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan } from "./d1RegistrationSetupSupport.js";
8
10
  import { buildWalletRegistrationSetupSignature, normalizeWalletRegistrationSetupRequest, walletRegistrationSetupError, walletRegistrationSetupExpiresAtMs, walletRegistrationSetupIntentDigest } from "./d1WalletRegistrationSetup.js";
9
11
  import { buildD1EvmFamilyEcdsaRegistrationPrepare } from "./d1EvmFamilyEcdsaRegistrationBranch.js";
10
12
  //#region src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.ts
@@ -21,17 +23,48 @@ async function executeD1WalletRegistrationSetup(input, dependencies) {
21
23
  const expiresAtMs = walletRegistrationSetupExpiresAtMs(reservation.reservedAtMs);
22
24
  if (Date.now() >= expiresAtMs) return walletRegistrationSetupError("registration_expired", "Registration setup has expired");
23
25
  const [startup, setup] = await Promise.allSettled([dependencies.startRegistrationWallets?.({
26
+ kind: "objects",
24
27
  walletId: wallet.walletId,
25
28
  ownershipGeneration: admitted.ownershipGeneration
26
29
  }), completeReservedRegistrationSetup(input, dependencies, admitted, normalized, expiresAtMs)]);
27
30
  if (setup.status === "rejected") throw setup.reason;
28
31
  if (!setup.value.ok) return setup.value;
29
32
  if (startup.status === "rejected") throw startup.reason;
33
+ if (dependencies.startRegistrationWallets) try {
34
+ const preparation = await describeCommittedSetupPair(setup.value, dependencies);
35
+ if (preparation.status === "described") await dependencies.startRegistrationWallets({
36
+ kind: "pair",
37
+ walletId: wallet.walletId,
38
+ ownershipGeneration: admitted.ownershipGeneration,
39
+ admissionRequest: preparation.admissionRequest,
40
+ admissionReceipt: preparation.admissionReceipt,
41
+ expiresAtMs
42
+ });
43
+ } catch {
44
+ console.warn("[wallet-registration] pair preparation unavailable");
45
+ }
30
46
  return setup.value;
31
47
  } catch (error) {
32
- return walletRegistrationSetupError("internal", errorMessage(error) || "Failed to set up wallet registration");
48
+ return walletRegistrationSetupError(isTransientD1Error(error) ? "storage_unavailable" : "internal", errorMessage(error) || "Failed to set up wallet registration");
49
+ }
50
+ }
51
+ async function describeCommittedSetupPair(response, dependencies) {
52
+ switch (response.kind) {
53
+ case "near_ed25519": return response.ed25519;
54
+ case "evm_family_ecdsa": return { status: "after_proof" };
55
+ case "near_ed25519_and_evm_family_ecdsa": {
56
+ const ceremony = await dependencies.store.getSetupCeremony(response.registrationCeremonyId);
57
+ if (!ceremony) throw new Error("Committed mixed registration ceremony is missing");
58
+ const branches = registrationSignerBranchesFromPlan(ceremony.signerPlan);
59
+ if (!branches.nearEd25519) throw new Error("Mixed registration has no NEAR branch");
60
+ return describeSetupEd25519Admission(dependencies.ed25519Yao, ceremony, branches.nearEd25519);
61
+ }
62
+ default: return assertNeverSetupResponse(response);
33
63
  }
34
64
  }
65
+ function assertNeverSetupResponse(value) {
66
+ throw new Error(`Unexpected registration setup response: ${String(value)}`);
67
+ }
35
68
  async function completeReservedRegistrationSetup(input, dependencies, admitted, normalized, expiresAtMs) {
36
69
  const reservation = admitted.reservation;
37
70
  const wallet = { walletId: reservation.walletId };
@@ -61,12 +94,13 @@ async function completeReservedRegistrationSetup(input, dependencies, admitted,
61
94
  if (existing) {
62
95
  if (existing.digestB64u !== digestB64u || existing.expectedOrigin !== input.expectedOrigin || existing.foundingWalletAuthorityId !== reservation.walletAuthorityId || existing.foundingDeviceId !== reservation.deviceId || existing.foundingWalletAuthMethodId !== reservation.walletAuthMethodId || existing.expiresAtMs !== expiresAtMs) return walletRegistrationSetupError("reservation_conflict", "Registration setup conflicts with its reservation");
63
96
  if (admitted.lifecycle === "reserved") await dependencies.store.reserveSetupCeremony(existing, admitted.ownershipGeneration);
64
- return await setupResponseFromCeremony(input, dependencies.home, existing);
97
+ return await setupResponseFromCeremony(input, dependencies, existing);
65
98
  }
66
99
  if (admitted.lifecycle === "established") return walletRegistrationSetupError("registration_closed", "Completed registration setup snapshot is unavailable");
67
100
  const ecdsaBranch = branches.value.evmFamilyEcdsa;
68
101
  const nearEd25519Branch = branches.value.nearEd25519;
69
102
  if (!ecdsaBranch && !nearEd25519Branch) return walletRegistrationSetupError("invalid_body", "registration signer branch is required");
103
+ if (nearEd25519Branch && !dependencies.ed25519Yao) return walletRegistrationSetupError("not_configured", "Ed25519 Yao registration is unavailable");
70
104
  const preparedContext = resolveRegistrationPreparedContextFromPlan({
71
105
  signerPlan: branches.value.plan,
72
106
  runtimePolicyScope,
@@ -119,15 +153,54 @@ async function completeReservedRegistrationSetup(input, dependencies, admitted,
119
153
  kind: "awaiting_proof",
120
154
  authMethod: normalized.authMethod
121
155
  },
156
+ ed25519YaoMint: nearEd25519Branch && dependencies.ed25519Yao ? mintRouterAbEd25519YaoRegistrationIdentityV1({
157
+ walletId: wallet.walletId,
158
+ signingWorkerId: dependencies.ed25519Yao.signingWorkerId
159
+ }) : null,
122
160
  signerState: {
123
161
  kind: "signer_set_registration",
124
162
  branches: storedBranches
125
163
  }
126
164
  };
127
- const stored = await dependencies.store.reserveSetupCeremony(ceremony, admitted.ownershipGeneration);
128
- return await setupResponseFromCeremony(input, dependencies.home, stored);
165
+ return await setupResponseFromCeremony(input, dependencies, await dependencies.store.reserveSetupCeremony(ceremony, admitted.ownershipGeneration));
166
+ }
167
+ /**
168
+ * The admission that respond will issue for a passkey plan with a NEAR branch.
169
+ * It follows from the stored ceremony alone, so a setup retry describes the
170
+ * same admission. A failure to describe it withholds the description and
171
+ * nothing else: respond then issues the admission as its first word on it.
172
+ */
173
+ async function describeSetupEd25519Admission(ed25519Yao, ceremony, branch) {
174
+ const authMethod = ceremony.intent.authMethod;
175
+ const mint = ceremony.ed25519YaoMint;
176
+ const signingRootId = normalizeOptionalTrimmedString(ceremony.signingRootId);
177
+ const signingRootVersion = normalizeOptionalTrimmedString(ceremony.signingRootVersion);
178
+ if (authMethod.kind !== "passkey" || !ed25519Yao || !mint || !signingRootId || !signingRootVersion) return { status: "after_proof" };
179
+ const admissionRequest = await buildRouterAbEd25519YaoProductAdmissionRequestV1({
180
+ registrationCeremonyId: ceremony.registrationCeremonyId,
181
+ walletId: ceremony.intent.walletId,
182
+ signingRootId,
183
+ signingRootVersion,
184
+ authorityScope: {
185
+ kind: "passkey",
186
+ rpId: authMethod.rpId
187
+ },
188
+ branch,
189
+ signingWorkerId: ed25519Yao.signingWorkerId,
190
+ materialActivation: mint.materialActivation
191
+ });
192
+ const described = await ed25519Yao.describeRegistrationAdmission(admissionRequest, mint.sessionId).catch(withholdEd25519AdmissionDescription);
193
+ return described?.ok ? {
194
+ status: "described",
195
+ admissionRequest,
196
+ admissionReceipt: described.value
197
+ } : { status: "after_proof" };
129
198
  }
130
- async function setupResponseFromCeremony(input, home, ceremony) {
199
+ function withholdEd25519AdmissionDescription() {
200
+ return null;
201
+ }
202
+ async function setupResponseFromCeremony(input, dependencies, ceremony) {
203
+ const home = dependencies.home;
131
204
  const { signedSetup } = await buildWalletRegistrationSetupSignature({
132
205
  signer: input.signer,
133
206
  ceremony,
@@ -145,10 +218,14 @@ async function setupResponseFromCeremony(input, home, ceremony) {
145
218
  intent: ceremony.intent,
146
219
  signedSetup
147
220
  };
148
- if (!branches.value.evmFamilyEcdsa) return {
149
- ...success,
150
- kind: "near_ed25519"
151
- };
221
+ if (!branches.value.evmFamilyEcdsa) {
222
+ if (!branches.value.nearEd25519) return walletRegistrationSetupError("invalid_state", "Registration setup has no signer");
223
+ return {
224
+ ...success,
225
+ kind: "near_ed25519",
226
+ ed25519: await describeSetupEd25519Admission(dependencies.ed25519Yao, ceremony, branches.value.nearEd25519)
227
+ };
228
+ }
152
229
  if (ceremony.signerState.kind !== "signer_set_registration") return walletRegistrationSetupError("invalid_state", "Registration setup signer state is invalid");
153
230
  const ecdsa = findStoredWalletRegistrationEvmFamilyEcdsaBranch(ceremony.signerState);
154
231
  if (!ecdsa || ecdsa.kind !== "evm_family_ecdsa_prepared") return walletRegistrationSetupError("invalid_state", "Registration setup snapshot is not prepared");
@@ -14,9 +14,9 @@ import { buildWalletEcdsaSignerActivationV1, extendEd25519WalletAuthorityWithEcd
14
14
  import { registrationPreparationIdFromString } from "../../../../core/types.js";
15
15
  import { addSignerIntentGrantFromString, computeAddSignerIntentDigestB64u, sameAddSignerIntentV1 } from "../../../../shared-ts/src/utils/registrationIntent.js";
16
16
  import { buildTenantRootIdentityFromAuthenticatedDeploymentV1 } from "../../../../shared-ts/src/tenant-root/tenantRootIdentity.js";
17
+ import { WalletAuthorityCommitConflictError } from "./d1WalletAuthorityStore.js";
17
18
  import { buildRouterAbEd25519YaoRegistrationCapabilityRecordV1 } from "../../../domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js";
18
19
  import { buildRouterAbEd25519YaoAddSignerAdmissionRequestV1, createRouterAbEd25519YaoMaterialActivationRefV1 } from "../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
19
- import { WalletAuthorityCommitConflictError } from "./d1WalletAuthorityStore.js";
20
20
  import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV1, runRouterAbEd25519YaoRegistrationSideEffectV1, throwIfRouterAbEd25519YaoRetryableSideEffectFailureV1 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
21
21
  import { buildYaoEd25519WalletSignerRecord, ed25519NearPublicKeyFromBytes, implicitNearAccountIdFromEd25519PublicKeyBytes } from "../ed25519Yao/d1Ed25519YaoWalletSigner.js";
22
22
  import { routerAbEcdsaStrictRegistrationRequestMatchesFacts } from "../../../domains/ecdsa/routerAbEcdsaStrictRegistration.js";
@@ -3,6 +3,7 @@ import { createRouterAbNormalSigningAdmissionAdapter } from "../../domains/signi
3
3
  import { createCloudflareD1RouterAbNormalSigningAdmissionStore } from "../d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js";
4
4
  import { WALLET_CONSOLE_SERVICE_ORIGIN_V1 } from "./walletConsoleOps.js";
5
5
  import { createWalletConsoleOpsClient } from "./walletConsoleOpsClient.js";
6
+ import { consumeRegistrationSetupRateLimit } from "../d1/registration/d1RegistrationSetupRateLimit.js";
6
7
  import { createCloudflareRouter } from "./createCloudflareRouter.js";
7
8
  //#region src/router/cloudflare/runtime/walletGateway.ts
8
9
  const WALLET_CONSOLE_API_WALLET_DETAIL_PREFIX_V1 = "/v1/wallets/";
@@ -137,6 +138,7 @@ function createCloudflareWalletGatewayRouterV1(input) {
137
138
  apiKeyAuth: consoleOps.apiKeyAuth,
138
139
  publishableKeyAuth: consoleOps.publishableKeyAuth,
139
140
  registrationContext: input.registrationContext ?? consoleOps.registrationContext,
141
+ registrationSetupRateLimit: consumeRegistrationSetupRateLimit.bind(void 0, input.signerDatabase, input.signerStorageNamespace),
140
142
  apiKeyUsageMeter: consoleOps.usageMeter,
141
143
  orgProjectEnv: consoleOps.projectEnvironments,
142
144
  routerAbNormalSigningAdmission: createRouterAbNormalSigningAdmissionAdapter(admissionStore),
@@ -20,25 +20,25 @@ import { readEnvironmentCsv, readEnvironmentString, requireEnvironmentString } f
20
20
  import { createStaticWalletConsoleBindingV1, handleStaticWalletConsoleRequestV1, parseStaticWalletConsoleBindingConfigV1 } from "./cloudflare/runtime/staticWalletConsoleBinding.js";
21
21
  import { CloudflareD1WebAuthnStore } from "./cloudflare/d1/webauthn/d1WebAuthnStore.js";
22
22
  import { CloudflareD1WebAuthnAuthService } from "./cloudflare/d1/webauthn/d1WebAuthnAuthService.js";
23
+ import { CloudflareD1AuthorizationStore } from "./cloudflare/d1/authorization/d1AuthorizationStore.js";
24
+ import { CloudflareD1VaultProxyStore } from "./cloudflare/d1/authorization/d1VaultProxyStore.js";
23
25
  import { InMemoryRouterAbEd25519YaoRegistrationService, createRouterAbEd25519YaoRegistrationModule } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js";
24
26
  import { InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js";
25
27
  import { buildRouterAbEd25519YaoProductAdmissionRequestV1, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
26
- import { createRouterAbEd25519YaoCeremonyStateStoreV1, encodeRouterAbEd25519YaoProductRegistrationStateV1, parseRouterAbEd25519YaoCeremonyKeyV1, parseRouterAbEd25519YaoProductRegistrationStateJsonV1, resolveRouterAbEd25519YaoCeremonyKeyFromRequestV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js";
27
- import { mergeRouterAbEd25519YaoProductRegistrationStatePartitionV1, partitionRouterAbEd25519YaoProductRegistrationStateV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js";
28
- import { ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, encodeRouterAbEd25519YaoProductRegistrationPartitionRecordV1, parseRouterAbEd25519YaoProductRegistrationPartitionRecordV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js";
29
- import { CloudflareD1AuthorizationStore } from "./cloudflare/d1/authorization/d1AuthorizationStore.js";
30
- import { CloudflareD1VaultProxyStore } from "./cloudflare/d1/authorization/d1VaultProxyStore.js";
31
28
  import { RouterAbEd25519YaoHttpRegistrationBackend, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv } from "./domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js";
32
29
  import { StaticCloudflareTenantStorageRouteResolver, createCloudflareTenantStorageRoute, createSignerD1DoStorageTarget, createStaticCloudflareTenantStorageRouteResolver, createStaticCloudflareTenantStorageRouteResolverFromBindings } from "../storage/tenantRoute.js";
33
30
  import { createInMemoryRouterApiRuntimeSnapshotConsumer, validateRuntimeSnapshotExpectation } from "./framework/runtimeSnapshotConsumer.js";
34
31
  import { createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker } from "./cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js";
35
32
  import { CloudflareDurableObjectVersionedJsonRecordStore, CloudflareVersionedJsonRecordStoreError, createCloudflareDurableObjectVersionedJsonRecordStore } from "./cloudflare/durableObjects/versionedJsonRecordStore.js";
36
33
  import { CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, createCloudflareD1VersionedJsonRecordStore } from "./cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js";
34
+ import { createRouterAbEd25519YaoCeremonyStateStoreV1, encodeRouterAbEd25519YaoProductRegistrationStateV1, parseRouterAbEd25519YaoCeremonyKeyV1, parseRouterAbEd25519YaoProductRegistrationStateJsonV1, resolveRouterAbEd25519YaoCeremonyKeyFromRequestV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js";
35
+ import { mergeRouterAbEd25519YaoProductRegistrationStatePartitionV1, partitionRouterAbEd25519YaoProductRegistrationStateV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js";
36
+ import { ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, encodeRouterAbEd25519YaoProductRegistrationPartitionRecordV1, parseRouterAbEd25519YaoProductRegistrationPartitionRecordV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js";
37
37
  import { createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1 } from "./cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js";
38
38
  import { runRouterAbEd25519YaoProductRegistrationRequestScopedV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.js";
39
+ import { runRouterAbEd25519YaoRegistrationTwoPhaseV1 } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js";
40
+ import { handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1 } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js";
39
41
  import { createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js";
40
42
  import { runRouterAbEd25519YaoRegistrationSideEffectV1 } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
41
- import { runRouterAbEd25519YaoRegistrationTwoPhaseV1 } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js";
42
43
  import { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createUnavailableOrdinaryInactiveSignerMaterialDeactivationPortV1, createUnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1 } from "./cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js";
43
- import { handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1 } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js";
44
44
  export { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareD1AuthorizationStore, CloudflareD1RouterAbNormalSigningAdmissionStore, CloudflareD1VaultProxyStore, CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, CloudflareD1WebAuthnAuthService, CloudflareD1WebAuthnStore, CloudflareDurableObjectVersionedJsonRecordStore, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, CloudflareVersionedJsonRecordStoreError, DEFAULT_WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_V1, DEFAULT_WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_V1, InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter, InMemoryRouterAbEd25519YaoRegistrationService, InMemoryRouterAbNormalSigningAdmissionStore, ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, RouterAbEd25519YaoHttpRegistrationBackend, StaticCloudflareTenantStorageRouteResolver, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, WALLET_CONSOLE_API_WALLET_DETAIL_PREFIX_V1, WALLET_CONSOLE_OPS_BASE_PATH_V1, WALLET_CONSOLE_OP_PATHS_V1, WALLET_CONSOLE_SERVICE_ORIGIN_V1, WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_ID_V1, WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_ID_V1, WALLET_CONTROL_AUTH_MARKER_V1, WALLET_CONTROL_BASE_PATH_V1, WALLET_CONTROL_SERVICE_ORIGIN_V1, WALLET_RUNTIME_OPS_BASE_PATH_V1, WALLET_RUNTIME_OP_PATHS_V1, WALLET_RUNTIME_SERVICE_ORIGIN_V1, buildRouterAbEd25519YaoProductAdmissionRequestV1, coerceRouterLogger, createCloudflareD1RouterAbNormalSigningAdmissionStore, createCloudflareD1VersionedJsonRecordStore, createCloudflareDurableObjectVersionedJsonRecordStore, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createCloudflareRouter, createCloudflareTenantStorageRoute, createCloudflareWalletGatewayRouterV1, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterApiRuntimeSnapshotConsumer, createRouterAbEd25519YaoCeremonyStateStoreV1, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1, createRouterAbEd25519YaoRegistrationModule, createRouterAbNormalSigningAdmissionAdapter, createRouterApiModule, createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker, createSignerD1DoStorageTarget, createStaticCloudflareTenantStorageRouteResolver, createStaticCloudflareTenantStorageRouteResolverFromBindings, createStaticWalletConsoleBindingV1, createUnavailableOrdinaryInactiveSignerMaterialDeactivationPortV1, createUnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, createWalletConsoleOpsClient, createWalletConsoleRelayProxyExtensionV1, createWalletControlClientBindings, createWalletRuntimeOpsHandler, decodeWalletConsoleTenantRootActiveLineageRequestV1, decodeWalletConsoleTenantRootActiveLineageResponseV1, defineRoute, encodeRouterAbEd25519YaoProductRegistrationPartitionRecordV1, encodeRouterAbEd25519YaoProductRegistrationStateV1, extractBearerCredential, extractRouterApiEnvironmentId, getRouterApiRouteExtensionRoutes, handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1, handleStaticWalletConsoleRequestV1, handleWalletControlRequest, matchesRouteDefinitionRequest, mergeRouterAbEd25519YaoProductRegistrationStatePartitionV1, parseRouterAbEd25519YaoCeremonyKeyV1, parseRouterAbEd25519YaoProductRegistrationPartitionRecordV1, parseRouterAbEd25519YaoProductRegistrationStateJsonV1, parseRouterAbPublicKeysetV2, parseStaticWalletConsoleBindingConfigV1, parseWalletRegistrationContextResponse, parseWalletRuntimeExecuteSignedDelegateRequest, parseWalletRuntimeExecuteSignedDelegateResponse, parseWalletRuntimeExecuteSignedDelegateResult, parseWalletRuntimeRelayerAccount, parseWalletRuntimeWalletIdentitiesResult, parseWalletRuntimeWalletIdentityRequest, partitionRouterAbEd25519YaoProductRegistrationStateV1, randomTenantRootCreationGrantBytesV1, readEnvironmentCsv, readEnvironmentString, requireEnvironmentString, resolveRouterAbEd25519YaoCeremonyKeyFromRequestV1, resolveRuntimeTenantRootLineage, resolveSourceIpFromExpressRequest, resolveSourceIpFromFetchHeaders, runRouterAbEd25519YaoProductRegistrationRequestScopedV1, runRouterAbEd25519YaoRegistrationSideEffectV1, runRouterAbEd25519YaoRegistrationTwoPhaseV1, runRouterAbPrewarmScheduledV1, signTenantRootCreationGrantV1, tenantRootIdentityDigestB64uV1, validateRuntimeSnapshotExpectation, walletConsoleApiWalletGetRouteDefinitionV1, walletConsoleApiWalletListRouteDefinitionV1, walletConsoleApiWalletSearchRouteDefinitionV1, walletConsoleRelayRouteDefinitionsV1, walletConsoleSignedDelegateRouteDefinitionV1, walletConsoleSponsoredEvmCallRouteDefinitionV1 };