@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,91 @@
1
+ CREATE TABLE wallet_relocation_session_fences (
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
+ request_digest_hex TEXT NOT NULL,
9
+ source_generation INTEGER NOT NULL CHECK (source_generation > 0 AND source_generation < 9007199254740991),
10
+ retired_at_ms INTEGER NOT NULL CHECK (retired_at_ms > 0),
11
+ PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id),
12
+ CHECK (length(move_id) = 49 AND substr(move_id, 1, 6) = 'wmove_' AND substr(move_id, 7) NOT GLOB '*[^A-Za-z0-9_-]*'),
13
+ CHECK (length(request_digest_hex) = 64 AND request_digest_hex NOT GLOB '*[^a-f0-9]*')
14
+ );
15
+
16
+ CREATE TRIGGER wallet_relocation_session_fences_immutable
17
+ BEFORE UPDATE ON wallet_relocation_session_fences
18
+ WHEN NEW.namespace IS NOT OLD.namespace OR NEW.org_id IS NOT OLD.org_id
19
+ OR NEW.project_id IS NOT OLD.project_id OR NEW.env_id IS NOT OLD.env_id
20
+ OR NEW.wallet_id IS NOT OLD.wallet_id OR NEW.move_id IS NOT OLD.move_id
21
+ OR NEW.request_digest_hex IS NOT OLD.request_digest_hex
22
+ OR NEW.source_generation IS NOT OLD.source_generation OR NEW.retired_at_ms IS NOT OLD.retired_at_ms
23
+ BEGIN
24
+ SELECT RAISE(ABORT, 'wallet_relocation_session_fence_immutable');
25
+ END;
26
+
27
+ CREATE TRIGGER wallet_relocation_session_fences_retain
28
+ BEFORE DELETE ON wallet_relocation_session_fences
29
+ BEGIN
30
+ SELECT RAISE(ABORT, 'wallet_relocation_session_fence_retained');
31
+ END;
32
+
33
+ CREATE TRIGGER wallet_session_authorizations_v2_relocation_insert_guard
34
+ BEFORE INSERT ON wallet_session_authorizations_v2
35
+ WHEN EXISTS (
36
+ SELECT 1 FROM wallet_relocation_session_fences AS fence
37
+ WHERE (fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id AND fence.wallet_id = NEW.wallet_id)
38
+ )
39
+ BEGIN
40
+ SELECT RAISE(ABORT, 'wallet_relocation_session_admission_closed');
41
+ END;
42
+
43
+ CREATE TRIGGER wallet_session_authorizations_v2_relocation_update_guard
44
+ BEFORE UPDATE ON wallet_session_authorizations_v2
45
+ WHEN (NEW.retired_at_ms IS NULL) AND EXISTS (
46
+ SELECT 1 FROM wallet_relocation_session_fences AS fence
47
+ WHERE (fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id AND fence.wallet_id = OLD.wallet_id) OR (fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id AND fence.wallet_id = NEW.wallet_id)
48
+ )
49
+ BEGIN
50
+ SELECT RAISE(ABORT, 'wallet_relocation_session_admission_closed');
51
+ END;
52
+
53
+ CREATE TRIGGER wallet_session_hosted_credentials_v2_relocation_insert_guard
54
+ BEFORE INSERT ON wallet_session_hosted_credentials_v2
55
+ WHEN EXISTS (
56
+ SELECT 1 FROM wallet_relocation_session_fences AS fence
57
+ WHERE (fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id AND fence.wallet_id = NEW.wallet_id)
58
+ )
59
+ BEGIN
60
+ SELECT RAISE(ABORT, 'wallet_relocation_session_admission_closed');
61
+ END;
62
+
63
+ CREATE TRIGGER wallet_session_hosted_credentials_v2_relocation_update_guard
64
+ BEFORE UPDATE ON wallet_session_hosted_credentials_v2
65
+ WHEN (NEW.lifecycle_kind = 'active') AND EXISTS (
66
+ SELECT 1 FROM wallet_relocation_session_fences AS fence
67
+ WHERE (fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id AND fence.wallet_id = OLD.wallet_id) OR (fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id AND fence.wallet_id = NEW.wallet_id)
68
+ )
69
+ BEGIN
70
+ SELECT RAISE(ABORT, 'wallet_relocation_session_admission_closed');
71
+ END;
72
+
73
+ CREATE TRIGGER wallet_session_hosted_exchange_codes_v2_relocation_insert_guard
74
+ BEFORE INSERT ON wallet_session_hosted_exchange_codes_v2
75
+ WHEN EXISTS (
76
+ SELECT 1 FROM wallet_relocation_session_fences AS fence
77
+ WHERE (fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id AND fence.wallet_id = NEW.wallet_id)
78
+ )
79
+ BEGIN
80
+ SELECT RAISE(ABORT, 'wallet_relocation_session_admission_closed');
81
+ END;
82
+
83
+ CREATE TRIGGER wallet_session_hosted_exchange_codes_v2_relocation_update_guard
84
+ BEFORE UPDATE ON wallet_session_hosted_exchange_codes_v2
85
+ WHEN (NEW.lifecycle_kind IN ('issued', 'consumed')) AND EXISTS (
86
+ SELECT 1 FROM wallet_relocation_session_fences AS fence
87
+ WHERE (fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id AND fence.wallet_id = OLD.wallet_id) OR (fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id AND fence.wallet_id = NEW.wallet_id)
88
+ )
89
+ BEGIN
90
+ SELECT RAISE(ABORT, 'wallet_relocation_session_admission_closed');
91
+ END;
@@ -0,0 +1,164 @@
1
+ CREATE TABLE wallet_relocation_hosted_imports (
2
+ namespace TEXT NOT NULL, org_id TEXT NOT NULL, project_id TEXT NOT NULL, env_id TEXT NOT NULL,
3
+ wallet_id TEXT NOT NULL, move_id TEXT NOT NULL, request_digest_hex TEXT NOT NULL,
4
+ source_generation INTEGER NOT NULL CHECK (source_generation > 0 AND source_generation < 9007199254740991),
5
+ state TEXT NOT NULL CHECK (state IN ('importing', 'closed', 'activated')),
6
+ PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id)
7
+ );
8
+
9
+ CREATE TABLE wallet_relocation_hosted_import_context (
10
+ namespace TEXT NOT NULL, org_id TEXT NOT NULL, project_id TEXT NOT NULL, env_id TEXT NOT NULL,
11
+ wallet_id TEXT NOT NULL, move_id TEXT NOT NULL, request_digest_hex TEXT NOT NULL,
12
+ source_generation INTEGER NOT NULL,
13
+ kind TEXT NOT NULL CHECK (kind IN ('credential', 'exchange')),
14
+ tenant_id TEXT NOT NULL, record_id TEXT NOT NULL,
15
+ record_digest TEXT NOT NULL CHECK (length(record_digest) = 64 AND record_digest NOT GLOB '*[^a-f0-9]*'),
16
+ PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id, kind, tenant_id, record_id)
17
+ );
18
+
19
+ CREATE TABLE wallet_relocation_hosted_import_receipts (
20
+ namespace TEXT NOT NULL, org_id TEXT NOT NULL, project_id TEXT NOT NULL, env_id TEXT NOT NULL,
21
+ wallet_id TEXT NOT NULL, move_id TEXT NOT NULL, request_digest_hex TEXT NOT NULL,
22
+ source_generation INTEGER NOT NULL,
23
+ kind TEXT NOT NULL CHECK (kind IN ('credential', 'exchange')),
24
+ tenant_id TEXT NOT NULL, record_id TEXT NOT NULL,
25
+ record_digest TEXT NOT NULL CHECK (length(record_digest) = 64 AND record_digest NOT GLOB '*[^a-f0-9]*'),
26
+ PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id, move_id, kind, tenant_id, record_id)
27
+ );
28
+
29
+ CREATE TRIGGER wallet_relocation_hosted_import_identity_guard
30
+ BEFORE UPDATE ON wallet_relocation_hosted_imports
31
+ WHEN NEW.namespace IS NOT OLD.namespace OR NEW.org_id IS NOT OLD.org_id
32
+ OR NEW.project_id IS NOT OLD.project_id OR NEW.env_id IS NOT OLD.env_id
33
+ OR NEW.wallet_id IS NOT OLD.wallet_id OR NEW.move_id IS NOT OLD.move_id
34
+ OR NEW.request_digest_hex IS NOT OLD.request_digest_hex OR NEW.source_generation IS NOT OLD.source_generation
35
+ OR (OLD.state = 'closed' AND NEW.state = 'importing')
36
+ OR (OLD.state = 'activated' AND NEW.state != 'activated')
37
+ OR (OLD.state = 'importing' AND NEW.state = 'activated')
38
+ BEGIN SELECT RAISE(ABORT, 'wallet_hosted_history_import_transition_rejected'); END;
39
+
40
+ CREATE TRIGGER wallet_relocation_hosted_import_retain
41
+ BEFORE DELETE ON wallet_relocation_hosted_imports
42
+ BEGIN SELECT RAISE(ABORT, 'wallet_hosted_history_import_retained'); END;
43
+
44
+ CREATE TRIGGER wallet_relocation_hosted_receipt_immutable
45
+ BEFORE UPDATE ON wallet_relocation_hosted_import_receipts
46
+ BEGIN SELECT RAISE(ABORT, 'wallet_hosted_history_receipt_immutable'); END;
47
+
48
+ CREATE TRIGGER wallet_relocation_hosted_receipt_retain
49
+ BEFORE DELETE ON wallet_relocation_hosted_import_receipts
50
+ BEGIN SELECT RAISE(ABORT, 'wallet_hosted_history_receipt_retained'); END;
51
+
52
+ CREATE TRIGGER wallet_session_authorizations_v2_import_insert_guard
53
+ BEFORE INSERT ON wallet_session_authorizations_v2
54
+ WHEN NEW.retired_at_ms IS NULL AND EXISTS (
55
+ SELECT 1 FROM wallet_relocation_hosted_imports AS destination
56
+ WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
57
+ AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
58
+ AND destination.wallet_id = NEW.wallet_id AND destination.state != 'activated'
59
+ )
60
+ BEGIN SELECT RAISE(ABORT, 'wallet_hosted_history_destination_inactive'); END;
61
+
62
+ CREATE TRIGGER wallet_session_authorizations_v2_import_update_guard
63
+ BEFORE UPDATE ON wallet_session_authorizations_v2
64
+ WHEN NEW.retired_at_ms IS NULL AND EXISTS (
65
+ SELECT 1 FROM wallet_relocation_hosted_imports AS destination
66
+ WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
67
+ AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
68
+ AND destination.wallet_id = NEW.wallet_id AND destination.state != 'activated'
69
+ )
70
+ BEGIN SELECT RAISE(ABORT, 'wallet_hosted_history_destination_inactive'); END;
71
+
72
+ DROP TRIGGER wallet_session_hosted_credentials_v2_insert_lifecycle_guard;
73
+ CREATE TRIGGER wallet_session_hosted_credentials_v2_insert_lifecycle_guard
74
+ BEFORE INSERT ON wallet_session_hosted_credentials_v2
75
+ WHEN (NEW.lifecycle_kind != 'active' OR NEW.retired_at_ms IS NOT NULL) AND NOT (NEW.lifecycle_kind = 'retired' AND NEW.retired_at_ms IS NOT NULL AND EXISTS (SELECT 1 FROM wallet_relocation_hosted_import_context AS context
76
+ JOIN wallet_relocation_hosted_imports AS destination
77
+ ON destination.namespace = context.namespace AND destination.org_id = context.org_id
78
+ AND destination.project_id = context.project_id AND destination.env_id = context.env_id
79
+ AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
80
+ AND destination.request_digest_hex = context.request_digest_hex
81
+ AND destination.source_generation = context.source_generation AND destination.state = 'importing'
82
+ WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
83
+ AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
84
+ AND context.wallet_id = NEW.wallet_id AND context.tenant_id = NEW.tenant_id
85
+ AND context.kind = 'credential' AND context.record_id = NEW.hosted_credential_id))
86
+ BEGIN SELECT RAISE(ABORT, 'wallet_session_hosted_credential_initial_state_rejected'); END;
87
+
88
+ DROP TRIGGER wallet_session_hosted_credentials_v2_parent_guard;
89
+ CREATE TRIGGER wallet_session_hosted_credentials_v2_parent_guard
90
+ BEFORE INSERT ON wallet_session_hosted_credentials_v2
91
+ WHEN NOT EXISTS (
92
+ SELECT 1 FROM wallet_session_authorizations_v2 AS session
93
+ WHERE session.namespace = NEW.namespace AND session.org_id = NEW.org_id
94
+ AND session.project_id = NEW.project_id AND session.env_id = NEW.env_id
95
+ AND session.tenant_id = NEW.tenant_id AND session.authorization_id = NEW.authorization_id
96
+ AND session.wallet_session_id = NEW.wallet_session_id AND session.quota_id = NEW.quota_id
97
+ AND session.principal_id = NEW.principal_id AND session.wallet_id = NEW.wallet_id
98
+ AND session.authority_id = NEW.authority_id AND session.wallet_auth_method_id = NEW.wallet_auth_method_id
99
+ AND session.operation_credential_hash IS NOT NULL AND session.expires_at_ms >= NEW.expires_at_ms
100
+ AND (session.retired_at_ms IS NULL OR (NEW.lifecycle_kind = 'retired' AND NEW.retired_at_ms IS NOT NULL AND EXISTS (SELECT 1 FROM wallet_relocation_hosted_import_context AS context
101
+ JOIN wallet_relocation_hosted_imports AS destination
102
+ ON destination.namespace = context.namespace AND destination.org_id = context.org_id
103
+ AND destination.project_id = context.project_id AND destination.env_id = context.env_id
104
+ AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
105
+ AND destination.request_digest_hex = context.request_digest_hex
106
+ AND destination.source_generation = context.source_generation AND destination.state = 'importing'
107
+ WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
108
+ AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
109
+ AND context.wallet_id = NEW.wallet_id AND context.tenant_id = NEW.tenant_id
110
+ AND context.kind = 'credential' AND context.record_id = NEW.hosted_credential_id)))
111
+ )
112
+ BEGIN SELECT RAISE(ABORT, 'wallet_session_hosted_credential_parent_rejected'); END;
113
+
114
+ DROP TRIGGER wallet_session_hosted_exchange_codes_v2_insert_lifecycle_guard;
115
+ CREATE TRIGGER wallet_session_hosted_exchange_codes_v2_insert_lifecycle_guard
116
+ BEFORE INSERT ON wallet_session_hosted_exchange_codes_v2
117
+ WHEN (NEW.lifecycle_kind != 'issued' OR NEW.hosted_credential_id IS NOT NULL OR NEW.consumed_at_ms IS NOT NULL) AND NOT ((NEW.lifecycle_kind = 'issued' OR (NEW.lifecycle_kind = 'consumed' AND EXISTS (
118
+ SELECT 1 FROM wallet_session_hosted_credentials_v2 AS child
119
+ WHERE child.namespace = NEW.namespace AND child.org_id = NEW.org_id
120
+ AND child.project_id = NEW.project_id AND child.env_id = NEW.env_id
121
+ AND child.tenant_id = NEW.tenant_id AND child.hosted_credential_id = NEW.hosted_credential_id
122
+ AND child.wallet_id = NEW.wallet_id AND child.lifecycle_kind = 'retired'))) AND EXISTS (SELECT 1 FROM wallet_relocation_hosted_import_context AS context
123
+ JOIN wallet_relocation_hosted_imports AS destination
124
+ ON destination.namespace = context.namespace AND destination.org_id = context.org_id
125
+ AND destination.project_id = context.project_id AND destination.env_id = context.env_id
126
+ AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
127
+ AND destination.request_digest_hex = context.request_digest_hex
128
+ AND destination.source_generation = context.source_generation AND destination.state = 'importing'
129
+ WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
130
+ AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
131
+ AND context.wallet_id = NEW.wallet_id AND context.tenant_id = NEW.tenant_id
132
+ AND context.kind = 'exchange' AND context.record_id = NEW.exchange_code_id))
133
+ BEGIN SELECT RAISE(ABORT, 'wallet_session_hosted_exchange_initial_state_rejected'); END;
134
+
135
+ DROP TRIGGER wallet_session_hosted_exchange_codes_v2_parent_guard;
136
+ CREATE TRIGGER wallet_session_hosted_exchange_codes_v2_parent_guard
137
+ BEFORE INSERT ON wallet_session_hosted_exchange_codes_v2
138
+ WHEN NOT EXISTS (
139
+ SELECT 1 FROM wallet_session_authorizations_v2 AS session
140
+ WHERE session.namespace = NEW.namespace AND session.org_id = NEW.org_id
141
+ AND session.project_id = NEW.project_id AND session.env_id = NEW.env_id
142
+ AND session.tenant_id = NEW.tenant_id AND session.authorization_id = NEW.authorization_id
143
+ AND session.wallet_session_id = NEW.wallet_session_id AND session.quota_id = NEW.quota_id
144
+ AND session.principal_id = NEW.principal_id AND session.wallet_id = NEW.wallet_id
145
+ AND session.authority_id = NEW.authority_id AND session.wallet_auth_method_id = NEW.wallet_auth_method_id
146
+ AND session.operation_credential_hash IS NOT NULL AND session.expires_at_ms >= NEW.expires_at_ms
147
+ AND (session.retired_at_ms IS NULL OR ((NEW.lifecycle_kind = 'issued' OR (NEW.lifecycle_kind = 'consumed' AND EXISTS (
148
+ SELECT 1 FROM wallet_session_hosted_credentials_v2 AS child
149
+ WHERE child.namespace = NEW.namespace AND child.org_id = NEW.org_id
150
+ AND child.project_id = NEW.project_id AND child.env_id = NEW.env_id
151
+ AND child.tenant_id = NEW.tenant_id AND child.hosted_credential_id = NEW.hosted_credential_id
152
+ AND child.wallet_id = NEW.wallet_id AND child.lifecycle_kind = 'retired'))) AND EXISTS (SELECT 1 FROM wallet_relocation_hosted_import_context AS context
153
+ JOIN wallet_relocation_hosted_imports AS destination
154
+ ON destination.namespace = context.namespace AND destination.org_id = context.org_id
155
+ AND destination.project_id = context.project_id AND destination.env_id = context.env_id
156
+ AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
157
+ AND destination.request_digest_hex = context.request_digest_hex
158
+ AND destination.source_generation = context.source_generation AND destination.state = 'importing'
159
+ WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
160
+ AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
161
+ AND context.wallet_id = NEW.wallet_id AND context.tenant_id = NEW.tenant_id
162
+ AND context.kind = 'exchange' AND context.record_id = NEW.exchange_code_id)))
163
+ )
164
+ BEGIN SELECT RAISE(ABORT, 'wallet_session_hosted_exchange_parent_rejected'); END;
@@ -0,0 +1,318 @@
1
+ -- Freeze authorization history only after wallet-wide session retirement.
2
+ CREATE TABLE wallet_relocation_authorization_fences (
3
+ namespace TEXT NOT NULL,
4
+ org_id TEXT NOT NULL,
5
+ project_id TEXT NOT NULL,
6
+ env_id TEXT NOT NULL,
7
+ wallet_id TEXT NOT NULL,
8
+ move_id TEXT NOT NULL,
9
+ request_digest_hex TEXT NOT NULL,
10
+ source_generation INTEGER NOT NULL,
11
+ frozen_at_ms INTEGER NOT NULL CHECK (frozen_at_ms > 0),
12
+ PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id)
13
+ );
14
+
15
+ CREATE TRIGGER wallet_relocation_authorization_fences_retired
16
+ BEFORE INSERT ON wallet_relocation_authorization_fences
17
+ WHEN EXISTS (
18
+ SELECT 1 FROM wallet_relocation_authorization_fences AS existing
19
+ WHERE existing.namespace = NEW.namespace AND existing.org_id = NEW.org_id
20
+ AND existing.project_id = NEW.project_id AND existing.env_id = NEW.env_id
21
+ AND existing.wallet_id = NEW.wallet_id
22
+ ) OR NOT EXISTS (
23
+ SELECT 1 FROM wallet_relocation_session_fences AS retired
24
+ WHERE retired.namespace = NEW.namespace AND retired.org_id = NEW.org_id
25
+ AND retired.project_id = NEW.project_id AND retired.env_id = NEW.env_id
26
+ AND retired.wallet_id = NEW.wallet_id AND retired.move_id = NEW.move_id
27
+ AND retired.request_digest_hex = NEW.request_digest_hex
28
+ AND retired.source_generation = NEW.source_generation
29
+ AND retired.retired_at_ms <= NEW.frozen_at_ms
30
+ ) OR EXISTS (
31
+ SELECT 1 FROM wallet_session_authorizations_v2 AS session
32
+ WHERE session.namespace = NEW.namespace AND session.org_id = NEW.org_id
33
+ AND session.project_id = NEW.project_id AND session.env_id = NEW.env_id
34
+ AND session.wallet_id = NEW.wallet_id AND session.retired_at_ms IS NULL
35
+ ) OR EXISTS (
36
+ SELECT 1 FROM wallet_session_hosted_credentials_v2 AS credential
37
+ WHERE credential.namespace = NEW.namespace AND credential.org_id = NEW.org_id
38
+ AND credential.project_id = NEW.project_id AND credential.env_id = NEW.env_id
39
+ AND credential.wallet_id = NEW.wallet_id AND credential.lifecycle_kind = 'active'
40
+ )
41
+ BEGIN
42
+ SELECT RAISE(ABORT, 'wallet_authorization_freeze_requires_retirement');
43
+ END;
44
+
45
+ CREATE TRIGGER wallet_relocation_authorization_fences_immutable
46
+ BEFORE UPDATE ON wallet_relocation_authorization_fences
47
+ WHEN NEW.namespace IS NOT OLD.namespace OR NEW.org_id IS NOT OLD.org_id
48
+ OR NEW.project_id IS NOT OLD.project_id OR NEW.env_id IS NOT OLD.env_id
49
+ OR NEW.wallet_id IS NOT OLD.wallet_id OR NEW.move_id IS NOT OLD.move_id
50
+ OR NEW.request_digest_hex IS NOT OLD.request_digest_hex
51
+ OR NEW.source_generation IS NOT OLD.source_generation OR NEW.frozen_at_ms IS NOT OLD.frozen_at_ms
52
+ BEGIN
53
+ SELECT RAISE(ABORT, 'wallet_authorization_fence_immutable');
54
+ END;
55
+
56
+ CREATE TRIGGER wallet_relocation_authorization_fences_retain
57
+ BEFORE DELETE ON wallet_relocation_authorization_fences
58
+ BEGIN
59
+ SELECT RAISE(ABORT, 'wallet_authorization_fence_retained');
60
+ END;
61
+
62
+ CREATE TRIGGER wallet_authorities_frozen_insert
63
+ BEFORE INSERT ON wallet_authorities
64
+ WHEN EXISTS (
65
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
66
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
67
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
68
+ AND fence.wallet_id = NEW.wallet_id
69
+ )
70
+ BEGIN
71
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
72
+ END;
73
+
74
+ CREATE TRIGGER wallet_authorities_frozen_update
75
+ BEFORE UPDATE ON wallet_authorities
76
+ WHEN EXISTS (
77
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
78
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
79
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
80
+ AND fence.wallet_id = OLD.wallet_id
81
+ ) OR EXISTS (
82
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
83
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
84
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
85
+ AND fence.wallet_id = NEW.wallet_id
86
+ )
87
+ BEGIN
88
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
89
+ END;
90
+
91
+ CREATE TRIGGER wallet_authorities_frozen_delete
92
+ BEFORE DELETE ON wallet_authorities
93
+ WHEN EXISTS (
94
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
95
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
96
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
97
+ AND fence.wallet_id = OLD.wallet_id
98
+ )
99
+ BEGIN
100
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
101
+ END;
102
+
103
+ CREATE TRIGGER wallet_auth_methods_frozen_insert
104
+ BEFORE INSERT ON wallet_auth_methods
105
+ WHEN EXISTS (
106
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
107
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
108
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
109
+ AND fence.wallet_id = NEW.wallet_id
110
+ )
111
+ BEGIN
112
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
113
+ END;
114
+
115
+ CREATE TRIGGER wallet_auth_methods_frozen_update
116
+ BEFORE UPDATE ON wallet_auth_methods
117
+ WHEN EXISTS (
118
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
119
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
120
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
121
+ AND fence.wallet_id = OLD.wallet_id
122
+ ) OR EXISTS (
123
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
124
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
125
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
126
+ AND fence.wallet_id = NEW.wallet_id
127
+ )
128
+ BEGIN
129
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
130
+ END;
131
+
132
+ CREATE TRIGGER wallet_auth_methods_frozen_delete
133
+ BEFORE DELETE ON wallet_auth_methods
134
+ WHEN EXISTS (
135
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
136
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
137
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
138
+ AND fence.wallet_id = OLD.wallet_id
139
+ )
140
+ BEGIN
141
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
142
+ END;
143
+
144
+ CREATE TRIGGER wallet_session_authorizations_v2_frozen_insert
145
+ BEFORE INSERT ON wallet_session_authorizations_v2
146
+ WHEN EXISTS (
147
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
148
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
149
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
150
+ AND fence.wallet_id = NEW.wallet_id
151
+ )
152
+ BEGIN
153
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
154
+ END;
155
+
156
+ CREATE TRIGGER wallet_session_authorizations_v2_frozen_update
157
+ BEFORE UPDATE ON wallet_session_authorizations_v2
158
+ WHEN EXISTS (
159
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
160
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
161
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
162
+ AND fence.wallet_id = OLD.wallet_id
163
+ ) OR EXISTS (
164
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
165
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
166
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
167
+ AND fence.wallet_id = NEW.wallet_id
168
+ )
169
+ BEGIN
170
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
171
+ END;
172
+
173
+ CREATE TRIGGER wallet_session_authorizations_v2_frozen_delete
174
+ BEFORE DELETE ON wallet_session_authorizations_v2
175
+ WHEN EXISTS (
176
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
177
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
178
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
179
+ AND fence.wallet_id = OLD.wallet_id
180
+ )
181
+ BEGIN
182
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
183
+ END;
184
+
185
+ CREATE TRIGGER wallet_session_hosted_credentials_v2_frozen_insert
186
+ BEFORE INSERT ON wallet_session_hosted_credentials_v2
187
+ WHEN EXISTS (
188
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
189
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
190
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
191
+ AND fence.wallet_id = NEW.wallet_id
192
+ )
193
+ BEGIN
194
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
195
+ END;
196
+
197
+ CREATE TRIGGER wallet_session_hosted_credentials_v2_frozen_update
198
+ BEFORE UPDATE ON wallet_session_hosted_credentials_v2
199
+ WHEN EXISTS (
200
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
201
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
202
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
203
+ AND fence.wallet_id = OLD.wallet_id
204
+ ) OR EXISTS (
205
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
206
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
207
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
208
+ AND fence.wallet_id = NEW.wallet_id
209
+ )
210
+ BEGIN
211
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
212
+ END;
213
+
214
+ CREATE TRIGGER wallet_session_hosted_credentials_v2_frozen_delete
215
+ BEFORE DELETE ON wallet_session_hosted_credentials_v2
216
+ WHEN EXISTS (
217
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
218
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
219
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
220
+ AND fence.wallet_id = OLD.wallet_id
221
+ )
222
+ BEGIN
223
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
224
+ END;
225
+
226
+ CREATE TRIGGER wallet_session_hosted_exchange_codes_v2_frozen_insert
227
+ BEFORE INSERT ON wallet_session_hosted_exchange_codes_v2
228
+ WHEN EXISTS (
229
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
230
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
231
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
232
+ AND fence.wallet_id = NEW.wallet_id
233
+ )
234
+ BEGIN
235
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
236
+ END;
237
+
238
+ CREATE TRIGGER wallet_session_hosted_exchange_codes_v2_frozen_update
239
+ BEFORE UPDATE ON wallet_session_hosted_exchange_codes_v2
240
+ WHEN EXISTS (
241
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
242
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
243
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
244
+ AND fence.wallet_id = OLD.wallet_id
245
+ ) OR EXISTS (
246
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
247
+ WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
248
+ AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
249
+ AND fence.wallet_id = NEW.wallet_id
250
+ )
251
+ BEGIN
252
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
253
+ END;
254
+
255
+ CREATE TRIGGER wallet_session_hosted_exchange_codes_v2_frozen_delete
256
+ BEFORE DELETE ON wallet_session_hosted_exchange_codes_v2
257
+ WHEN EXISTS (
258
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
259
+ WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
260
+ AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
261
+ AND fence.wallet_id = OLD.wallet_id
262
+ )
263
+ BEGIN
264
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
265
+ END;
266
+
267
+ CREATE TRIGGER authorization_wallet_session_quotas_frozen_insert
268
+ BEFORE INSERT ON authorization_wallet_session_quotas
269
+ WHEN EXISTS (
270
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
271
+ JOIN wallet_session_authorizations_v2 AS session
272
+ ON session.namespace = fence.namespace AND session.org_id = fence.org_id
273
+ AND session.project_id = fence.project_id AND session.env_id = fence.env_id
274
+ AND session.wallet_id = fence.wallet_id
275
+ WHERE session.namespace = NEW.namespace AND session.tenant_id = NEW.tenant_id
276
+ AND session.quota_id = NEW.quota_id AND session.wallet_session_id = NEW.wallet_session_id
277
+ )
278
+ BEGIN
279
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
280
+ END;
281
+
282
+ CREATE TRIGGER authorization_wallet_session_quotas_frozen_update
283
+ BEFORE UPDATE ON authorization_wallet_session_quotas
284
+ WHEN EXISTS (
285
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
286
+ JOIN wallet_session_authorizations_v2 AS session
287
+ ON session.namespace = fence.namespace AND session.org_id = fence.org_id
288
+ AND session.project_id = fence.project_id AND session.env_id = fence.env_id
289
+ AND session.wallet_id = fence.wallet_id
290
+ WHERE session.namespace = OLD.namespace AND session.tenant_id = OLD.tenant_id
291
+ AND session.quota_id = OLD.quota_id AND session.wallet_session_id = OLD.wallet_session_id
292
+ ) OR EXISTS (
293
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
294
+ JOIN wallet_session_authorizations_v2 AS session
295
+ ON session.namespace = fence.namespace AND session.org_id = fence.org_id
296
+ AND session.project_id = fence.project_id AND session.env_id = fence.env_id
297
+ AND session.wallet_id = fence.wallet_id
298
+ WHERE session.namespace = NEW.namespace AND session.tenant_id = NEW.tenant_id
299
+ AND session.quota_id = NEW.quota_id AND session.wallet_session_id = NEW.wallet_session_id
300
+ )
301
+ BEGIN
302
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
303
+ END;
304
+
305
+ CREATE TRIGGER authorization_wallet_session_quotas_frozen_delete
306
+ BEFORE DELETE ON authorization_wallet_session_quotas
307
+ WHEN EXISTS (
308
+ SELECT 1 FROM wallet_relocation_authorization_fences AS fence
309
+ JOIN wallet_session_authorizations_v2 AS session
310
+ ON session.namespace = fence.namespace AND session.org_id = fence.org_id
311
+ AND session.project_id = fence.project_id AND session.env_id = fence.env_id
312
+ AND session.wallet_id = fence.wallet_id
313
+ WHERE session.namespace = OLD.namespace AND session.tenant_id = OLD.tenant_id
314
+ AND session.quota_id = OLD.quota_id AND session.wallet_session_id = OLD.wallet_session_id
315
+ )
316
+ BEGIN
317
+ SELECT RAISE(ABORT, 'wallet_authorization_history_frozen');
318
+ END;