@seams/wallet-server 0.8.0 → 0.9.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 (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
@@ -8,7 +8,7 @@ function routeAuthNotConfigured(message) {
8
8
  message
9
9
  };
10
10
  }
11
- async function resolvePublishableKeyApiCredentialAuth(input) {
11
+ function parsePublishableKeyRequest(input) {
12
12
  if (input.route.auth.plane !== "api_credentials") return routeAuthNotConfigured(input.routeAuthNotConfiguredMessage);
13
13
  const publishableKey = extractBearerCredential(input.headers);
14
14
  if (!publishableKey) return {
@@ -31,23 +31,42 @@ async function resolvePublishableKeyApiCredentialAuth(input) {
31
31
  code: "forbidden",
32
32
  message: `publishable_key_environment_mismatch: ${input.missingEnvironmentMessage}`
33
33
  };
34
- const authResult = await input.publishableKeyAuth.authenticate({
35
- secret: publishableKey,
36
- origin,
37
- environmentId
34
+ return {
35
+ ok: true,
36
+ request: {
37
+ secret: publishableKey,
38
+ origin,
39
+ environmentId
40
+ }
41
+ };
42
+ }
43
+ async function resolveWalletRegistrationContext(input) {
44
+ const parsed = parsePublishableKeyRequest(input);
45
+ if (!parsed.ok) return parsed;
46
+ return input.registrationContext.resolve({
47
+ ...parsed.request,
48
+ registration: input.registration
38
49
  });
50
+ }
51
+ async function resolvePublishableKeyApiCredentialAuth(input) {
52
+ const parsed = parsePublishableKeyRequest(input);
53
+ if (!parsed.ok) return parsed;
54
+ const authResult = await input.publishableKeyAuth.authenticate(parsed.request);
39
55
  if (!authResult.ok) return {
40
56
  ok: false,
41
57
  status: authResult.status,
42
58
  code: authResult.status === 403 ? "forbidden" : "unauthorized",
43
59
  message: `${authResult.code}: ${authResult.message}`
44
60
  };
61
+ return publishableKeyRoutePrincipal(authResult.principal);
62
+ }
63
+ async function publishableKeyRoutePrincipal(principal) {
45
64
  return {
46
65
  ok: true,
47
66
  principal: {
48
67
  kind: "api_credentials",
49
68
  credentialType: "publishable_key",
50
- principal: authResult.principal
69
+ principal
51
70
  }
52
71
  };
53
72
  }
@@ -86,6 +105,6 @@ async function resolveSecretKeyApiCredentialAuth(input) {
86
105
  };
87
106
  }
88
107
  //#endregion
89
- export { resolvePublishableKeyApiCredentialAuth, resolveSecretKeyApiCredentialAuth };
108
+ export { publishableKeyRoutePrincipal, resolvePublishableKeyApiCredentialAuth, resolveSecretKeyApiCredentialAuth, resolveWalletRegistrationContext };
90
109
 
91
110
  //# sourceMappingURL=routerApiCredentialAuth.js.map
@@ -0,0 +1,49 @@
1
+ //#region src/router/auth/walletRegistrationContext.ts
2
+ function unavailableRegistrationContext() {
3
+ return {
4
+ ok: false,
5
+ status: 500,
6
+ code: "registration_environment_unavailable",
7
+ message: "Wallet registration requires the authenticated active environment"
8
+ };
9
+ }
10
+ /** Join the authenticated credential to its exact active environment at the boundary. */
11
+ function walletRegistrationContext(input, principal, environment) {
12
+ if (principal.environmentId !== input.environmentId || environment.id !== principal.environmentId || environment.status !== "ACTIVE" || !environment.projectId || !environment.key || !environment.signingRootVersion || principal.projectId !== void 0 && principal.projectId !== environment.projectId || principal.envId !== void 0 && principal.envId !== environment.key) return unavailableRegistrationContext();
13
+ return {
14
+ ok: true,
15
+ principal,
16
+ environment: {
17
+ id: environment.id,
18
+ projectId: environment.projectId,
19
+ key: environment.key,
20
+ signingRootVersion: environment.signingRootVersion,
21
+ status: "ACTIVE"
22
+ }
23
+ };
24
+ }
25
+ async function resolveRegistrationContext(auth, environments, input) {
26
+ try {
27
+ const result = await auth.authenticate(input);
28
+ if (!result.ok) return result;
29
+ const principal = result.principal;
30
+ const records = await environments.listEnvironments({
31
+ orgId: principal.orgId,
32
+ actorUserId: "runtime-scope-bootstrap",
33
+ roles: ["system"],
34
+ environmentId: principal.environmentId,
35
+ ...principal.projectId ? { projectId: principal.projectId } : {}
36
+ }, { status: "ACTIVE" });
37
+ for (const environment of records) if (environment.id === principal.environmentId) return walletRegistrationContext(input, principal, environment);
38
+ return unavailableRegistrationContext();
39
+ } catch {
40
+ return unavailableRegistrationContext();
41
+ }
42
+ }
43
+ function createWalletRegistrationContextResolver(auth, environments) {
44
+ return { resolve: resolveRegistrationContext.bind(void 0, auth, environments) };
45
+ }
46
+ //#endregion
47
+ export { createWalletRegistrationContextResolver, unavailableRegistrationContext, walletRegistrationContext };
48
+
49
+ //# sourceMappingURL=walletRegistrationContext.js.map
@@ -1,6 +1,6 @@
1
+ import { normalizeOptionalTrimmedString } from "../../shared-ts/src/utils/normalize.js";
1
2
  import { base64Decode, base64UrlDecode, base64UrlEncode } from "../../shared-ts/src/utils/base64.js";
2
3
  import "../../shared-ts/src/utils/encoders.js";
3
- import { normalizeOptionalTrimmedString } from "../../shared-ts/src/utils/normalize.js";
4
4
  import { failure } from "../../shared-ts/src/utils/failure.js";
5
5
  import { errorMessage } from "../../shared-ts/src/utils/errors.js";
6
6
  //#region src/router/auth/webAuthnCredentialCodecs.ts
@@ -23,8 +23,9 @@ function createD1AuthorizationAssembly(options, sessionRouting) {
23
23
  })
24
24
  };
25
25
  }
