@seams/wallet-server 0.8.0 → 0.9.1

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 (369) hide show
  1. package/THIRD_PARTY_NOTICES.md +7 -1
  2. package/artifact-manifest.json +196 -41
  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 +2 -2
  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 +2 -2
  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 +2 -2
  20. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  21. package/cloudflare-router-ab/migrations/deriver-a/0019_wallet_object_addresses.sql +10 -0
  22. package/cloudflare-router-ab/migrations/deriver-b/0019_wallet_object_addresses.sql +10 -0
  23. package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +3 -117
  24. package/cloudflare-router-ab/wrangler.deriver-a.toml +0 -8
  25. package/cloudflare-router-ab/wrangler.deriver-b.toml +24 -8
  26. package/cloudflare-router-ab/wrangler.router.toml +0 -2
  27. package/cloudflare-router-ab/wrangler.signing-worker.toml +29 -0
  28. package/dist/esm/authorization/domain.js +3 -2
  29. package/dist/esm/authorization/ed25519WalletSessionAdmission.js +0 -0
  30. package/dist/esm/authorization/service.js +64 -36
  31. package/dist/esm/cloud-host.js +24 -19
  32. package/dist/esm/core/EmailOtpRecords.js +29 -6
  33. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +2 -0
  34. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +10 -0
  35. package/dist/esm/core/ThresholdService/routerAb/internalServiceHttp.js +1 -0
  36. package/dist/esm/core/ThresholdService/validation.js +2 -2
  37. package/dist/esm/core/authService/nearPrivateKeySigning.js +1 -1
  38. package/dist/esm/core/authService/webauthn.js +1 -1
  39. package/dist/esm/core/d1Ed25519SignerRead.js +55 -0
  40. package/dist/esm/core/d1WalletStore.js +14 -11
  41. package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +2 -2
  42. package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +1 -1
  43. package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +2 -2
  44. package/dist/esm/core/emailOtpD1Statements.js +1 -0
  45. package/dist/esm/core/nearRelayerAccountProvisioning.js +1 -1
  46. package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +4 -0
  47. package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +1 -1
  48. package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +1 -0
  49. package/dist/esm/hosted-wallet-gateway.js +93 -10
  50. package/dist/esm/localHostedWalletGatewayHandler.js +12 -9
  51. package/dist/esm/localIntendedYaoSigningFault.js +2 -30
  52. package/dist/esm/localRegistrationSetupAuthority.js +8 -1
  53. package/dist/esm/router/auth/commonRouterUtils.js +17 -10
  54. package/dist/esm/router/auth/routerApiCredentialAuth.js +26 -7
  55. package/dist/esm/router/auth/walletRegistrationContext.js +49 -0
  56. package/dist/esm/router/auth/webAuthnCredentialCodecs.js +1 -1
  57. package/dist/esm/router/cloudflare/d1/auth/d1AuthorizationAssembly.js +4 -3
  58. package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +2 -0
  59. package/dist/esm/router/cloudflare/d1/auth/d1EmailOtpRouteService.js +25 -0
  60. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +14 -6
  61. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +44 -40
  62. package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +17 -1
  63. package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +35 -5
  64. package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +258 -99
  65. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +31 -4
  66. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
  67. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +1 -1
  68. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +1 -1
  69. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +1 -1
  70. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.js +1 -1
  71. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +1 -1
  72. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +11 -2
  73. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +100 -10
  74. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoStateWriteFence.js +92 -0
  75. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1WalletCeremonyActivity.js +77 -0
  76. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +14 -8
  77. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +14 -8
  78. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +3 -1
  79. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +58 -38
  80. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +27 -20
  81. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +1 -0
  82. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -0
  83. package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +1 -1
  84. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +18 -7
  85. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +75 -14
  86. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +1 -1
  87. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +49 -29
  88. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSessionTransaction.js +28 -0
  89. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +11 -1
  90. package/dist/esm/router/cloudflare/d1/registration/d1WalletExecutionAuthority.js +168 -0
  91. package/dist/esm/router/cloudflare/d1/registration/d1WalletOperationStore.js +53 -0
  92. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +83 -42
  93. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.js +33 -0
  94. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.js +16 -0
  95. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationRead.js +58 -0
  96. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +439 -500
  97. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +1 -1
  98. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +104 -90
  99. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +78 -44
  100. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +11 -35
  101. package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +98 -39
  102. package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +12 -9
  103. package/dist/esm/router/cloudflare/d1/wallet/authorizationSnapshotLayout.js +168 -0
  104. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +1 -1
  105. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +15 -6
  106. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +3 -40
  107. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +54 -1
  108. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.js +157 -0
  109. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.js +56 -0
  110. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.js +238 -0
  111. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.js +287 -0
  112. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.js +295 -0
  113. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationApprovals.js +140 -0
  114. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.js +170 -0
  115. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationEmailOtp.js +60 -0
  116. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwner.js +33 -0
  117. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.js +74 -0
  118. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationPasskey.js +77 -0
  119. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationReadAccess.js +37 -0
  120. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationSessions.js +97 -0
  121. package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationWriteBlock.js +133 -0
  122. package/dist/esm/router/cloudflare/d1/walletObjectAddresses.js +47 -0
  123. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +1 -1
  124. package/dist/esm/router/cloudflare/runtime/routerAbServiceBindings.js +32 -1
  125. package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +20 -8
  126. package/dist/esm/router/cloudflare/runtime/walletAuthorizationRelocationRoutes.js +488 -0
  127. package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +1 -1
  128. package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +26 -6
  129. package/dist/esm/router/cloudflare/runtime/walletControlOps.js +3 -0
  130. package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
  131. package/dist/esm/router/cloudflare/runtime/walletObjectAddresses.js +105 -0
  132. package/dist/esm/router/cloudflare/runtime/walletPlacementRoutes.js +339 -0
  133. package/dist/esm/router/cloudflare/runtime/walletRelocationDeriver.js +244 -0
  134. package/dist/esm/router/cloudflare/runtime/walletRelocationEcdsa.js +212 -0
  135. package/dist/esm/router/cloudflare/runtime/walletRelocationEd25519.js +172 -0
  136. package/dist/esm/router/cloudflare/runtime/walletRelocationOps.js +183 -0
  137. package/dist/esm/router/cloudflare/runtime/walletRelocationPresign.js +185 -0
  138. package/dist/esm/router/cloudflare/runtime/walletRelocationSource.js +221 -0
  139. package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +30 -8
  140. package/dist/esm/router/cloudflare-adaptor.js +8 -8
  141. package/dist/esm/router/cloudflare.js +34115 -32240
  142. package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +35 -9
  143. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js +42 -0
  144. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +32 -6
  145. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +61 -1
  146. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +70 -3
  147. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +59 -87
  148. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +52 -22
  149. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +10 -7
  150. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +108 -78
  151. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +19 -5
  152. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +71 -22
  153. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +37 -25
  154. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +3 -3
  155. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +2 -1
  156. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +24 -3
  157. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +4 -3
  158. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +20 -7
  159. package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +7 -1
  160. package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +2 -2
  161. package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +1 -1
  162. package/dist/esm/router/domains/passkeyCustody/registrationCustodyOutcome.js +34 -18
  163. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.js +2 -2
  164. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +16 -6
  165. package/dist/esm/router/domains/signingOperations/authorizedOperationWire.js +73 -0
  166. package/dist/esm/router/domains/signingOperations/ecdsaSigningResponse.js +31 -0
  167. package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
  168. package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +2 -1
  169. package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +31 -121
  170. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +2 -93
  171. package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +1 -1
  172. package/dist/esm/router/domains/signingOperations/signingPrepareSession.js +33 -0
  173. package/dist/esm/router/domains/walletRegistration/registrationSessionSeal.js +121 -0
  174. package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +4 -4
  175. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +46 -157
  176. package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +1 -1
  177. package/dist/esm/router/express.js +764 -894
  178. package/dist/esm/router/framework/http.js +2 -1
  179. package/dist/esm/router/transport/fetch/createFetchRouter.js +2 -2
  180. package/dist/esm/router/transport/fetch/routes/auth.js +1 -1
  181. package/dist/esm/router/transport/fetch/routes/deviceLinking.js +3 -3
  182. package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +2 -2
  183. package/dist/esm/router/transport/fetch/routes/ed25519AuthorizedOperationRevalidation.js +65 -0
  184. package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +13 -3
  185. package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +3 -3
  186. package/dist/esm/router/transport/fetch/routes/sessions.js +3 -2
  187. package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +67 -130
  188. package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +76 -212
  189. package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +18 -41
  190. package/dist/esm/router/transport/fetch/routes/walletRegistration.js +6 -5
  191. package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +1 -1
  192. package/dist/esm/shared-ts/src/authorization/index.js +1 -1
  193. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +2 -2
  194. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +12 -2
  195. package/dist/esm/shared-ts/src/device-linking/digests.js +1 -1
  196. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +1 -1
  197. package/dist/esm/shared-ts/src/device-linking/index.js +1 -1
  198. package/dist/esm/shared-ts/src/device-linking/parsers.js +1 -1
  199. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +1 -1
  200. package/dist/esm/shared-ts/src/device-linking/wireFields.js +1 -1
  201. package/dist/esm/shared-ts/src/near/nearClient.js +1 -1
  202. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +2 -2
  203. package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +6 -1
  204. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +4 -2
  205. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -1
  206. package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +0 -27
  207. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +1 -1
  208. package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -1
  209. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  210. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +2 -1
  211. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +10 -0
  212. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +2 -1
  213. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +3 -1
  214. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +0 -9
  215. package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
  216. package/dist/types/wallet-server/src/authorization/domain.d.ts +17 -1
  217. package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +1 -0
  218. package/dist/types/wallet-server/src/authorization/ed25519WalletSessionAdmission.d.ts +35 -0
  219. package/dist/types/wallet-server/src/authorization/ed25519WalletSessionAdmission.typecheck.d.ts +2 -0
  220. package/dist/types/wallet-server/src/authorization/service.d.ts +43 -5
  221. package/dist/types/wallet-server/src/authorization/sessionRouting.d.ts +2 -0
  222. package/dist/types/wallet-server/src/cloud-host.d.ts +7 -3
  223. package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +2 -1
  224. package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +19 -5
  225. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +1 -0
  226. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +6 -0
  227. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +1 -0
  228. package/dist/types/wallet-server/src/core/d1Ed25519SignerRead.d.ts +17 -0
  229. package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +6 -0
  230. package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +1 -0
  231. package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +5 -1
  232. package/dist/types/wallet-server/src/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.d.ts +1 -0
  233. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +14 -48
  234. package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +4 -3
  235. package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +1 -16
  236. package/dist/types/wallet-server/src/localRegistrationSetupAuthority.d.ts +1 -1
  237. package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +7 -1
  238. package/dist/types/wallet-server/src/router/auth/routerApiCredentialAuth.d.ts +11 -3
  239. package/dist/types/wallet-server/src/router/auth/walletRegistrationContext.d.ts +8 -0
  240. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizationAssembly.d.ts +1 -1
  241. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1EmailOtpRouteService.d.ts +16 -0
  242. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +7 -4
  243. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +4 -1
  244. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/walletSessionCredentialReaders.d.ts +7 -1
  245. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +32 -1
  246. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +2 -0
  247. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +3 -1
  248. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts +1 -0
  249. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoStateWriteFence.d.ts +8 -0
  250. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1WalletCeremonyActivity.d.ts +15 -0
  251. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +6 -1
  252. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +1 -0
  253. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +4 -1
  254. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpCounters.typecheck.d.ts +2 -0
  255. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +6 -29
  256. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +21 -7
  257. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +17 -1
  258. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +32 -7
  259. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +16 -7
  260. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSessionTransaction.d.ts +13 -0
  261. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +7 -0
  262. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletExecutionAuthority.d.ts +41 -0
  263. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletOperationStore.d.ts +28 -0
  264. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +6 -9
  265. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.d.ts +17 -0
  266. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.d.ts +12 -0
  267. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationRead.d.ts +43 -0
  268. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +24 -45
  269. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +9 -4
  270. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +42 -14
  271. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -4
  272. package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +24 -1
  273. package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +10 -4
  274. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/authorizationSnapshotLayout.d.ts +21 -0
  275. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +3 -0
  276. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +3 -7
  277. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +8 -0
  278. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.d.ts +20 -0
  279. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.d.ts +12 -0
  280. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.d.ts +20 -0
  281. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.d.ts +29 -0
  282. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.d.ts +31 -0
  283. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationApprovals.d.ts +49 -0
  284. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.d.ts +47 -0
  285. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationEmailOtp.d.ts +25 -0
  286. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwner.d.ts +88 -0
  287. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.d.ts +37 -0
  288. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationPasskey.d.ts +12 -0
  289. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationReadAccess.d.ts +18 -0
  290. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationSessions.d.ts +23 -0
  291. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationWriteBlock.d.ts +16 -0
  292. package/dist/types/wallet-server/src/router/cloudflare/d1/walletObjectAddresses.d.ts +14 -0
  293. package/dist/types/wallet-server/src/router/cloudflare/runtime/routerAbServiceBindings.d.ts +13 -0
  294. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletAuthorizationRelocationRoutes.d.ts +21 -0
  295. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +1 -1
  296. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +3 -3
  297. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletControlOps.d.ts +2 -1
  298. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +3 -1
  299. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletObjectAddresses.d.ts +45 -0
  300. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletPlacementRoutes.d.ts +30 -0
  301. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationDeriver.d.ts +11 -0
  302. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationEcdsa.d.ts +7 -0
  303. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationEd25519.d.ts +7 -0
  304. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationOps.d.ts +11 -0
  305. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationPresign.d.ts +7 -0
  306. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationSource.d.ts +26 -0
  307. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +5 -0
  308. package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +3 -0
  309. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.d.ts +7 -0
  310. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +41 -7
  311. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +33 -2
  312. package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +12 -6
  313. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +17 -9
  314. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.d.ts +2 -0
  315. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +13 -14
  316. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +7 -3
  317. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +1 -0
  318. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +6 -1
  319. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +11 -0
  320. package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -3
  321. package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +10 -6
  322. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +10 -3
  323. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +12 -5
  324. package/dist/types/wallet-server/src/router/domains/signingOperations/authorizedOperationWire.d.ts +97 -0
  325. package/dist/types/wallet-server/src/router/domains/signingOperations/ecdsaSigningResponse.d.ts +13 -0
  326. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +9 -206
  327. package/dist/types/wallet-server/src/router/domains/signingOperations/signingPrepareSession.d.ts +23 -0
  328. package/dist/types/wallet-server/src/router/domains/walletRegistration/registrationSessionSeal.d.ts +36 -0
  329. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +7 -7
  330. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +80 -6
  331. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +15 -5
  332. package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +24 -0
  333. package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +21 -7
  334. package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +3 -12
  335. package/dist/types/wallet-server/src/router/transport/fetch/routes/ed25519AuthorizedOperationRevalidation.d.ts +37 -0
  336. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +1 -17
  337. package/dist/types/wallet-server/src/storage/tenantRoute.d.ts +1 -1
  338. package/migrations/d1-signer/0049_wallet_relocation_challenges.sql +16 -0
  339. package/migrations/d1-signer/0050_wallet_relocation_approvals.sql +14 -0
  340. package/migrations/d1-signer/0051_wallet_relocation_email_otp.sql +92 -0
  341. package/migrations/d1-signer/0052_wallet_relocation_session_fences.sql +91 -0
  342. package/migrations/d1-signer/0053_wallet_hosted_history_import.sql +164 -0
  343. package/migrations/d1-signer/0054_wallet_authorization_freeze.sql +318 -0
  344. package/migrations/d1-signer/0055_wallet_authorization_snapshot.sql +120 -0
  345. package/migrations/d1-signer/0056_wallet_authorization_history_import.sql +424 -0
  346. package/migrations/d1-signer/0057_wallet_authorization_intake.sql +44 -0
  347. package/migrations/d1-signer/0058_wallet_ceremony_activity.sql +59 -0
  348. package/migrations/d1-signer/0059_wallet_authorization_activation.sql +45 -0
  349. package/migrations/d1-signer/0060_wallet_authorization_cleanup.sql +153 -0
  350. package/migrations/d1-signer/0061_wallet_session_operation_settlement.sql +28 -0
  351. package/migrations/d1-signer/0062_wallet_step_up_operation_settlement.sql +204 -0
  352. package/migrations/d1-signer/0063_wallet_operation_history_transfer.sql +466 -0
  353. package/migrations/d1-signer/0064_wallet_execution_generations.sql +93 -0
  354. package/migrations/d1-signer/0065_wallet_operation_execution_generation.sql +37 -0
  355. package/migrations/d1-signer/0066_regional_deployment_admission.sql +59 -0
  356. package/migrations/d1-signer/0067_registration_completion_decision.sql +12 -0
  357. package/migrations/d1-signer/0068_registration_cancellation_write_fence.sql +24 -0
  358. package/migrations/d1-signer/0069_cancelled_registration_session_fence.sql +11 -0
  359. package/migrations/d1-signer/0070_wallet_passkey_relocation.sql +369 -0
  360. package/migrations/d1-signer/0071_regional_wallet_otp_counters.sql +98 -0
  361. package/migrations/d1-signer/0072_linked_device_relocation_history.sql +899 -0
  362. package/migrations/d1-signer/0073_wallet_recovery_relocation.sql +86 -0
  363. package/migrations/d1-signer/0074_email_otp_relocation.sql +158 -0
  364. package/migrations/d1-signer/0075_wallet_authorization_return.sql +107 -0
  365. package/migrations/d1-signer/0076_wallet_relocation_write_block.sql +406 -0
  366. package/migrations/d1-signer/0077_wallet_object_addresses.sql +24 -0
  367. package/package.json +1 -1
  368. package/src/README.md +23 -1
  369. package/cloudflare-router-ab/scripts/local-key-material.mjs +0 -29
