@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.
- package/THIRD_PARTY_NOTICES.md +7 -1
- package/artifact-manifest.json +196 -41
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/index.js +2 -2
- package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
- package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/migrations/deriver-a/0019_wallet_object_addresses.sql +10 -0
- package/cloudflare-router-ab/migrations/deriver-b/0019_wallet_object_addresses.sql +10 -0
- package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +3 -117
- package/cloudflare-router-ab/wrangler.deriver-a.toml +0 -8
- package/cloudflare-router-ab/wrangler.deriver-b.toml +24 -8
- package/cloudflare-router-ab/wrangler.router.toml +0 -2
- package/cloudflare-router-ab/wrangler.signing-worker.toml +29 -0
- package/dist/esm/authorization/domain.js +3 -2
- package/dist/esm/authorization/ed25519WalletSessionAdmission.js +0 -0
- package/dist/esm/authorization/service.js +64 -36
- package/dist/esm/cloud-host.js +24 -19
- package/dist/esm/core/EmailOtpRecords.js +29 -6
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +2 -0
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +10 -0
- package/dist/esm/core/ThresholdService/routerAb/internalServiceHttp.js +1 -0
- package/dist/esm/core/ThresholdService/validation.js +2 -2
- package/dist/esm/core/authService/nearPrivateKeySigning.js +1 -1
- package/dist/esm/core/authService/webauthn.js +1 -1
- package/dist/esm/core/d1Ed25519SignerRead.js +55 -0
- package/dist/esm/core/d1WalletStore.js +14 -11
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +2 -2
- package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +1 -1
- package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +2 -2
- package/dist/esm/core/emailOtpD1Statements.js +1 -0
- package/dist/esm/core/nearRelayerAccountProvisioning.js +1 -1
- package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +4 -0
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +1 -1
- package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +1 -0
- package/dist/esm/hosted-wallet-gateway.js +93 -10
- package/dist/esm/localHostedWalletGatewayHandler.js +12 -9
- package/dist/esm/localIntendedYaoSigningFault.js +2 -30
- package/dist/esm/localRegistrationSetupAuthority.js +8 -1
- package/dist/esm/router/auth/commonRouterUtils.js +17 -10
- package/dist/esm/router/auth/routerApiCredentialAuth.js +26 -7
- package/dist/esm/router/auth/walletRegistrationContext.js +49 -0
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +1 -1
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizationAssembly.js +4 -3
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +2 -0
- package/dist/esm/router/cloudflare/d1/auth/d1EmailOtpRouteService.js +25 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +14 -6
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +44 -40
- package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +17 -1
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +35 -5
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +258 -99
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +31 -4
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +1 -1
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +11 -2
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +100 -10
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoStateWriteFence.js +92 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1WalletCeremonyActivity.js +77 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +14 -8
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +14 -8
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +3 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +58 -38
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +27 -20
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +1 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -0
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +1 -1
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +18 -7
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +75 -14
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +49 -29
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSessionTransaction.js +28 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +11 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletExecutionAuthority.js +168 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletOperationStore.js +53 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +83 -42
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.js +33 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.js +16 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationRead.js +58 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +439 -500
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +104 -90
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +78 -44
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +11 -35
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +98 -39
- package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +12 -9
- package/dist/esm/router/cloudflare/d1/wallet/authorizationSnapshotLayout.js +168 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +1 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +15 -6
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +3 -40
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +54 -1
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.js +157 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.js +56 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.js +238 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.js +287 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.js +295 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationApprovals.js +140 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.js +170 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationEmailOtp.js +60 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwner.js +33 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.js +74 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationPasskey.js +77 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationReadAccess.js +37 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationSessions.js +97 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletRelocationWriteBlock.js +133 -0
- package/dist/esm/router/cloudflare/d1/walletObjectAddresses.js +47 -0
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +1 -1
- package/dist/esm/router/cloudflare/runtime/routerAbServiceBindings.js +32 -1
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +20 -8
- package/dist/esm/router/cloudflare/runtime/walletAuthorizationRelocationRoutes.js +488 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +26 -6
- package/dist/esm/router/cloudflare/runtime/walletControlOps.js +3 -0
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletObjectAddresses.js +105 -0
- package/dist/esm/router/cloudflare/runtime/walletPlacementRoutes.js +339 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationDeriver.js +244 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationEcdsa.js +212 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationEd25519.js +172 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationOps.js +183 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationPresign.js +185 -0
- package/dist/esm/router/cloudflare/runtime/walletRelocationSource.js +221 -0
- package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +30 -8
- package/dist/esm/router/cloudflare-adaptor.js +8 -8
- package/dist/esm/router/cloudflare.js +34115 -32240
- package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +35 -9
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js +42 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +32 -6
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +61 -1
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +70 -3
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +59 -87
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +52 -22
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +10 -7
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +108 -78
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +19 -5
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +71 -22
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +37 -25
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +3 -3
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +2 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +24 -3
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +4 -3
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +20 -7
- package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +7 -1
- package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +2 -2
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +1 -1
- package/dist/esm/router/domains/passkeyCustody/registrationCustodyOutcome.js +34 -18
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.js +2 -2
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +16 -6
- package/dist/esm/router/domains/signingOperations/authorizedOperationWire.js +73 -0
- package/dist/esm/router/domains/signingOperations/ecdsaSigningResponse.js +31 -0
- package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
- package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +2 -1
- package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +31 -121
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +2 -93
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +1 -1
- package/dist/esm/router/domains/signingOperations/signingPrepareSession.js +33 -0
- package/dist/esm/router/domains/walletRegistration/registrationSessionSeal.js +121 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +4 -4
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +46 -157
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +1 -1
- package/dist/esm/router/express.js +764 -894
- package/dist/esm/router/framework/http.js +2 -1
- package/dist/esm/router/transport/fetch/createFetchRouter.js +2 -2
- package/dist/esm/router/transport/fetch/routes/auth.js +1 -1
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +3 -3
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +2 -2
- package/dist/esm/router/transport/fetch/routes/ed25519AuthorizedOperationRevalidation.js +65 -0
- package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +13 -3
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +3 -3
- package/dist/esm/router/transport/fetch/routes/sessions.js +3 -2
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +67 -130
- package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +76 -212
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +18 -41
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +6 -5
- package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +1 -1
- package/dist/esm/shared-ts/src/authorization/index.js +1 -1
- package/dist/esm/shared-ts/src/authorization/walletAuthority.js +2 -2
- package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +12 -2
- package/dist/esm/shared-ts/src/device-linking/digests.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/index.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/parsers.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +1 -1
- package/dist/esm/shared-ts/src/device-linking/wireFields.js +1 -1
- package/dist/esm/shared-ts/src/near/nearClient.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +2 -2
- package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +6 -1
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +4 -2
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -1
- package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +0 -27
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -1
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +10 -0
- package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +2 -1
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +3 -1
- package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +0 -9
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
- package/dist/types/wallet-server/src/authorization/domain.d.ts +17 -1
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +1 -0
- package/dist/types/wallet-server/src/authorization/ed25519WalletSessionAdmission.d.ts +35 -0
- package/dist/types/wallet-server/src/authorization/ed25519WalletSessionAdmission.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/service.d.ts +43 -5
- package/dist/types/wallet-server/src/authorization/sessionRouting.d.ts +2 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +7 -3
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +2 -1
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +19 -5
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +1 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +6 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +1 -0
- package/dist/types/wallet-server/src/core/d1Ed25519SignerRead.d.ts +17 -0
- package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +6 -0
- package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +1 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +5 -1
- package/dist/types/wallet-server/src/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.d.ts +1 -0
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +14 -48
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +4 -3
- package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +1 -16
- package/dist/types/wallet-server/src/localRegistrationSetupAuthority.d.ts +1 -1
- package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +7 -1
- package/dist/types/wallet-server/src/router/auth/routerApiCredentialAuth.d.ts +11 -3
- package/dist/types/wallet-server/src/router/auth/walletRegistrationContext.d.ts +8 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizationAssembly.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1EmailOtpRouteService.d.ts +16 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +7 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +4 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/walletSessionCredentialReaders.d.ts +7 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +32 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +3 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoStateWriteFence.d.ts +8 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1WalletCeremonyActivity.d.ts +15 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +6 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +4 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpCounters.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +6 -29
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +21 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +17 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +32 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +16 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSessionTransaction.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletExecutionAuthority.d.ts +41 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletOperationStore.d.ts +28 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +6 -9
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationInitialSession.d.ts +17 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationPreparation.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationRead.d.ts +43 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +24 -45
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +9 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +42 -14
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +24 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +10 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/authorizationSnapshotLayout.d.ts +21 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +3 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +8 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.d.ts +20 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.d.ts +20 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationIntake.d.ts +29 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorizationSnapshot.d.ts +31 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationApprovals.d.ts +49 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationChallenges.d.ts +47 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationEmailOtp.d.ts +25 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwner.d.ts +88 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwnerRequest.d.ts +37 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationPasskey.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationReadAccess.d.ts +18 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationSessions.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationWriteBlock.d.ts +16 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/walletObjectAddresses.d.ts +14 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/routerAbServiceBindings.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletAuthorizationRelocationRoutes.d.ts +21 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +3 -3
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletControlOps.d.ts +2 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +3 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletObjectAddresses.d.ts +45 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletPlacementRoutes.d.ts +30 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationDeriver.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationEcdsa.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationEd25519.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationOps.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationPresign.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRelocationSource.d.ts +26 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +5 -0
- package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +3 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.d.ts +7 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +41 -7
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +33 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +12 -6
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +17 -9
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +13 -14
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +7 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +1 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +6 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +11 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -3
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +10 -6
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +10 -3
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +12 -5
- package/dist/types/wallet-server/src/router/domains/signingOperations/authorizedOperationWire.d.ts +97 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/ecdsaSigningResponse.d.ts +13 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +9 -206
- package/dist/types/wallet-server/src/router/domains/signingOperations/signingPrepareSession.d.ts +23 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/registrationSessionSeal.d.ts +36 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +7 -7
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +80 -6
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +15 -5
- package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +24 -0
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +21 -7
- package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +3 -12
- package/dist/types/wallet-server/src/router/transport/fetch/routes/ed25519AuthorizedOperationRevalidation.d.ts +37 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +1 -17
- package/dist/types/wallet-server/src/storage/tenantRoute.d.ts +1 -1
- package/migrations/d1-signer/0049_wallet_relocation_challenges.sql +16 -0
- package/migrations/d1-signer/0050_wallet_relocation_approvals.sql +14 -0
- package/migrations/d1-signer/0051_wallet_relocation_email_otp.sql +92 -0
- package/migrations/d1-signer/0052_wallet_relocation_session_fences.sql +91 -0
- package/migrations/d1-signer/0053_wallet_hosted_history_import.sql +164 -0
- package/migrations/d1-signer/0054_wallet_authorization_freeze.sql +318 -0
- package/migrations/d1-signer/0055_wallet_authorization_snapshot.sql +120 -0
- package/migrations/d1-signer/0056_wallet_authorization_history_import.sql +424 -0
- package/migrations/d1-signer/0057_wallet_authorization_intake.sql +44 -0
- package/migrations/d1-signer/0058_wallet_ceremony_activity.sql +59 -0
- package/migrations/d1-signer/0059_wallet_authorization_activation.sql +45 -0
- package/migrations/d1-signer/0060_wallet_authorization_cleanup.sql +153 -0
- package/migrations/d1-signer/0061_wallet_session_operation_settlement.sql +28 -0
- package/migrations/d1-signer/0062_wallet_step_up_operation_settlement.sql +204 -0
- package/migrations/d1-signer/0063_wallet_operation_history_transfer.sql +466 -0
- package/migrations/d1-signer/0064_wallet_execution_generations.sql +93 -0
- package/migrations/d1-signer/0065_wallet_operation_execution_generation.sql +37 -0
- package/migrations/d1-signer/0066_regional_deployment_admission.sql +59 -0
- package/migrations/d1-signer/0067_registration_completion_decision.sql +12 -0
- package/migrations/d1-signer/0068_registration_cancellation_write_fence.sql +24 -0
- package/migrations/d1-signer/0069_cancelled_registration_session_fence.sql +11 -0
- package/migrations/d1-signer/0070_wallet_passkey_relocation.sql +369 -0
- package/migrations/d1-signer/0071_regional_wallet_otp_counters.sql +98 -0
- package/migrations/d1-signer/0072_linked_device_relocation_history.sql +899 -0
- package/migrations/d1-signer/0073_wallet_recovery_relocation.sql +86 -0
- package/migrations/d1-signer/0074_email_otp_relocation.sql +158 -0
- package/migrations/d1-signer/0075_wallet_authorization_return.sql +107 -0
- package/migrations/d1-signer/0076_wallet_relocation_write_block.sql +406 -0
- package/migrations/d1-signer/0077_wallet_object_addresses.sql +24 -0
- package/package.json +1 -1
- package/src/README.md +23 -1
- package/cloudflare-router-ab/scripts/local-key-material.mjs +0 -29
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
-- A terminal registration decision survives an uncertain directory reply.
|
|
2
|
+
ALTER TABLE wallet_execution_generations ADD COLUMN registration_completion TEXT NOT NULL
|
|
3
|
+
DEFAULT 'pending' CHECK(registration_completion IN ('pending', 'established', 'cancelled'));
|
|
4
|
+
|
|
5
|
+
CREATE TRIGGER wallet_registration_completion_immutable
|
|
6
|
+
BEFORE UPDATE ON wallet_execution_generations
|
|
7
|
+
WHEN (OLD.registration_completion != 'pending'
|
|
8
|
+
AND NEW.registration_completion != OLD.registration_completion)
|
|
9
|
+
OR (NEW.registration_completion != 'pending' AND NEW.origin != 'registration')
|
|
10
|
+
OR (NEW.registration_completion = 'cancelled' AND NEW.state != 'retired')
|
|
11
|
+
OR (NEW.registration_completion = 'established' AND NEW.state = 'inactive')
|
|
12
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_registration_completion_conflicts'); END;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-- Cancellation closes outstanding ceremony writes while permitting cleanup deletes.
|
|
2
|
+
CREATE TRIGGER registration_cancelled_insert_fence
|
|
3
|
+
BEFORE INSERT ON registration_ceremony_records
|
|
4
|
+
WHEN NEW.record_scope IN ('ceremony', 'setup-ceremony') AND EXISTS (
|
|
5
|
+
SELECT 1 FROM wallet_execution_generations AS execution
|
|
6
|
+
WHERE execution.namespace = NEW.namespace AND execution.org_id = NEW.org_id
|
|
7
|
+
AND execution.project_id = NEW.project_id AND execution.env_id = NEW.env_id
|
|
8
|
+
AND execution.origin = 'registration'
|
|
9
|
+
AND execution.origin_id = json_extract(NEW.record_json, '$.registrationCeremonyId')
|
|
10
|
+
AND execution.registration_completion = 'cancelled'
|
|
11
|
+
)
|
|
12
|
+
BEGIN SELECT RAISE(ABORT, 'registration_cancelled'); END;
|
|
13
|
+
|
|
14
|
+
CREATE TRIGGER registration_cancelled_update_fence
|
|
15
|
+
BEFORE UPDATE ON registration_ceremony_records
|
|
16
|
+
WHEN OLD.record_scope IN ('ceremony', 'setup-ceremony') AND EXISTS (
|
|
17
|
+
SELECT 1 FROM wallet_execution_generations AS execution
|
|
18
|
+
WHERE execution.namespace = OLD.namespace AND execution.org_id = OLD.org_id
|
|
19
|
+
AND execution.project_id = OLD.project_id AND execution.env_id = OLD.env_id
|
|
20
|
+
AND execution.origin = 'registration'
|
|
21
|
+
AND execution.origin_id = json_extract(OLD.record_json, '$.registrationCeremonyId')
|
|
22
|
+
AND execution.registration_completion = 'cancelled'
|
|
23
|
+
)
|
|
24
|
+
BEGIN SELECT RAISE(ABORT, 'registration_cancelled'); END;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- A previously admitted registration cannot publish a session after cancellation.
|
|
2
|
+
CREATE TRIGGER cancelled_registration_session_insert_fence
|
|
3
|
+
BEFORE INSERT ON wallet_session_authorizations_v2
|
|
4
|
+
WHEN EXISTS (
|
|
5
|
+
SELECT 1 FROM wallet_execution_generations AS execution
|
|
6
|
+
WHERE execution.namespace = NEW.namespace AND execution.org_id = NEW.org_id
|
|
7
|
+
AND execution.project_id = NEW.project_id AND execution.env_id = NEW.env_id
|
|
8
|
+
AND execution.wallet_id = NEW.wallet_id
|
|
9
|
+
AND execution.registration_completion = 'cancelled'
|
|
10
|
+
)
|
|
11
|
+
BEGIN SELECT RAISE(ABORT, 'registration_cancelled'); END;
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
-- Reject unfinished transfers. Completed receipts remain immutable.
|
|
2
|
+
CREATE TABLE wallet_passkey_relocation_upgrade_guard (count INTEGER NOT NULL CHECK (count = 0));
|
|
3
|
+
INSERT INTO wallet_passkey_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_passkey_relocation_upgrade_guard;
|
|
15
|
+
|
|
16
|
+
CREATE TRIGGER router_ab_yao_versioned_json_records_relocation_frozen_insert
|
|
17
|
+
BEFORE INSERT ON router_ab_yao_versioned_json_records
|
|
18
|
+
WHEN (substr(NEW.record_key, 1, 17) = 'passkey-envelope:' OR substr(NEW.record_key, 1, 28) = 'passkey-credential-activity:') AND 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 = json_extract(NEW.record_json, '$.walletId'))
|
|
22
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
23
|
+
|
|
24
|
+
CREATE TRIGGER router_ab_yao_versioned_json_records_relocation_frozen_update
|
|
25
|
+
BEFORE UPDATE ON router_ab_yao_versioned_json_records
|
|
26
|
+
WHEN (substr(OLD.record_key, 1, 17) = 'passkey-envelope:' OR substr(OLD.record_key, 1, 28) = 'passkey-credential-activity:') AND 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 = json_extract(OLD.record_json, '$.walletId'))
|
|
30
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
31
|
+
|
|
32
|
+
CREATE TRIGGER router_ab_yao_versioned_json_records_relocation_frozen_delete
|
|
33
|
+
BEFORE DELETE ON router_ab_yao_versioned_json_records
|
|
34
|
+
WHEN (substr(OLD.record_key, 1, 17) = 'passkey-envelope:' OR substr(OLD.record_key, 1, 28) = 'passkey-credential-activity:') AND 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 = json_extract(OLD.record_json, '$.walletId')
|
|
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 router_ab_yao_versioned_json_records_relocation_inactive_insert
|
|
47
|
+
BEFORE INSERT ON router_ab_yao_versioned_json_records
|
|
48
|
+
WHEN (substr(NEW.record_key, 1, 17) = 'passkey-envelope:' OR substr(NEW.record_key, 1, 28) = 'passkey-credential-activity:') AND 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 = json_extract(NEW.record_json, '$.walletId') 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 = json_extract(NEW.record_json, '$.walletId')
|
|
62
|
+
AND destination.state = 'importing' AND context.table_name = 'router_ab_yao_versioned_json_records'
|
|
63
|
+
AND context.record_key = json_array(NEW.env_id, NEW.namespace, NEW.org_id, NEW.project_id, NEW.record_key))
|
|
64
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
65
|
+
|
|
66
|
+
CREATE TRIGGER router_ab_yao_versioned_json_records_relocation_inactive_update
|
|
67
|
+
BEFORE UPDATE ON router_ab_yao_versioned_json_records
|
|
68
|
+
WHEN (substr(OLD.record_key, 1, 17) = 'passkey-envelope:' OR substr(OLD.record_key, 1, 28) = 'passkey-credential-activity:') AND 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 = json_extract(OLD.record_json, '$.walletId') AND destination.state != 'activated')
|
|
72
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
73
|
+
|
|
74
|
+
CREATE TRIGGER router_ab_yao_versioned_json_records_relocation_inactive_delete
|
|
75
|
+
BEFORE DELETE ON router_ab_yao_versioned_json_records
|
|
76
|
+
WHEN (substr(OLD.record_key, 1, 17) = 'passkey-envelope:' OR substr(OLD.record_key, 1, 28) = 'passkey-credential-activity:') AND 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 = json_extract(OLD.record_json, '$.walletId') AND destination.state != 'activated')
|
|
80
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
81
|
+
|
|
82
|
+
CREATE TRIGGER router_ab_yao_versioned_json_records_relocation_owner_immutable
|
|
83
|
+
BEFORE UPDATE ON router_ab_yao_versioned_json_records
|
|
84
|
+
WHEN (substr(OLD.record_key, 1, 17) = 'passkey-envelope:' OR substr(OLD.record_key, 1, 28) = 'passkey-credential-activity:') AND (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 json_extract(NEW.record_json, '$.walletId') IS NOT json_extract(OLD.record_json, '$.walletId'))
|
|
85
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
|
|
86
|
+
|
|
87
|
+
CREATE TRIGGER wallets_relocation_frozen_insert
|
|
88
|
+
BEFORE INSERT ON wallets
|
|
89
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
90
|
+
WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
|
|
91
|
+
AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
|
|
92
|
+
AND fence.wallet_id = NEW.wallet_id)
|
|
93
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
94
|
+
|
|
95
|
+
CREATE TRIGGER wallets_relocation_frozen_update
|
|
96
|
+
BEFORE UPDATE ON wallets
|
|
97
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
98
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
99
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
100
|
+
AND fence.wallet_id = OLD.wallet_id)
|
|
101
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
102
|
+
|
|
103
|
+
CREATE TRIGGER wallets_relocation_frozen_delete
|
|
104
|
+
BEFORE DELETE ON wallets
|
|
105
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
106
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
107
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
108
|
+
AND fence.wallet_id = OLD.wallet_id
|
|
109
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
110
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
111
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
112
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
113
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex
|
|
114
|
+
AND cleanup.source_generation = fence.source_generation AND cleanup.state = 'cleaning'))
|
|
115
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
116
|
+
|
|
117
|
+
CREATE TRIGGER wallets_relocation_inactive_insert
|
|
118
|
+
BEFORE INSERT ON wallets
|
|
119
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
120
|
+
WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
|
|
121
|
+
AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
|
|
122
|
+
AND destination.wallet_id = NEW.wallet_id AND destination.state != 'activated')
|
|
123
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
124
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
125
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
126
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
127
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
128
|
+
AND destination.request_digest_hex = context.request_digest_hex
|
|
129
|
+
AND destination.source_generation = context.source_generation
|
|
130
|
+
WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
|
|
131
|
+
AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
|
|
132
|
+
AND context.wallet_id = NEW.wallet_id
|
|
133
|
+
AND destination.state = 'importing' AND context.table_name = 'wallets'
|
|
134
|
+
AND context.record_key = json_array(NEW.env_id, NEW.namespace, NEW.org_id, NEW.project_id, NEW.wallet_id))
|
|
135
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
136
|
+
|
|
137
|
+
CREATE TRIGGER wallets_relocation_inactive_update
|
|
138
|
+
BEFORE UPDATE ON wallets
|
|
139
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
140
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
141
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
142
|
+
AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
|
|
143
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
144
|
+
|
|
145
|
+
CREATE TRIGGER wallets_relocation_inactive_delete
|
|
146
|
+
BEFORE DELETE ON wallets
|
|
147
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
148
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
149
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
150
|
+
AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
|
|
151
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
152
|
+
|
|
153
|
+
CREATE TRIGGER wallets_relocation_owner_immutable
|
|
154
|
+
BEFORE UPDATE ON wallets
|
|
155
|
+
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
|
|
156
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
|
|
157
|
+
|
|
158
|
+
CREATE TRIGGER wallet_signers_relocation_frozen_insert
|
|
159
|
+
BEFORE INSERT ON wallet_signers
|
|
160
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
161
|
+
WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
|
|
162
|
+
AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
|
|
163
|
+
AND fence.wallet_id = NEW.wallet_id)
|
|
164
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
165
|
+
|
|
166
|
+
CREATE TRIGGER wallet_signers_relocation_frozen_update
|
|
167
|
+
BEFORE UPDATE ON wallet_signers
|
|
168
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
169
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
170
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
171
|
+
AND fence.wallet_id = OLD.wallet_id)
|
|
172
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
173
|
+
|
|
174
|
+
CREATE TRIGGER wallet_signers_relocation_frozen_delete
|
|
175
|
+
BEFORE DELETE ON wallet_signers
|
|
176
|
+
WHEN EXISTS (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
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
181
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
182
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
183
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
184
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex
|
|
185
|
+
AND cleanup.source_generation = fence.source_generation AND cleanup.state = 'cleaning'))
|
|
186
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
187
|
+
|
|
188
|
+
CREATE TRIGGER wallet_signers_relocation_inactive_insert
|
|
189
|
+
BEFORE INSERT ON wallet_signers
|
|
190
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
191
|
+
WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
|
|
192
|
+
AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
|
|
193
|
+
AND destination.wallet_id = NEW.wallet_id AND destination.state != 'activated')
|
|
194
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
195
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
196
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
197
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
198
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
199
|
+
AND destination.request_digest_hex = context.request_digest_hex
|
|
200
|
+
AND destination.source_generation = context.source_generation
|
|
201
|
+
WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
|
|
202
|
+
AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
|
|
203
|
+
AND context.wallet_id = NEW.wallet_id
|
|
204
|
+
AND destination.state = 'importing' AND context.table_name = 'wallet_signers'
|
|
205
|
+
AND context.record_key = json_array(NEW.env_id, NEW.namespace, NEW.org_id, NEW.project_id, NEW.signer_family, NEW.signer_id, NEW.wallet_id))
|
|
206
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
207
|
+
|
|
208
|
+
CREATE TRIGGER wallet_signers_relocation_inactive_update
|
|
209
|
+
BEFORE UPDATE ON wallet_signers
|
|
210
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
211
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
212
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
213
|
+
AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
|
|
214
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
215
|
+
|
|
216
|
+
CREATE TRIGGER wallet_signers_relocation_inactive_delete
|
|
217
|
+
BEFORE DELETE ON wallet_signers
|
|
218
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
219
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
220
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
221
|
+
AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
|
|
222
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
223
|
+
|
|
224
|
+
CREATE TRIGGER wallet_signers_relocation_owner_immutable
|
|
225
|
+
BEFORE UPDATE ON wallet_signers
|
|
226
|
+
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
|
|
227
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
|
|
228
|
+
|
|
229
|
+
CREATE TRIGGER webauthn_credential_bindings_relocation_frozen_insert
|
|
230
|
+
BEFORE INSERT ON webauthn_credential_bindings
|
|
231
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
232
|
+
WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
|
|
233
|
+
AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
|
|
234
|
+
AND fence.wallet_id = NEW.user_id)
|
|
235
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
236
|
+
|
|
237
|
+
CREATE TRIGGER webauthn_credential_bindings_relocation_frozen_update
|
|
238
|
+
BEFORE UPDATE ON webauthn_credential_bindings
|
|
239
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
240
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
241
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
242
|
+
AND fence.wallet_id = OLD.user_id)
|
|
243
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
244
|
+
|
|
245
|
+
CREATE TRIGGER webauthn_credential_bindings_relocation_frozen_delete
|
|
246
|
+
BEFORE DELETE ON webauthn_credential_bindings
|
|
247
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
248
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
249
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
250
|
+
AND fence.wallet_id = OLD.user_id
|
|
251
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
252
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
253
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
254
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
255
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex
|
|
256
|
+
AND cleanup.source_generation = fence.source_generation AND cleanup.state = 'cleaning'))
|
|
257
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
258
|
+
|
|
259
|
+
CREATE TRIGGER webauthn_credential_bindings_relocation_inactive_insert
|
|
260
|
+
BEFORE INSERT ON webauthn_credential_bindings
|
|
261
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
262
|
+
WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
|
|
263
|
+
AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
|
|
264
|
+
AND destination.wallet_id = NEW.user_id AND destination.state != 'activated')
|
|
265
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
266
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
267
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
268
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
269
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
270
|
+
AND destination.request_digest_hex = context.request_digest_hex
|
|
271
|
+
AND destination.source_generation = context.source_generation
|
|
272
|
+
WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
|
|
273
|
+
AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
|
|
274
|
+
AND context.wallet_id = NEW.user_id
|
|
275
|
+
AND destination.state = 'importing' AND context.table_name = 'webauthn_credential_bindings'
|
|
276
|
+
AND context.record_key = json_array(NEW.credential_id_b64u, NEW.env_id, NEW.namespace, NEW.org_id, NEW.project_id, NEW.rp_id))
|
|
277
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
278
|
+
|
|
279
|
+
CREATE TRIGGER webauthn_credential_bindings_relocation_inactive_update
|
|
280
|
+
BEFORE UPDATE ON webauthn_credential_bindings
|
|
281
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
282
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
283
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
284
|
+
AND destination.wallet_id = OLD.user_id AND destination.state != 'activated')
|
|
285
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
286
|
+
|
|
287
|
+
CREATE TRIGGER webauthn_credential_bindings_relocation_inactive_delete
|
|
288
|
+
BEFORE DELETE ON webauthn_credential_bindings
|
|
289
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
290
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
291
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
292
|
+
AND destination.wallet_id = OLD.user_id AND destination.state != 'activated')
|
|
293
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
294
|
+
|
|
295
|
+
CREATE TRIGGER webauthn_credential_bindings_relocation_owner_immutable
|
|
296
|
+
BEFORE UPDATE ON webauthn_credential_bindings
|
|
297
|
+
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.user_id IS NOT OLD.user_id
|
|
298
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
|
|
299
|
+
|
|
300
|
+
CREATE TRIGGER webauthn_authenticators_relocation_frozen_insert
|
|
301
|
+
BEFORE INSERT ON webauthn_authenticators
|
|
302
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
303
|
+
WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
|
|
304
|
+
AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
|
|
305
|
+
AND fence.wallet_id = NEW.user_id)
|
|
306
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
307
|
+
|
|
308
|
+
CREATE TRIGGER webauthn_authenticators_relocation_frozen_update
|
|
309
|
+
BEFORE UPDATE ON webauthn_authenticators
|
|
310
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
311
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
312
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
313
|
+
AND fence.wallet_id = OLD.user_id)
|
|
314
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
315
|
+
|
|
316
|
+
CREATE TRIGGER webauthn_authenticators_relocation_frozen_delete
|
|
317
|
+
BEFORE DELETE ON webauthn_authenticators
|
|
318
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
319
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
320
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
321
|
+
AND fence.wallet_id = OLD.user_id
|
|
322
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
323
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
324
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
325
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
326
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex
|
|
327
|
+
AND cleanup.source_generation = fence.source_generation AND cleanup.state = 'cleaning'))
|
|
328
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
329
|
+
|
|
330
|
+
CREATE TRIGGER webauthn_authenticators_relocation_inactive_insert
|
|
331
|
+
BEFORE INSERT ON webauthn_authenticators
|
|
332
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
333
|
+
WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
|
|
334
|
+
AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
|
|
335
|
+
AND destination.wallet_id = NEW.user_id AND destination.state != 'activated')
|
|
336
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
337
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
338
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
339
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
340
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
341
|
+
AND destination.request_digest_hex = context.request_digest_hex
|
|
342
|
+
AND destination.source_generation = context.source_generation
|
|
343
|
+
WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
|
|
344
|
+
AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
|
|
345
|
+
AND context.wallet_id = NEW.user_id
|
|
346
|
+
AND destination.state = 'importing' AND context.table_name = 'webauthn_authenticators'
|
|
347
|
+
AND context.record_key = json_array(NEW.credential_id_b64u, NEW.env_id, NEW.namespace, NEW.org_id, NEW.project_id, NEW.user_id))
|
|
348
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
349
|
+
|
|
350
|
+
CREATE TRIGGER webauthn_authenticators_relocation_inactive_update
|
|
351
|
+
BEFORE UPDATE ON webauthn_authenticators
|
|
352
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
353
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
354
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
355
|
+
AND destination.wallet_id = OLD.user_id AND destination.state != 'activated')
|
|
356
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
357
|
+
|
|
358
|
+
CREATE TRIGGER webauthn_authenticators_relocation_inactive_delete
|
|
359
|
+
BEFORE DELETE ON webauthn_authenticators
|
|
360
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
361
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
362
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
363
|
+
AND destination.wallet_id = OLD.user_id AND destination.state != 'activated')
|
|
364
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
365
|
+
|
|
366
|
+
CREATE TRIGGER webauthn_authenticators_relocation_owner_immutable
|
|
367
|
+
BEFORE UPDATE ON webauthn_authenticators
|
|
368
|
+
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.user_id IS NOT OLD.user_id
|
|
369
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
-- Snapshot inventories must not change during an in-progress transfer.
|
|
2
|
+
CREATE TABLE wallet_otp_relocation_upgrade_guard (count INTEGER NOT NULL CHECK (count = 0));
|
|
3
|
+
INSERT INTO wallet_otp_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_otp_relocation_upgrade_guard;
|
|
15
|
+
|
|
16
|
+
CREATE TABLE wallet_email_otp_rate_limits (
|
|
17
|
+
namespace TEXT NOT NULL CHECK (length(namespace) > 0),
|
|
18
|
+
org_id TEXT NOT NULL CHECK (length(org_id) > 0),
|
|
19
|
+
project_id TEXT NOT NULL CHECK (length(project_id) > 0),
|
|
20
|
+
env_id TEXT NOT NULL CHECK (length(env_id) > 0),
|
|
21
|
+
wallet_id TEXT NOT NULL CHECK (length(wallet_id) > 0),
|
|
22
|
+
rate_key TEXT NOT NULL CHECK (length(rate_key) > 0),
|
|
23
|
+
consumed_count INTEGER NOT NULL CHECK (consumed_count > 0),
|
|
24
|
+
reset_at_ms INTEGER NOT NULL CHECK (reset_at_ms > 0),
|
|
25
|
+
updated_at_ms INTEGER NOT NULL CHECK (updated_at_ms > 0 AND reset_at_ms > updated_at_ms),
|
|
26
|
+
PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_id, rate_key)
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE TRIGGER wallet_email_otp_rate_limits_relocation_frozen_insert
|
|
30
|
+
BEFORE INSERT ON wallet_email_otp_rate_limits
|
|
31
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
32
|
+
WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
|
|
33
|
+
AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
|
|
34
|
+
AND fence.wallet_id = NEW.wallet_id)
|
|
35
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
36
|
+
|
|
37
|
+
CREATE TRIGGER wallet_email_otp_rate_limits_relocation_frozen_update
|
|
38
|
+
BEFORE UPDATE ON wallet_email_otp_rate_limits
|
|
39
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
40
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
41
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
42
|
+
AND fence.wallet_id = OLD.wallet_id)
|
|
43
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
44
|
+
|
|
45
|
+
CREATE TRIGGER wallet_email_otp_rate_limits_relocation_frozen_delete
|
|
46
|
+
BEFORE DELETE ON wallet_email_otp_rate_limits
|
|
47
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
48
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
49
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id
|
|
50
|
+
AND fence.wallet_id = OLD.wallet_id
|
|
51
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
52
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
53
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
54
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
55
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex
|
|
56
|
+
AND cleanup.source_generation = fence.source_generation AND cleanup.state = 'cleaning'))
|
|
57
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
58
|
+
|
|
59
|
+
CREATE TRIGGER wallet_email_otp_rate_limits_relocation_inactive_insert
|
|
60
|
+
BEFORE INSERT ON wallet_email_otp_rate_limits
|
|
61
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
62
|
+
WHERE destination.namespace = NEW.namespace AND destination.org_id = NEW.org_id
|
|
63
|
+
AND destination.project_id = NEW.project_id AND destination.env_id = NEW.env_id
|
|
64
|
+
AND destination.wallet_id = NEW.wallet_id AND destination.state != 'activated')
|
|
65
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
66
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
67
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
68
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
69
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
70
|
+
AND destination.request_digest_hex = context.request_digest_hex
|
|
71
|
+
AND destination.source_generation = context.source_generation
|
|
72
|
+
WHERE context.namespace = NEW.namespace AND context.org_id = NEW.org_id
|
|
73
|
+
AND context.project_id = NEW.project_id AND context.env_id = NEW.env_id
|
|
74
|
+
AND context.wallet_id = NEW.wallet_id
|
|
75
|
+
AND destination.state = 'importing' AND context.table_name = 'wallet_email_otp_rate_limits'
|
|
76
|
+
AND context.record_key = json_array(NEW.env_id, NEW.namespace, NEW.org_id, NEW.project_id, NEW.rate_key, NEW.wallet_id))
|
|
77
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
78
|
+
|
|
79
|
+
CREATE TRIGGER wallet_email_otp_rate_limits_relocation_inactive_update
|
|
80
|
+
BEFORE UPDATE ON wallet_email_otp_rate_limits
|
|
81
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
82
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
83
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
84
|
+
AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
|
|
85
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
86
|
+
|
|
87
|
+
CREATE TRIGGER wallet_email_otp_rate_limits_relocation_inactive_delete
|
|
88
|
+
BEFORE DELETE ON wallet_email_otp_rate_limits
|
|
89
|
+
WHEN EXISTS (SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
90
|
+
WHERE destination.namespace = OLD.namespace AND destination.org_id = OLD.org_id
|
|
91
|
+
AND destination.project_id = OLD.project_id AND destination.env_id = OLD.env_id
|
|
92
|
+
AND destination.wallet_id = OLD.wallet_id AND destination.state != 'activated')
|
|
93
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
94
|
+
|
|
95
|
+
CREATE TRIGGER wallet_email_otp_rate_limits_relocation_owner_immutable
|
|
96
|
+
BEFORE UPDATE ON wallet_email_otp_rate_limits
|
|
97
|
+
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 OR NEW.rate_key IS NOT OLD.rate_key
|
|
98
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_record_owner_changed'); END;
|