26
- function createD1WalletCustodyStore(options) {
26
+ function createD1WalletCustodyStore(options, walletAuthMethodStore) {
27
27
  return new CloudflareD1WalletCustodyCommitStore({
28
+ walletAuthMethodStore,
28
29
  credentialClaims: options.credentialClaims,
29
30
  database: options.database,
30
31
  scope: {
@@ -77,8 +78,8 @@ function createD1GoogleRegistrationAttempts(options, prepare) {
77
78
  function createD1EmailOtpRateLimits(options, prepare) {
78
79
  return new CloudflareD1EmailOtpRateLimitStore({
79
80
  prepare,
80
- rateLimits: options.emailOtp.rateLimits,
81
- counter: options.emailOtpRateLimitCounter
81
+ batch: options.database.batch.bind(options.database),
82
+ rateLimits: options.emailOtp.rateLimits
82
83
  });
83
84
  }
84
85
  //#endregion
@@ -7,6 +7,8 @@ function createD1AuthorizedOperationRouteService(assembly) {
7
7
  tenantId: tenantId.value,
8
8
  resolveEcdsaWalletSessionOperation: assembly.authorizationStore.resolveEcdsaWalletSessionOperation.bind(assembly.authorizationStore),
9
9
  admitEcdsaWalletSessionOperation: assembly.authorizationStore.admitEcdsaWalletSessionOperation.bind(assembly.authorizationStore),
10
+ admitEd25519WalletSessionOperation: assembly.authorizationStore.admitEd25519WalletSessionOperation.bind(assembly.authorizationStore),
11
+ resolveEd25519WalletSessionOperation: assembly.authorizationStore.resolveEd25519WalletSessionOperation.bind(assembly.authorizationStore),
10
12
  readPinnedOwnerWalletScope: assembly.authorizationStore.readPinnedOwnerWalletScope.bind(assembly.authorizationStore),
11
13
  buildVerifiedOwnerProof: assembly.authorizationService.buildVerifiedOwnerProof.bind(assembly.authorizationService),
12
14
  recordVerifiedWalletOperationFactorEvidenceSet: assembly.authorizationService.recordVerifiedWalletOperationFactorEvidenceSet.bind(assembly.authorizationService),
@@ -0,0 +1,25 @@
1
+ //#region src/router/cloudflare/d1/auth/d1EmailOtpRouteService.ts
2
+ function createD1EmailOtpRouteService(assembly) {
3
+ return {
4
+ applyEmailOtpServerSeal: assembly.emailOtpServerSeal.applyEmailOtpServerSeal.bind(assembly.emailOtpServerSeal),
5
+ cleanupGoogleEmailOtpDevRegistrationState: assembly.googleEmailOtpSessions.cleanupDevRegistrationState.bind(assembly.googleEmailOtpSessions),
6
+ consumeEmailOtpGrant: assembly.emailOtpRecoveryService.consumeEmailOtpGrant.bind(assembly.emailOtpRecoveryService),
7
+ createEmailOtpChallenge: assembly.emailOtpChallengeService.createEmailOtpChallenge.bind(assembly.emailOtpChallengeService),
8
+ createEmailOtpEnrollmentChallenge: assembly.emailOtpChallengeService.createEmailOtpEnrollmentChallenge.bind(assembly.emailOtpChallengeService),
9
+ isEmailOtpStrongAuthRequired: assembly.emailOtpRecoveryService.isEmailOtpStrongAuthRequired.bind(assembly.emailOtpRecoveryService),
10
+ markEmailOtpStrongAuthSatisfied: assembly.emailOtpRecoveryService.markEmailOtpStrongAuthSatisfied.bind(assembly.emailOtpRecoveryService),
11
+ readActiveEmailOtpEnrollment: assembly.emailOtpRecoveryService.readActiveEmailOtpEnrollment.bind(assembly.emailOtpRecoveryService),
12
+ readEmailOtpEnrollment: assembly.emailOtpRecoveryService.readEmailOtpEnrollment.bind(assembly.emailOtpRecoveryService),
13
+ readEmailOtpOutboxEntry: assembly.emailOtpChallengeService.readEmailOtpOutboxEntry.bind(assembly.emailOtpChallengeService),
14
+ removeEmailOtpServerSeal: assembly.emailOtpServerSeal.removeEmailOtpServerSeal.bind(assembly.emailOtpServerSeal),
15
+ validateGoogleEmailOtpRegistrationCandidateWallet: assembly.googleEmailOtpSessions.validateRegistrationCandidateWallet.bind(assembly.googleEmailOtpSessions),
16
+ verifyEmailOtpChallenge: assembly.emailOtpChallengeService.verifyEmailOtpChallenge.bind(assembly.emailOtpChallengeService),
17
+ verifyEmailOtpWalletRecoveryChallenge: assembly.emailOtpChallengeService.verifyEmailOtpWalletRecoveryChallenge.bind(assembly.emailOtpChallengeService),
18
+ verifyEmailOtpEnrollment: assembly.emailOtpChallengeService.verifyEmailOtpEnrollment.bind(assembly.emailOtpChallengeService),
19
+ verifyGoogleLogin: assembly.oidcVerification.verifyGoogleLogin.bind(assembly.oidcVerification)
20
+ };
21
+ }
22
+ //#endregion
23
+ export { createD1EmailOtpRouteService };
24
+
25
+ //# sourceMappingURL=d1EmailOtpRouteService.js.map
@@ -1,6 +1,7 @@
1
1
  import { parseWebAuthnRpId } from "../../../../shared-ts/src/utils/domainIds.js";
2
2
  import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
3
3
  import { normalizeCorsOrigin } from "../../../../core/SessionService.js";
4
+ import { D1WalletExecutionAuthority, admitD1EstablishedWalletHome } from "../registration/d1WalletExecutionAuthority.js";
4
5
  import "../../../../core/authService/emailOtpConfig.js";
5
6
  import { parseSigningSessionSealRootConfig } from "../../../../threshold/session/signingSessionSeal/options.js";
6
7
  //#region src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.ts
@@ -38,6 +39,12 @@ function parseBooleanFlag(input, fallback, field) {
38
39
  }
39
40
  }
40
41
  function normalizeD1RouterApiAuthOptions(input) {
42
+ const scope = {
43
+ namespace: requireD1RouterApiAuthScopeString(input.namespace, "namespace"),
44
+ orgId: requireD1RouterApiAuthScopeString(input.orgId, "orgId"),
45
+ projectId: requireD1RouterApiAuthScopeString(input.projectId, "projectId"),
46
+ envId: requireD1RouterApiAuthScopeString(input.envId, "envId")
47
+ };
41
48
  const githubClientId = normalizeOptionalTrimmedString(input.githubOAuth?.clientId);
42
49
  const githubClientSecret = normalizeOptionalTrimmedString(input.githubOAuth?.clientSecret);
43
50
  const githubCallbackUrl = normalizeOptionalTrimmedString(input.githubOAuth?.callbackUrl);
@@ -49,8 +56,8 @@ function normalizeD1RouterApiAuthOptions(input) {
49
56
  if (input.githubOAuth && !githubOAuth) throw new Error("githubOAuth requires clientId, clientSecret, and callbackUrl");
50
57
  return {
51
58
  database: input.database,
59
+ walletExecution: { admitEstablishedHome: admitD1EstablishedWalletHome.bind(void 0, input.database, scope) },
52
60
  identityStore: input.identityStore,
53
- emailOtpRateLimitCounter: input.emailOtpRateLimitCounter,
54
61
  credentialClaims: input.credentialClaims,
55
62
  syncChallenges: input.syncChallenges,
56
63
  linkedDeviceProofNonces: input.linkedDeviceProofNonces,
@@ -59,12 +66,13 @@ function normalizeD1RouterApiAuthOptions(input) {
59
66
  sessionRouting: input.sessionRouting,
60
67
  recoveryRouting: input.recoveryRouting,
61
68
  lifecycleRouting: input.lifecycleRouting,
62
- registrationAuthority: input.registrationAuthority,
69
+ registrationAuthority: input.registrationAuthority ? new D1WalletExecutionAuthority(input.database, scope, input.registrationAuthority) : void 0,
63
70
  registrationSetupDispatcher: input.registrationSetupDispatcher,
64
- namespace: requireD1RouterApiAuthScopeString(input.namespace, "namespace"),
65
- orgId: requireD1RouterApiAuthScopeString(input.orgId, "orgId"),
66
- projectId: requireD1RouterApiAuthScopeString(input.projectId, "projectId"),
67
- envId: requireD1RouterApiAuthScopeString(input.envId, "envId"),
71
+ startRegistrationWallets: input.startRegistrationWallets,
72
+ namespace: scope.namespace,
73
+ orgId: scope.orgId,
74
+ projectId: scope.projectId,
75
+ envId: scope.envId,
68
76
  relayerAccount: normalizeOptionalTrimmedString(input.relayerAccount),
69
77
  relayerPublicKey: normalizeOptionalTrimmedString(input.relayerPublicKey),
70
78
  relayerPrivateKey: normalizeOptionalTrimmedString(input.relayerPrivateKey),
@@ -1,4 +1,4 @@
1
- import { parseWalletAuthMethodId, parseWalletAuthorityId } from "../../../../shared-ts/src/utils/domainIds.js";
1
+ import { parseWalletAuthMethodId, parseWalletAuthorityId, parseWalletId } from "../../../../shared-ts/src/utils/domainIds.js";
2
2
  import { parseDeviceId, parsePrincipalId, parseTenantId, parseWalletSessionMintId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
3
3
  import { sha256HexUtf8 } from "../../../../shared-ts/src/utils/digests.js";
4
4
  import { parseRouterAbEcdsaRegistrationActivationReceiptV1 } from "../../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
@@ -15,10 +15,11 @@ import { sha256BytesPortable, toRecordValue } from "./d1RouterApiAuthBoundary.js
15
15
  import { verifyD1LinkedDeviceFreshRevokeProofV1 } from "../wallet/d1WalletAuthMethodBoundary.js";
16
16
  import { D1LinkedDeviceAuthorityInstallServiceV1 } from "../deviceLinking/d1LinkedDeviceAuthorityInstallService.js";
17
17
  import { D1WalletAuthorityStore } from "../wallet/d1WalletAuthorityStore.js";
18
- import { createCloudflareD1VersionedJsonRecordStore } from "../versionedJson/d1VersionedJsonRecordStore.js";
19
18
  import { parseRouterAbEd25519YaoRegistrationSideEffectRecordV2 } from "../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
20
19
  import { createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1 } from "../../signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js";
21
20
  import { normalizeD1RouterApiAuthOptions } from "./d1RouterApiAuthConfig.js";
21
+ import { D1WalletOperationStore } from "../registration/d1WalletOperationStore.js";
22
+ import { createD1EmailOtpRouteService } from "./d1EmailOtpRouteService.js";
22
23
  import { toPublicKeyStringFromSecretKey } from "../../../../core/nearKeys.js";
23
24
  import { MinimalNearClient } from "../../../../core/rpcClients/near/NearClient.js";
24
25
  import { fundImplicitNearAccountWithRelayer } from "../../../../core/nearRelayerAccountProvisioning.js";
@@ -26,7 +27,7 @@ import { createSponsoredNamedNearAccountForOptions } from "../near/d1SponsoredNe
26
27
  import { parseD1EcdsaDerivationServerBootstrapResponse, parseD1WalletRegistrationCommittedInstallationProjection, parseD1WalletRegistrationFinalizeReplayResponse } from "../registration/d1RegistrationCeremonyRecords.js";
27
28
  import { parseD1WalletAddSignerFinalizeSideEffectRecord } from "../wallet/d1WalletAddSignerFinalizeRecord.js";
28
29
  import { dispatchWalletRegistrationSetup } from "../../../framework/registrationSetupDispatch.js";
29
- import { readActiveWalletSessionCredential, readExhaustedWalletSessionCredential, readWalletSessionSigningCandidate } from "./walletSessionCredentialReaders.js";
30
+ import { readActiveWalletSessionCredential, readEd25519WalletSessionSigningRead, readExhaustedWalletSessionCredential, readWalletSessionSigningCandidate } from "./walletSessionCredentialReaders.js";
30
31
  import { createD1AuthorizedOperationRouteService } from "./d1AuthorizedOperationRouteService.js";
31
32
  import { parseRegistrationEstablishedSessionProjectionV2 } from "../../../../shared-ts/src/utils/registrationEstablishedSession.js";
32
33
  import { signGasRelayerNearTransactionWithDeps } from "../../../../core/authService/nearTransactions.js";
@@ -51,6 +52,7 @@ import { D1WalletAuthMethodRevocationReplayStoreV1 } from "../wallet/d1WalletAut
51
52
  import { CloudflareD1WalletAuthMethodService } from "../wallet/d1WalletAuthMethodService.js";
52
53
  import { parseWalletRegistrationSessionCommitReceiptV2 } from "../registration/walletRegistrationSessionCommitReceipt.js";
53
54
  import { CloudflareD1WalletRegistrationService } from "../registration/d1WalletRegistrationService.js";
55
+ import { D1WalletRegistrationRead } from "../registration/d1WalletRegistrationRead.js";
54
56
  import { CloudflareD1WalletRegistrationCommitStore } from "../registration/d1WalletRegistrationCommitStore.js";
55
57
  import { CloudflareD1Ed25519YaoLifecycleDecisionStoreV1 } from "../ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js";
56
58
  import { createD1PasskeyCustodyRouteService } from "../passkeyCustody/d1PasskeyCustodyRouteService.js";
@@ -434,17 +436,20 @@ function parseWalletRegistrationOperationPrepared(raw) {
434
436
  if (Reflect.get(raw, "kind") !== "d1_wallet_registration_operation_prepared_v1") return null;
435
437
  const keys = [
436
438
  "kind",
439
+ "walletId",
437
440
  "walletAuthorityId",
438
441
  "deviceId",
439
442
  "walletAuthMethodId"
440
443
  ];
441
444
  if (Object.keys(raw).length !== keys.length || !hasOnlyKeys(raw, keys)) return null;
445
+ const walletId = parseWalletId(Reflect.get(raw, "walletId"));
442
446
  const walletAuthorityId = parseWalletAuthorityId(Reflect.get(raw, "walletAuthorityId"));
443
447
  const deviceId = parseDeviceId(Reflect.get(raw, "deviceId"));
444
448
  const walletAuthMethodId = parseWalletAuthMethodId(Reflect.get(raw, "walletAuthMethodId"));
445
- if (!walletAuthorityId.ok || !deviceId.ok || !walletAuthMethodId.ok) return null;
449
+ if (!walletId.ok || !walletAuthorityId.ok || !deviceId.ok || !walletAuthMethodId.ok) return null;
446
450
  return {
447
451
  kind: "d1_wallet_registration_operation_prepared_v1",
452
+ walletId: walletId.value,
448
453
  walletAuthorityId: walletAuthorityId.value,
449
454
  deviceId: deviceId.value,
450
455
  walletAuthMethodId: walletAuthMethodId.value
@@ -617,15 +622,12 @@ function registrationReceiptMatchesJournal(record) {
617
622
  if (receipt.operation !== record.operation || receipt.operationFingerprint !== record.requestFingerprint) return false;
618
623
  if (receipt.committed.kind === "error") return true;
619
624
  if (!("walletAuthMethodId" in receipt)) return false;
625
+ if (receipt.walletId !== record.prepared.walletId) return false;
620
626
  if (receipt.walletAuthMethodId !== record.prepared.walletAuthMethodId) return false;
621
- if (receipt.committed.kind === "near_pending") return true;
622
627
  return "foundingAuthority" in receipt && receipt.foundingAuthority.authorityId === record.prepared.walletAuthorityId;
623
628
  }
624
- function resolveEd25519YaoProductRegistration(options) {
625
- return options.ed25519YaoProductRegistration || null;
626
- }
627
629
  function walletRegistrationActivateSideEffectStore(options) {
628
- return createCloudflareD1VersionedJsonRecordStore({
630
+ return new D1WalletOperationStore({
629
631
  database: options.database,
630
632
  scope: {
631
633
  namespace: options.namespace,
@@ -636,10 +638,10 @@ function walletRegistrationActivateSideEffectStore(options) {
636
638
  keyPrefix: "wallet-registration-activate:",
637
639
  encode: (value) => value,
638
640
  parse: parseWalletRegistrationActivateSideEffectRecord
639
- });
641
+ }, registrationOperationWallet);
640
642
  }
641
643
  function walletRegistrationNearProvisioningSideEffectStore(options) {
642
- return createCloudflareD1VersionedJsonRecordStore({
644
+ return new D1WalletOperationStore({
643
645
  database: options.database,
644
646
  scope: {
645
647
  namespace: options.namespace,
@@ -650,10 +652,10 @@ function walletRegistrationNearProvisioningSideEffectStore(options) {
650
652
  keyPrefix: "wallet-registration-near-provisioning:",
651
653
  encode: (value) => value,
652
654
  parse: parseWalletRegistrationNearProvisioningSideEffectRecord
653
- });
655
+ }, registrationOperationWallet);
654
656
  }
655
657
  function walletAddSignerStartSideEffectStore(options) {
656
- return createCloudflareD1VersionedJsonRecordStore({
658
+ return new D1WalletOperationStore({
657
659
  database: options.database,
658
660
  scope: {
659
661
  namespace: options.namespace,
@@ -664,10 +666,10 @@ function walletAddSignerStartSideEffectStore(options) {
664
666
  keyPrefix: "wallet-add-signer-start:",
665
667
  encode: (value) => value,
666
668
  parse: parseD1WalletAddSignerStartSideEffectRecord
667
- });
669
+ }, addSignerStartWallet);
668
670
  }
669
671
  function walletAddSignerFinalizeSideEffectStore(options) {
670
- return createCloudflareD1VersionedJsonRecordStore({
672
+ return new D1WalletOperationStore({
671
673
  database: options.database,
672
674
  scope: {
673
675
  namespace: options.namespace,
@@ -678,7 +680,7 @@ function walletAddSignerFinalizeSideEffectStore(options) {
678
680
  keyPrefix: "wallet-add-signer-finalize:",
679
681
  encode: (value) => value,
680
682
  parse: parseD1WalletAddSignerFinalizeSideEffectRecord
681
- });
683
+ }, addSignerFinalizeWallet);
682
684
  }
683
685
  async function readD1Ed25519KeyManifestBySlot(walletStore, input) {
684
686
  const signer = await walletStore.getEd25519SignerBySlot(input);
@@ -826,21 +828,25 @@ function createCloudflareD1RouterApiAuthAssembly(input) {
826
828
  projectId: options.projectId,
827
829
  envId: options.envId
828
830
  });
829
- const walletCustodyCommitStore = createD1WalletCustodyStore(options);
831
+ const walletCustodyCommitStore = createD1WalletCustodyStore(options, walletAuthMethodStore);
830
832
  const signedDelegateExecutor = new CloudflareD1SignedDelegateExecutor(options);
831
833
  const walletRegistrations = new CloudflareD1WalletRegistrationService({
834
+ executionAuthority: options.walletExecution,
835
+ home: options.sessionRouting?.home() ?? { kind: "direct" },
832
836
  registrationAuthority: options.registrationAuthority ?? null,
837
+ startRegistrationWallets: options.startRegistrationWallets ?? null,
833
838
  authorizationService,
839
+ registrationSessionStore: authorizationStore,
834
840
  authorizationTenantId: authorizationTenantId.value,
835
841
  createSponsoredNamedNearAccount,
836
842
  emailOtpRegistrationEnrollmentFinalizer,
837
843
  getRegistrationCeremonyIntentStore,
838
- getEd25519YaoProductRegistration: () => resolveEd25519YaoProductRegistration(options),
844
+ getEd25519YaoProductRegistration: () => options.ed25519YaoProductRegistration ?? null,
839
845
  ecdsaStrictRegistration: options.ecdsaStrictRegistration,
840
846
  tenantRootCustodyLineage: options.tenantRootCustodyLineage,
841
847
  getWalletStore,
842
848
  activateSideEffects: walletRegistrationActivateSideEffectStore(options),
843
- nearProvisioningSideEffects: walletRegistrationNearProvisioningSideEffectStore(options),
849
+ registrationRead: new D1WalletRegistrationRead(options.database, options.registrationAuthority ?? null, walletRegistrationNearProvisioningSideEffectStore(options), getRegistrationCeremonyIntentStore, yaoLifecycleDecisions),
844
850
  walletRegistrationCommitStore,
845
851
  walletCustodyCommitStore,
846
852
  walletAuthMethods,
@@ -848,8 +854,9 @@ function createCloudflareD1RouterApiAuthAssembly(input) {
848
854
  yaoLifecycleDecisions
849
855
  });
850
856
  const walletAddSigners = new CloudflareD1WalletAddSignerService({
857
+ executionAuthority: options.walletExecution,
851
858
  getRegistrationCeremonyIntentStore,
852
- getEd25519YaoProductRegistration: () => resolveEd25519YaoProductRegistration(options),
859
+ getEd25519YaoProductRegistration: () => options.ed25519YaoProductRegistration ?? null,
853
860
  ecdsaStrictRegistration: options.ecdsaStrictRegistration,
854
861
  tenantRootCustodyLineage: options.tenantRootCustodyLineage,
855
862
  getWalletStore,
@@ -940,6 +947,11 @@ function createCloudflareD1RouterApiAuthAssembly(input) {
940
947
  });
941
948
  linkedDeviceEd25519AuthorityReaderSlot.current = linkedDeviceComposition.linkedDeviceEd25519AuthorityReader ?? null;
942
949
  return {
950
+ relocationEmailOtp: {
951
+ verifier: emailOtpChallengeVerifier,
952
+ emailOtpChallenges,
953
+ issuer: emailOtpChallengeIssuer
954
+ },
943
955
  options,
944
956
  emailOtpServerSeal,
945
957
  emailOtpChallengeService,
@@ -1202,26 +1214,6 @@ function createD1WalletUnlockRouteService(assembly) {
1202
1214
  refreshWalletSessionAuthorityProjection: assembly.authorizationService.refreshWalletSessionAuthorizationV2AuthorityProjection.bind(assembly.authorizationService)
1203
1215
  };
1204
1216
  }
1205
- function createD1EmailOtpRouteService(assembly) {
1206
- return {
1207
- applyEmailOtpServerSeal: assembly.emailOtpServerSeal.applyEmailOtpServerSeal.bind(assembly.emailOtpServerSeal),
1208
- cleanupGoogleEmailOtpDevRegistrationState: assembly.googleEmailOtpSessions.cleanupDevRegistrationState.bind(assembly.googleEmailOtpSessions),
1209
- consumeEmailOtpGrant: assembly.emailOtpRecoveryService.consumeEmailOtpGrant.bind(assembly.emailOtpRecoveryService),
1210
- createEmailOtpChallenge: assembly.emailOtpChallengeService.createEmailOtpChallenge.bind(assembly.emailOtpChallengeService),
1211
- createEmailOtpEnrollmentChallenge: assembly.emailOtpChallengeService.createEmailOtpEnrollmentChallenge.bind(assembly.emailOtpChallengeService),
1212
- isEmailOtpStrongAuthRequired: assembly.emailOtpRecoveryService.isEmailOtpStrongAuthRequired.bind(assembly.emailOtpRecoveryService),
1213
- markEmailOtpStrongAuthSatisfied: assembly.emailOtpRecoveryService.markEmailOtpStrongAuthSatisfied.bind(assembly.emailOtpRecoveryService),
1214
- readActiveEmailOtpEnrollment: assembly.emailOtpRecoveryService.readActiveEmailOtpEnrollment.bind(assembly.emailOtpRecoveryService),
1215
- readEmailOtpEnrollment: assembly.emailOtpRecoveryService.readEmailOtpEnrollment.bind(assembly.emailOtpRecoveryService),
1216
- readEmailOtpOutboxEntry: assembly.emailOtpChallengeService.readEmailOtpOutboxEntry.bind(assembly.emailOtpChallengeService),
1217
- removeEmailOtpServerSeal: assembly.emailOtpServerSeal.removeEmailOtpServerSeal.bind(assembly.emailOtpServerSeal),
1218
- validateGoogleEmailOtpRegistrationCandidateWallet: assembly.googleEmailOtpSessions.validateRegistrationCandidateWallet.bind(assembly.googleEmailOtpSessions),
1219
- verifyEmailOtpChallenge: assembly.emailOtpChallengeService.verifyEmailOtpChallenge.bind(assembly.emailOtpChallengeService),
1220
- verifyEmailOtpWalletRecoveryChallenge: assembly.emailOtpChallengeService.verifyEmailOtpWalletRecoveryChallenge.bind(assembly.emailOtpChallengeService),
1221
- verifyEmailOtpEnrollment: assembly.emailOtpChallengeService.verifyEmailOtpEnrollment.bind(assembly.emailOtpChallengeService),
1222
- verifyGoogleLogin: assembly.oidcVerification.verifyGoogleLogin.bind(assembly.oidcVerification)
1223
- };
1224
- }
1225
1217
  function createD1WebAuthnRouteService(assembly) {
1226
1218
  return {
1227
1219
  createWebAuthnLoginOptions: assembly.webAuthnAuthService.createWebAuthnLoginOptions.bind(assembly.webAuthnAuthService),
@@ -1253,6 +1245,7 @@ function createD1AuthorizationSessionRouteService(assembly) {
1253
1245
  issueDirectWalletSessionAuthorizationV2: assembly.authorizationService.issueDirectWalletSessionAuthorizationV2.bind(assembly.authorizationService),
1254
1246
  readWalletSessionAuthorizationV2ByOperationCredential: readActiveWalletSessionCredential.bind(null, assembly.authorizationService),
1255
1247
  readWalletSessionSigningCandidateByOperationCredential: readWalletSessionSigningCandidate.bind(null, assembly.authorizationService),
1248
+ readEd25519WalletSessionSigningReadByOperationCredential: readEd25519WalletSessionSigningRead.bind(null, assembly.authorizationService),
1256
1249
  readWalletSessionExactOperationContextByCredential: assembly.authorizationService.readWalletSessionExactOperationContextByCredential.bind(assembly.authorizationService),
1257
1250
  readExhaustedWalletSessionAuthorizationV2CandidateByOperationCredential: readExhaustedWalletSessionCredential.bind(null, assembly.authorizationService),
1258
1251
  readExactWalletSessionStatusByOperationCredential: assembly.authorizationService.readExactWalletSessionStatusByOperationCredential.bind(assembly.authorizationService),
@@ -1297,6 +1290,8 @@ function createD1RouterAccountRouteService(assembly) {
1297
1290
  function createCloudflareD1RouterApiAuthService(input) {
1298
1291
  const assembly = createCloudflareD1RouterApiAuthAssembly(input);
1299
1292
  return {
1293
+ walletExecution: assembly.options.walletExecution,
1294
+ relocationEmailOtp: assembly.relocationEmailOtp,
1300
1295
  walletRegistration: createD1WalletRegistrationRouteService(assembly),
1301
1296
  walletAuthMethods: createD1WalletAuthMethodRouteService(assembly),
1302
1297
  walletUnlock: createD1WalletUnlockRouteService(assembly),
@@ -1326,6 +1321,15 @@ function createCloudflareD1RouterApiAuthService(input) {
1326
1321
  ...assembly.linkedDeviceEd25519AuthorityReader === void 0 ? {} : { linkedDeviceEd25519AuthorityReader: assembly.linkedDeviceEd25519AuthorityReader }
1327
1322
  };
1328
1323
  }
1324
+ function registrationOperationWallet(record) {
1325
+ return record.prepared.walletId;
1326
+ }
1327
+ function addSignerStartWallet(record) {
1328
+ return record.prepared.storedIntent.intent.walletId;
1329
+ }
1330
+ function addSignerFinalizeWallet(record) {
1331
+ return record.prepared.walletId;
1332
+ }
1329
1333
  //#endregion
1330
1334
  export { createCloudflareD1RouterApiAuthService };
1331
1335
 
@@ -29,6 +29,22 @@ async function readActiveWalletSessionCredential(service, input) {
29
29
  if (snapshot.kind === "exhausted") throw new Error("Stored V2 Wallet Session quota is no longer active");
30
30
  return activeContext(snapshot);
31
31
  }
32
+ /**
33
+ * The active session with its wallet's Ed25519 signer and policy rows. An
34
+ * exhausted session throws, as the plain credential read does: its caller
35
+ * resolves the exhausted candidate separately.
36
+ */
37
+ async function readEd25519WalletSessionSigningRead(service, input) {
38
+ const read = await service.readEd25519WalletSessionAdmissionSnapshotByOperationCredential(input);
39
+ if (!read) return null;
40
+ if (read.snapshot.kind === "exhausted") throw new Error("Stored V2 Wallet Session quota is no longer active");
41
+ const context = activeContext(read.snapshot);
42
+ return context ? {
43
+ context,
44
+ signerRead: read.signerRead,
45
+ policyRead: read.policyRead
46
+ } : null;
47
+ }
32
48
  async function readWalletSessionSigningCandidate(service, input) {
33
49
  const read = await service.readEcdsaWalletSessionAdmissionSnapshotByOperationCredential(input);
34
50
  if (!read) return null;
@@ -71,6 +87,6 @@ async function readExhaustedWalletSessionCredential(service, input) {
71
87
  });
72
88
  }
73
89
  //#endregion
74
- export { readActiveWalletSessionCredential, readExhaustedWalletSessionCredential, readWalletSessionSigningCandidate };
90
+ export { readActiveWalletSessionCredential, readEd25519WalletSessionSigningRead, readExhaustedWalletSessionCredential, readWalletSessionSigningCandidate };
75
91
 
76
92
  //# sourceMappingURL=walletSessionCredentialReaders.js.map
@@ -58,8 +58,12 @@ const PINNED_OWNER_WALLET = `
58
58
  LIMIT 1)
59
59
  END AS pinned_owner_wallet_id`;
60
60
  function prepareAuthorizedOperationCommittedRead(database, namespace, input) {
61
- return database.prepare(`SELECT operation.*, ${PINNED_OWNER_WALLET}
61
+ return database.prepare(`SELECT operation.*, evidence.org_id AS step_up_org_id, evidence.project_id AS step_up_project_id,
62
+ evidence.env_id AS step_up_env_id, ${PINNED_OWNER_WALLET}
62
63
  FROM authorized_operations AS operation
64
+ LEFT JOIN verified_wallet_operation_evidence_sets AS evidence
65
+ ON evidence.namespace = operation.namespace AND evidence.tenant_id = operation.tenant_id
66
+ AND evidence.evidence_set_digest = operation.evidence_set_digest
63
67
  WHERE operation.namespace = ? AND operation.tenant_id = ?
64
68
  AND operation.operation_fingerprint_digest = ?
65
69
  LIMIT 1`).bind(namespace, input.tenantId, input.operationFingerprintDigest);
@@ -74,7 +78,8 @@ function prepareAuthorizedOperationAdmissionRead(input) {
74
78
  sql: "1",
75
79
  bindings: []
76
80
  };
77
- return input.database.prepare(`SELECT operation.*, ${PINNED_OWNER_WALLET}, (${material.sql}) AS material_snapshot_active,
81
+ return input.database.prepare(`SELECT operation.*, evidence.org_id AS step_up_org_id, evidence.project_id AS step_up_project_id,
82
+ evidence.env_id AS step_up_env_id, ${PINNED_OWNER_WALLET}, (${material.sql}) AS material_snapshot_active,
78
83
  CASE operation.authorization_source_kind
79
84
  WHEN 'authorization_grant' THEN EXISTS (
80
85
  SELECT 1
@@ -130,6 +135,9 @@ function prepareAuthorizedOperationAdmissionRead(input) {
130
135
  ELSE 0
131
136
  END AS authorization_source_active
132
137
  FROM authorized_operations AS operation
138
+ LEFT JOIN verified_wallet_operation_evidence_sets AS evidence
139
+ ON evidence.namespace = operation.namespace AND evidence.tenant_id = operation.tenant_id
140
+ AND evidence.evidence_set_digest = operation.evidence_set_digest
133
141
  WHERE operation.namespace = ? AND operation.tenant_id = ?
134
142
  AND operation.operation_fingerprint_digest = ?
135
143
  LIMIT 1`).bind(...material.bindings, input.walletSignerScope.orgId, input.walletSignerScope.projectId, input.walletSignerScope.envId, input.nowMs, input.nowMs, input.namespace, input.tenantId, input.operationFingerprintDigest);
@@ -181,6 +189,22 @@ function prepareAuthorizedOperationInsert(input) {
181
189
  sql: "1",
182
190
  bindings: []
183
191
  };
192
+ if (source.kind === "verified_step_up") condition = {
193
+ sql: `(${condition.sql}) AND EXISTS (
194
+ SELECT 1 FROM verified_wallet_operation_evidence_sets AS evidence
195
+ WHERE evidence.namespace = ? AND evidence.tenant_id = ? AND evidence.evidence_set_digest = ?
196
+ AND evidence.org_id = ? AND evidence.project_id = ? AND evidence.env_id = ?
197
+ )`,
198
+ bindings: [
199
+ ...condition.bindings,
200
+ namespace,
201
+ operation.tenantId,
202
+ source.evidenceSetDigest,
203
+ walletSignerScope.orgId,
204
+ walletSignerScope.projectId,
205
+ walletSignerScope.envId
206
+ ]
207
+ };
184
208
  const absence = input.existingOperation === "preserve" ? {
185
209
  sql: `NOT EXISTS (SELECT 1 FROM authorized_operations
186
210
  WHERE namespace = ? AND tenant_id = ? AND operation_fingerprint_digest = ?)`,
@@ -205,11 +229,17 @@ function prepareAuthorizedOperationInsert(input) {
205
229
  material_activation_owner, material_activation_key_binding,
206
230
  material_activation_lifecycle_binding, material_activation_signing_worker,
207
231
  owner_scope_org_id, owner_scope_project_id,
208
- owner_scope_env_id
232
+ owner_scope_env_id, ownership_generation
209
233
  ) SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
210
234
  'claimed', 'pending', NULL, NULL, NULL, NULL, ?, NULL, ?,
211
- ?, ?, ?, ?, ?, ?, ?, ?
212
- WHERE (${condition.sql}) AND (${absence.sql})`).bind(...values, ...condition.bindings, ...absence.bindings);
235
+ ?, ?, ?, ?, ?, ?, ?, ?,
236
+ (SELECT execution.generation FROM wallet_operation_authorizations AS owner
237
+ JOIN wallet_execution_generations AS execution
238
+ USING(namespace, org_id, project_id, env_id, wallet_id)
239
+ WHERE owner.namespace = ? AND owner.tenant_id = ? AND owner.source_kind = ?
240
+ AND owner.source_id = ? AND owner.org_id = ? AND owner.project_id = ?
241
+ AND owner.env_id = ? AND execution.state = 'active')
242
+ WHERE (${condition.sql}) AND (${absence.sql})`).bind(...values, namespace, operation.tenantId, source.kind, source.kind === "authorization_grant" ? source.authorizationGrantRef.authorizationId : source.evidenceSetDigest, walletSignerScope.orgId, walletSignerScope.projectId, walletSignerScope.envId, ...condition.bindings, ...absence.bindings);
213
243
  }
214
244
  //#endregion
215
245
  export { prepareAuthorizedOperationAdmissionRead, prepareAuthorizedOperationCommittedRead, prepareAuthorizedOperationInsert, prepareAuthorizedOperationRead };