@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
@@ -1,5 +1,6 @@
1
1
  import type { CorrelationId } from '../../../../../shared-ts/src/utils/canonicalPrimitives';
2
2
  import type { RegistrationSignerSetSelection } from '../../../../../shared-ts/src/utils/registrationSignerPlan';
3
+ import type { RegistrationEstablishedSessionProjectionV2 } from '../../../../../shared-ts/src/utils/registrationEstablishedSession';
3
4
  import type { RegisterWalletInput, RegistrationAuthMethodInput } from '../../../../../shared-ts/src/utils/registrationAuthMethodInput';
4
5
  import type { RouterAbEcdsaRegistrationRequestV1, RouterAbEcdsaVerifiedClientActivationFactsV1 } from '../../../../../shared-ts/src/utils/routerAbEcdsaDerivation';
5
6
  import type { WalletRegistrationAuthorityInput, WalletRegistrationFinalizeSignerWork } from '../../../core/registrationContracts';
@@ -55,9 +56,8 @@ export type WalletRegistrationActivateInput = {
55
56
  * request, so the client has nothing to cross-check against and asking it
56
57
  * to supply one would be theatre.
57
58
  */
58
- readonly planKind: 'evm_family_ecdsa' | 'near_ed25519_and_evm_family_ecdsa' | 'near_ed25519';
59
- /** Absent exactly when the plan is Ed25519-only. */
60
- readonly ecdsa?: {
59
+ readonly planKind: 'evm_family_ecdsa' | 'near_ed25519_and_evm_family_ecdsa';
60
+ readonly ecdsa: {
61
61
  readonly activationCorrelationId: CorrelationId;
62
62
  readonly activationRequestDigestB64u: string;
63
63
  readonly clientActivation: RouterAbEcdsaVerifiedClientActivationFactsV1;
@@ -82,12 +82,12 @@ export type WalletRegistrationNearProvisioningInput = {
82
82
  }>['ed25519'];
83
83
  readonly emailOtpEnrollment?: unknown;
84
84
  /**
85
- * The custody ceremony's sealed output. An Ed25519-only wallet establishes
86
- * its custody *here* rather than at activate: activate returns
87
- * `near_pending` with no Yao result yet, so this deferred leg is the first
88
- * point at which that wallet has a key set to seal against.
85
+ * The custody ceremony's sealed output. NEAR-only registration commits its
86
+ * wallet and custody here after Yao and recovery backup complete.
89
87
  */
90
88
  readonly walletCustodyCommit?: unknown;
91
89
  readonly verifier: WalletRegistrationSetupVerifier;
90
+ /** Runs after session persistence, beside home publication. It exposes no response. */
91
+ readonly onSessionCommitted?: (session: RegistrationEstablishedSessionProjectionV2) => Promise<void>;
92
92
  };
93
93
  //# sourceMappingURL=walletRegistrationInputs.d.ts.map
@@ -1,3 +1,6 @@
1
+ import type { WalletSessionLocatorPublication } from '../../../authorization/sessionRouting';
2
+ import type { CommittedWalletRegistration } from '../../../authorization/domain';
3
+ import type { D1PreparedStatementLike } from '../../../storage/tenantRoute';
1
4
  import { type DeviceId } from '../../../../../shared-ts/src/authorization/capabilityKinds';
2
5
  import { type WalletAuthorityId, type WalletAuthMethodId, type WalletId } from '../../../../../shared-ts/src/utils/domainIds';
3
6
  import type { WalletRegistrationSetupInput } from './walletRegistrationInputs';
@@ -13,6 +16,8 @@ export type WalletRegistrationSetupReservation = {
13
16
  export type WalletRegistrationSetupReservationResult = {
14
17
  readonly ok: true;
15
18
  readonly reservation: WalletRegistrationSetupReservation;
19
+ /** The ownership generation the reserved wallet's custody objects are named by. */
20
+ readonly ownershipGeneration: number;
16
21
  readonly lifecycle: 'reserved' | 'established';
17
22
  readonly code?: never;
18
23
  readonly message?: never;
@@ -21,8 +26,14 @@ export type WalletRegistrationSetupReservationResult = {
21
26
  readonly code: string;
22
27
  readonly message: string;
23
28
  readonly reservation?: never;
29
+ readonly ownershipGeneration?: never;
24
30
  readonly lifecycle?: never;
25
31
  };
32
+ /** Persist custody addresses before setup completes, then start the reserved wallet objects. */
33
+ export type RegistrationWalletStarter = (registration: {
34
+ readonly walletId: WalletId;
35
+ readonly ownershipGeneration: number;
36
+ }) => Promise<void>;
26
37
  type ReservationOutcome = {
27
38
  readonly ok: true;
28
39
  } | {
@@ -30,22 +41,85 @@ type ReservationOutcome = {
30
41
  readonly code: string;
31
42
  readonly message: string;
32
43
  };
44
+ type RegistrationHomeAdmission<Purpose extends 'registration' | 'ordinary' = 'registration' | 'ordinary'> = {
45
+ readonly ok: true;
46
+ readonly ownershipGeneration: number;
47
+ readonly purpose: Purpose;
48
+ readonly code?: never;
49
+ readonly message?: never;
50
+ } | {
51
+ readonly ok: false;
52
+ readonly code: string;
53
+ readonly message: string;
54
+ readonly ownershipGeneration?: never;
55
+ readonly purpose?: never;
56
+ };
57
+ export interface WalletExecutionAuthority {
58
+ admitEstablishedHome(input: {
59
+ readonly walletId: WalletId;
60
+ }): Promise<RegistrationHomeAdmission<'ordinary'>>;
61
+ }
33
62
  export interface WalletRegistrationReservationAuthority {
34
63
  reserve(input: WalletRegistrationSetupInput): Promise<WalletRegistrationSetupReservationResult>;
35
64
  admitHome(input: {
36
65
  readonly ceremonyId: string;
37
66
  readonly walletId: WalletId;
38
- }): Promise<ReservationOutcome>;
67
+ }): Promise<RegistrationHomeAdmission>;
39
68
  complete(input: {
40
69
  readonly ceremonyId: string;
41
70
  readonly walletId: WalletId;
42
- readonly outcome: 'established' | 'cancelled';
71
+ } & ({
72
+ readonly outcome: 'established';
73
+ readonly session: WalletSessionLocatorPublication & {
74
+ readonly kind: 'credential';
75
+ };
76
+ } | {
77
+ readonly outcome: 'cancelled';
78
+ readonly session?: never;
79
+ })): Promise<ReservationOutcome>;
80
+ }
81
+ /**
82
+ * The local write that makes an established registration active. It follows
83
+ * the acknowledged directory write. It commits in the batch of the record
84
+ * that completes the registration operation, or it does not commit.
85
+ */
86
+ export type RegistrationActivationWrite = {
87
+ readonly statements: readonly D1PreparedStatementLike[];
88
+ };
89
+ export type RegistrationEstablishedPublication = {
90
+ readonly ok: true;
91
+ /** None when an earlier completion already activated the registration. */
92
+ readonly activation: RegistrationActivationWrite | null;
93
+ readonly code?: never;
94
+ readonly message?: never;
95
+ } | {
96
+ readonly ok: false;
97
+ readonly code: string;
98
+ readonly message: string;
99
+ readonly activation?: never;
100
+ };
101
+ /** The registration authority at the wallet's home, which owns the local activation. */
102
+ export interface WalletRegistrationHomeAuthority extends Pick<WalletRegistrationReservationAuthority, 'reserve' | 'admitHome'> {
103
+ /**
104
+ * Publishes the committed registration decision to its directory and prepares the
105
+ * activation. The caller commits the activation with its completion record.
106
+ */
107
+ publishEstablished(input: {
108
+ readonly registration: CommittedWalletRegistration;
109
+ readonly session: WalletSessionLocatorPublication & {
110
+ readonly kind: 'credential';
111
+ };
112
+ }): Promise<RegistrationEstablishedPublication>;
113
+ /** Fixes a definitive cancellation, publishes it, and retires the local home. */
114
+ cancel(input: {
115
+ readonly ceremonyId: string;
116
+ readonly walletId: WalletId;
43
117
  }): Promise<ReservationOutcome>;
44
118
  }
45
119
  export declare function parseWalletRegistrationSetupReservation(raw: unknown): WalletRegistrationSetupReservation;
46
- export declare function proposeWalletRegistrationSetup(input: WalletRegistrationSetupInput): WalletRegistrationSetupReservation;
47
- export declare function walletRegistrationSetupRequestDigest(namespace: string, input: WalletRegistrationSetupInput): Promise<string>;
48
- export declare function completeRegistrationReservation(authority: WalletRegistrationReservationAuthority | null, input: Parameters<WalletRegistrationReservationAuthority['complete']>[0]): Promise<ReservationOutcome>;
49
- export declare function admitRegistrationReservationHome(authority: WalletRegistrationReservationAuthority | null, input: Parameters<WalletRegistrationReservationAuthority['admitHome']>[0]): Promise<ReservationOutcome>;
120
+ export declare function proposeWalletRegistrationSetup(input: Pick<WalletRegistrationSetupInput, 'request'>): WalletRegistrationSetupReservation;
121
+ export declare function walletRegistrationSetupRequestDigest(namespace: string, input: Pick<WalletRegistrationSetupInput, 'request' | 'orgId' | 'expectedOrigin' | 'runtimePolicyScope'>): Promise<string>;
122
+ export declare function cancelRegistrationHome(authority: Pick<WalletRegistrationHomeAuthority, 'cancel'> | null, input: Parameters<WalletRegistrationHomeAuthority['cancel']>[0]): Promise<ReservationOutcome>;
123
+ export declare function admitRegistrationReservationHome(authority: Pick<WalletRegistrationReservationAuthority, 'admitHome'> | null, input: Parameters<WalletRegistrationReservationAuthority['admitHome']>[0]): Promise<RegistrationHomeAdmission>;
50
124
  export {};
51
125
  //# sourceMappingURL=walletRegistrationReservation.d.ts.map
@@ -1,15 +1,17 @@
1
+ import type { WalletRegistrationContextResolver } from '../../framework/apiCredentialPorts';
1
2
  import type { WalletRegistrationNearProvisioningResponseV2, WalletRegistrationNearAdmissionResponseV2, WalletRegistrationActivateRouteResponseV2, WalletRegistrationRespondResponseV2 } from '../../../core/threeRouteRegistrationContracts';
2
3
  import type { RouterApiPublishableKeyAuthAdapter } from '../../framework/routerApi';
3
4
  import type { RouterApiAuthorizationSessionService, RouterApiWalletRegistrationRouteService } from '../../framework/authServicePort';
4
5
  import type { FundImplicitNearAccountResult } from '../../../core/types';
5
6
  import type { CreateAddAuthMethodIntentResponse, CreateAddSignerIntentResponse, WalletAddSignerFinalizeResponse, WalletAddSignerEcdsaActivationResponse, WalletAddSignerEcdsaDerivationRespondResponse, WalletAddSignerStartResponse, WalletAddAuthMethodFinalizeResponse, WalletRevokeAuthMethodResponse, WalletAddAuthMethodStartResponse } from '../../../core/registrationContracts';
6
7
  import type { NormalizedRouterLogger } from '../../framework/logger';
7
- import type { RouterApiKeyAuthAdapter, RouterApiProjectEnvironmentResolver, SessionAdapter, RouterApiWalletProjectionAdapter } from '../../framework/routerApi';
8
+ import type { RouterApiKeyAuthAdapter, RouterApiProjectEnvironmentResolver, SessionAdapter } from '../../framework/routerApi';
8
9
  import type { HeaderRecord, RouteResponse } from '../../framework/routeExecutionContext';
9
10
  import type { RouteDefinition } from '../../framework/routeDefinitions';
10
11
  import type { SigningSessionSealRoutesOptions } from '../../../threshold/session/signingSessionSeal/signingSessionSeal.types';
11
12
  import type { RouteErrorBody } from '../../framework/routeResponses';
12
13
  import type { RouterAbPublicKeysetV2 } from '../../../../../shared-ts/src/utils/routerAbPublicKeyset';
14
+ import type { WalletRegistrationSetupRequest } from './walletRegistrationInputs';
13
15
  type RouterApiWalletRegistrationServices = {
14
16
  walletRegistration: RouterApiWalletRegistrationRouteService;
15
17
  authorizationSessions: RouterApiAuthorizationSessionService;
@@ -18,7 +20,7 @@ type RouterApiWalletRegistrationServices = {
18
20
  routerAbPublicKeyset?: RouterAbPublicKeysetV2 | null;
19
21
  session?: SessionAdapter | null;
20
22
  publishableKeyAuth?: RouterApiPublishableKeyAuthAdapter | null;
21
- walletProjection?: RouterApiWalletProjectionAdapter | null;
23
+ registrationContext?: WalletRegistrationContextResolver | null;
22
24
  };
23
25
  type RouterApiWalletRegistrationInput = {
24
26
  body: unknown;
@@ -31,7 +33,17 @@ type RouterApiWalletRegistrationInput = {
31
33
  services: RouterApiWalletRegistrationServices;
32
34
  sourceIp?: string;
33
35
  signingSessionSeal?: SigningSessionSealRoutesOptions | null;
36
+ waitUntil?: (promise: Promise<unknown>) => void;
34
37
  };
38
+ type ParseResult<T> = {
39
+ ok: true;
40
+ value: T;
41
+ } | {
42
+ ok: false;
43
+ code: 'invalid_body';
44
+ message: string;
45
+ };
46
+ export declare function parseWalletRegistrationSetupRequest(body: Record<string, unknown>): ParseResult<WalletRegistrationSetupRequest>;
35
47
  export declare function handleRouterApiWalletAddSignerIntent(input: RouterApiWalletRegistrationInput): Promise<RouteResponse<CreateAddSignerIntentResponse | RouteErrorBody>>;
36
48
  export declare function handleRouterApiWalletRegistrationSetup(input: RouterApiWalletRegistrationInput): Promise<RouteResponse>;
37
49
  /**
@@ -49,9 +61,7 @@ export declare function handleRouterApiWalletRegistrationNearAdmission(input: Ro
49
61
  */
50
62
  export declare function handleRouterApiWalletRegistrationActivate(input: RouterApiWalletRegistrationInput): Promise<RouteResponse<WalletRegistrationActivateRouteResponseV2 | RouteErrorBody>>;
51
63
  /**
52
- * `POST /wallets/register/near-provisioning` — the non-blocking completion
53
- * the client calls after activate, once its already-running Yao computation
54
- * produces an activation.
64
+ * Commits a NEAR-only wallet or completes a mixed wallet's deferred signer.
55
65
  */
56
66
  export declare function handleRouterApiWalletRegistrationNearProvisioning(input: RouterApiWalletRegistrationInput): Promise<RouteResponse<WalletRegistrationNearProvisioningResponseV2 | RouteErrorBody>>;
57
67
  export declare function handleRouterApiWalletAddSignerStart(input: RouterApiWalletRegistrationInput): Promise<RouteResponse<WalletAddSignerStartResponse | RouteErrorBody>>;
@@ -1,4 +1,6 @@
1
1
  import type { RouterApiKeyAuthFailureCode } from '../../../../shared-ts/src/utils/routerApiKeyAuth';
2
+ import type { WalletRegistrationSetupRequest } from '../domains/walletRegistration/walletRegistrationInputs';
3
+ import type { ReadonlyExclusiveUnion } from '../../../../shared-ts/src/utils/variant';
2
4
  export declare const ROUTER_API_CREDENTIAL_SCOPES: readonly ["accounts.create", "wallets.read", "wallets.auth_methods.create", "wallets.signers.create"];
3
5
  export type RouterApiCredentialScope = (typeof ROUTER_API_CREDENTIAL_SCOPES)[number];
4
6
  export type { RouterApiKeyAuthFailureCode };
@@ -47,6 +49,28 @@ export type RouterApiPublishableKeyAuthResult = {
47
49
  export interface RouterApiPublishableKeyAuthAdapter {
48
50
  authenticate(input: RouterApiPublishableKeyAuthRequest): Promise<RouterApiPublishableKeyAuthResult>;
49
51
  }
52
+ export type WalletRegistrationContextResult = ReadonlyExclusiveUnion<{
53
+ ok: true;
54
+ principal: RouterApiKeyPrincipal;
55
+ environment: RouterApiProjectEnvironment & {
56
+ readonly status: 'ACTIVE';
57
+ };
58
+ } | {
59
+ ok: false;
60
+ status: 401 | 403;
61
+ code: RouterApiPublishableKeyAuthFailureCode;
62
+ message: string;
63
+ } | {
64
+ ok: false;
65
+ status: 500;
66
+ code: 'registration_environment_unavailable';
67
+ message: string;
68
+ }>;
69
+ export interface WalletRegistrationContextResolver {
70
+ resolve(input: RouterApiPublishableKeyAuthRequest & {
71
+ readonly registration: WalletRegistrationSetupRequest;
72
+ }): Promise<WalletRegistrationContextResult>;
73
+ }
50
74
  export type RouterApiUsageMeterAction = 'wallet_created';
51
75
  export interface RouterApiUsageMeterEvent {
52
76
  orgId: string;
@@ -1,6 +1,7 @@
1
1
  import type { RouteResponse } from './routeExecutionContext';
2
- import type { D1EcdsaAdmissionPolicyRead } from '../cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore';
2
+ import type { D1EcdsaAdmissionPolicyRead, D1Ed25519AdmissionPolicyRead } from '../cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore';
3
3
  import type { EcdsaMaterialRead, EcdsaMaterialActivationReadInput } from '../../core/d1EcdsaSignerRead';
4
+ import type { Ed25519SignerRead } from '../../core/d1Ed25519SignerRead';
4
5
  import type { EcdsaMaterialReadSnapshot } from '../../core/ecdsaMaterialReadSnapshot';
5
6
  import type { DigestB64u } from '../../../../shared-ts/src/utils/canonicalPrimitives';
6
7
  import type { TenantRootIdentityV1 } from '../../../../shared-ts/src/tenant-root/tenantRootIdentity';
@@ -112,6 +113,12 @@ export type RouterApiWalletSessionSigningCandidate = {
112
113
  readonly candidate: RouterApiWalletSessionAuthorizationV2ExhaustedCandidateContext;
113
114
  readonly context?: never;
114
115
  };
116
+ /** An active session with the Ed25519 signer and policy rows its statement also read. */
117
+ export type RouterApiEd25519WalletSessionSigningRead = {
118
+ readonly context: RouterApiWalletSessionAuthorizationV2AdmissionContext;
119
+ readonly signerRead: Ed25519SignerRead;
120
+ readonly policyRead: D1Ed25519AdmissionPolicyRead;
121
+ };
115
122
  type RouterApiHostedWalletSessionAuthorizationV2AdmissionContext = RouterApiWalletSessionAuthorizationV2AdmissionContext & {
116
123
  readonly hostedCredentialId: HostedWalletSessionCredentialId;
117
124
  readonly appOrigin: SessionOrigin;
@@ -964,6 +971,8 @@ export interface RouterApiWalletRegistrationService {
964
971
  resolveEd25519MaterialActivation(input: {
965
972
  readonly walletId: string;
966
973
  readonly materialActivation: RouterAbMpcMaterialActivationRefWire;
974
+ /** Signer rows the caller's session statement already read for this wallet and activation. */
975
+ readonly signerRead?: Ed25519SignerRead;
967
976
  }): Promise<{
968
977
  readonly ok: true;
969
978
  readonly materialActivation: RouterAbMpcMaterialActivationRefWire;
@@ -1010,6 +1019,7 @@ export interface RouterApiWalletRegistrationService {
1010
1019
  readonly materialActivation: RouterAbMpcMaterialActivationRefWire;
1011
1020
  }): Promise<{
1012
1021
  readonly ok: true;
1022
+ readonly ownershipGeneration: number;
1013
1023
  readonly identityDigestB64u: string;
1014
1024
  readonly custodyLineageB64u: string;
1015
1025
  readonly projectEnvironmentId: string;
@@ -1024,7 +1034,7 @@ export interface RouterApiWalletRegistrationService {
1024
1034
  respondWalletRegistration(input: WalletRegistrationRespondInput, traceContext?: RouterAbTraceContextV1, serverTiming?: Array<readonly [string, number]>): Promise<WalletRegistrationRespondResponseV2>;
1025
1035
  authorizeWalletRegistrationNearAdmission(input: WalletRegistrationNearAdmissionInput): Promise<WalletRegistrationNearAdmissionResponseV2>;
1026
1036
  activateWalletRegistration(input: WalletRegistrationActivateInput, traceContext?: RouterAbTraceContextV1, serverTiming?: Array<readonly [string, number]>): Promise<WalletRegistrationActivateResponseV2>;
1027
- completeWalletRegistrationNearProvisioning(input: WalletRegistrationNearProvisioningInput, serverTiming?: Array<readonly [string, number]>): Promise<WalletRegistrationNearProvisioningResponseV2>;
1037
+ completeWalletRegistrationNearProvisioning(input: WalletRegistrationNearProvisioningInput, serverTiming?: Array<readonly [string, number]>, waitUntil?: (promise: Promise<unknown>) => void): Promise<WalletRegistrationNearProvisioningResponseV2>;
1028
1038
  refreshEd25519YaoWalletSession(input: RouterAbEd25519YaoBudgetRefreshRequestV1): Promise<RouterAbEd25519YaoBudgetRefreshResponseV1>;
1029
1039
  provisionEd25519YaoWalletSession(input: RouterAbEd25519YaoVerifiedWalletUnlockRequestV1): Promise<RouterAbEd25519YaoVerifiedWalletUnlockResponseV1>;
1030
1040
  recordEcdsaPostRegistrationProof(input: {
@@ -1308,15 +1318,13 @@ export interface RouterApiServiceBag {
1308
1318
  export interface RouterApiAuthorizedOperationService {
1309
1319
  resolveEcdsaWalletSessionOperation(input: import('../../authorization/ecdsaWalletSessionAdmission').EcdsaWalletSessionAdmissionInput): Promise<import('../../authorization/ecdsaWalletSessionAdmission').EcdsaWalletSessionResolutionResult>;
1310
1320
  admitEcdsaWalletSessionOperation(input: import('../../authorization/ecdsaWalletSessionAdmission').EcdsaWalletSessionAdmissionInput): Promise<import('../../authorization/ecdsaWalletSessionAdmission').EcdsaWalletSessionAdmissionResult>;
1321
+ admitEd25519WalletSessionOperation(input: import('../../authorization/ed25519WalletSessionAdmission').Ed25519WalletSessionAdmissionInput): Promise<import('../../authorization/ed25519WalletSessionAdmission').Ed25519WalletSessionAdmissionResult>;
1322
+ resolveEd25519WalletSessionOperation(input: import('../../authorization/ed25519WalletSessionAdmission').Ed25519WalletSessionResolutionInput): Promise<import('../../authorization/ed25519WalletSessionAdmission').Ed25519WalletSessionResolutionResult>;
1311
1323
  readonly tenantId: TenantId;
1312
1324
  readPinnedOwnerWalletScope(input: {
1313
1325
  readonly operation: AuthorizedOperation;
1314
1326
  readonly walletId: WalletId;
1315
- }): Promise<{
1316
- readonly orgId: string;
1317
- readonly projectId: string;
1318
- readonly projectEnvironmentId: string;
1319
- }>;
1327
+ }): Promise<import('../../authorization/ecdsaWalletSessionAdmission').PinnedOwnerWalletScope>;
1320
1328
  buildVerifiedOwnerProof(input: VerifiedOwnerProofInput): Promise<VerifiedOwnerProof>;
1321
1329
  recordVerifiedWalletOperationFactorEvidenceSet(input: VerifiedWalletOperationFactorEvidenceSetInput): Promise<VerifiedAuthorizationEvidenceSet>;
1322
1330
  readAuthorizedOperationById(input: {
@@ -1370,6 +1378,12 @@ export interface RouterApiAuthorizationSessionService {
1370
1378
  readonly nowMs: number;
1371
1379
  readonly materialActivation: RouterAbMpcMaterialActivationRefWire;
1372
1380
  }) => Promise<RouterApiWalletSessionSigningCandidate | null>;
1381
+ readonly readEd25519WalletSessionSigningReadByOperationCredential: (input: {
1382
+ readonly tenantId: TenantId;
1383
+ readonly token: string;
1384
+ readonly nowMs: number;
1385
+ readonly materialActivation: RouterAbMpcMaterialActivationRefWire;
1386
+ }) => Promise<RouterApiEd25519WalletSessionSigningRead | null>;
1373
1387
  readonly readWalletSessionExactOperationContextByCredential: (input: {
1374
1388
  readonly tenantId: TenantId;
1375
1389
  readonly token: string;
@@ -9,18 +9,9 @@ import type { RouterAbPublicKeysetV2 } from '../../../../shared-ts/src/utils/rou
9
9
  import type { RouterAbNormalSigningAdmissionAdapter } from '../domains/signingOperations/routerAbNormalSigningAdmission';
10
10
  import type { RouterAbEd25519YaoProductRegistrationRuntimeV1 } from '../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration';
11
11
  import type { RouterAbEcdsaStrictPostRegistrationPort } from '../domains/ecdsa/routerAbEcdsaStrictRegistration';
12
- import type { RouterApiKeyAuthAdapter, RouterApiProjectEnvironmentResolver, RouterApiPublishableKeyAuthAdapter, RouterApiUsageMeterAdapter } from './apiCredentialPorts';
12
+ import type { RouterApiKeyAuthAdapter, RouterApiProjectEnvironmentResolver, RouterApiPublishableKeyAuthAdapter, RouterApiUsageMeterAdapter, WalletRegistrationContextResolver } from './apiCredentialPorts';
13
13
  import type { SessionParseResult } from '../../core/sessionValidation';
14
14
  export type { RouterApiCredentialScope, RouterApiKeyAuthAdapter, RouterApiKeyAuthFailureCode, RouterApiKeyAuthRequest, RouterApiKeyAuthResult, RouterApiKeyPrincipal, RouterApiProjectEnvironment, RouterApiProjectEnvironmentResolver, RouterApiPublishableKeyAuthAdapter, RouterApiPublishableKeyAuthFailureCode, RouterApiPublishableKeyAuthRequest, RouterApiPublishableKeyAuthResult, RouterApiUsageMeterAction, RouterApiUsageMeterAdapter, RouterApiUsageMeterEvent, } from './apiCredentialPorts';
15
- export interface RouterApiWalletProjectionEvent {
16
- readonly orgId: string;
17
- readonly runtimePolicyScope: RuntimePolicyScope;
18
- readonly walletId: string;
19
- readonly occurredAt: string;
20
- }
21
- export interface RouterApiWalletProjectionAdapter {
22
- recordCreatedWallet(input: RouterApiWalletProjectionEvent): Promise<void>;
23
- }
24
15
  export type SessionClaims = Record<string, unknown>;
25
16
  export declare const DEFAULT_SESSION_COOKIE_NAME = "seams-jwt";
26
17
  /**
@@ -164,6 +155,8 @@ export interface RouterApiOptions {
164
155
  * API credential routes like signed delegate execution.
165
156
  */
166
157
  publishableKeyAuth?: RouterApiPublishableKeyAuthAdapter | null;
158
+ /** Fresh credential and active-environment resolution for registration setup. */
159
+ registrationContext?: WalletRegistrationContextResolver | null;
167
160
  /**
168
161
  * Optional Router API usage-meter adapter used to emit host runtime events.
169
162
  */
@@ -214,8 +207,6 @@ export interface RouterApiOptions {
214
207
  * Optional org/project/environment service used to resolve environment -> project scope.
215
208
  */
216
209
  orgProjectEnv?: RouterApiProjectEnvironmentResolver | null;
217
- /** Projects successfully created wallets into the customer Console index. */
218
- walletProjection?: RouterApiWalletProjectionAdapter | null;
219
210
  logger?: RouterLogger | null;
220
211
  }
221
212
  //# sourceMappingURL=routerApi.d.ts.map
@@ -0,0 +1,37 @@
1
+ import type { AuthorizedOperationId, TenantId } from '../../../../../../shared-ts/src/authorization/capabilityKinds';
2
+ import type { CapabilityOperationFingerprintDigest } from '../../../../../../shared-ts/src/authorization/operationFingerprint';
3
+ import type { WalletId } from '../../../../../../shared-ts/src/utils/domainIds';
4
+ import type { AuthorizedOperation } from '../../../../authorization/domain';
5
+ import type { PinnedOwnerWalletScope } from '../../../../authorization/ecdsaWalletSessionAdmission';
6
+ import type { FetchRouterApiContext } from '../createFetchRouter';
7
+ type Revalidated<Result> = Result | {
8
+ readonly ok: false;
9
+ readonly response: Response;
10
+ };
11
+ export declare function revalidateEd25519StepUpOperation(input: {
12
+ readonly ctx: FetchRouterApiContext;
13
+ readonly operation: AuthorizedOperation;
14
+ }): Promise<Revalidated<{
15
+ readonly ok: true;
16
+ readonly operation: AuthorizedOperation;
17
+ }>>;
18
+ /**
19
+ * Finds the operation a reusable Wallet Session prepared and checks that its
20
+ * grant is still active. A live operation returns the owner scope its
21
+ * admission row pinned. A completed operation returns none: it replays its
22
+ * stored response. The operation is read by its fingerprint, so a receipt
23
+ * that names another operation ID has no stored operation.
24
+ */
25
+ export declare function resolveEd25519WalletSessionOperation(input: {
26
+ readonly ctx: FetchRouterApiContext;
27
+ readonly tenantId: TenantId;
28
+ readonly authorizedOperationId: AuthorizedOperationId;
29
+ readonly operationFingerprintDigest: CapabilityOperationFingerprintDigest;
30
+ readonly walletId: WalletId;
31
+ }): Promise<Revalidated<{
32
+ readonly ok: true;
33
+ readonly operation: AuthorizedOperation;
34
+ readonly ownerScope: PinnedOwnerWalletScope | null;
35
+ }>>;
36
+ export {};
37
+ //# sourceMappingURL=ed25519AuthorizedOperationRevalidation.d.ts.map
@@ -1,27 +1,11 @@
1
1
  import type { FetchRouterApiContext } from '../createFetchRouter';
2
2
  import { type RouterAbEcdsaPoolFillInitRouteRequest, type RouterAbEcdsaPoolFillStepRouteRequest } from '../../../domains/ecdsa/thresholdEcdsaRequestValidation';
3
3
  import type { RouterAbEcdsaDerivationPoolFillBinding } from '../../../../core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers';
4
- import type { RouterApiAuthorizedOperationService } from '../../../framework/authServicePort';
5
4
  import type { WalletSessionOperationCredentialV1 } from '../../../../../../shared-ts/src/device-linking/contracts';
6
- import { type AuthorizedOperation, type VerifiedOwnerProof } from '../../../../authorization/domain';
5
+ import { type VerifiedOwnerProof } from '../../../../authorization/domain';
7
6
  type VerifiedOwnerWalletSessionProof = Extract<VerifiedOwnerProof, {
8
7
  readonly purpose: 'wallet_session';
9
8
  }>;
10
- type EcdsaSigningGatewayTiming = {
11
- authorize: number | null;
12
- admit: number | null;
13
- proxy: number | null;
14
- complete: number | null;
15
- total: number | null;
16
- };
17
- export declare function finishRouterAbEcdsaSigningResponse(input: {
18
- readonly phase: 'prepare' | 'finalize';
19
- readonly upstream: Response;
20
- readonly operation: AuthorizedOperation;
21
- readonly authorizedOperations: RouterApiAuthorizedOperationService;
22
- readonly timing: Pick<EcdsaSigningGatewayTiming, 'proxy' | 'complete'>;
23
- readonly proxyStartedAt: number;
24
- }): Promise<Response>;
25
9
  type RouterAbEcdsaPoolFillAuthorizationResult = {
26
10
  readonly ok: true;
27
11
  readonly binding: RouterAbEcdsaDerivationPoolFillBinding;
@@ -2,7 +2,7 @@ import type { OrgId } from '../../../shared-ts/src/utils/domainIds';
2
2
  export type { OrgId } from '../../../shared-ts/src/utils/domainIds';
3
3
  export type TenantStorageBackendFamily = 'cloudflare_d1_do' | 'postgres';
4
4
  export type CloudflareTenantTopology = 'shared' | 'dedicated_tenant';
5
- export type TenantDataJurisdiction = 'automatic' | 'wnam' | 'enam' | 'weur' | 'eeur' | 'apac';
5
+ export type TenantDataJurisdiction = 'automatic' | 'wnam' | 'enam' | 'weur' | 'eeur' | 'apac' | 'oc';
6
6
  export type PostgresMigrationReason = 'd1_size_limit' | 'd1_throughput_limit' | 'logical_database_required';
7
7
  export type NamespaceId = string;
8
8
  export type RouteVersion = number;
@@ -0,0 +1,16 @@
1
+ CREATE TABLE wallet_relocation_challenges (
2
+ namespace TEXT NOT NULL,
3
+ org_id TEXT NOT NULL,
4
+ project_id TEXT NOT NULL,
5
+ env_id TEXT NOT NULL,
6
+ wallet_id TEXT NOT NULL,
7
+ move_id TEXT NOT NULL,
8
+ binding_json TEXT NOT NULL CHECK (json_valid(binding_json)),
9
+ challenge_b64u TEXT NOT NULL,
10
+ created_at_ms INTEGER NOT NULL CHECK (created_at_ms > 0),
11
+ expires_at_ms INTEGER NOT NULL,
12
+ consumed_at_ms INTEGER,
13
+ PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id, move_id),
14
+ CHECK (expires_at_ms > created_at_ms AND expires_at_ms - created_at_ms <= 300000),
15
+ CHECK (consumed_at_ms IS NULL OR (consumed_at_ms >= created_at_ms AND consumed_at_ms < expires_at_ms))
16
+ );
@@ -0,0 +1,14 @@
1
+ CREATE TABLE wallet_relocation_approvals (
2
+ namespace TEXT NOT NULL,
3
+ org_id TEXT NOT NULL,
4
+ project_id TEXT NOT NULL,
5
+ env_id TEXT NOT NULL,
6
+ wallet_id TEXT NOT NULL,
7
+ move_id TEXT NOT NULL,
8
+ binding_json TEXT NOT NULL CHECK (json_valid(binding_json)),
9
+ authority_digest_b64u TEXT NOT NULL,
10
+ authority_revocation_epoch INTEGER NOT NULL CHECK (authority_revocation_epoch >= 0),
11
+ approved_at_ms INTEGER NOT NULL CHECK (approved_at_ms > 0),
12
+ expires_at_ms INTEGER NOT NULL CHECK (expires_at_ms > approved_at_ms),
13
+ PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id, move_id)
14
+ );
@@ -0,0 +1,92 @@
1
+ -- Add the relocation-bound Email OTP challenge purpose.
2
+
3
+ PRAGMA defer_foreign_keys = ON;
4
+
5
+ DROP INDEX email_otp_challenges_context_idx;
6
+ DROP INDEX email_otp_challenges_expires_idx;
7
+
8
+ ALTER TABLE email_otp_challenges RENAME TO email_otp_challenges_previous;
9
+
10
+ CREATE TABLE email_otp_challenges (
11
+ namespace TEXT NOT NULL,
12
+ org_id TEXT NOT NULL,
13
+ project_id TEXT NOT NULL,
14
+ env_id TEXT NOT NULL,
15
+ challenge_id TEXT NOT NULL,
16
+ challenge_subject_id TEXT NOT NULL,
17
+ wallet_id TEXT NOT NULL,
18
+ record_org_id TEXT NOT NULL,
19
+ otp_channel TEXT NOT NULL,
20
+ owner_proof_binding_digest TEXT NOT NULL,
21
+ action TEXT NOT NULL,
22
+ operation TEXT NOT NULL,
23
+ otp_code TEXT NOT NULL,
24
+ record_json TEXT NOT NULL,
25
+ created_at_ms INTEGER NOT NULL,
26
+ expires_at_ms INTEGER NOT NULL,
27
+ PRIMARY KEY (namespace, org_id, project_id, env_id, challenge_id),
28
+ CHECK (length(namespace) > 0),
29
+ CHECK (length(org_id) > 0),
30
+ CHECK (length(project_id) > 0),
31
+ CHECK (length(env_id) > 0),
32
+ CHECK (length(challenge_id) > 0),
33
+ CHECK (length(challenge_subject_id) > 0),
34
+ CHECK (length(wallet_id) > 0),
35
+ CHECK (length(record_org_id) > 0),
36
+ CHECK (otp_channel = 'email_otp'),
37
+ CHECK (length(owner_proof_binding_digest) > 0),
38
+ CHECK (
39
+ action IN (
40
+ 'wallet_email_otp_login',
41
+ 'wallet_email_otp_registration',
42
+ 'wallet_email_otp_device_recovery',
43
+ 'wallet_email_otp_device_link',
44
+ 'wallet_email_otp_recovery_bootstrap',
45
+ 'wallet_email_otp_relocation'
46
+ )
47
+ ),
48
+ CHECK (operation IN ('wallet_unlock', 'transaction_sign', 'export_key', 'registration', 'device_link', 'wallet_relocation')),
49
+ CHECK ((action = 'wallet_email_otp_relocation') = (operation = 'wallet_relocation')),
50
+ CHECK (length(otp_code) > 0),
51
+ CHECK (json_valid(record_json)),
52
+ CHECK (created_at_ms > 0),
53
+ CHECK (expires_at_ms > created_at_ms),
54
+ CHECK (COALESCE(json_extract(record_json, '$.version') = 'email_otp_challenge_v1', 0)),
55
+ CHECK (COALESCE(json_extract(record_json, '$.challengeId') = challenge_id, 0)),
56
+ CHECK (COALESCE(json_extract(record_json, '$.challengeSubjectId') = challenge_subject_id, 0)),
57
+ CHECK (COALESCE(json_extract(record_json, '$.walletId') = wallet_id, 0)),
58
+ CHECK (COALESCE(json_extract(record_json, '$.orgId') = record_org_id, 0)),
59
+ CHECK (COALESCE(json_extract(record_json, '$.otpChannel') = otp_channel, 0)),
60
+ CHECK (
61
+ COALESCE(json_extract(record_json, '$.ownerProofBindingDigest') = owner_proof_binding_digest, 0)
62
+ ),
63
+ CHECK (COALESCE(json_extract(record_json, '$.action') = action, 0)),
64
+ CHECK (COALESCE(json_extract(record_json, '$.operation') = operation, 0)),
65
+ CHECK (COALESCE(json_extract(record_json, '$.otpCode') = otp_code, 0)),
66
+ CHECK (COALESCE(json_extract(record_json, '$.createdAtMs') = created_at_ms, 0)),
67
+ CHECK (COALESCE(json_extract(record_json, '$.expiresAtMs') = expires_at_ms, 0))
68
+ );
69
+
70
+ INSERT INTO email_otp_challenges (
71
+ namespace, org_id, project_id, env_id, challenge_id, challenge_subject_id,
72
+ wallet_id, record_org_id, otp_channel, owner_proof_binding_digest, action,
73
+ operation, otp_code, record_json, created_at_ms, expires_at_ms
74
+ )
75
+ SELECT namespace, org_id, project_id, env_id, challenge_id, challenge_subject_id,
76
+ wallet_id, record_org_id, otp_channel, owner_proof_binding_digest, action,
77
+ operation, otp_code, record_json, created_at_ms, expires_at_ms
78
+ FROM email_otp_challenges_previous;
79
+
80
+ DROP TABLE email_otp_challenges_previous;
81
+
82
+ CREATE INDEX email_otp_challenges_context_idx
83
+ ON email_otp_challenges (
84
+ namespace, org_id, project_id, env_id, challenge_subject_id, wallet_id,
85
+ record_org_id, otp_channel, owner_proof_binding_digest, action, operation,
86
+ expires_at_ms, created_at_ms
87
+ );
88
+
89
+ CREATE INDEX email_otp_challenges_expires_idx
90
+ ON email_otp_challenges (namespace, org_id, project_id, env_id, expires_at_ms);
91
+
92
+ PRAGMA defer_foreign_keys = OFF;