@@ -68,7 +68,17 @@ function registrationSignerBranchesFromPlan(plan) {
68
68
  evmFamilyEcdsa: findRegistrationSignerPlanEvmFamilyEcdsaBranch(plan)
69
69
  };
70
70
  }
71
+ function recordRegistrationServerTiming(sink, name, startedAtMs) {
72
+ sink.push([name, Math.max(0, Date.now() - startedAtMs)]);
73
+ }
74
+ async function recordRegistrationPromiseTiming(args) {
75
+ try {
76
+ return await args.promise;
77
+ } finally {
78
+ recordRegistrationServerTiming(args.sink, args.name, args.startedAtMs);
79
+ }
80
+ }
71
81
  //#endregion
72
- export { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan, startD1RegistrationRouteTiming };
82
+ export { createD1RegistrationRouteTimingRecorder, errorMessage, finishD1RegistrationRouteTiming, recordRegistrationPromiseTiming, recordRegistrationServerTiming, registrationIntentSignerBranches, registrationPreparedContextEcdsaChainTargets, registrationSignerBranchesFromPlan, resolveRegistrationPreparedContextFromPlan, startD1RegistrationRouteTiming };
73
83
 
74
84
  //# sourceMappingURL=d1RegistrationSetupSupport.js.map
@@ -0,0 +1,168 @@
1
+ import { D1_BATCH_CAS_GUARD_SQL } from "../../../../storage/d1Sql.js";
2
+ import { prepareD1TenantStatement } from "../../../../core/d1TenantStore.js";
3
+ //#region src/router/cloudflare/d1/registration/d1WalletExecutionAuthority.ts
4
+ var D1WalletExecutionAuthority = class {
5
+ constructor(database, scope, registration) {
6
+ this.database = database;
7
+ this.scope = scope;
8
+ this.registration = registration;
9
+ }
10
+ reserve(input) {
11
+ return this.registration.reserve(input);
12
+ }
13
+ async admitHome(input) {
14
+ const result = await this.prepareHomeRead(input).all();
15
+ return this.admitHomeRead(input, result);
16
+ }
17
+ prepareHomeRead(input) {
18
+ return prepareD1TenantStatement(this.database, this.scope, `SELECT generation, state, registration_completion,
19
+ EXISTS (SELECT 1 FROM wallet_relocation_write_blocks block
20
+ WHERE block.namespace = ?1 AND block.org_id = ?2 AND block.project_id = ?3
21
+ AND block.env_id = ?4 AND block.wallet_id = ?5 AND block.source_generation = generation
22
+ AND block.state IN ('draining', 'checked')) AS relocation_blocked
23
+ FROM wallet_execution_generations
24
+ WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
25
+ AND wallet_id = ?5 AND origin = 'registration' AND origin_id = ?6`, [input.walletId, input.ceremonyId]);
26
+ }
27
+ async admitHomeRead(input, result) {
28
+ if (!result.success) throw new Error("Registration home D1 read failed");
29
+ const local = result.results?.[0];
30
+ if (local) {
31
+ if (typeof local.generation !== "number" || !Number.isSafeInteger(local.generation) || local.generation < 1 || local.relocation_blocked !== 0 && local.relocation_blocked !== 1) throw new Error("Registration execution identity is invalid");
32
+ switch (local.state) {
33
+ case "active":
34
+ if (local.relocation_blocked === 1) return {
35
+ ok: false,
36
+ code: "wallet_home_unavailable",
37
+ message: "Wallet execution is not active at this home"
38
+ };
39
+ return {
40
+ ok: true,
41
+ purpose: "ordinary",
42
+ ownershipGeneration: local.generation
43
+ };
44
+ case "registering":
45
+ if (local.registration_completion === "pending") return {
46
+ ok: true,
47
+ purpose: "registration",
48
+ ownershipGeneration: local.generation
49
+ };
50
+ if (local.registration_completion !== "established") throw new Error("Registration completion state is invalid");
51
+ return {
52
+ ok: true,
53
+ purpose: "registration",
54
+ ownershipGeneration: local.generation
55
+ };
56
+ case "retired":
57
+ if (local.registration_completion === "cancelled") {
58
+ const published = await this.cancel(input);
59
+ if (!published.ok) return published;
60
+ }
61
+ return {
62
+ ok: false,
63
+ code: "wallet_home_unavailable",
64
+ message: "Registration execution is retired at this home"
65
+ };
66
+ default: throw new Error("Registration execution state is invalid");
67
+ }
68
+ }
69
+ return {
70
+ ok: false,
71
+ code: "wallet_home_unavailable",
72
+ message: "Registration setup has no local execution identity"
73
+ };
74
+ }
75
+ async cancel(input) {
76
+ const completion = {
77
+ ...input,
78
+ outcome: "cancelled"
79
+ };
80
+ await this.fixCancellation(input);
81
+ const completed = await this.registration.complete(completion);
82
+ if (!completed.ok) return completed;
83
+ await this.database.batch(this.prepareState(input, "retired"));
84
+ return completed;
85
+ }
86
+ async publishEstablished(input) {
87
+ if (input.registration.state === "active") return {
88
+ ok: true,
89
+ activation: null
90
+ };
91
+ const completed = await this.registration.complete({
92
+ ceremonyId: input.registration.ceremonyId,
93
+ walletId: input.registration.walletId,
94
+ outcome: "established",
95
+ session: input.session
96
+ });
97
+ if (!completed.ok) return completed;
98
+ return {
99
+ ok: true,
100
+ activation: { statements: this.prepareState(input.registration, "active") }
101
+ };
102
+ }
103
+ async fixCancellation(input) {
104
+ await this.database.batch([prepareD1TenantStatement(this.database, this.scope, `UPDATE wallet_execution_generations
105
+ SET registration_completion = 'cancelled', state = 'retired'
106
+ WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
107
+ AND wallet_id = ?5 AND origin = 'registration' AND origin_id = ?6
108
+ AND registration_completion IN ('pending', 'cancelled')
109
+ AND state IN ('registering', 'retired')`, [input.walletId, input.ceremonyId]), this.database.prepare(D1_BATCH_CAS_GUARD_SQL)]);
110
+ }
111
+ /** The state update with its guard. The guard reads the row count of the update before it. */
112
+ prepareState(input, state) {
113
+ return [prepareD1TenantStatement(this.database, this.scope, `UPDATE wallet_execution_generations SET state = ?7
114
+ WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
115
+ AND wallet_id = ?5 AND origin = 'registration' AND origin_id = ?6
116
+ AND state IN ('registering', ?7)`, [
117
+ input.walletId,
118
+ input.ceremonyId,
119
+ state
120
+ ]), this.database.prepare(D1_BATCH_CAS_GUARD_SQL)];
121
+ }
122
+ async admitEstablishedHome(input) {
123
+ return admitD1EstablishedWalletHome(this.database, this.scope, input);
124
+ }
125
+ };
126
+ /** Records the authenticated reservation beside setup without reopening a retired home. */
127
+ function prepareD1RegistrationHomeReservation(database, scope, input) {
128
+ if (!Number.isSafeInteger(input.ownershipGeneration) || input.ownershipGeneration < 1) throw new Error("Registration execution generation is invalid");
129
+ const identity = [
130
+ input.walletId,
131
+ input.ownershipGeneration,
132
+ input.ceremonyId
133
+ ];
134
+ return [
135
+ prepareD1TenantStatement(database, scope, `INSERT INTO wallet_execution_generations
136
+ (namespace, org_id, project_id, env_id, wallet_id, generation, origin, origin_id, state)
137
+ VALUES (?1, ?2, ?3, ?4, ?5, ?6, 'registration', ?7, 'registering')
138
+ ON CONFLICT DO NOTHING`, identity),
139
+ prepareD1TenantStatement(database, scope, `UPDATE wallet_execution_generations SET state = state
140
+ WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
141
+ AND wallet_id = ?5 AND generation = ?6 AND origin = 'registration'
142
+ AND origin_id = ?7 AND state IN ('registering', 'active')`, identity),
143
+ database.prepare(D1_BATCH_CAS_GUARD_SQL)
144
+ ];
145
+ }
146
+ async function admitD1EstablishedWalletHome(database, scope, input) {
147
+ const row = await prepareD1TenantStatement(database, scope, `SELECT generation FROM wallet_execution_generations
148
+ WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
149
+ AND wallet_id = ?5 AND state = 'active'
150
+ AND NOT EXISTS (SELECT 1 FROM wallet_relocation_write_blocks block
151
+ WHERE block.namespace = ?1 AND block.org_id = ?2 AND block.project_id = ?3
152
+ AND block.env_id = ?4 AND block.wallet_id = ?5 AND block.source_generation = generation
153
+ AND block.state IN ('draining', 'checked'))`, [input.walletId]).first();
154
+ if (!row) return {
155
+ ok: false,
156
+ code: "wallet_home_unavailable",
157
+ message: "Wallet execution is not active at this home"
158
+ };
159
+ return {
160
+ ok: true,
161
+ purpose: "ordinary",
162
+ ownershipGeneration: row.generation
163
+ };
164
+ }
165
+ //#endregion
166
+ export { D1WalletExecutionAuthority, admitD1EstablishedWalletHome, prepareD1RegistrationHomeReservation };
167
+
168
+ //# sourceMappingURL=d1WalletExecutionAuthority.js.map
@@ -0,0 +1,53 @@
1
+ import { createCloudflareD1VersionedJsonRecordStore } from "../versionedJson/d1VersionedJsonRecordStore.js";
2
+ import { D1WalletCeremonyActivity } from "../ed25519Yao/d1WalletCeremonyActivity.js";
3
+ import { lifecycleWriteFenceStatements } from "../ed25519Yao/d1Ed25519YaoStateWriteFence.js";
4
+ //#region src/router/cloudflare/d1/registration/d1WalletOperationStore.ts
5
+ var D1WalletOperationStore = class {
6
+ constructor(options, walletId) {
7
+ this.options = options;
8
+ this.walletId = walletId;
9
+ this.records = createCloudflareD1VersionedJsonRecordStore(options);
10
+ this.activity = new D1WalletCeremonyActivity(options.database, options.scope);
11
+ }
12
+ read(key) {
13
+ return this.records.read(key);
14
+ }
15
+ prepareRead(key) {
16
+ return this.records.prepareRead(key);
17
+ }
18
+ parseReadResult(result) {
19
+ return this.records.parseReadResult(result);
20
+ }
21
+ listByKeyPrefix(key, options) {
22
+ return this.records.listByKeyPrefix(key, options);
23
+ }
24
+ put(key, value, expectedVersion) {
25
+ return this.commit(key, value, expectedVersion, []);
26
+ }
27
+ /** As `put`, with another store's write on this database in the same batch. */
28
+ putWithCompanion(key, value, expectedVersion, companionWrite) {
29
+ return this.commit(key, value, expectedVersion, companionWrite.statements);
30
+ }
31
+ async commit(key, value, expectedVersion, companionStatements) {
32
+ const walletId = this.walletId(value);
33
+ const result = await this.records.putManyWithAdditionalStatements([{
34
+ key,
35
+ value,
36
+ expectedVersion
37
+ }], [
38
+ ...lifecycleWriteFenceStatements(this.options, new Set([walletId])),
39
+ this.activity.project(this.records.storageKey(key), walletId, value.kind !== "router_ab_ed25519_yao_registration_side_effect_claim_v1"),
40
+ ...companionStatements
41
+ ]);
42
+ if (result.kind === "version_mismatch") return { kind: "version_mismatch" };
43
+ for (const entry of result.versions) if (entry.key === key) return {
44
+ kind: "stored",
45
+ version: entry.version
46
+ };
47
+ throw new Error("Wallet operation commit omitted its record version");
48
+ }
49
+ };
50
+ //#endregion
51
+ export { D1WalletOperationStore };
52
+
53
+ //# sourceMappingURL=d1WalletOperationStore.js.map
@@ -11,6 +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
16
  //#region src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.ts
