@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,45 @@
|
|
|
1
|
+
CREATE TABLE wallet_relocation_authorization_activations (
|
|
2
|
+
namespace TEXT NOT NULL, org_id TEXT NOT NULL, project_id TEXT NOT NULL, env_id TEXT NOT NULL,
|
|
3
|
+
wallet_id TEXT NOT NULL, move_id TEXT NOT NULL, request_digest_hex TEXT NOT NULL,
|
|
4
|
+
source_generation INTEGER NOT NULL,
|
|
5
|
+
command_digest TEXT NOT NULL CHECK(length(command_digest) = 64 AND command_digest NOT GLOB '*[^a-f0-9]*'),
|
|
6
|
+
manifest_json TEXT NOT NULL CHECK(json_valid(manifest_json)),
|
|
7
|
+
activated_at_ms INTEGER NOT NULL CHECK(activated_at_ms > 0),
|
|
8
|
+
PRIMARY KEY(namespace, org_id, project_id, env_id, wallet_id, move_id)
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
CREATE TRIGGER wallet_authorization_activation_verified
|
|
12
|
+
BEFORE INSERT ON wallet_relocation_authorization_activations
|
|
13
|
+
WHEN NOT EXISTS (
|
|
14
|
+
SELECT 1 FROM wallet_relocation_authorization_intakes AS intake
|
|
15
|
+
JOIN wallet_relocation_authorization_imports AS imported
|
|
16
|
+
USING(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex, source_generation)
|
|
17
|
+
WHERE intake.namespace = NEW.namespace AND intake.org_id = NEW.org_id
|
|
18
|
+
AND intake.project_id = NEW.project_id AND intake.env_id = NEW.env_id
|
|
19
|
+
AND intake.wallet_id = NEW.wallet_id AND intake.move_id = NEW.move_id
|
|
20
|
+
AND intake.request_digest_hex = NEW.request_digest_hex AND intake.source_generation = NEW.source_generation
|
|
21
|
+
AND intake.state = 'verified' AND imported.state = 'closed' AND intake.manifest_json = NEW.manifest_json
|
|
22
|
+
) OR EXISTS (
|
|
23
|
+
SELECT 1 FROM wallet_relocation_session_fences AS fence
|
|
24
|
+
WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
|
|
25
|
+
AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id AND fence.wallet_id = NEW.wallet_id
|
|
26
|
+
)
|
|
27
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_activation_requires_verified_destination'); END;
|
|
28
|
+
|
|
29
|
+
CREATE TRIGGER wallet_authorization_activation_immutable
|
|
30
|
+
BEFORE UPDATE ON wallet_relocation_authorization_activations
|
|
31
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_activation_immutable'); END;
|
|
32
|
+
CREATE TRIGGER wallet_authorization_activation_retained
|
|
33
|
+
BEFORE DELETE ON wallet_relocation_authorization_activations
|
|
34
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_activation_retained'); END;
|
|
35
|
+
|
|
36
|
+
CREATE TRIGGER wallet_authorization_import_activation_receipt
|
|
37
|
+
BEFORE UPDATE ON wallet_relocation_authorization_imports
|
|
38
|
+
WHEN NEW.state = 'activated' AND OLD.state != 'activated' AND NOT EXISTS (
|
|
39
|
+
SELECT 1 FROM wallet_relocation_authorization_activations AS receipt
|
|
40
|
+
WHERE receipt.namespace = NEW.namespace AND receipt.org_id = NEW.org_id
|
|
41
|
+
AND receipt.project_id = NEW.project_id AND receipt.env_id = NEW.env_id
|
|
42
|
+
AND receipt.wallet_id = NEW.wallet_id AND receipt.move_id = NEW.move_id
|
|
43
|
+
AND receipt.request_digest_hex = NEW.request_digest_hex AND receipt.source_generation = NEW.source_generation
|
|
44
|
+
)
|
|
45
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_activation_receipt_required'); END;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
CREATE TABLE wallet_relocation_authorization_cleanups (
|
|
2
|
+
namespace TEXT NOT NULL, org_id TEXT NOT NULL, project_id TEXT NOT NULL, env_id TEXT NOT NULL,
|
|
3
|
+
wallet_id TEXT NOT NULL, move_id TEXT NOT NULL, request_digest_hex TEXT NOT NULL,
|
|
4
|
+
source_generation INTEGER NOT NULL,
|
|
5
|
+
command_digest TEXT NOT NULL CHECK(length(command_digest) = 64 AND command_digest NOT GLOB '*[^a-f0-9]*'),
|
|
6
|
+
manifest_json TEXT NOT NULL CHECK(json_valid(manifest_json)),
|
|
7
|
+
state TEXT NOT NULL CHECK(state IN ('cleaning', 'cleaned')),
|
|
8
|
+
completed_at_ms INTEGER,
|
|
9
|
+
PRIMARY KEY(namespace, org_id, project_id, env_id, wallet_id, move_id),
|
|
10
|
+
CHECK((state = 'cleaning' AND completed_at_ms IS NULL)
|
|
11
|
+
OR (state = 'cleaned' AND completed_at_ms > 0 AND completed_at_ms IS NOT NULL))
|
|
12
|
+
);
|
|
13
|
+
CREATE TRIGGER wallet_authorization_cleanup_frozen
|
|
14
|
+
BEFORE INSERT ON wallet_relocation_authorization_cleanups
|
|
15
|
+
WHEN NEW.state != 'cleaning' OR NOT EXISTS (
|
|
16
|
+
SELECT 1 FROM wallet_relocation_authorization_snapshots AS snapshot
|
|
17
|
+
JOIN wallet_relocation_authorization_fences AS fence
|
|
18
|
+
USING(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex, source_generation)
|
|
19
|
+
WHERE snapshot.namespace = NEW.namespace AND snapshot.org_id = NEW.org_id
|
|
20
|
+
AND snapshot.project_id = NEW.project_id AND snapshot.env_id = NEW.env_id
|
|
21
|
+
AND snapshot.wallet_id = NEW.wallet_id AND snapshot.move_id = NEW.move_id
|
|
22
|
+
AND snapshot.request_digest_hex = NEW.request_digest_hex AND snapshot.source_generation = NEW.source_generation
|
|
23
|
+
AND snapshot.state = 'sealed' AND snapshot.digest_hex = json_extract(NEW.manifest_json, '$.digestHex')
|
|
24
|
+
AND snapshot.schema_json = json_extract(NEW.manifest_json, '$.schemaJson')
|
|
25
|
+
AND snapshot.chunk_count = json_extract(NEW.manifest_json, '$.chunkCount')
|
|
26
|
+
AND snapshot.record_count = json_extract(NEW.manifest_json, '$.recordCount')
|
|
27
|
+
)
|
|
28
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_cleanup_requires_frozen_snapshot'); END;
|
|
29
|
+
CREATE TRIGGER wallet_authorization_cleanup_identity
|
|
30
|
+
BEFORE UPDATE ON wallet_relocation_authorization_cleanups
|
|
31
|
+
WHEN NEW.namespace IS NOT OLD.namespace OR NEW.org_id IS NOT OLD.org_id
|
|
32
|
+
OR NEW.project_id IS NOT OLD.project_id OR NEW.env_id IS NOT OLD.env_id
|
|
33
|
+
OR NEW.wallet_id IS NOT OLD.wallet_id OR NEW.move_id IS NOT OLD.move_id
|
|
34
|
+
OR NEW.request_digest_hex IS NOT OLD.request_digest_hex OR NEW.source_generation IS NOT OLD.source_generation
|
|
35
|
+
OR NEW.command_digest IS NOT OLD.command_digest OR NEW.manifest_json IS NOT OLD.manifest_json
|
|
36
|
+
OR (OLD.state = 'cleaned' AND (NEW.state IS NOT OLD.state OR NEW.completed_at_ms IS NOT OLD.completed_at_ms))
|
|
37
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_cleanup_immutable'); END;
|
|
38
|
+
CREATE TRIGGER wallet_authorization_cleanup_retained
|
|
39
|
+
BEFORE DELETE ON wallet_relocation_authorization_cleanups
|
|
40
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_cleanup_retained'); END;
|
|
41
|
+
|
|
42
|
+
DROP TRIGGER wallet_relocation_authorization_receipt_retain;
|
|
43
|
+
CREATE TRIGGER wallet_relocation_authorization_receipt_retain
|
|
44
|
+
BEFORE DELETE ON wallet_relocation_authorization_import_receipts
|
|
45
|
+
WHEN NOT EXISTS (
|
|
46
|
+
SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
47
|
+
WHERE cleanup.namespace = OLD.namespace AND cleanup.org_id = OLD.org_id
|
|
48
|
+
AND cleanup.project_id = OLD.project_id AND cleanup.env_id = OLD.env_id
|
|
49
|
+
AND cleanup.wallet_id = OLD.wallet_id AND cleanup.state = 'cleaning'
|
|
50
|
+
)
|
|
51
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_receipt_retained'); END;
|
|
52
|
+
|
|
53
|
+
DROP TRIGGER wallet_authorities_frozen_delete;
|
|
54
|
+
CREATE TRIGGER wallet_authorities_frozen_delete
|
|
55
|
+
BEFORE DELETE ON wallet_authorities
|
|
56
|
+
WHEN EXISTS (
|
|
57
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
58
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
59
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id AND fence.wallet_id = OLD.wallet_id
|
|
60
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
61
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
62
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
63
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
64
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex AND cleanup.source_generation = fence.source_generation
|
|
65
|
+
AND cleanup.state = 'cleaning')
|
|
66
|
+
)
|
|
67
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
68
|
+
|
|
69
|
+
DROP TRIGGER wallet_auth_methods_frozen_delete;
|
|
70
|
+
CREATE TRIGGER wallet_auth_methods_frozen_delete
|
|
71
|
+
BEFORE DELETE ON wallet_auth_methods
|
|
72
|
+
WHEN EXISTS (
|
|
73
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
74
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
75
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id AND fence.wallet_id = OLD.wallet_id
|
|
76
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
77
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
78
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
79
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
80
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex AND cleanup.source_generation = fence.source_generation
|
|
81
|
+
AND cleanup.state = 'cleaning')
|
|
82
|
+
)
|
|
83
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
84
|
+
|
|
85
|
+
DROP TRIGGER wallet_session_authorizations_v2_frozen_delete;
|
|
86
|
+
CREATE TRIGGER wallet_session_authorizations_v2_frozen_delete
|
|
87
|
+
BEFORE DELETE ON wallet_session_authorizations_v2
|
|
88
|
+
WHEN EXISTS (
|
|
89
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
90
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
91
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id AND fence.wallet_id = OLD.wallet_id
|
|
92
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
93
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
94
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
95
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
96
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex AND cleanup.source_generation = fence.source_generation
|
|
97
|
+
AND cleanup.state = 'cleaning')
|
|
98
|
+
)
|
|
99
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
100
|
+
|
|
101
|
+
DROP TRIGGER wallet_session_hosted_credentials_v2_frozen_delete;
|
|
102
|
+
CREATE TRIGGER wallet_session_hosted_credentials_v2_frozen_delete
|
|
103
|
+
BEFORE DELETE ON wallet_session_hosted_credentials_v2
|
|
104
|
+
WHEN EXISTS (
|
|
105
|
+
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 AND fence.wallet_id = OLD.wallet_id
|
|
108
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
109
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
110
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
111
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
112
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex AND cleanup.source_generation = fence.source_generation
|
|
113
|
+
AND cleanup.state = 'cleaning')
|
|
114
|
+
)
|
|
115
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
116
|
+
|
|
117
|
+
DROP TRIGGER wallet_session_hosted_exchange_codes_v2_frozen_delete;
|
|
118
|
+
CREATE TRIGGER wallet_session_hosted_exchange_codes_v2_frozen_delete
|
|
119
|
+
BEFORE DELETE ON wallet_session_hosted_exchange_codes_v2
|
|
120
|
+
WHEN EXISTS (
|
|
121
|
+
SELECT 1 FROM wallet_relocation_authorization_fences AS fence
|
|
122
|
+
WHERE fence.namespace = OLD.namespace AND fence.org_id = OLD.org_id
|
|
123
|
+
AND fence.project_id = OLD.project_id AND fence.env_id = OLD.env_id AND fence.wallet_id = OLD.wallet_id
|
|
124
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
125
|
+
WHERE cleanup.namespace = fence.namespace AND cleanup.org_id = fence.org_id
|
|
126
|
+
AND cleanup.project_id = fence.project_id AND cleanup.env_id = fence.env_id
|
|
127
|
+
AND cleanup.wallet_id = fence.wallet_id AND cleanup.move_id = fence.move_id
|
|
128
|
+
AND cleanup.request_digest_hex = fence.request_digest_hex AND cleanup.source_generation = fence.source_generation
|
|
129
|
+
AND cleanup.state = 'cleaning')
|
|
130
|
+
)
|
|
131
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_history_frozen'); END;
|
|
132
|
+
|
|
133
|
+
DROP TRIGGER wallet_authorization_chunk_delete;
|
|
134
|
+
CREATE TRIGGER wallet_authorization_chunk_delete
|
|
135
|
+
BEFORE DELETE ON wallet_relocation_authorization_chunks
|
|
136
|
+
WHEN NOT EXISTS (
|
|
137
|
+
SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
138
|
+
WHERE cleanup.namespace = OLD.namespace AND cleanup.org_id = OLD.org_id
|
|
139
|
+
AND cleanup.project_id = OLD.project_id AND cleanup.env_id = OLD.env_id
|
|
140
|
+
AND cleanup.wallet_id = OLD.wallet_id AND cleanup.state = 'cleaning'
|
|
141
|
+
)
|
|
142
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_chunk_retained'); END;
|
|
143
|
+
|
|
144
|
+
DROP TRIGGER wallet_authorization_intake_chunk_retained;
|
|
145
|
+
CREATE TRIGGER wallet_authorization_intake_chunk_retained
|
|
146
|
+
BEFORE DELETE ON wallet_relocation_authorization_intake_chunks
|
|
147
|
+
WHEN NOT EXISTS (
|
|
148
|
+
SELECT 1 FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
149
|
+
WHERE cleanup.namespace = OLD.namespace AND cleanup.org_id = OLD.org_id
|
|
150
|
+
AND cleanup.project_id = OLD.project_id AND cleanup.env_id = OLD.env_id
|
|
151
|
+
AND cleanup.wallet_id = OLD.wallet_id AND cleanup.state = 'cleaning'
|
|
152
|
+
)
|
|
153
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_authorization_chunk_retained'); END;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-- Resolve pending claims through their exact persisted Wallet Session owner.
|
|
2
|
+
CREATE VIEW wallet_session_pending_operations AS
|
|
3
|
+
SELECT session.namespace, session.org_id, session.project_id, session.env_id,
|
|
4
|
+
session.wallet_id, operation.tenant_id, operation.authorized_operation_id
|
|
5
|
+
FROM authorized_operations AS operation
|
|
6
|
+
JOIN wallet_session_authorizations_v2 AS session
|
|
7
|
+
ON session.namespace = operation.namespace
|
|
8
|
+
AND session.tenant_id = operation.tenant_id
|
|
9
|
+
AND session.authorization_id = operation.authorization_id
|
|
10
|
+
AND session.org_id = operation.owner_scope_org_id
|
|
11
|
+
AND session.project_id = operation.owner_scope_project_id
|
|
12
|
+
AND session.env_id = operation.owner_scope_env_id
|
|
13
|
+
WHERE operation.authorization_source_kind = 'authorization_grant'
|
|
14
|
+
AND operation.authorization_grant_kind = 'wallet_session_authorization'
|
|
15
|
+
AND operation.lifecycle_kind = 'claimed';
|
|
16
|
+
|
|
17
|
+
-- The check and retirement share a transaction with claims and completion.
|
|
18
|
+
CREATE TRIGGER wallet_relocation_sessions_require_settled_operations
|
|
19
|
+
BEFORE INSERT ON wallet_relocation_session_fences
|
|
20
|
+
WHEN EXISTS (
|
|
21
|
+
SELECT 1 FROM wallet_session_pending_operations AS operation
|
|
22
|
+
WHERE operation.namespace = NEW.namespace AND operation.org_id = NEW.org_id
|
|
23
|
+
AND operation.project_id = NEW.project_id AND operation.env_id = NEW.env_id
|
|
24
|
+
AND operation.wallet_id = NEW.wallet_id
|
|
25
|
+
)
|
|
26
|
+
BEGIN
|
|
27
|
+
SELECT RAISE(ABORT, 'wallet_session_operations_unsettled');
|
|
28
|
+
END;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
-- Existing evidence must resolve to one persisted wallet signer scope.
|
|
2
|
+
-- Do not discard history or guess a project when the persisted owner is ambiguous.
|
|
3
|
+
CREATE VIEW wallet_operation_evidence_scope_candidates AS
|
|
4
|
+
SELECT DISTINCT evidence.namespace, evidence.tenant_id, evidence.evidence_set_id,
|
|
5
|
+
signer.org_id, signer.project_id, signer.env_id
|
|
6
|
+
FROM verified_wallet_operation_evidence_sets AS evidence
|
|
7
|
+
JOIN wallet_signers AS signer
|
|
8
|
+
ON signer.namespace = evidence.namespace AND signer.wallet_id = evidence.wallet_id;
|
|
9
|
+
CREATE TABLE wallet_operation_evidence_scope_guard (
|
|
10
|
+
candidate_count INTEGER NOT NULL
|
|
11
|
+
CONSTRAINT wallet_operation_evidence_requires_unique_scope CHECK(candidate_count = 1)
|
|
12
|
+
);
|
|
13
|
+
INSERT INTO wallet_operation_evidence_scope_guard
|
|
14
|
+
SELECT (SELECT COUNT(*) FROM wallet_operation_evidence_scope_candidates AS candidate
|
|
15
|
+
WHERE candidate.namespace = evidence.namespace AND candidate.tenant_id = evidence.tenant_id
|
|
16
|
+
AND candidate.evidence_set_id = evidence.evidence_set_id)
|
|
17
|
+
FROM verified_wallet_operation_evidence_sets AS evidence;
|
|
18
|
+
INSERT INTO wallet_operation_evidence_scope_guard
|
|
19
|
+
SELECT 0 FROM authorized_operations AS operation
|
|
20
|
+
WHERE operation.authorization_source_kind = 'verified_step_up' AND NOT EXISTS (
|
|
21
|
+
SELECT 1 FROM verified_wallet_operation_evidence_sets AS evidence
|
|
22
|
+
WHERE evidence.namespace = operation.namespace AND evidence.tenant_id = operation.tenant_id
|
|
23
|
+
AND evidence.evidence_set_digest = operation.evidence_set_digest
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
CREATE TABLE scoped_wallet_operation_evidence_sets (
|
|
27
|
+
namespace TEXT NOT NULL,
|
|
28
|
+
org_id TEXT NOT NULL CHECK(length(org_id) > 0),
|
|
29
|
+
project_id TEXT NOT NULL CHECK(length(project_id) > 0),
|
|
30
|
+
env_id TEXT NOT NULL CHECK(length(env_id) > 0),
|
|
31
|
+
tenant_id TEXT NOT NULL,
|
|
32
|
+
evidence_set_id TEXT NOT NULL,
|
|
33
|
+
principal_id TEXT NOT NULL,
|
|
34
|
+
wallet_id TEXT NOT NULL,
|
|
35
|
+
authority_digest TEXT NOT NULL,
|
|
36
|
+
request_origin TEXT NOT NULL,
|
|
37
|
+
audience TEXT NOT NULL,
|
|
38
|
+
evidence_set_digest TEXT NOT NULL,
|
|
39
|
+
evidence_json TEXT NOT NULL,
|
|
40
|
+
capability_kind TEXT NOT NULL,
|
|
41
|
+
operation_kind TEXT NOT NULL,
|
|
42
|
+
lane_digest TEXT NOT NULL,
|
|
43
|
+
intent_digest TEXT NOT NULL,
|
|
44
|
+
display_digest TEXT NOT NULL,
|
|
45
|
+
assurance TEXT NOT NULL,
|
|
46
|
+
verified_at_ms INTEGER NOT NULL,
|
|
47
|
+
expires_at_ms INTEGER NOT NULL,
|
|
48
|
+
PRIMARY KEY (namespace, tenant_id, evidence_set_id),
|
|
49
|
+
UNIQUE (namespace, tenant_id, evidence_set_digest),
|
|
50
|
+
CHECK (json_valid(evidence_json)),
|
|
51
|
+
CHECK (assurance = 'step_up'),
|
|
52
|
+
CHECK (expires_at_ms > verified_at_ms),
|
|
53
|
+
CHECK (
|
|
54
|
+
(capability_kind = 'near_ed25519_mpc_signing'
|
|
55
|
+
AND operation_kind IN (
|
|
56
|
+
'near.sign_transaction',
|
|
57
|
+
'near.sign_delegate_action',
|
|
58
|
+
'near.sign_nep413_message',
|
|
59
|
+
'near.export_key'
|
|
60
|
+
))
|
|
61
|
+
OR (capability_kind = 'evm_ecdsa_mpc_signing'
|
|
62
|
+
AND operation_kind IN ('evm.sign_transaction', 'evm.export_key'))
|
|
63
|
+
OR (capability_kind = 'vault_access'
|
|
64
|
+
AND operation_kind IN ('vault.proxy_use', 'vault.reveal'))
|
|
65
|
+
)
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
INSERT INTO scoped_wallet_operation_evidence_sets (
|
|
69
|
+
org_id, project_id, env_id, namespace,
|
|
70
|
+
tenant_id, evidence_set_id, principal_id, wallet_id,
|
|
71
|
+
authority_digest, request_origin, audience, evidence_set_digest,
|
|
72
|
+
evidence_json, capability_kind, operation_kind, lane_digest,
|
|
73
|
+
intent_digest, display_digest, assurance, verified_at_ms,
|
|
74
|
+
expires_at_ms
|
|
75
|
+
)
|
|
76
|
+
SELECT candidate.org_id, candidate.project_id, candidate.env_id,
|
|
77
|
+
evidence.namespace, evidence.tenant_id, evidence.evidence_set_id,
|
|
78
|
+
evidence.principal_id, evidence.wallet_id, evidence.authority_digest,
|
|
79
|
+
evidence.request_origin, evidence.audience, evidence.evidence_set_digest,
|
|
80
|
+
evidence.evidence_json, evidence.capability_kind, evidence.operation_kind,
|
|
81
|
+
evidence.lane_digest, evidence.intent_digest, evidence.display_digest,
|
|
82
|
+
evidence.assurance, evidence.verified_at_ms, evidence.expires_at_ms
|
|
83
|
+
FROM verified_wallet_operation_evidence_sets AS evidence
|
|
84
|
+
JOIN wallet_operation_evidence_scope_candidates AS candidate
|
|
85
|
+
USING(namespace, tenant_id, evidence_set_id);
|
|
86
|
+
DROP VIEW wallet_operation_evidence_scope_candidates;
|
|
87
|
+
DROP TABLE wallet_operation_evidence_scope_guard;
|
|
88
|
+
DROP TRIGGER authorized_operation_step_up_claim_atomic;
|
|
89
|
+
DROP TABLE verified_wallet_operation_evidence_sets;
|
|
90
|
+
ALTER TABLE scoped_wallet_operation_evidence_sets RENAME TO verified_wallet_operation_evidence_sets;
|
|
91
|
+
CREATE INDEX idx_verified_wallet_operation_evidence_expiry
|
|
92
|
+
ON verified_wallet_operation_evidence_sets(namespace, tenant_id, expires_at_ms);
|
|
93
|
+
CREATE INDEX wallet_operation_evidence_by_wallet
|
|
94
|
+
ON verified_wallet_operation_evidence_sets(namespace, org_id, project_id, env_id, wallet_id);
|
|
95
|
+
|
|
96
|
+
CREATE TRIGGER authorized_operation_step_up_claim_atomic
|
|
97
|
+
AFTER INSERT ON authorized_operations
|
|
98
|
+
WHEN NEW.lifecycle_kind = 'claimed'
|
|
99
|
+
AND NEW.authorization_source_kind = 'verified_step_up'
|
|
100
|
+
BEGIN
|
|
101
|
+
SELECT CASE
|
|
102
|
+
WHEN NOT EXISTS (
|
|
103
|
+
SELECT 1
|
|
104
|
+
FROM verified_wallet_operation_evidence_sets AS evidence
|
|
105
|
+
WHERE evidence.namespace = NEW.namespace
|
|
106
|
+
AND evidence.tenant_id = NEW.tenant_id
|
|
107
|
+
AND evidence.evidence_set_digest = NEW.evidence_set_digest
|
|
108
|
+
AND evidence.principal_id = NEW.principal_id
|
|
109
|
+
AND evidence.capability_kind = NEW.capability_kind
|
|
110
|
+
AND evidence.operation_kind = NEW.operation_kind
|
|
111
|
+
AND evidence.lane_digest = NEW.lane_digest
|
|
112
|
+
AND evidence.intent_digest = NEW.intent_digest
|
|
113
|
+
AND evidence.display_digest = NEW.display_digest
|
|
114
|
+
AND evidence.assurance = 'step_up'
|
|
115
|
+
AND NOT EXISTS (
|
|
116
|
+
SELECT 1 FROM wallet_relocation_session_fences AS fence
|
|
117
|
+
WHERE fence.namespace = evidence.namespace AND fence.org_id = evidence.org_id
|
|
118
|
+
AND fence.project_id = evidence.project_id AND fence.env_id = evidence.env_id
|
|
119
|
+
AND fence.wallet_id = evidence.wallet_id
|
|
120
|
+
)
|
|
121
|
+
AND evidence.expires_at_ms > NEW.claimed_at_ms
|
|
122
|
+
-- The database clock closes delays between verification and this write.
|
|
123
|
+
AND evidence.expires_at_ms > CAST(round(unixepoch('subsec') * 1000) AS INTEGER)
|
|
124
|
+
)
|
|
125
|
+
THEN RAISE(ABORT, 'authorization_evidence_claim_rejected')
|
|
126
|
+
END;
|
|
127
|
+
END;
|
|
128
|
+
|
|
129
|
+
DROP TRIGGER wallet_relocation_sessions_require_settled_operations;
|
|
130
|
+
DROP VIEW wallet_session_pending_operations;
|
|
131
|
+
CREATE VIEW wallet_pending_operations AS
|
|
132
|
+
SELECT session.namespace, session.org_id, session.project_id, session.env_id,
|
|
133
|
+
session.wallet_id, operation.tenant_id, operation.authorized_operation_id
|
|
134
|
+
FROM authorized_operations AS operation
|
|
135
|
+
JOIN wallet_session_authorizations_v2 AS session
|
|
136
|
+
ON session.namespace = operation.namespace AND session.tenant_id = operation.tenant_id
|
|
137
|
+
AND session.authorization_id = operation.authorization_id
|
|
138
|
+
AND session.org_id = operation.owner_scope_org_id
|
|
139
|
+
AND session.project_id = operation.owner_scope_project_id AND session.env_id = operation.owner_scope_env_id
|
|
140
|
+
WHERE operation.authorization_source_kind = 'authorization_grant'
|
|
141
|
+
AND operation.authorization_grant_kind = 'wallet_session_authorization'
|
|
142
|
+
AND operation.lifecycle_kind = 'claimed'
|
|
143
|
+
UNION ALL
|
|
144
|
+
SELECT evidence.namespace, evidence.org_id, evidence.project_id, evidence.env_id,
|
|
145
|
+
evidence.wallet_id, operation.tenant_id, operation.authorized_operation_id
|
|
146
|
+
FROM authorized_operations AS operation
|
|
147
|
+
JOIN verified_wallet_operation_evidence_sets AS evidence
|
|
148
|
+
ON evidence.namespace = operation.namespace AND evidence.tenant_id = operation.tenant_id
|
|
149
|
+
AND evidence.evidence_set_digest = operation.evidence_set_digest
|
|
150
|
+
WHERE operation.authorization_source_kind = 'verified_step_up' AND operation.lifecycle_kind = 'claimed';
|
|
151
|
+
|
|
152
|
+
CREATE TRIGGER wallet_relocation_sessions_require_settled_operations
|
|
153
|
+
BEFORE INSERT ON wallet_relocation_session_fences
|
|
154
|
+
WHEN EXISTS (
|
|
155
|
+
SELECT 1 FROM wallet_pending_operations AS operation
|
|
156
|
+
WHERE operation.namespace = NEW.namespace AND operation.org_id = NEW.org_id
|
|
157
|
+
AND operation.project_id = NEW.project_id AND operation.env_id = NEW.env_id
|
|
158
|
+
AND operation.wallet_id = NEW.wallet_id
|
|
159
|
+
)
|
|
160
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operations_unsettled'); END;
|
|
161
|
+
|
|
162
|
+
-- Evidence identity remains the owner of its claimed operation and replay history.
|
|
163
|
+
CREATE TRIGGER wallet_operation_evidence_immutable
|
|
164
|
+
BEFORE UPDATE ON verified_wallet_operation_evidence_sets
|
|
165
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_evidence_immutable'); END;
|
|
166
|
+
CREATE TRIGGER wallet_operation_evidence_referenced_retained
|
|
167
|
+
BEFORE DELETE ON verified_wallet_operation_evidence_sets
|
|
168
|
+
WHEN EXISTS (
|
|
169
|
+
SELECT 1 FROM authorized_operations AS operation
|
|
170
|
+
WHERE operation.namespace = OLD.namespace AND operation.tenant_id = OLD.tenant_id
|
|
171
|
+
AND operation.evidence_set_digest = OLD.evidence_set_digest
|
|
172
|
+
)
|
|
173
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_evidence_referenced'); END;
|
|
174
|
+
CREATE TRIGGER wallet_operation_evidence_retired_insert
|
|
175
|
+
BEFORE INSERT ON verified_wallet_operation_evidence_sets
|
|
176
|
+
WHEN EXISTS (
|
|
177
|
+
SELECT 1 FROM wallet_relocation_session_fences AS fence
|
|
178
|
+
WHERE fence.namespace = NEW.namespace AND fence.org_id = NEW.org_id
|
|
179
|
+
AND fence.project_id = NEW.project_id AND fence.env_id = NEW.env_id AND fence.wallet_id = NEW.wallet_id
|
|
180
|
+
)
|
|
181
|
+
BEGIN SELECT RAISE(ABORT, 'authorization_evidence_claim_rejected'); END;
|
|
182
|
+
|
|
183
|
+
CREATE TRIGGER wallet_operation_evidence_replace_identity
|
|
184
|
+
BEFORE INSERT ON verified_wallet_operation_evidence_sets
|
|
185
|
+
WHEN EXISTS (
|
|
186
|
+
SELECT 1 FROM verified_wallet_operation_evidence_sets AS existing
|
|
187
|
+
WHERE existing.namespace = NEW.namespace AND existing.tenant_id = NEW.tenant_id
|
|
188
|
+
AND (existing.evidence_set_id = NEW.evidence_set_id OR existing.evidence_set_digest = NEW.evidence_set_digest)
|
|
189
|
+
AND (existing.namespace, existing.org_id, existing.project_id,
|
|
190
|
+
existing.env_id, existing.tenant_id, existing.evidence_set_id,
|
|
191
|
+
existing.principal_id, existing.wallet_id, existing.authority_digest,
|
|
192
|
+
existing.request_origin, existing.audience, existing.evidence_set_digest,
|
|
193
|
+
existing.evidence_json, existing.capability_kind, existing.operation_kind,
|
|
194
|
+
existing.lane_digest, existing.intent_digest, existing.display_digest,
|
|
195
|
+
existing.assurance, existing.verified_at_ms, existing.expires_at_ms) IS NOT
|
|
196
|
+
(NEW.namespace, NEW.org_id, NEW.project_id,
|
|
197
|
+
NEW.env_id, NEW.tenant_id, NEW.evidence_set_id,
|
|
198
|
+
NEW.principal_id, NEW.wallet_id, NEW.authority_digest,
|
|
199
|
+
NEW.request_origin, NEW.audience, NEW.evidence_set_digest,
|
|
200
|
+
NEW.evidence_json, NEW.capability_kind, NEW.operation_kind,
|
|
201
|
+
NEW.lane_digest, NEW.intent_digest, NEW.display_digest,
|
|
202
|
+
NEW.assurance, NEW.verified_at_ms, NEW.expires_at_ms)
|
|
203
|
+
)
|
|
204
|
+
BEGIN SELECT RAISE(ABORT, 'wallet_operation_evidence_immutable'); END;
|