@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,466 @@
|
|
|
1
|
+
-- A sealed manifest cannot change its inventory during a schema upgrade.
|
|
2
|
+
CREATE TABLE wallet_operation_history_upgrade_guard (count INTEGER NOT NULL CHECK(count = 0));
|
|
3
|
+
INSERT INTO wallet_operation_history_upgrade_guard
|
|
4
|
+
SELECT (SELECT COUNT(*) FROM wallet_relocation_authorization_snapshots)
|
|
5
|
+
+ (SELECT COUNT(*) FROM wallet_relocation_authorization_imports);
|
|
6
|
+
DROP TABLE wallet_operation_history_upgrade_guard;
|
|
7
|
+
|
|
8
|
+
CREATE VIEW wallet_operation_authorizations AS
|
|
9
|
+
SELECT namespace, org_id, project_id, env_id, wallet_id, tenant_id,
|
|
10
|
+
'authorization_grant' AS source_kind, authorization_id AS source_id
|
|
11
|
+
FROM wallet_session_authorizations_v2
|
|
12
|
+
UNION ALL
|
|
13
|
+
SELECT namespace, org_id, project_id, env_id, wallet_id, tenant_id,
|
|
14
|
+
'verified_step_up' AS source_kind, evidence_set_digest AS source_id
|
|
15
|
+
FROM verified_wallet_operation_evidence_sets;
|
|
16
|
+
CREATE VIEW wallet_operation_owners AS
|
|
17
|
+
SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id,
|
|
18
|
+
operation.tenant_id, operation.authorized_operation_id
|
|
19
|
+
FROM wallet_operation_authorizations AS owner
|
|
20
|
+
JOIN authorized_operations AS operation
|
|
21
|
+
ON owner.namespace = operation.namespace AND owner.tenant_id = operation.tenant_id
|
|
22
|
+
AND owner.source_kind = operation.authorization_source_kind
|
|
23
|
+
AND owner.source_id = CASE operation.authorization_source_kind
|
|
24
|
+
WHEN 'authorization_grant' THEN operation.authorization_id ELSE operation.evidence_set_digest END
|
|
25
|
+
AND (operation.authorization_source_kind = 'verified_step_up' OR
|
|
26
|
+
(operation.authorization_grant_kind = 'wallet_session_authorization'
|
|
27
|
+
AND owner.org_id = operation.owner_scope_org_id AND owner.project_id = operation.owner_scope_project_id
|
|
28
|
+
AND owner.env_id = operation.owner_scope_env_id));
|
|
29
|
+
DROP VIEW wallet_pending_operations;
|
|
30
|
+
CREATE VIEW wallet_pending_operations AS
|
|
31
|
+
SELECT owner.* FROM wallet_operation_owners AS owner
|
|
32
|
+
JOIN authorized_operations AS operation USING(namespace, tenant_id, authorized_operation_id)
|
|
33
|
+
WHERE operation.lifecycle_kind = 'claimed';
|
|
34
|
+
|
|
35
|
+
CREATE TRIGGER wallet_operation_evidence_frozen_delete
|
|
36
|
+
BEFORE DELETE ON verified_wallet_operation_evidence_sets
|
|
37
|
+
WHEN EXISTS (
|
|
38
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
39
|
+
JOIN (SELECT OLD.namespace, OLD.org_id, OLD.project_id, OLD.env_id, OLD.wallet_id) AS selected ON selected.namespace = fence.namespace
|
|
40
|
+
AND selected.org_id = fence.org_id AND selected.project_id = fence.project_id AND selected.env_id = fence.env_id
|
|
41
|
+
AND selected.wallet_id = fence.wallet_id AND NOT EXISTS (
|
|
42
|
+
SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
43
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id AND cleanup.project_id = fence.project_id
|
|
44
|
+
AND cleanup.env_id = fence.env_id AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
45
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex AND cleanup.source_generation = fence.source_generation
|
|
46
|
+
AND cleanup.state = 'cleaning')
|
|
47
|
+
)
|
|
48
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
49
|
+
|
|
50
|
+
CREATE TRIGGER wallet_operation_evidence_inactive_insert
|
|
51
|
+
BEFORE INSERT ON verified_wallet_operation_evidence_sets
|
|
52
|
+
WHEN EXISTS (
|
|
53
|
+
SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
54
|
+
JOIN (SELECT NEW.namespace, NEW.org_id, NEW.project_id, NEW.env_id, NEW.wallet_id) AS selected ON selected.namespace = destination.namespace
|
|
55
|
+
AND selected.org_id = destination.org_id AND selected.project_id = destination.project_id
|
|
56
|
+
AND selected.env_id = destination.env_id AND selected.wallet_id = destination.wallet_id
|
|
57
|
+
WHERE destination.state != 'activated'
|
|
58
|
+
) AND NOT EXISTS (
|
|
59
|
+
SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
60
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
61
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
62
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
63
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
64
|
+
AND destination.request_digest_hex = context.request_digest_hex AND destination.source_generation = context.source_generation
|
|
65
|
+
JOIN (SELECT NEW.namespace, NEW.org_id, NEW.project_id, NEW.env_id, NEW.wallet_id) AS selected ON selected.namespace = context.namespace
|
|
66
|
+
AND selected.org_id = context.org_id AND selected.project_id = context.project_id AND selected.env_id = context.env_id
|
|
67
|
+
AND selected.wallet_id = context.wallet_id
|
|
68
|
+
WHERE destination.state = 'importing' AND context.table_name = 'verified_wallet_operation_evidence_sets'
|
|
69
|
+
AND context.record_key = json_array(NEW.evidence_set_id, NEW.namespace, NEW.tenant_id)
|
|
70
|
+
)
|
|
71
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
72
|
+
|
|
73
|
+
CREATE TRIGGER wallet_operations_frozen_insert
|
|
74
|
+
BEFORE INSERT ON authorized_operations
|
|
75
|
+
WHEN EXISTS (
|
|
76
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
77
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
78
|
+
FROM wallet_operation_authorizations AS owner
|
|
79
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
80
|
+
AND owner.source_kind = NEW.authorization_source_kind
|
|
81
|
+
AND owner.source_id = CASE NEW.authorization_source_kind
|
|
82
|
+
WHEN 'authorization_grant' THEN NEW.authorization_id ELSE NEW.evidence_set_digest END
|
|
83
|
+
AND (NEW.authorization_source_kind = 'verified_step_up' OR
|
|
84
|
+
(NEW.authorization_grant_kind = 'wallet_session_authorization'
|
|
85
|
+
AND owner.org_id = NEW.owner_scope_org_id AND owner.project_id = NEW.owner_scope_project_id
|
|
86
|
+
AND owner.env_id = NEW.owner_scope_env_id))) AS selected ON selected.namespace = fence.namespace
|
|
87
|
+
AND selected.org_id = fence.org_id AND selected.project_id = fence.project_id AND selected.env_id = fence.env_id
|
|
88
|
+
AND selected.wallet_id = fence.wallet_id
|
|
89
|
+
)
|
|
90
|
+
BEGIN
|
|
91
|
+
SELECT CASE WHEN NEW.authorization_source_kind = 'verified_step_up'
|
|
92
|
+
THEN RAISE(ABORT, 'authorization_evidence_claim_rejected')
|
|
93
|
+
ELSE RAISE(ABORT, 'authorization_wallet_session_rejected') END;
|
|
94
|
+
END;
|
|
95
|
+
|
|
96
|
+
CREATE TRIGGER wallet_operations_frozen_delete
|
|
97
|
+
BEFORE DELETE ON authorized_operations
|
|
98
|
+
WHEN EXISTS (
|
|
99
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
100
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
101
|
+
FROM wallet_operation_authorizations AS owner
|
|
102
|
+
WHERE owner.namespace = OLD.namespace AND owner.tenant_id = OLD.tenant_id
|
|
103
|
+
AND owner.source_kind = OLD.authorization_source_kind
|
|
104
|
+
AND owner.source_id = CASE OLD.authorization_source_kind
|
|
105
|
+
WHEN 'authorization_grant' THEN OLD.authorization_id ELSE OLD.evidence_set_digest END
|
|
106
|
+
AND (OLD.authorization_source_kind = 'verified_step_up' OR
|
|
107
|
+
(OLD.authorization_grant_kind = 'wallet_session_authorization'
|
|
108
|
+
AND owner.org_id = OLD.owner_scope_org_id AND owner.project_id = OLD.owner_scope_project_id
|
|
109
|
+
AND owner.env_id = OLD.owner_scope_env_id))) AS selected ON selected.namespace = fence.namespace
|
|
110
|
+
AND selected.org_id = fence.org_id AND selected.project_id = fence.project_id AND selected.env_id = fence.env_id
|
|
111
|
+
AND selected.wallet_id = fence.wallet_id AND NOT EXISTS (
|
|
112
|
+
SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
113
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id AND cleanup.project_id = fence.project_id
|
|
114
|
+
AND cleanup.env_id = fence.env_id AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
115
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex AND cleanup.source_generation = fence.source_generation
|
|
116
|
+
AND cleanup.state = 'cleaning')
|
|
117
|
+
)
|
|
118
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
119
|
+
|
|
120
|
+
CREATE TRIGGER wallet_operations_inactive_insert
|
|
121
|
+
BEFORE INSERT ON authorized_operations
|
|
122
|
+
WHEN EXISTS (
|
|
123
|
+
SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
124
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
125
|
+
FROM wallet_operation_authorizations AS owner
|
|
126
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
127
|
+
AND owner.source_kind = NEW.authorization_source_kind
|
|
128
|
+
AND owner.source_id = CASE NEW.authorization_source_kind
|
|
129
|
+
WHEN 'authorization_grant' THEN NEW.authorization_id ELSE NEW.evidence_set_digest END
|
|
130
|
+
AND (NEW.authorization_source_kind = 'verified_step_up' OR
|
|
131
|
+
(NEW.authorization_grant_kind = 'wallet_session_authorization'
|
|
132
|
+
AND owner.org_id = NEW.owner_scope_org_id AND owner.project_id = NEW.owner_scope_project_id
|
|
133
|
+
AND owner.env_id = NEW.owner_scope_env_id))) AS selected ON selected.namespace = destination.namespace
|
|
134
|
+
AND selected.org_id = destination.org_id AND selected.project_id = destination.project_id
|
|
135
|
+
AND selected.env_id = destination.env_id AND selected.wallet_id = destination.wallet_id
|
|
136
|
+
WHERE destination.state != 'activated'
|
|
137
|
+
) AND NOT EXISTS (
|
|
138
|
+
SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
139
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
140
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
141
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
142
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
143
|
+
AND destination.request_digest_hex = context.request_digest_hex AND destination.source_generation = context.source_generation
|
|
144
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
145
|
+
FROM wallet_operation_authorizations AS owner
|
|
146
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
147
|
+
AND owner.source_kind = NEW.authorization_source_kind
|
|
148
|
+
AND owner.source_id = CASE NEW.authorization_source_kind
|
|
149
|
+
WHEN 'authorization_grant' THEN NEW.authorization_id ELSE NEW.evidence_set_digest END
|
|
150
|
+
AND (NEW.authorization_source_kind = 'verified_step_up' OR
|
|
151
|
+
(NEW.authorization_grant_kind = 'wallet_session_authorization'
|
|
152
|
+
AND owner.org_id = NEW.owner_scope_org_id AND owner.project_id = NEW.owner_scope_project_id
|
|
153
|
+
AND owner.env_id = NEW.owner_scope_env_id))) AS selected ON selected.namespace = context.namespace
|
|
154
|
+
AND selected.org_id = context.org_id AND selected.project_id = context.project_id AND selected.env_id = context.env_id
|
|
155
|
+
AND selected.wallet_id = context.wallet_id
|
|
156
|
+
WHERE destination.state = 'importing' AND context.table_name = 'authorized_operations'
|
|
157
|
+
AND context.record_key = json_array(NEW.authorized_operation_id, NEW.namespace, NEW.tenant_id)
|
|
158
|
+
)
|
|
159
|
+
BEGIN
|
|
160
|
+
SELECT CASE WHEN NEW.lifecycle_kind != 'claimed'
|
|
161
|
+
THEN RAISE(ABORT, 'wallet_authorization_destination_inactive')
|
|
162
|
+
WHEN NEW.authorization_source_kind = 'verified_step_up'
|
|
163
|
+
THEN RAISE(ABORT, 'authorization_evidence_claim_rejected')
|
|
164
|
+
ELSE RAISE(ABORT, 'authorization_wallet_session_rejected') END;
|
|
165
|
+
END;
|
|
166
|
+
|
|
167
|
+
CREATE TRIGGER wallet_operations_historical_insert
|
|
168
|
+
BEFORE INSERT ON authorized_operations
|
|
169
|
+
WHEN NEW.lifecycle_kind = 'completed' AND NOT EXISTS (
|
|
170
|
+
SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
171
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
172
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
173
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
174
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
175
|
+
AND destination.request_digest_hex = context.request_digest_hex AND destination.source_generation = context.source_generation
|
|
176
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
177
|
+
FROM wallet_operation_authorizations AS owner
|
|
178
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
179
|
+
AND owner.source_kind = NEW.authorization_source_kind
|
|
180
|
+
AND owner.source_id = CASE NEW.authorization_source_kind
|
|
181
|
+
WHEN 'authorization_grant' THEN NEW.authorization_id ELSE NEW.evidence_set_digest END
|
|
182
|
+
AND (NEW.authorization_source_kind = 'verified_step_up' OR
|
|
183
|
+
(NEW.authorization_grant_kind = 'wallet_session_authorization'
|
|
184
|
+
AND owner.org_id = NEW.owner_scope_org_id AND owner.project_id = NEW.owner_scope_project_id
|
|
185
|
+
AND owner.env_id = NEW.owner_scope_env_id))) AS selected ON selected.namespace = context.namespace
|
|
186
|
+
AND selected.org_id = context.org_id AND selected.project_id = context.project_id AND selected.env_id = context.env_id
|
|
187
|
+
AND selected.wallet_id = context.wallet_id
|
|
188
|
+
WHERE destination.state = 'importing' AND context.table_name = 'authorized_operations'
|
|
189
|
+
AND context.record_key = json_array(NEW.authorized_operation_id, NEW.namespace, NEW.tenant_id)
|
|
190
|
+
)
|
|
191
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_history_import_required'); END;
|
|
192
|
+
|
|
193
|
+
CREATE TRIGGER wallet_operation_audits_frozen_insert
|
|
194
|
+
BEFORE INSERT ON authorized_operation_audit_events
|
|
195
|
+
WHEN EXISTS (
|
|
196
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
197
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
198
|
+
FROM wallet_operation_owners AS owner
|
|
199
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
200
|
+
AND owner.authorized_operation_id = NEW.authorized_operation_id) AS selected ON selected.namespace = fence.namespace
|
|
201
|
+
AND selected.org_id = fence.org_id AND selected.project_id = fence.project_id AND selected.env_id = fence.env_id
|
|
202
|
+
AND selected.wallet_id = fence.wallet_id
|
|
203
|
+
)
|
|
204
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
205
|
+
|
|
206
|
+
CREATE TRIGGER wallet_operation_audits_frozen_delete
|
|
207
|
+
BEFORE DELETE ON authorized_operation_audit_events
|
|
208
|
+
WHEN EXISTS (
|
|
209
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
210
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
211
|
+
FROM wallet_operation_owners AS owner
|
|
212
|
+
WHERE owner.namespace = OLD.namespace AND owner.tenant_id = OLD.tenant_id
|
|
213
|
+
AND owner.authorized_operation_id = OLD.authorized_operation_id) AS selected ON selected.namespace = fence.namespace
|
|
214
|
+
AND selected.org_id = fence.org_id AND selected.project_id = fence.project_id AND selected.env_id = fence.env_id
|
|
215
|
+
AND selected.wallet_id = fence.wallet_id AND NOT EXISTS (
|
|
216
|
+
SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
217
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id AND cleanup.project_id = fence.project_id
|
|
218
|
+
AND cleanup.env_id = fence.env_id AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
219
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex AND cleanup.source_generation = fence.source_generation
|
|
220
|
+
AND cleanup.state = 'cleaning')
|
|
221
|
+
)
|
|
222
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
223
|
+
|
|
224
|
+
CREATE TRIGGER wallet_operation_audits_inactive_insert
|
|
225
|
+
BEFORE INSERT ON authorized_operation_audit_events
|
|
226
|
+
WHEN EXISTS (
|
|
227
|
+
SELECT 1 FROM wallet_relocation_authorization_imports AS destination
|
|
228
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
229
|
+
FROM wallet_operation_owners AS owner
|
|
230
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
231
|
+
|
|
232
|
+
AND owner.authorized_operation_id = NEW.authorized_operation_id) AS selected ON selected.namespace = destination.namespace
|
|
233
|
+
AND selected.org_id = destination.org_id AND selected.project_id = destination.project_id
|
|
234
|
+
AND selected.env_id = destination.env_id AND selected.wallet_id = destination.wallet_id
|
|
235
|
+
WHERE destination.state != 'activated'
|
|
236
|
+
) AND NOT EXISTS (
|
|
237
|
+
SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
238
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
239
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
240
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
241
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
242
|
+
AND destination.request_digest_hex = context.request_digest_hex AND destination.source_generation = context.source_generation
|
|
243
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
244
|
+
FROM wallet_operation_owners AS owner
|
|
245
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
246
|
+
AND owner.authorized_operation_id = NEW.authorized_operation_id) AS selected ON selected.namespace = context.namespace
|
|
247
|
+
AND selected.org_id = context.org_id AND selected.project_id = context.project_id AND selected.env_id = context.env_id
|
|
248
|
+
AND selected.wallet_id = context.wallet_id
|
|
249
|
+
WHERE destination.state = 'importing' AND context.table_name = 'authorized_operation_audit_events'
|
|
250
|
+
AND context.record_key = json_array(NEW.audit_event_id, NEW.namespace, NEW.tenant_id)
|
|
251
|
+
)
|
|
252
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_destination_inactive'); END;
|
|
253
|
+
|
|
254
|
+
CREATE TRIGGER wallet_operation_audits_historical_insert
|
|
255
|
+
BEFORE INSERT ON authorized_operation_audit_events
|
|
256
|
+
WHEN NEW.result_kind != 'pending' AND NOT EXISTS (
|
|
257
|
+
SELECT 1 FROM wallet_relocation_authorization_import_context AS context
|
|
258
|
+
JOIN wallet_relocation_authorization_imports AS destination
|
|
259
|
+
ON destination.namespace = context.namespace AND destination.org_id = context.org_id
|
|
260
|
+
AND destination.project_id = context.project_id AND destination.env_id = context.env_id
|
|
261
|
+
AND destination.wallet_id = context.wallet_id AND destination.move_id = context.move_id
|
|
262
|
+
AND destination.request_digest_hex = context.request_digest_hex AND destination.source_generation = context.source_generation
|
|
263
|
+
JOIN (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
264
|
+
FROM wallet_operation_owners AS owner
|
|
265
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
266
|
+
AND owner.authorized_operation_id = NEW.authorized_operation_id) AS selected ON selected.namespace = context.namespace
|
|
267
|
+
AND selected.org_id = context.org_id AND selected.project_id = context.project_id AND selected.env_id = context.env_id
|
|
268
|
+
AND selected.wallet_id = context.wallet_id
|
|
269
|
+
WHERE destination.state = 'importing' AND context.table_name = 'authorized_operation_audit_events'
|
|
270
|
+
AND context.record_key = json_array(NEW.audit_event_id, NEW.namespace, NEW.tenant_id)
|
|
271
|
+
)
|
|
272
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_history_import_required'); END;
|
|
273
|
+
|
|
274
|
+
CREATE TRIGGER wallet_operations_owner_required
|
|
275
|
+
BEFORE INSERT ON authorized_operations
|
|
276
|
+
WHEN NOT EXISTS (SELECT owner.namespace, owner.org_id, owner.project_id, owner.env_id, owner.wallet_id
|
|
277
|
+
FROM wallet_operation_authorizations AS owner
|
|
278
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
279
|
+
AND owner.source_kind = NEW.authorization_source_kind
|
|
280
|
+
AND owner.source_id = CASE NEW.authorization_source_kind
|
|
281
|
+
WHEN 'authorization_grant' THEN NEW.authorization_id ELSE NEW.evidence_set_digest END
|
|
282
|
+
AND (NEW.authorization_source_kind = 'verified_step_up' OR
|
|
283
|
+
(NEW.authorization_grant_kind = 'wallet_session_authorization'
|
|
284
|
+
AND owner.org_id = NEW.owner_scope_org_id AND owner.project_id = NEW.owner_scope_project_id
|
|
285
|
+
AND owner.env_id = NEW.owner_scope_env_id)))
|
|
286
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_owner_missing'); END;
|
|
287
|
+
|
|
288
|
+
CREATE TRIGGER wallet_operation_audit_parent
|
|
289
|
+
BEFORE INSERT ON authorized_operation_audit_events
|
|
290
|
+
WHEN NOT EXISTS (SELECT 1 FROM authorized_operations AS operation
|
|
291
|
+
WHERE operation.namespace IS NEW.namespace
|
|
292
|
+
AND operation.tenant_id IS NEW.tenant_id
|
|
293
|
+
AND operation.audit_event_id IS NEW.audit_event_id
|
|
294
|
+
AND operation.authorized_operation_id IS NEW.authorized_operation_id
|
|
295
|
+
AND operation.operation_fingerprint_digest IS NEW.operation_fingerprint_digest
|
|
296
|
+
AND operation.authorization_source_kind IS NEW.authorization_source_kind
|
|
297
|
+
AND operation.authorization_id IS NEW.authorization_id
|
|
298
|
+
AND operation.authorization_grant_kind IS NEW.authorization_grant_kind
|
|
299
|
+
AND operation.evidence_set_digest IS NEW.evidence_set_digest
|
|
300
|
+
AND operation.quota_id IS NEW.quota_id
|
|
301
|
+
AND operation.material_activation_id IS NEW.material_activation_id
|
|
302
|
+
AND operation.material_activation_capability IS NEW.material_activation_capability
|
|
303
|
+
AND operation.material_activation_owner IS NEW.material_activation_owner
|
|
304
|
+
AND operation.material_activation_key_binding IS NEW.material_activation_key_binding
|
|
305
|
+
AND operation.material_activation_lifecycle_binding IS NEW.material_activation_lifecycle_binding
|
|
306
|
+
AND operation.material_activation_signing_worker IS NEW.material_activation_signing_worker
|
|
307
|
+
AND operation.owner_scope_org_id IS NEW.owner_scope_org_id
|
|
308
|
+
AND operation.owner_scope_project_id IS NEW.owner_scope_project_id
|
|
309
|
+
AND operation.owner_scope_env_id IS NEW.owner_scope_env_id
|
|
310
|
+
AND operation.result_kind IS NEW.result_kind
|
|
311
|
+
AND operation.claimed_at_ms IS NEW.claimed_at_ms
|
|
312
|
+
AND operation.completed_at_ms IS NEW.completed_at_ms)
|
|
313
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_audit_parent_conflicts'); END;
|
|
314
|
+
|
|
315
|
+
CREATE TRIGGER wallet_operation_terminal_immutable
|
|
316
|
+
BEFORE UPDATE ON authorized_operations
|
|
317
|
+
WHEN OLD.lifecycle_kind = 'completed'
|
|
318
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_terminal_immutable'); END;
|
|
319
|
+
CREATE TRIGGER wallet_operation_audit_terminal_immutable
|
|
320
|
+
BEFORE UPDATE ON authorized_operation_audit_events
|
|
321
|
+
WHEN OLD.result_kind != 'pending'
|
|
322
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_terminal_immutable'); END;
|
|
323
|
+
|
|
324
|
+
CREATE TRIGGER wallet_operation_identity_immutable
|
|
325
|
+
BEFORE UPDATE ON authorized_operations
|
|
326
|
+
WHEN NEW.namespace IS NOT OLD.namespace
|
|
327
|
+
OR NEW.tenant_id IS NOT OLD.tenant_id
|
|
328
|
+
OR NEW.authorized_operation_id IS NOT OLD.authorized_operation_id
|
|
329
|
+
OR NEW.audit_event_id IS NOT OLD.audit_event_id
|
|
330
|
+
OR NEW.principal_id IS NOT OLD.principal_id
|
|
331
|
+
OR NEW.capability_id IS NOT OLD.capability_id
|
|
332
|
+
OR NEW.capability_kind IS NOT OLD.capability_kind
|
|
333
|
+
OR NEW.operation_kind IS NOT OLD.operation_kind
|
|
334
|
+
OR NEW.operation_id IS NOT OLD.operation_id
|
|
335
|
+
OR NEW.operation_fingerprint_digest IS NOT OLD.operation_fingerprint_digest
|
|
336
|
+
OR NEW.lane_digest IS NOT OLD.lane_digest
|
|
337
|
+
OR NEW.intent_digest IS NOT OLD.intent_digest
|
|
338
|
+
OR NEW.display_digest IS NOT OLD.display_digest
|
|
339
|
+
OR NEW.authorization_source_kind IS NOT OLD.authorization_source_kind
|
|
340
|
+
OR NEW.authorization_id IS NOT OLD.authorization_id
|
|
341
|
+
OR NEW.authorization_grant_kind IS NOT OLD.authorization_grant_kind
|
|
342
|
+
OR NEW.evidence_set_digest IS NOT OLD.evidence_set_digest
|
|
343
|
+
OR NEW.quota_id IS NOT OLD.quota_id
|
|
344
|
+
OR NEW.quota_kind IS NOT OLD.quota_kind
|
|
345
|
+
OR NEW.claimed_at_ms IS NOT OLD.claimed_at_ms
|
|
346
|
+
OR NEW.material_activation_id IS NOT OLD.material_activation_id
|
|
347
|
+
OR NEW.material_activation_capability IS NOT OLD.material_activation_capability
|
|
348
|
+
OR NEW.material_activation_owner IS NOT OLD.material_activation_owner
|
|
349
|
+
OR NEW.material_activation_key_binding IS NOT OLD.material_activation_key_binding
|
|
350
|
+
OR NEW.material_activation_lifecycle_binding IS NOT OLD.material_activation_lifecycle_binding
|
|
351
|
+
OR NEW.material_activation_signing_worker IS NOT OLD.material_activation_signing_worker
|
|
352
|
+
OR NEW.owner_scope_org_id IS NOT OLD.owner_scope_org_id
|
|
353
|
+
OR NEW.owner_scope_project_id IS NOT OLD.owner_scope_project_id
|
|
354
|
+
OR NEW.owner_scope_env_id IS NOT OLD.owner_scope_env_id
|
|
355
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_identity_immutable'); END;
|
|
356
|
+
|
|
357
|
+
DROP TRIGGER authorized_operation_step_up_claim_atomic;
|
|
358
|
+
CREATE TRIGGER authorized_operation_step_up_claim_atomic
|
|
359
|
+
AFTER INSERT ON authorized_operations
|
|
360
|
+
WHEN NEW.lifecycle_kind = 'claimed'
|
|
361
|
+
AND NEW.authorization_source_kind = 'verified_step_up'
|
|
362
|
+
BEGIN
|
|
363
|
+
SELECT CASE
|
|
364
|
+
WHEN NOT EXISTS (
|
|
365
|
+
SELECT 1
|
|
366
|
+
FROM verified_wallet_operation_evidence_sets AS evidence
|
|
367
|
+
WHERE evidence.namespace = NEW.namespace
|
|
368
|
+
AND evidence.tenant_id = NEW.tenant_id
|
|
369
|
+
AND evidence.evidence_set_digest = NEW.evidence_set_digest
|
|
370
|
+
AND evidence.principal_id = NEW.principal_id
|
|
371
|
+
AND evidence.capability_kind = NEW.capability_kind
|
|
372
|
+
AND evidence.operation_kind = NEW.operation_kind
|
|
373
|
+
AND evidence.lane_digest = NEW.lane_digest
|
|
374
|
+
AND evidence.intent_digest = NEW.intent_digest
|
|
375
|
+
AND evidence.display_digest = NEW.display_digest
|
|
376
|
+
AND evidence.assurance = 'step_up'
|
|
377
|
+
AND NOT EXISTS (
|
|
378
|
+
SELECT 1 FROM wallet_relocation_authorization_import_receipts AS receipt
|
|
379
|
+
WHERE receipt.namespace = evidence.namespace AND receipt.org_id = evidence.org_id
|
|
380
|
+
AND receipt.project_id = evidence.project_id AND receipt.env_id = evidence.env_id
|
|
381
|
+
AND receipt.wallet_id = evidence.wallet_id AND receipt.table_name = 'verified_wallet_operation_evidence_sets'
|
|
382
|
+
AND receipt.record_key = json_array(evidence.evidence_set_id, evidence.namespace, evidence.tenant_id)
|
|
383
|
+
)
|
|
384
|
+
AND NOT EXISTS (
|
|
385
|
+
SELECT 1 FROM wallet_relocation_session_fences AS fence
|
|
386
|
+
WHERE fence.namespace = evidence.namespace AND fence.org_id = evidence.org_id
|
|
387
|
+
AND fence.project_id = evidence.project_id AND fence.env_id = evidence.env_id
|
|
388
|
+
AND fence.wallet_id = evidence.wallet_id
|
|
389
|
+
)
|
|
390
|
+
AND evidence.expires_at_ms > NEW.claimed_at_ms
|
|
391
|
+
-- The database clock closes delays between verification and this write.
|
|
392
|
+
AND evidence.expires_at_ms > CAST(round(unixepoch('subsec') * 1000) AS INTEGER)
|
|
393
|
+
)
|
|
394
|
+
THEN RAISE(ABORT, 'authorization_evidence_claim_rejected')
|
|
395
|
+
END;
|
|
396
|
+
END;
|
|
397
|
+
|
|
398
|
+
CREATE TRIGGER wallet_relocation_authorization_fences_operation_history_complete
|
|
399
|
+
BEFORE INSERT ON wallet_relocation_authorization_fences
|
|
400
|
+
WHEN 1 AND EXISTS (
|
|
401
|
+
SELECT 1 FROM wallet_operation_owners AS owner
|
|
402
|
+
JOIN authorized_operations AS operation USING(namespace, tenant_id, authorized_operation_id)
|
|
403
|
+
WHERE owner.namespace = NEW.namespace AND owner.org_id = NEW.org_id AND owner.project_id = NEW.project_id
|
|
404
|
+
AND owner.env_id = NEW.env_id AND owner.wallet_id = NEW.wallet_id
|
|
405
|
+
AND (operation.lifecycle_kind != 'completed' OR NOT EXISTS (
|
|
406
|
+
SELECT 1 FROM authorized_operation_audit_events AS audit
|
|
407
|
+
WHERE audit.namespace IS operation.namespace
|
|
408
|
+
AND audit.tenant_id IS operation.tenant_id
|
|
409
|
+
AND audit.audit_event_id IS operation.audit_event_id
|
|
410
|
+
AND audit.authorized_operation_id IS operation.authorized_operation_id
|
|
411
|
+
AND audit.operation_fingerprint_digest IS operation.operation_fingerprint_digest
|
|
412
|
+
AND audit.authorization_source_kind IS operation.authorization_source_kind
|
|
413
|
+
AND audit.authorization_id IS operation.authorization_id
|
|
414
|
+
AND audit.authorization_grant_kind IS operation.authorization_grant_kind
|
|
415
|
+
AND audit.evidence_set_digest IS operation.evidence_set_digest
|
|
416
|
+
AND audit.quota_id IS operation.quota_id
|
|
417
|
+
AND audit.material_activation_id IS operation.material_activation_id
|
|
418
|
+
AND audit.material_activation_capability IS operation.material_activation_capability
|
|
419
|
+
AND audit.material_activation_owner IS operation.material_activation_owner
|
|
420
|
+
AND audit.material_activation_key_binding IS operation.material_activation_key_binding
|
|
421
|
+
AND audit.material_activation_lifecycle_binding IS operation.material_activation_lifecycle_binding
|
|
422
|
+
AND audit.material_activation_signing_worker IS operation.material_activation_signing_worker
|
|
423
|
+
AND audit.owner_scope_org_id IS operation.owner_scope_org_id
|
|
424
|
+
AND audit.owner_scope_project_id IS operation.owner_scope_project_id
|
|
425
|
+
AND audit.owner_scope_env_id IS operation.owner_scope_env_id
|
|
426
|
+
AND audit.result_kind IS operation.result_kind
|
|
427
|
+
AND audit.claimed_at_ms IS operation.claimed_at_ms
|
|
428
|
+
AND audit.completed_at_ms IS operation.completed_at_ms
|
|
429
|
+
))
|
|
430
|
+
)
|
|
431
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_history_incomplete'); END;
|
|
432
|
+
|
|
433
|
+
CREATE TRIGGER wallet_relocation_authorization_imports_operation_history_complete
|
|
434
|
+
BEFORE UPDATE ON wallet_relocation_authorization_imports
|
|
435
|
+
WHEN NEW.state = 'closed' AND OLD.state = 'importing' AND EXISTS (
|
|
436
|
+
SELECT 1 FROM wallet_operation_owners AS owner
|
|
437
|
+
JOIN authorized_operations AS operation USING(namespace, tenant_id, authorized_operation_id)
|
|
438
|
+
WHERE owner.namespace = NEW.namespace AND owner.org_id = NEW.org_id AND owner.project_id = NEW.project_id
|
|
439
|
+
AND owner.env_id = NEW.env_id AND owner.wallet_id = NEW.wallet_id
|
|
440
|
+
AND (operation.lifecycle_kind != 'completed' OR NOT EXISTS (
|
|
441
|
+
SELECT 1 FROM authorized_operation_audit_events AS audit
|
|
442
|
+
WHERE audit.namespace IS operation.namespace
|
|
443
|
+
AND audit.tenant_id IS operation.tenant_id
|
|
444
|
+
AND audit.audit_event_id IS operation.audit_event_id
|
|
445
|
+
AND audit.authorized_operation_id IS operation.authorized_operation_id
|
|
446
|
+
AND audit.operation_fingerprint_digest IS operation.operation_fingerprint_digest
|
|
447
|
+
AND audit.authorization_source_kind IS operation.authorization_source_kind
|
|
448
|
+
AND audit.authorization_id IS operation.authorization_id
|
|
449
|
+
AND audit.authorization_grant_kind IS operation.authorization_grant_kind
|
|
450
|
+
AND audit.evidence_set_digest IS operation.evidence_set_digest
|
|
451
|
+
AND audit.quota_id IS operation.quota_id
|
|
452
|
+
AND audit.material_activation_id IS operation.material_activation_id
|
|
453
|
+
AND audit.material_activation_capability IS operation.material_activation_capability
|
|
454
|
+
AND audit.material_activation_owner IS operation.material_activation_owner
|
|
455
|
+
AND audit.material_activation_key_binding IS operation.material_activation_key_binding
|
|
456
|
+
AND audit.material_activation_lifecycle_binding IS operation.material_activation_lifecycle_binding
|
|
457
|
+
AND audit.material_activation_signing_worker IS operation.material_activation_signing_worker
|
|
458
|
+
AND audit.owner_scope_org_id IS operation.owner_scope_org_id
|
|
459
|
+
AND audit.owner_scope_project_id IS operation.owner_scope_project_id
|
|
460
|
+
AND audit.owner_scope_env_id IS operation.owner_scope_env_id
|
|
461
|
+
AND audit.result_kind IS operation.result_kind
|
|
462
|
+
AND audit.claimed_at_ms IS operation.claimed_at_ms
|
|
463
|
+
AND audit.completed_at_ms IS operation.completed_at_ms
|
|
464
|
+
))
|
|
465
|
+
)
|
|
466
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_history_incomplete'); END;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
-- Execution location is metadata. It is not part of a wallet's cipher identity.
|
|
2
|
+
CREATE TABLE wallet_execution_upgrade_guard (count INTEGER NOT NULL CHECK(count = 0));
|
|
3
|
+
INSERT INTO wallet_execution_upgrade_guard
|
|
4
|
+
SELECT (SELECT COUNT(*) FROM wallet_relocation_authorization_snapshots)
|
|
5
|
+
+ (SELECT COUNT(*) FROM wallet_relocation_authorization_imports);
|
|
6
|
+
DROP TABLE wallet_execution_upgrade_guard;
|
|
7
|
+
|
|
8
|
+
CREATE TABLE wallet_execution_generations (
|
|
9
|
+
namespace TEXT NOT NULL, org_id TEXT NOT NULL, project_id TEXT NOT NULL, env_id TEXT NOT NULL,
|
|
10
|
+
wallet_id TEXT NOT NULL,
|
|
11
|
+
generation INTEGER NOT NULL CHECK(generation > 0 AND generation <= 9007199254740991),
|
|
12
|
+
origin TEXT NOT NULL CHECK(origin IN ('registration', 'relocation')),
|
|
13
|
+
origin_id TEXT NOT NULL CHECK(length(origin_id) > 0),
|
|
14
|
+
state TEXT NOT NULL CHECK(state IN ('registering', 'inactive', 'active', 'retired')),
|
|
15
|
+
CHECK((origin = 'registration' AND state != 'inactive') OR
|
|
16
|
+
(origin = 'relocation' AND state != 'registering')),
|
|
17
|
+
PRIMARY KEY(namespace, org_id, project_id, env_id, wallet_id)
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
CREATE TRIGGER wallet_execution_identity_immutable
|
|
21
|
+
BEFORE UPDATE ON wallet_execution_generations
|
|
22
|
+
WHEN NEW.namespace IS NOT OLD.namespace OR NEW.org_id IS NOT OLD.org_id
|
|
23
|
+
OR NEW.project_id IS NOT OLD.project_id OR NEW.env_id IS NOT OLD.env_id
|
|
24
|
+
OR NEW.wallet_id IS NOT OLD.wallet_id OR NEW.generation IS NOT OLD.generation
|
|
25
|
+
OR NEW.origin IS NOT OLD.origin OR NEW.origin_id IS NOT OLD.origin_id
|
|
26
|
+
OR (NEW.state != OLD.state AND NOT (
|
|
27
|
+
(OLD.state = 'registering' AND NEW.state IN ('active', 'retired')) OR
|
|
28
|
+
(OLD.state = 'inactive' AND NEW.state = 'active') OR
|
|
29
|
+
(OLD.state = 'active' AND NEW.state = 'retired')))
|
|
30
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_execution_identity_conflicts'); END;
|
|
31
|
+
|
|
32
|
+
CREATE TRIGGER wallet_execution_retained
|
|
33
|
+
BEFORE DELETE ON wallet_execution_generations
|
|
34
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_execution_identity_retained'); END;
|
|
35
|
+
|
|
36
|
+
CREATE TRIGGER wallet_execution_activation_receipt
|
|
37
|
+
BEFORE UPDATE ON wallet_execution_generations
|
|
38
|
+
WHEN OLD.state = 'inactive' AND NEW.state = 'active' AND NOT EXISTS (
|
|
39
|
+
SELECT 1 FROM wallet_relocation_authorization_imports AS imported
|
|
40
|
+
JOIN wallet_relocation_authorization_activations AS receipt
|
|
41
|
+
USING(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex, source_generation)
|
|
42
|
+
WHERE imported.namespace = NEW.namespace AND imported.org_id = NEW.org_id
|
|
43
|
+
AND imported.project_id = NEW.project_id AND imported.env_id = NEW.env_id
|
|
44
|
+
AND imported.wallet_id = NEW.wallet_id AND imported.move_id = NEW.origin_id
|
|
45
|
+
AND imported.source_generation + 1 = NEW.generation AND imported.state = 'activated'
|
|
46
|
+
)
|
|
47
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_execution_activation_receipt_required'); END;
|
|
48
|
+
|
|
49
|
+
CREATE TRIGGER wallet_execution_source_closed
|
|
50
|
+
BEFORE INSERT ON wallet_execution_generations
|
|
51
|
+
WHEN EXISTS (
|
|
52
|
+
SELECT 1 FROM wallet_relocation_session_fences AS fence
|
|
53
|
+
WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
|
|
54
|
+
AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id
|
|
55
|
+
AND fence.wallet_id = NEW.wallet_id
|
|
56
|
+
)
|
|
57
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_execution_source_closed'); END;
|
|
58
|
+
|
|
59
|
+
CREATE TRIGGER wallet_execution_destination_prepare
|
|
60
|
+
AFTER INSERT ON wallet_relocation_authorization_imports
|
|
61
|
+
BEGIN
|
|
62
|
+
INSERT INTO wallet_execution_generations
|
|
63
|
+
(namespace, org_id, project_id, env_id, wallet_id, generation, origin, origin_id, state)
|
|
64
|
+
VALUES (NEW.namespace, NEW.org_id, NEW.project_id, NEW.env_id, NEW.wallet_id,
|
|
65
|
+
NEW.source_generation + 1, 'relocation', NEW.move_id, 'inactive');
|
|
66
|
+
END;
|
|
67
|
+
|
|
68
|
+
CREATE TRIGGER wallet_execution_destination_activate
|
|
69
|
+
AFTER UPDATE ON wallet_relocation_authorization_imports
|
|
70
|
+
WHEN NEW.state = 'activated' AND OLD.state != 'activated'
|
|
71
|
+
BEGIN
|
|
72
|
+
UPDATE wallet_execution_generations SET state = 'active'
|
|
73
|
+
WHERE namespace = NEW.namespace AND org_id = NEW.org_id AND project_id = NEW.project_id
|
|
74
|
+
AND env_id = NEW.env_id AND wallet_id = NEW.wallet_id
|
|
75
|
+
AND generation = NEW.source_generation + 1 AND origin = 'relocation'
|
|
76
|
+
AND origin_id = NEW.move_id AND state = 'inactive';
|
|
77
|
+
SELECT CASE WHEN changes() != 1
|
|
78
|
+
THEN RAISE(ABORT, 'wallet_execution_destination_conflicts') END;
|
|
79
|
+
END;
|
|
80
|
+
|
|
81
|
+
CREATE TRIGGER wallet_execution_source_retire
|
|
82
|
+
AFTER INSERT ON wallet_relocation_session_fences
|
|
83
|
+
BEGIN
|
|
84
|
+
SELECT CASE WHEN EXISTS (
|
|
85
|
+
SELECT 1 FROM wallet_execution_generations
|
|
86
|
+
WHERE namespace = NEW.namespace AND org_id = NEW.org_id AND project_id = NEW.project_id
|
|
87
|
+
AND env_id = NEW.env_id AND wallet_id = NEW.wallet_id
|
|
88
|
+
AND (generation != NEW.source_generation OR state != 'active')
|
|
89
|
+
) THEN RAISE(ABORT, 'wallet_execution_source_conflicts') END;
|
|
90
|
+
UPDATE wallet_execution_generations SET state = 'retired'
|
|
91
|
+
WHERE namespace = NEW.namespace AND org_id = NEW.org_id AND project_id = NEW.project_id
|
|
92
|
+
AND env_id = NEW.env_id AND wallet_id = NEW.wallet_id;
|
|
93
|
+
END;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- Existing history has no proven execution generation. Preserve it without
|
|
2
|
+
-- inventing one. Every new claim must pin the active local generation.
|
|
3
|
+
CREATE TABLE wallet_operation_generation_upgrade_guard (count INTEGER NOT NULL CHECK(count = 0));
|
|
4
|
+
INSERT INTO wallet_operation_generation_upgrade_guard
|
|
5
|
+
SELECT (SELECT COUNT(*) FROM wallet_relocation_authorization_snapshots)
|
|
6
|
+
+ (SELECT COUNT(*) FROM wallet_relocation_authorization_imports);
|
|
7
|
+
DROP TABLE wallet_operation_generation_upgrade_guard;
|
|
8
|
+
|
|
9
|
+
ALTER TABLE authorized_operations ADD COLUMN ownership_generation INTEGER
|
|
10
|
+
CHECK(ownership_generation > 0 AND ownership_generation <= 9007199254740991);
|
|
11
|
+
|
|
12
|
+
CREATE TRIGGER wallet_operation_execution_generation_required
|
|
13
|
+
BEFORE INSERT ON authorized_operations
|
|
14
|
+
WHEN NEW.lifecycle_kind = 'claimed' AND NOT EXISTS (
|
|
15
|
+
SELECT 1 FROM wallet_operation_authorizations AS owner
|
|
16
|
+
JOIN wallet_execution_generations AS execution
|
|
17
|
+
USING(namespace, org_id, project_id, env_id, wallet_id)
|
|
18
|
+
WHERE owner.namespace = NEW.namespace AND owner.tenant_id = NEW.tenant_id
|
|
19
|
+
AND owner.source_kind = NEW.authorization_source_kind
|
|
20
|
+
AND owner.source_id = CASE NEW.authorization_source_kind
|
|
21
|
+
WHEN 'authorization_grant' THEN NEW.authorization_id ELSE NEW.evidence_set_digest END
|
|
22
|
+
AND (NEW.authorization_source_kind = 'verified_step_up' OR
|
|
23
|
+
(NEW.authorization_grant_kind = 'wallet_session_authorization'
|
|
24
|
+
AND owner.org_id = NEW.owner_scope_org_id AND owner.project_id = NEW.owner_scope_project_id
|
|
25
|
+
AND owner.env_id = NEW.owner_scope_env_id))
|
|
26
|
+
AND execution.state = 'active' AND execution.generation = NEW.ownership_generation
|
|
27
|
+
)
|
|
28
|
+
BEGIN
|
|
29
|
+
SELECT CASE WHEN NEW.authorization_source_kind = 'verified_step_up'
|
|
30
|
+
THEN RAISE(ABORT, 'authorization_evidence_claim_rejected')
|
|
31
|
+
ELSE RAISE(ABORT, 'authorization_wallet_session_rejected') END;
|
|
32
|
+
END;
|
|
33
|
+
|
|
34
|
+
CREATE TRIGGER wallet_operation_execution_generation_immutable
|
|
35
|
+
BEFORE UPDATE ON authorized_operations
|
|
36
|
+
WHEN NEW.ownership_generation IS NOT OLD.ownership_generation
|
|
37
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_execution_generation_immutable'); END;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
-- Regional deployment admission is installed through the private control binding.
|
|
2
|
+
CREATE TABLE regional_deployment_admissions (
|
|
3
|
+
deployment_lane TEXT NOT NULL,
|
|
4
|
+
namespace TEXT NOT NULL,
|
|
5
|
+
account_id TEXT NOT NULL,
|
|
6
|
+
database_id TEXT NOT NULL,
|
|
7
|
+
activation_sequence INTEGER NOT NULL CHECK(activation_sequence > 0 AND activation_sequence <= 9007199254740991),
|
|
8
|
+
binding_revision TEXT NOT NULL,
|
|
9
|
+
binding_json TEXT NOT NULL CHECK(json_valid(binding_json)),
|
|
10
|
+
resource_verifications_json TEXT NOT NULL CHECK(json_valid(resource_verifications_json)),
|
|
11
|
+
state TEXT NOT NULL CHECK(state IN ('prepared', 'active')),
|
|
12
|
+
PRIMARY KEY(deployment_lane, namespace, account_id, database_id)
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
CREATE TRIGGER regional_deployment_admission_monotonic
|
|
16
|
+
BEFORE UPDATE ON regional_deployment_admissions
|
|
17
|
+
WHEN NEW.deployment_lane IS NOT OLD.deployment_lane OR NEW.namespace IS NOT OLD.namespace
|
|
18
|
+
OR NEW.account_id IS NOT OLD.account_id OR NEW.database_id IS NOT OLD.database_id
|
|
19
|
+
OR NEW.activation_sequence < OLD.activation_sequence
|
|
20
|
+
OR (NEW.activation_sequence = OLD.activation_sequence AND OLD.state = 'active' AND (
|
|
21
|
+
NEW.state != 'active' OR NEW.binding_revision IS NOT OLD.binding_revision
|
|
22
|
+
OR NEW.binding_json IS NOT OLD.binding_json
|
|
23
|
+
OR NEW.resource_verifications_json IS NOT OLD.resource_verifications_json))
|
|
24
|
+
OR (NEW.activation_sequence > OLD.activation_sequence AND NEW.state != 'prepared')
|
|
25
|
+
BEGIN SELECT RAISE(ABORT, 'regional_deployment_admission_conflict'); END;
|
|
26
|
+
|
|
27
|
+
CREATE TRIGGER regional_deployment_admission_retained
|
|
28
|
+
BEFORE DELETE ON regional_deployment_admissions
|
|
29
|
+
BEGIN SELECT RAISE(ABORT, 'regional_deployment_admission_retained'); END;
|
|
30
|
+
|
|
31
|
+
-- Each runtime batch checks its admitted writer in the same transaction as its effects.
|
|
32
|
+
-- Successful checks leave no rows behind.
|
|
33
|
+
CREATE TABLE regional_deployment_write_checks (
|
|
34
|
+
deployment_lane TEXT NOT NULL,
|
|
35
|
+
namespace TEXT NOT NULL,
|
|
36
|
+
account_id TEXT NOT NULL,
|
|
37
|
+
database_id TEXT NOT NULL,
|
|
38
|
+
binding_revision TEXT NOT NULL,
|
|
39
|
+
writer_role TEXT NOT NULL CHECK(writer_role IN ('gateway', 'walletRuntime')),
|
|
40
|
+
writer_version TEXT NOT NULL
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
CREATE TRIGGER regional_deployment_write_authorized
|
|
44
|
+
BEFORE INSERT ON regional_deployment_write_checks
|
|
45
|
+
BEGIN
|
|
46
|
+
SELECT CASE WHEN NOT EXISTS (
|
|
47
|
+
SELECT 1 FROM regional_deployment_admissions AS admission,
|
|
48
|
+
json_each(admission.resource_verifications_json) AS proof
|
|
49
|
+
WHERE admission.deployment_lane = NEW.deployment_lane
|
|
50
|
+
AND admission.namespace = NEW.namespace
|
|
51
|
+
AND admission.account_id = NEW.account_id AND admission.database_id = NEW.database_id
|
|
52
|
+
AND admission.binding_revision = NEW.binding_revision AND admission.state = 'active'
|
|
53
|
+
AND json_extract(proof.value, '$.resource.accountId') = NEW.account_id
|
|
54
|
+
AND json_extract(proof.value, '$.resource.databaseId') = NEW.database_id
|
|
55
|
+
AND json_extract(proof.value, '$.authority.kind') = 'cloudflare'
|
|
56
|
+
AND json_extract(proof.value, '$.authority.' || NEW.writer_role || '.versionId') = NEW.writer_version
|
|
57
|
+
) THEN RAISE(ABORT, 'regional_deployment_writer_retired') END;
|
|
58
|
+
SELECT RAISE(IGNORE);
|
|
59
|
+
END;
|