15
17
  function requireScopeString(value, field) {
16
18
  const normalized = normalizeOptionalTrimmedString(value);
@@ -25,8 +27,10 @@ function normalizeScope(input) {
25
27
  envId: requireScopeString(input.envId, "envId")
26
28
  };
27
29
  }
28
- function assertCommitWalletIdentity(input) {
29
- if (input.authority.walletId !== input.wallet.walletId) throw new Error("Registration authority walletId does not match wallet record");
30
+ function assertCommitWalletIdentity(input, authority) {
31
+ const expectedKind = authority.kind === "passkey" ? "passkey_wallet_registration_commit_v1" : "email_otp_wallet_registration_commit_v1";
32
+ if (input.kind !== expectedKind) throw new Error("Registration commit does not match its reserved authority");
33
+ if (authority.walletId !== input.wallet.walletId) throw new Error("Registration authority walletId does not match wallet record");
30
34
  if (input.foundingAuthority) {
31
35
  if (!input.foundingAuthMethod) throw new Error("Founding wallet authority is missing its auth method");
32
36
  if (input.foundingAuthority.walletId !== input.wallet.walletId || input.foundingAuthMethod.walletId !== input.wallet.walletId || input.foundingAuthMethod.walletAuthorityId !== input.foundingAuthority.authorityId) throw new Error("Founding authority identities do not match wallet registration");
@@ -122,22 +126,29 @@ function canExtendFoundingAuthorityWithEd25519(existing, next) {
122
126
  async function prepareFoundingStatements(input) {
123
127
  if (!input.foundingAuthority) return [];
124
128
  const foundingAuthMethod = requireFoundingAuthMethod(input.foundingAuthMethod);
125
- const authorityRow = await input.database.prepare(`SELECT record_json
129
+ const authorityRead = input.database.prepare(`SELECT record_json
126
130
  FROM wallet_authorities
127
131
  WHERE namespace = ?
128
132
  AND org_id = ?
129
133
  AND project_id = ?
130
134
  AND env_id = ?
131
135
  AND authority_id = ?
132
- LIMIT 1`).bind(input.scope.namespace, input.scope.orgId, input.scope.projectId, input.scope.envId, String(input.foundingAuthority.authorityId)).first();
133
- const authMethodRow = await input.database.prepare(`SELECT record_json
136
+ LIMIT 1`).bind(input.scope.namespace, input.scope.orgId, input.scope.projectId, input.scope.envId, String(input.foundingAuthority.authorityId));
137
+ const authMethodRead = input.database.prepare(`SELECT record_json
134
138
  FROM wallet_auth_methods
135
139
  WHERE namespace = ?
136
140
  AND org_id = ?
137
141
  AND project_id = ?
138
142
  AND env_id = ?
139
143
  AND wallet_auth_method_id = ?
140
- LIMIT 1`).bind(input.scope.namespace, input.scope.orgId, input.scope.projectId, input.scope.envId, String(foundingAuthMethod.walletAuthMethodId)).first();
144
+ LIMIT 1`).bind(input.scope.namespace, input.scope.orgId, input.scope.projectId, input.scope.envId, String(foundingAuthMethod.walletAuthMethodId));
145
+ const results = await input.database.batch([authorityRead, authMethodRead]);
146
+ assertBatchSucceeded({
147
+ expectedStatementCount: 2,
148
+ results
149
+ });
150
+ const authorityRow = results[0]?.results?.[0] ?? null;
151
+ const authMethodRow = results[1]?.results?.[0] ?? null;
141
152
  let persistedAuthority = null;
142
153
  if (authorityRow) {
143
154
  const parsedAuthority = parseWalletAuthorityV1(parseD1JsonColumn(authorityRow.record_json));
@@ -196,49 +207,79 @@ var CloudflareD1WalletRegistrationCommitStore = class {
196
207
  this.database = input.database;
197
208
  this.scope = normalizeScope(input);
198
209
  }
199
- async commit(input) {
200
- assertCommitWalletIdentity(input);
201
- if (input.authority.kind === "passkey") await reservePasskeyCredential(this.credentialClaims, {
202
- walletId: input.authority.walletId,
203
- rpId: input.authority.rpId,
204
- credentialIdB64u: input.authority.credentialIdB64u
210
+ async reserveAuthority(authority) {
211
+ if (authority.kind === "passkey") await reservePasskeyCredential(this.credentialClaims, {
212
+ walletId: authority.walletId,
213
+ rpId: authority.rpId,
214
+ credentialIdB64u: authority.credentialIdB64u
205
215
  });
206
- const foundingStatements = await prepareFoundingStatements({
207
- database: this.database,
208
- scope: this.scope,
209
- foundingAuthority: input.foundingAuthority,
210
- foundingAuthMethod: input.foundingAuthMethod,
211
- now: input.now
212
- });
213
- const statements = [prepareD1WalletPutSubjectStatement({
214
- database: this.database,
215
- scope: this.scope,
216
- record: input.wallet
217
- })];
218
- for (const signer of input.walletSigners) statements.push(prepareD1WalletPutSignerStatement({
219
- database: this.database,
220
- scope: this.scope,
221
- record: signer
222
- }));
223
- statements.push(...prepareAuthorityStatements({
224
- database: this.database,
225
- scope: this.scope,
226
- authority: input.authority,
227
- walletSigners: input.walletSigners,
228
- foundingAuthority: input.foundingAuthority,
229
- foundingAuthMethod: input.foundingAuthMethod,
230
- foundingStatements,
231
- now: input.now
232
- }));
233
- statements.push(...emailOtpCommitStatements(input));
234
- statements.push(...input.decisionStatements);
235
- const results = await this.database.batch(statements);
216
+ return this.commit.bind(this, authority);
217
+ }
218
+ async commit(authority, input, executeBatch) {
219
+ assertCommitWalletIdentity(input, authority);
220
+ const ed25519Signer = input.walletSigners.find(isEd25519Signer);
221
+ if (ed25519Signer) {
222
+ const capability = ed25519Signer.activeYaoCapability;
223
+ if (capability.version !== "wallet_ed25519_yao_registration_capability_v1") throw new Error("A registration commit requires its registration capability");
224
+ const installed = await commitRouterAbEd25519YaoRegistrationCapability(createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1({
225
+ database: this.database,
226
+ scope: this.scope
227
+ }), {
228
+ kind: "router_ab_ed25519_yao_registration_finalize_capability_v1",
229
+ activeCapabilityBinding: capability.activeCapabilityBinding,
230
+ nearAccountId: capability.nearAccountId,
231
+ registrationAdmissionRequest: capability.admissionRequest,
232
+ registrationAdmissionReceipt: capability.admissionReceipt,
233
+ registrationResult: capability.activationResult,
234
+ runtimePolicyScope: capability.runtimePolicyScope
235
+ }, prepareWalletWrite(this.database, this.scope, authority, input, executeBatch));
236
+ if (!installed.ok) throw new Error(installed.message);
237
+ return;
238
+ }
239
+ const { statements } = await prepareWalletWrite(this.database, this.scope, authority, input);
240
+ const results = executeBatch ? await executeBatch(statements) : await this.database.batch(statements);
236
241
  assertBatchSucceeded({
237
242
  expectedStatementCount: statements.length,
238
243
  results
239
244
  });
240
245
  }
241
246
  };
247
+ async function prepareWalletWrite(database, scope, authority, input, executeBatch) {
248
+ const foundingStatements = await prepareFoundingStatements({
249
+ database,
250
+ scope,
251
+ foundingAuthority: input.foundingAuthority,
252
+ foundingAuthMethod: input.foundingAuthMethod,
253
+ now: input.now
254
+ });
255
+ const statements = [prepareD1WalletPutSubjectStatement({
256
+ database,
257
+ scope,
258
+ record: input.wallet
259
+ })];
260
+ for (const signer of input.walletSigners) statements.push(prepareD1WalletPutSignerStatement({
261
+ database,
262
+ scope,
263
+ record: signer
264
+ }));
265
+ statements.push(...prepareAuthorityStatements({
266
+ database,
267
+ scope,
268
+ authority,
269
+ walletSigners: input.walletSigners,
270
+ foundingAuthority: input.foundingAuthority,
271
+ foundingAuthMethod: input.foundingAuthMethod,
272
+ foundingStatements,
273
+ now: input.now
274
+ }), ...emailOtpCommitStatements(input), ...input.decisionStatements);
275
+ return {
276
+ statements,
277
+ executeBatch
278
+ };
279
+ }
280
+ function isEd25519Signer(signer) {
281
+ return signer.version === "wallet_signer_ed25519_v1";
282
+ }
242
283
  //#endregion
243
284
  export { CloudflareD1WalletRegistrationCommitStore };
244
285
 
@@ -0,0 +1,33 @@
1
+ import { commitInitialEd25519RegistrationSession } from "./walletRegistrationEstablishedSessionIssuer.js";
2
+ //#region src/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.ts
3
+ async function commitWalletRegistration(commitWallet, input, session) {
4
+ switch (session.kind) {
5
+ case "separate":
6
+ await commitWallet(input);
7
+ return { kind: "uncommitted" };
8
+ case "initial_near":
9
+ if (!input.foundingAuthority) throw new Error("An initial registration session requires its founding authority");
10
+ return {
11
+ kind: "committed",
12
+ value: await commitInitialEd25519RegistrationSession({
13
+ authorizationService: session.request.authorizationService,
14
+ authorizationTenantId: session.request.authorizationTenantId,
15
+ registrationCeremonyId: session.request.registrationCeremonyId,
16
+ authority: session.request.authority,
17
+ foundingAuthority: input.foundingAuthority,
18
+ walletAuthMethodId: session.request.walletAuthMethodId,
19
+ expiresAtMs: session.request.expiresAtMs,
20
+ remainingUses: session.request.remainingUses,
21
+ proof: session.request.proof
22
+ }, session.store.commitRegistrationWalletSessionAuthorizationV2.bind(session.store, commitWallet.bind(void 0, input)))
23
+ };
24
+ default: return assertNeverSessionPlan(session);
25
+ }
26
+ }
27
+ function assertNeverSessionPlan(value) {
28
+ throw new Error(`Unsupported registration session plan: ${String(value)}`);
29
+ }
30
+ //#endregion
31
+ export { commitWalletRegistration };
32
+
33
+ //# sourceMappingURL=d1WalletRegistrationInitialSession.js.map
@@ -0,0 +1,16 @@
1
+ //#region src/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.ts
2
+ function walletRegistrationOperationPreparedFromCeremony(ceremony, allocated) {
3
+ if (String(ceremony.foundingWalletAuthMethodId) !== String(ceremony.intent.foundingWalletAuthMethodId)) throw new Error("registration ceremony and intent name different founding auth methods");
4
+ if (allocated && (allocated.walletId !== ceremony.intent.walletId || allocated.walletAuthorityId !== ceremony.foundingWalletAuthorityId || allocated.deviceId !== ceremony.foundingDeviceId || allocated.walletAuthMethodId !== ceremony.foundingWalletAuthMethodId)) throw new Error("registration operation identity does not match its ceremony");
5
+ return {
6
+ kind: "d1_wallet_registration_operation_prepared_v1",
7
+ walletId: ceremony.intent.walletId,
8
+ walletAuthorityId: ceremony.foundingWalletAuthorityId,
9
+ deviceId: ceremony.foundingDeviceId,
10
+ walletAuthMethodId: ceremony.foundingWalletAuthMethodId
11
+ };
12
+ }
13
+ //#endregion
14
+ export { walletRegistrationOperationPreparedFromCeremony };
15
+
16
+ //# sourceMappingURL=d1WalletRegistrationPreparation.js.map
@@ -0,0 +1,58 @@
1
+ //#region src/router/cloudflare/d1/registration/d1WalletRegistrationRead.ts
2
+ /** Read admission and immutable finalization state from one D1 snapshot. */
3
+ var D1WalletRegistrationRead = class {
4
+ constructor(database, authority, operations, getCeremonies, decisions) {
5
+ this.database = database;
6
+ this.authority = authority;
7
+ this.operations = operations;
8
+ this.getCeremonies = getCeremonies;
9
+ this.decisions = decisions;
10
+ }
11
+ async readRespond(home) {
12
+ if (!this.authority) return {
13
+ ok: false,
14
+ code: "registration_authority_unavailable",
15
+ message: "Registration reservation authority is required"
16
+ };
17
+ const ceremonies = this.getCeremonies();
18
+ const results = await this.database.batch([this.authority.prepareHomeRead(home), ceremonies.prepareCeremonyRead(home.ceremonyId)]);
19
+ const [homeRead, ceremonyRead] = results;
20
+ if (results.length !== 2 || !homeRead || !ceremonyRead) throw new Error("Registration respond D1 batch returned incomplete results");
21
+ const admission = await this.authority.admitHomeRead(home, homeRead);
22
+ if (!admission.ok) return admission;
23
+ return {
24
+ ok: true,
25
+ ownershipGeneration: admission.ownershipGeneration,
26
+ snapshot: await ceremonies.parseCeremonySnapshotRead(home.ceremonyId, ceremonyRead)
27
+ };
28
+ }
29
+ async readFinalization(home, operationKey) {
30
+ if (!this.authority) return {
31
+ ok: false,
32
+ code: "registration_authority_unavailable",
33
+ message: "Registration reservation authority is required"
34
+ };
35
+ const ceremonies = this.getCeremonies();
36
+ const results = await this.database.batch([
37
+ this.authority.prepareHomeRead(home),
38
+ this.operations.prepareRead(operationKey),
39
+ ceremonies.prepareCeremonyRead(home.ceremonyId),
40
+ this.decisions.prepareRead(home.ceremonyId)
41
+ ]);
42
+ const [homeRead, operationRead, ceremonyRead, decisionRead] = results;
43
+ if (results.length !== 4 || !homeRead || !operationRead || !ceremonyRead || !decisionRead) throw new Error("Registration finalization D1 batch returned incomplete results");
44
+ const admission = await this.authority.admitHomeRead(home, homeRead);
45
+ if (!admission.ok) return admission;
46
+ if (!ceremonyRead.success) throw new Error("Registration ceremony D1 read failed");
47
+ return {
48
+ ok: true,
49
+ operation: this.operations.parseReadResult(operationRead),
50
+ decision: this.decisions.parseRead(home.ceremonyId, decisionRead),
51
+ readCeremony: ceremonies.parseCeremonyRead.bind(ceremonies, home.ceremonyId, ceremonyRead)
52
+ };
53
+ }
54
+ };
55
+ //#endregion
56
+ export { D1WalletRegistrationRead };
57
+
58
+ //# sourceMappingURL=d1WalletRegistrationRead.js.map