@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
@@ -0,0 +1,86 @@
1
+ -- Reject unfinished transfers. Completed receipts remain immutable.
2
+ CREATE TABLE wallet_recovery_relocation_upgrade_guard (count INTEGER NOT NULL CHECK (count = 0));
3
+ INSERT INTO wallet_recovery_relocation_upgrade_guard
4
+ SELECT (SELECT COUNT(*) FROM wallet_relocation_authorization_snapshots AS snapshot
5
+ WHERE NOT EXISTS (
6
+ SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
7
+ WHERE cleanup.namespace = snapshot.namespace AND cleanup.org_id = snapshot.org_id
8
+ AND cleanup.project_id = snapshot.project_id AND cleanup.env_id = snapshot.env_id
9
+ AND cleanup.wallet_id = snapshot.wallet_id AND cleanup.move_id = snapshot.move_id
10
+ AND cleanup.request_digest_hex = snapshot.request_digest_hex
11
+ AND cleanup.source_generation = snapshot.source_generation
12
+ AND cleanup.state = 'cleaned'))
13
+ + (SELECT COUNT(*) FROM wallet_relocation_authorization_imports WHERE state != 'activated');
14
+ DROP TABLE wallet_recovery_relocation_upgrade_guard;
15
+
16
+ CREATE TRIGGER wallet_recovery_code_locators_relocation_frozen_insert
17
+ BEFORE INSERT ON wallet_recovery_code_locators
18
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
19
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
20
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
21
+ AND fence.wallet_id = NEW.wallet_id)
22
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
23
+
24
+ CREATE TRIGGER wallet_recovery_code_locators_relocation_frozen_update
25
+ BEFORE UPDATE ON wallet_recovery_code_locators
26
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
27
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
28
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
29
+ AND fence.wallet_id = OLD.wallet_id)
30
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
31
+
32
+ CREATE TRIGGER wallet_recovery_code_locators_relocation_frozen_delete
33
+ BEFORE DELETE ON wallet_recovery_code_locators
34
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
35
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
36
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
37
+ AND fence.wallet_id = OLD.wallet_id
38
+ AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
39
+ WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
40
+ AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
41
+ AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
42
+ AND cleanup.request_digest_hex = fence.request_digest_hex
43
+ AND cleanup.source_generation = fence.source_generation AND cleanup.state = 'cleaning'))
44
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
45
+
46
+ CREATE TRIGGER wallet_recovery_code_locators_relocation_inactive_insert
47
+ BEFORE INSERT ON wallet_recovery_code_locators
48
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
49
+ WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
50
+ AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
51
+ AND destination.wallet_id = NEW.wallet_id AND destination.state != 'activated')
52
+ AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_context AS context
53
+ JOIN wallet_relocation_authorization_imports AS destination
54
+ ON destination.namespace = context.namespace AND destination.org_id = context.org_id
55
+ AND destination.project_id = context.project_id AND destination.env_id = context.env_id
56
+ AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
57
+ AND destination.request_digest_hex = context.request_digest_hex
58
+ AND destination.source_generation = context.source_generation
59
+ WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
60
+ AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
61
+ AND context.wallet_id = NEW.wallet_id
62
+ AND destination.state = 'importing' AND context.table_name = 'wallet_recovery_code_locators'
63
+ AND context.record_key = json_array(NEW.env_id, NEW.locator_b64u, NEW.namespace, NEW.org_id, NEW.project_id))
64
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
65
+
66
+ CREATE TRIGGER wallet_recovery_code_locators_relocation_inactive_update
67
+ BEFORE UPDATE ON wallet_recovery_code_locators
68
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
69
+ WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
70
+ AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
71
+ AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
72
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
73
+
74
+ CREATE TRIGGER wallet_recovery_code_locators_relocation_inactive_delete
75
+ BEFORE DELETE ON wallet_recovery_code_locators
76
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
77
+ WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
78
+ AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
79
+ AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
80
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
81
+
82
+ CREATE TRIGGER wallet_recovery_code_locators_relocation_owner_immutable
83
+ BEFORE UPDATE ON wallet_recovery_code_locators
84
+ WHEN NEW.namespace IS NOT OLD.namespace OR NEW.org_id IS NOT OLD.org_id OR NEW.project_id IS NOT OLD.project_id OR NEW.env_id IS NOT OLD.env_id OR NEW.wallet_id IS NOT OLD.wallet_id
85
+ BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
86
+
@@ -0,0 +1,158 @@
1
+ -- Snapshot inventories must not change during an in-progress transfer.
2
+ CREATE TABLE wallet_email_auth_relocation_upgrade_guard (count INTEGER NOT NULL CHECK (count = 0));
3
+ INSERT INTO wallet_email_auth_relocation_upgrade_guard
4
+ SELECT (SELECT COUNT(*) FROM wallet_relocation_authorization_snapshots AS snapshot
5
+ WHERE NOT EXISTS (
6
+ SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
7
+ WHERE cleanup.namespace = snapshot.namespace AND cleanup.org_id = snapshot.org_id
8
+ AND cleanup.project_id = snapshot.project_id AND cleanup.env_id = snapshot.env_id
9
+ AND cleanup.wallet_id = snapshot.wallet_id AND cleanup.move_id = snapshot.move_id
10
+ AND cleanup.request_digest_hex = snapshot.request_digest_hex
11
+ AND cleanup.source_generation = snapshot.source_generation
12
+ AND cleanup.state = 'cleaned'))
13
+ + (SELECT COUNT(*) FROM wallet_relocation_authorization_imports WHERE state != 'activated');
14
+ DROP TABLE wallet_email_auth_relocation_upgrade_guard;
15
+
16
+ -- Enrollment and lockout state follow the wallet, including its sealed factor.
17
+
18
+ CREATE TRIGGER email_otp_wallet_enrollments_relocation_frozen_insert
19
+ BEFORE INSERT ON email_otp_wallet_enrollments
20
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
21
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
22
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
23
+ AND fence.wallet_id = NEW.wallet_id)
24
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
25
+
26
+ CREATE TRIGGER email_otp_wallet_enrollments_relocation_frozen_update
27
+ BEFORE UPDATE ON email_otp_wallet_enrollments
28
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
29
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
30
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
31
+ AND fence.wallet_id = OLD.wallet_id)
32
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
33
+
34
+ CREATE TRIGGER email_otp_wallet_enrollments_relocation_frozen_delete
35
+ BEFORE DELETE ON email_otp_wallet_enrollments
36
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
37
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
38
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
39
+ AND fence.wallet_id = OLD.wallet_id
40
+ AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
41
+ WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
42
+ AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
43
+ AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
44
+ AND cleanup.request_digest_hex = fence.request_digest_hex
45
+ AND cleanup.source_generation = fence.source_generation AND cleanup.state = 'cleaning'))
46
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
47
+
48
+ CREATE TRIGGER email_otp_wallet_enrollments_relocation_inactive_insert
49
+ BEFORE INSERT ON email_otp_wallet_enrollments
50
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
51
+ WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
52
+ AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
53
+ AND destination.wallet_id = NEW.wallet_id AND destination.state != 'activated')
54
+ AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_context AS context
55
+ JOIN wallet_relocation_authorization_imports AS destination
56
+ ON destination.namespace = context.namespace AND destination.org_id = context.org_id
57
+ AND destination.project_id = context.project_id AND destination.env_id = context.env_id
58
+ AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
59
+ AND destination.request_digest_hex = context.request_digest_hex
60
+ AND destination.source_generation = context.source_generation
61
+ WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
62
+ AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
63
+ AND context.wallet_id = NEW.wallet_id
64
+ AND destination.state = 'importing' AND context.table_name = 'email_otp_wallet_enrollments'
65
+ AND context.record_key = json_array(NEW.env_id, NEW.namespace, NEW.org_id, NEW.project_id, NEW.wallet_id))
66
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
67
+
68
+ CREATE TRIGGER email_otp_wallet_enrollments_relocation_inactive_update
69
+ BEFORE UPDATE ON email_otp_wallet_enrollments
70
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
71
+ WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
72
+ AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
73
+ AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
74
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
75
+
76
+ CREATE TRIGGER email_otp_wallet_enrollments_relocation_inactive_delete
77
+ BEFORE DELETE ON email_otp_wallet_enrollments
78
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
79
+ WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
80
+ AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
81
+ AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
82
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
83
+
84
+ CREATE TRIGGER email_otp_wallet_enrollments_relocation_owner_immutable
85
+ BEFORE UPDATE ON email_otp_wallet_enrollments
86
+ WHEN NEW.namespace IS NOT OLD.namespace OR NEW.org_id IS NOT OLD.org_id OR NEW.project_id IS NOT OLD.project_id OR NEW.env_id IS NOT OLD.env_id OR NEW.wallet_id IS NOT OLD.wallet_id
87
+ BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
88
+
89
+ CREATE TRIGGER email_otp_auth_states_relocation_frozen_insert
90
+ BEFORE INSERT ON email_otp_auth_states
91
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
92
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
93
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
94
+ AND fence.wallet_id = NEW.wallet_id)
95
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
96
+
97
+ CREATE TRIGGER email_otp_auth_states_relocation_frozen_update
98
+ BEFORE UPDATE ON email_otp_auth_states
99
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
100
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
101
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
102
+ AND fence.wallet_id = OLD.wallet_id)
103
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
104
+
105
+ CREATE TRIGGER email_otp_auth_states_relocation_frozen_delete
106
+ BEFORE DELETE ON email_otp_auth_states
107
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
108
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
109
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
110
+ AND fence.wallet_id = OLD.wallet_id
111
+ AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
112
+ WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
113
+ AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
114
+ AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
115
+ AND cleanup.request_digest_hex = fence.request_digest_hex
116
+ AND cleanup.source_generation = fence.source_generation AND cleanup.state = 'cleaning'))
117
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
118
+
119
+ CREATE TRIGGER email_otp_auth_states_relocation_inactive_insert
120
+ BEFORE INSERT ON email_otp_auth_states
121
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
122
+ WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
123
+ AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
124
+ AND destination.wallet_id = NEW.wallet_id AND destination.state != 'activated')
125
+ AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_context AS context
126
+ JOIN wallet_relocation_authorization_imports AS destination
127
+ ON destination.namespace = context.namespace AND destination.org_id = context.org_id
128
+ AND destination.project_id = context.project_id AND destination.env_id = context.env_id
129
+ AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
130
+ AND destination.request_digest_hex = context.request_digest_hex
131
+ AND destination.source_generation = context.source_generation
132
+ WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
133
+ AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
134
+ AND context.wallet_id = NEW.wallet_id
135
+ AND destination.state = 'importing' AND context.table_name = 'email_otp_auth_states'
136
+ AND context.record_key = json_array(NEW.env_id, NEW.namespace, NEW.org_id, NEW.project_id, NEW.wallet_id))
137
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
138
+
139
+ CREATE TRIGGER email_otp_auth_states_relocation_inactive_update
140
+ BEFORE UPDATE ON email_otp_auth_states
141
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
142
+ WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
143
+ AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
144
+ AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
145
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
146
+
147
+ CREATE TRIGGER email_otp_auth_states_relocation_inactive_delete
148
+ BEFORE DELETE ON email_otp_auth_states
149
+ WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
150
+ WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
151
+ AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
152
+ AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
153
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
154
+
155
+ CREATE TRIGGER email_otp_auth_states_relocation_owner_immutable
156
+ BEFORE UPDATE ON email_otp_auth_states
157
+ WHEN NEW.namespace IS NOT OLD.namespace OR NEW.org_id IS NOT OLD.org_id OR NEW.project_id IS NOT OLD.project_id OR NEW.env_id IS NOT OLD.env_id OR NEW.wallet_id IS NOT OLD.wallet_id
158
+ BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
@@ -0,0 +1,107 @@
1
+ -- A cleaned location can host a later generation without erasing old cleanup receipts.
2
+ CREATE TABLE wallet_relocation_authorization_returns (
3
+ namespace TEXT NOT NULL, org_id TEXT NOT NULL, project_id TEXT NOT NULL, env_id TEXT NOT NULL,
4
+ wallet_id TEXT NOT NULL, move_id TEXT NOT NULL, request_digest_hex TEXT NOT NULL,
5
+ source_generation INTEGER NOT NULL,
6
+ previous_move_id TEXT NOT NULL, previous_request_digest_hex TEXT NOT NULL,
7
+ retired_generation INTEGER NOT NULL,
8
+ PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id, move_id),
9
+ UNIQUE (namespace, org_id, project_id, env_id, wallet_id, retired_generation),
10
+ CHECK (retired_generation > 0 AND source_generation > retired_generation)
11
+ );
12
+
13
+ CREATE TRIGGER wallet_authorization_return_cleaned
14
+ BEFORE INSERT ON wallet_relocation_authorization_returns
15
+ WHEN NOT EXISTS (
16
+ SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
17
+ JOIN wallet_execution_generations AS execution USING (namespace, org_id, project_id, env_id, wallet_id)
18
+ WHERE cleanup.namespace = NEW.namespace AND cleanup.org_id = NEW.org_id
19
+ AND cleanup.project_id = NEW.project_id AND cleanup.env_id = NEW.env_id
20
+ AND cleanup.wallet_id = NEW.wallet_id AND cleanup.move_id = NEW.previous_move_id
21
+ AND cleanup.request_digest_hex = NEW.previous_request_digest_hex
22
+ AND cleanup.source_generation = NEW.retired_generation AND cleanup.state = 'cleaned'
23
+ AND execution.generation = NEW.retired_generation AND execution.state = 'retired'
24
+ )
25
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_return_requires_cleanup'); END;
26
+
27
+ CREATE TRIGGER wallet_authorization_return_immutable
28
+ BEFORE UPDATE ON wallet_relocation_authorization_returns
29
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_return_immutable'); END;
30
+ CREATE TRIGGER wallet_authorization_return_retained
31
+ BEFORE DELETE ON wallet_relocation_authorization_returns
32
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_return_retained'); END;
33
+
34
+ DROP TRIGGER wallet_relocation_authorization_import_retain;
35
+ CREATE TRIGGER wallet_relocation_authorization_import_retain
36
+ BEFORE DELETE ON wallet_relocation_authorization_imports
37
+ WHEN NOT EXISTS (
38
+ SELECT 1 FROM wallet_relocation_authorization_returns AS returned
39
+ WHERE returned.namespace = OLD.namespace AND returned.org_id = OLD.org_id
40
+ AND returned.project_id = OLD.project_id AND returned.env_id = OLD.env_id
41
+ AND returned.wallet_id = OLD.wallet_id
42
+ AND OLD.source_generation + 1 = returned.retired_generation AND OLD.state = 'activated'
43
+ )
44
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_import_retained'); END;
45
+
46
+ DROP TRIGGER wallet_authorization_intake_retained;
47
+ CREATE TRIGGER wallet_authorization_intake_retained
48
+ BEFORE DELETE ON wallet_relocation_authorization_intakes
49
+ WHEN NOT EXISTS (
50
+ SELECT 1 FROM wallet_relocation_authorization_returns AS returned
51
+ WHERE returned.namespace = OLD.namespace AND returned.org_id = OLD.org_id
52
+ AND returned.project_id = OLD.project_id AND returned.env_id = OLD.env_id
53
+ AND returned.wallet_id = OLD.wallet_id
54
+ AND OLD.source_generation + 1 = returned.retired_generation AND OLD.state = 'verified'
55
+ )
56
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_intake_retained'); END;
57
+
58
+ DROP TRIGGER wallet_authorization_snapshot_delete;
59
+ CREATE TRIGGER wallet_authorization_snapshot_delete
60
+ BEFORE DELETE ON wallet_relocation_authorization_snapshots
61
+ WHEN NOT EXISTS (
62
+ SELECT 1 FROM wallet_relocation_authorization_returns AS returned
63
+ WHERE returned.namespace = OLD.namespace AND returned.org_id = OLD.org_id
64
+ AND returned.project_id = OLD.project_id AND returned.env_id = OLD.env_id
65
+ AND returned.wallet_id = OLD.wallet_id AND OLD.source_generation = returned.retired_generation
66
+ AND OLD.move_id = returned.previous_move_id
67
+ AND OLD.request_digest_hex = returned.previous_request_digest_hex
68
+ )
69
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_snapshot_retained'); END;
70
+
71
+ DROP TRIGGER wallet_relocation_authorization_fences_retain;
72
+ CREATE TRIGGER wallet_relocation_authorization_fences_retain
73
+ BEFORE DELETE ON wallet_relocation_authorization_fences
74
+ WHEN NOT EXISTS (
75
+ SELECT 1 FROM wallet_relocation_authorization_returns AS returned
76
+ WHERE returned.namespace = OLD.namespace AND returned.org_id = OLD.org_id
77
+ AND returned.project_id = OLD.project_id AND returned.env_id = OLD.env_id
78
+ AND returned.wallet_id = OLD.wallet_id AND OLD.source_generation = returned.retired_generation
79
+ AND OLD.move_id = returned.previous_move_id
80
+ AND OLD.request_digest_hex = returned.previous_request_digest_hex
81
+ )
82
+ BEGIN SELECT RAISE(ABORT, 'wallet_authorization_fence_retained'); END;
83
+
84
+ DROP TRIGGER wallet_relocation_session_fences_retain;
85
+ CREATE TRIGGER wallet_relocation_session_fences_retain
86
+ BEFORE DELETE ON wallet_relocation_session_fences
87
+ WHEN NOT EXISTS (
88
+ SELECT 1 FROM wallet_relocation_authorization_returns AS returned
89
+ WHERE returned.namespace = OLD.namespace AND returned.org_id = OLD.org_id
90
+ AND returned.project_id = OLD.project_id AND returned.env_id = OLD.env_id
91
+ AND returned.wallet_id = OLD.wallet_id AND OLD.source_generation = returned.retired_generation
92
+ AND OLD.move_id = returned.previous_move_id
93
+ AND OLD.request_digest_hex = returned.previous_request_digest_hex
94
+ )
95
+ BEGIN SELECT RAISE(ABORT, 'wallet_relocation_session_fence_retained'); END;
96
+
97
+ DROP TRIGGER wallet_execution_retained;
98
+ CREATE TRIGGER wallet_execution_retained
99
+ BEFORE DELETE ON wallet_execution_generations
100
+ WHEN NOT EXISTS (
101
+ SELECT 1 FROM wallet_relocation_authorization_returns AS returned
102
+ WHERE returned.namespace = OLD.namespace AND returned.org_id = OLD.org_id
103
+ AND returned.project_id = OLD.project_id AND returned.env_id = OLD.env_id
104
+ AND returned.wallet_id = OLD.wallet_id
105
+ AND OLD.generation = returned.retired_generation AND OLD.state = 'retired'
106
+ )
107
+ BEGIN SELECT RAISE(ABORT, 'wallet_execution_identity_retained'); END;