@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,157 @@
|
|
|
1
|
+
import { requireCanonicalString, requireRecord } from "../../../../shared-ts/src/utils/validation.js";
|
|
2
|
+
import { parseUnixMs } from "../../../../shared-ts/src/passkey-custody/primitives.js";
|
|
3
|
+
import { parseNonNegativeSafeInteger } from "../../../../shared-ts/src/device-linking/wireFields.js";
|
|
4
|
+
import { D1_BATCH_CAS_GUARD_SQL } from "../../../../storage/d1Sql.js";
|
|
5
|
+
import { prepareD1TenantStatement } from "../../../../core/d1TenantStore.js";
|
|
6
|
+
import { evictWalletEd25519CapabilityCache } from "../ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js";
|
|
7
|
+
import { AuthorizationSnapshotLayout } from "./authorizationSnapshotLayout.js";
|
|
8
|
+
//#region src/router/cloudflare/d1/wallet/d1WalletAuthorizationCleanup.ts
|
|
9
|
+
const SCOPE = "namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4 AND wallet_id = ?5";
|
|
10
|
+
const TABLES = [
|
|
11
|
+
"linked_device_wallet_session_credential_deliveries_v1",
|
|
12
|
+
"linked_device_bootstrap_imports",
|
|
13
|
+
"linked_device_request_proof_nonces",
|
|
14
|
+
"linked_device_email_otp_grants",
|
|
15
|
+
"linked_device_ed25519_export_root_transfers",
|
|
16
|
+
"linked_device_session_transcripts",
|
|
17
|
+
"linked_device_target_commit_reservations",
|
|
18
|
+
"linked_device_target_credentials",
|
|
19
|
+
"linked_device_authority_installations",
|
|
20
|
+
"linked_device_authority_allocations",
|
|
21
|
+
"linked_device_sessions",
|
|
22
|
+
"wallet_email_otp_rate_limits",
|
|
23
|
+
"email_otp_wallet_enrollments",
|
|
24
|
+
"email_otp_auth_states",
|
|
25
|
+
"authorized_operation_audit_events",
|
|
26
|
+
"authorized_operations",
|
|
27
|
+
"verified_wallet_operation_evidence_sets",
|
|
28
|
+
"wallet_session_hosted_exchange_codes_v2",
|
|
29
|
+
"wallet_session_hosted_credentials_v2",
|
|
30
|
+
"wallet_session_authorizations_v2",
|
|
31
|
+
"router_ab_yao_versioned_json_records",
|
|
32
|
+
"webauthn_authenticators",
|
|
33
|
+
"webauthn_credential_bindings",
|
|
34
|
+
"wallet_signers",
|
|
35
|
+
"wallet_recovery_code_locators",
|
|
36
|
+
"wallets",
|
|
37
|
+
"wallet_auth_methods",
|
|
38
|
+
"wallet_relocation_approvals",
|
|
39
|
+
"wallet_authorities",
|
|
40
|
+
"wallet_relocation_authorization_import_receipts",
|
|
41
|
+
"wallet_relocation_authorization_chunks",
|
|
42
|
+
"wallet_relocation_authorization_intake_chunks"
|
|
43
|
+
];
|
|
44
|
+
var D1WalletAuthorizationCleanup = class {
|
|
45
|
+
constructor(database, scope) {
|
|
46
|
+
this.database = database;
|
|
47
|
+
this.scope = scope;
|
|
48
|
+
}
|
|
49
|
+
async advance(source, rawManifest, commandDigest, nowMs) {
|
|
50
|
+
parseUnixMs(nowMs, "authorization cleanup time");
|
|
51
|
+
const manifestJson = await this.manifest(source, rawManifest);
|
|
52
|
+
const prior = await this.read(source, manifestJson, commandDigest);
|
|
53
|
+
if (prior?.state === "cleaned") return prior;
|
|
54
|
+
const identity = [
|
|
55
|
+
source.walletId,
|
|
56
|
+
source.moveId,
|
|
57
|
+
source.requestDigestHex,
|
|
58
|
+
source.sourceGeneration
|
|
59
|
+
];
|
|
60
|
+
if (!prior) await prepareD1TenantStatement(this.database, this.scope, `
|
|
61
|
+
INSERT INTO wallet_relocation_authorization_cleanups
|
|
62
|
+
(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex,
|
|
63
|
+
source_generation, command_digest, manifest_json, state)
|
|
64
|
+
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, 'cleaning')
|
|
65
|
+
ON CONFLICT DO NOTHING`, [
|
|
66
|
+
...identity,
|
|
67
|
+
commandDigest,
|
|
68
|
+
manifestJson
|
|
69
|
+
]).run();
|
|
70
|
+
const admitted = await this.read(source, manifestJson, commandDigest);
|
|
71
|
+
if (!admitted) throw new Error("Authorization cleanup admission disappeared");
|
|
72
|
+
if (admitted.state === "cleaned") return admitted;
|
|
73
|
+
for (const table of TABLES) {
|
|
74
|
+
const ownership = table === "authorized_operations" || table === "authorized_operation_audit_events" || table === "webauthn_authenticators" || table === "webauthn_credential_bindings" || table === "router_ab_yao_versioned_json_records" || table === "linked_device_sessions" || table === "linked_device_target_commit_reservations" || table === "linked_device_session_transcripts" || table === "linked_device_request_proof_nonces" || table === "linked_device_bootstrap_imports" ? AuthorizationSnapshotLayout.ownership(table) : "target.namespace = ?1 AND target.org_id = ?2 AND target.project_id = ?3 AND target.env_id = ?4 AND target.wallet_id = ?5";
|
|
75
|
+
const quota = table === "wallet_session_authorizations_v2" ? ", json_array(target.namespace, target.tenant_id, target.quota_id) AS quota_key" : "";
|
|
76
|
+
const rows = await prepareD1TenantStatement(this.database, this.scope, `SELECT target.rowid AS row_id${quota} FROM ${table} AS target WHERE ${ownership} ORDER BY target.rowid LIMIT 16`, [source.walletId]).all();
|
|
77
|
+
const rowIds = [];
|
|
78
|
+
const quotaKeys = [];
|
|
79
|
+
for (const row of rows.results ?? []) {
|
|
80
|
+
rowIds.push(parseNonNegativeSafeInteger(row.row_id, "cleanup row id"));
|
|
81
|
+
if (table === "wallet_session_authorizations_v2") quotaKeys.push(requireCanonicalString(row.quota_key, "cleanup quota key"));
|
|
82
|
+
}
|
|
83
|
+
if (rowIds.length === 0) continue;
|
|
84
|
+
const statements = [
|
|
85
|
+
prepareD1TenantStatement(this.database, this.scope, `
|
|
86
|
+
UPDATE wallet_relocation_authorization_cleanups SET state = state
|
|
87
|
+
WHERE ${SCOPE} AND move_id = ?6 AND request_digest_hex = ?7 AND source_generation = ?8
|
|
88
|
+
AND command_digest = ?9 AND state = 'cleaning'`, [...identity, commandDigest]),
|
|
89
|
+
this.database.prepare(D1_BATCH_CAS_GUARD_SQL),
|
|
90
|
+
prepareD1TenantStatement(this.database, this.scope, `DELETE FROM ${table} AS target WHERE ${ownership} AND target.rowid IN (SELECT value FROM json_each(?6))`, [source.walletId, JSON.stringify(rowIds)])
|
|
91
|
+
];
|
|
92
|
+
if (quotaKeys.length > 0) statements.push(this.database.prepare(`
|
|
93
|
+
DELETE FROM authorization_wallet_session_quotas
|
|
94
|
+
WHERE json_array(namespace, tenant_id, quota_id) IN (SELECT value FROM json_each(?1))`).bind(JSON.stringify(quotaKeys)));
|
|
95
|
+
await this.database.batch(statements);
|
|
96
|
+
return { state: "cleaning" };
|
|
97
|
+
}
|
|
98
|
+
await evictWalletEd25519CapabilityCache({
|
|
99
|
+
database: this.database,
|
|
100
|
+
scope: this.scope
|
|
101
|
+
}, source.walletId);
|
|
102
|
+
await this.database.batch([prepareD1TenantStatement(this.database, this.scope, `
|
|
103
|
+
UPDATE wallet_relocation_authorization_cleanups SET state = 'cleaned', completed_at_ms = ?10
|
|
104
|
+
WHERE ${SCOPE} AND move_id = ?6 AND request_digest_hex = ?7 AND source_generation = ?8
|
|
105
|
+
AND command_digest = ?9 AND state = 'cleaning'`, [
|
|
106
|
+
...identity,
|
|
107
|
+
commandDigest,
|
|
108
|
+
nowMs
|
|
109
|
+
]), this.database.prepare(D1_BATCH_CAS_GUARD_SQL)]);
|
|
110
|
+
const completed = await this.read(source, manifestJson, commandDigest);
|
|
111
|
+
if (completed?.state !== "cleaned") throw new Error("Authorization cleanup completion disappeared");
|
|
112
|
+
return completed;
|
|
113
|
+
}
|
|
114
|
+
async manifest(source, raw) {
|
|
115
|
+
const expected = requireRecord(raw, "cleanup manifest");
|
|
116
|
+
const row = await prepareD1TenantStatement(this.database, this.scope, `SELECT wallet_id, move_id, request_digest_hex, source_generation,
|
|
117
|
+
schema_json, chunk_count, record_count, digest_hex
|
|
118
|
+
FROM wallet_relocation_authorization_snapshots
|
|
119
|
+
WHERE ${SCOPE} AND move_id = ?6 AND state = 'sealed'
|
|
120
|
+
UNION ALL
|
|
121
|
+
SELECT wallet_id, move_id, request_digest_hex, source_generation,
|
|
122
|
+
json_extract(manifest_json, '$.schemaJson') AS schema_json,
|
|
123
|
+
json_extract(manifest_json, '$.chunkCount') AS chunk_count,
|
|
124
|
+
json_extract(manifest_json, '$.recordCount') AS record_count,
|
|
125
|
+
json_extract(manifest_json, '$.digestHex') AS digest_hex
|
|
126
|
+
FROM wallet_relocation_authorization_cleanups
|
|
127
|
+
WHERE ${SCOPE} AND move_id = ?6 AND state = 'cleaned'
|
|
128
|
+
LIMIT 1`, [source.walletId, source.moveId]).first();
|
|
129
|
+
if (!row || !source.matches(row)) throw new Error("Authorization cleanup snapshot conflicts");
|
|
130
|
+
const manifest = {
|
|
131
|
+
schemaJson: requireCanonicalString(row.schema_json, "cleanup snapshot schema"),
|
|
132
|
+
chunkCount: parseNonNegativeSafeInteger(row.chunk_count, "cleanup snapshot chunks"),
|
|
133
|
+
recordCount: parseNonNegativeSafeInteger(row.record_count, "cleanup snapshot records"),
|
|
134
|
+
digestHex: requireCanonicalString(row.digest_hex, "cleanup snapshot digest")
|
|
135
|
+
};
|
|
136
|
+
if (Object.keys(expected).length !== 4) throw new Error("Authorization cleanup manifest conflicts");
|
|
137
|
+
for (const [key, value] of Object.entries(manifest)) if (expected[key] !== value) throw new Error("Authorization cleanup manifest conflicts");
|
|
138
|
+
return JSON.stringify(manifest);
|
|
139
|
+
}
|
|
140
|
+
async read(source, manifestJson, commandDigest) {
|
|
141
|
+
const row = await prepareD1TenantStatement(this.database, this.scope, `SELECT * FROM wallet_relocation_authorization_cleanups WHERE ${SCOPE} AND move_id = ?6`, [source.walletId, source.moveId]).first();
|
|
142
|
+
if (!row) return null;
|
|
143
|
+
if (!source.matches(row) || row.manifest_json !== manifestJson || row.command_digest !== commandDigest) throw new Error("Authorization cleanup identity conflicts");
|
|
144
|
+
switch (row.state) {
|
|
145
|
+
case "cleaning": return { state: "cleaning" };
|
|
146
|
+
case "cleaned": return {
|
|
147
|
+
state: "cleaned",
|
|
148
|
+
completedAtMs: parseUnixMs(row.completed_at_ms, "cleanup completion time")
|
|
149
|
+
};
|
|
150
|
+
default: throw new Error("Authorization cleanup state is invalid");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
//#endregion
|
|
155
|
+
export { D1WalletAuthorizationCleanup };
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=d1WalletAuthorizationCleanup.js.map
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { parseUnixMs } from "../../../../shared-ts/src/passkey-custody/primitives.js";
|
|
2
|
+
import { D1_BATCH_CAS_GUARD_SQL } from "../../../../storage/d1Sql.js";
|
|
3
|
+
import { prepareD1TenantStatement } from "../../../../core/d1TenantStore.js";
|
|
4
|
+
//#region src/router/cloudflare/d1/wallet/d1WalletAuthorizationFreeze.ts
|
|
5
|
+
var D1WalletAuthorizationFreeze = class {
|
|
6
|
+
constructor(database, scope) {
|
|
7
|
+
this.database = database;
|
|
8
|
+
this.scope = scope;
|
|
9
|
+
}
|
|
10
|
+
async freeze(source, nowMs) {
|
|
11
|
+
parseUnixMs(nowMs, "authorization freeze time");
|
|
12
|
+
const existing = await this.read(source);
|
|
13
|
+
if (existing !== null) return existing;
|
|
14
|
+
await this.database.batch(this.freezeStatements(source, nowMs));
|
|
15
|
+
const frozenAtMs = await this.read(source);
|
|
16
|
+
if (frozenAtMs === null) throw new Error("Authorization freeze disappeared");
|
|
17
|
+
return frozenAtMs;
|
|
18
|
+
}
|
|
19
|
+
freezeStatements(source, nowMs) {
|
|
20
|
+
parseUnixMs(nowMs, "authorization freeze time");
|
|
21
|
+
const identity = [
|
|
22
|
+
source.walletId,
|
|
23
|
+
source.moveId,
|
|
24
|
+
source.requestDigestHex,
|
|
25
|
+
source.sourceGeneration
|
|
26
|
+
];
|
|
27
|
+
return [
|
|
28
|
+
prepareD1TenantStatement(this.database, this.scope, `
|
|
29
|
+
INSERT INTO wallet_relocation_authorization_fences
|
|
30
|
+
(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex, source_generation, frozen_at_ms)
|
|
31
|
+
SELECT ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9
|
|
32
|
+
WHERE NOT EXISTS (
|
|
33
|
+
SELECT 1 FROM wallet_relocation_authorization_fences
|
|
34
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4 AND wallet_id = ?5
|
|
35
|
+
)`, [...identity, nowMs]),
|
|
36
|
+
prepareD1TenantStatement(this.database, this.scope, `
|
|
37
|
+
UPDATE wallet_relocation_authorization_fences SET frozen_at_ms = frozen_at_ms
|
|
38
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
39
|
+
AND wallet_id = ?5 AND move_id = ?6 AND request_digest_hex = ?7 AND source_generation = ?8`, identity),
|
|
40
|
+
this.database.prepare(D1_BATCH_CAS_GUARD_SQL)
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
async read(source) {
|
|
44
|
+
const row = await prepareD1TenantStatement(this.database, this.scope, `
|
|
45
|
+
SELECT wallet_id, move_id, request_digest_hex, source_generation, frozen_at_ms
|
|
46
|
+
FROM wallet_relocation_authorization_fences
|
|
47
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4 AND wallet_id = ?5`, [source.walletId]).first();
|
|
48
|
+
if (!row) return null;
|
|
49
|
+
if (!source.matches(row)) throw new Error("Authorization freeze identity conflicts");
|
|
50
|
+
return parseUnixMs(row.frozen_at_ms, "stored authorization freeze time");
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
//#endregion
|
|
54
|
+
export { D1WalletAuthorizationFreeze };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=d1WalletAuthorizationFreeze.js.map
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { sha256HexUtf8 } from "../../../../shared-ts/src/utils/digests.js";
|
|
2
|
+
import { D1_BATCH_CAS_GUARD_SQL } from "../../../../storage/d1Sql.js";
|
|
3
|
+
import { prepareD1TenantStatement } from "../../../../core/d1TenantStore.js";
|
|
4
|
+
import { AuthorizationSnapshotLayout } from "./authorizationSnapshotLayout.js";
|
|
5
|
+
//#region src/router/cloudflare/d1/wallet/d1WalletAuthorizationHistory.ts
|
|
6
|
+
const MAX_RECORD_BYTES = 2097152;
|
|
7
|
+
var D1WalletAuthorizationHistory = class {
|
|
8
|
+
constructor(database, scope) {
|
|
9
|
+
this.database = database;
|
|
10
|
+
this.scope = scope;
|
|
11
|
+
}
|
|
12
|
+
async prepare(source) {
|
|
13
|
+
if (await this.readImport(source)) return;
|
|
14
|
+
const empty = [];
|
|
15
|
+
for (const layout of await AuthorizationSnapshotLayout.read(this.database)) {
|
|
16
|
+
if (layout.table === "authorization_wallet_session_quotas") continue;
|
|
17
|
+
empty.push(`NOT EXISTS (SELECT 1 FROM ${layout.table} AS target
|
|
18
|
+
WHERE ${layout.expressions().ownership})`);
|
|
19
|
+
}
|
|
20
|
+
await this.database.batch([
|
|
21
|
+
...prepareCleanedDestinationReturn(this.database, this.scope, source),
|
|
22
|
+
prepareD1TenantStatement(this.database, this.scope, `
|
|
23
|
+
INSERT INTO wallet_relocation_authorization_imports
|
|
24
|
+
(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex, source_generation, state)
|
|
25
|
+
SELECT ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, 'importing'
|
|
26
|
+
WHERE ${empty.join(" AND ")}
|
|
27
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_session_fences
|
|
28
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4 AND wallet_id = ?5)
|
|
29
|
+
ON CONFLICT (namespace, org_id, project_id, env_id, wallet_id) DO NOTHING`, [
|
|
30
|
+
source.walletId,
|
|
31
|
+
source.moveId,
|
|
32
|
+
source.requestDigestHex,
|
|
33
|
+
source.sourceGeneration
|
|
34
|
+
]),
|
|
35
|
+
prepareD1TenantStatement(this.database, this.scope, `
|
|
36
|
+
UPDATE wallet_relocation_authorization_imports SET state = state
|
|
37
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
38
|
+
AND wallet_id = ?5 AND move_id = ?6 AND request_digest_hex = ?7 AND source_generation = ?8`, [
|
|
39
|
+
source.walletId,
|
|
40
|
+
source.moveId,
|
|
41
|
+
source.requestDigestHex,
|
|
42
|
+
source.sourceGeneration
|
|
43
|
+
]),
|
|
44
|
+
this.database.prepare(D1_BATCH_CAS_GUARD_SQL)
|
|
45
|
+
]);
|
|
46
|
+
}
|
|
47
|
+
async restoreSnapshot(source, records, completion) {
|
|
48
|
+
const statements = [];
|
|
49
|
+
for (const record of records) {
|
|
50
|
+
const row = {
|
|
51
|
+
layout: record.table,
|
|
52
|
+
key: record.recordKey,
|
|
53
|
+
json: record.recordJson,
|
|
54
|
+
digest: await sha256HexUtf8(JSON.stringify([record.table.table, record.recordJson]))
|
|
55
|
+
};
|
|
56
|
+
statements.push(this.validateRow(source, row), this.database.prepare(D1_BATCH_CAS_GUARD_SQL), ...this.restoreStatements(source, row));
|
|
57
|
+
}
|
|
58
|
+
statements.push(...this.closeStatements(source), ...completion);
|
|
59
|
+
await this.database.batch(statements);
|
|
60
|
+
}
|
|
61
|
+
restoreStatements(source, row) {
|
|
62
|
+
const table = row.layout.table;
|
|
63
|
+
const identity = [
|
|
64
|
+
source.walletId,
|
|
65
|
+
source.moveId,
|
|
66
|
+
source.requestDigestHex,
|
|
67
|
+
source.sourceGeneration,
|
|
68
|
+
table,
|
|
69
|
+
row.key,
|
|
70
|
+
row.digest
|
|
71
|
+
];
|
|
72
|
+
const values = [];
|
|
73
|
+
for (const column of row.layout.columns) values.push(`json_extract(?6, '$.${column}')`);
|
|
74
|
+
const expressions = row.layout.expressions();
|
|
75
|
+
return [
|
|
76
|
+
prepareD1TenantStatement(this.database, this.scope, `
|
|
77
|
+
INSERT INTO wallet_relocation_authorization_import_context
|
|
78
|
+
(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex, source_generation,
|
|
79
|
+
table_name, record_key, record_digest)
|
|
80
|
+
SELECT ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11
|
|
81
|
+
FROM wallet_relocation_authorization_imports
|
|
82
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
83
|
+
AND wallet_id = ?5 AND move_id = ?6 AND request_digest_hex = ?7 AND source_generation = ?8
|
|
84
|
+
AND state = 'importing'
|
|
85
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_receipts
|
|
86
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
87
|
+
AND wallet_id = ?5 AND move_id = ?6 AND table_name = ?9 AND record_key = ?10)`, identity),
|
|
88
|
+
this.database.prepare(D1_BATCH_CAS_GUARD_SQL),
|
|
89
|
+
prepareD1TenantStatement(this.database, this.scope, `INSERT INTO ${table} (${row.layout.columns.join(", ")}) SELECT ${values.join(", ")}`, [source.walletId, row.json]),
|
|
90
|
+
prepareD1TenantStatement(this.database, this.scope, `
|
|
91
|
+
INSERT INTO wallet_relocation_authorization_import_receipts
|
|
92
|
+
(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex, source_generation,
|
|
93
|
+
table_name, record_key, record_digest)
|
|
94
|
+
SELECT namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex, source_generation,
|
|
95
|
+
table_name, record_key, record_digest
|
|
96
|
+
FROM wallet_relocation_authorization_import_context
|
|
97
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
98
|
+
AND wallet_id = ?5 AND move_id = ?6 AND request_digest_hex = ?7 AND source_generation = ?8
|
|
99
|
+
AND table_name = ?9 AND record_key = ?10 AND record_digest = ?11
|
|
100
|
+
AND EXISTS (SELECT 1 FROM ${table} AS target
|
|
101
|
+
WHERE ${expressions.key} = ?10 AND ${expressions.record} = ?12)`, [...identity, row.json]),
|
|
102
|
+
this.database.prepare(D1_BATCH_CAS_GUARD_SQL),
|
|
103
|
+
prepareD1TenantStatement(this.database, this.scope, `
|
|
104
|
+
DELETE FROM wallet_relocation_authorization_import_context
|
|
105
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
106
|
+
AND wallet_id = ?5 AND move_id = ?6 AND request_digest_hex = ?7 AND source_generation = ?8
|
|
107
|
+
AND table_name = ?9 AND record_key = ?10 AND record_digest = ?11`, identity)
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
closeStatements(source) {
|
|
111
|
+
return [prepareD1TenantStatement(this.database, this.scope, `
|
|
112
|
+
UPDATE wallet_relocation_authorization_imports
|
|
113
|
+
SET state = CASE WHEN state = 'importing' THEN 'closed' ELSE state END
|
|
114
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
115
|
+
AND wallet_id = ?5 AND move_id = ?6 AND request_digest_hex = ?7 AND source_generation = ?8
|
|
116
|
+
AND NOT EXISTS (SELECT 1 FROM wallet_relocation_authorization_import_receipts AS receipt
|
|
117
|
+
WHERE receipt.namespace = ?1 AND receipt.org_id = ?2 AND receipt.project_id = ?3 AND receipt.env_id = ?4
|
|
118
|
+
AND receipt.wallet_id = ?5 AND receipt.table_name = 'authorization_wallet_session_quotas'
|
|
119
|
+
AND NOT EXISTS (SELECT 1 FROM authorization_wallet_session_quotas AS quota
|
|
120
|
+
JOIN wallet_session_authorizations_v2 AS session ON session.namespace = quota.namespace
|
|
121
|
+
AND session.tenant_id = quota.tenant_id AND session.quota_id = quota.quota_id
|
|
122
|
+
AND session.wallet_session_id = quota.wallet_session_id
|
|
123
|
+
WHERE json_array(quota.namespace, quota.quota_id, quota.tenant_id) = receipt.record_key
|
|
124
|
+
AND session.namespace = ?1 AND session.org_id = ?2 AND session.project_id = ?3 AND session.env_id = ?4
|
|
125
|
+
AND session.wallet_id = ?5 AND session.retired_at_ms IS NOT NULL))`, [
|
|
126
|
+
source.walletId,
|
|
127
|
+
source.moveId,
|
|
128
|
+
source.requestDigestHex,
|
|
129
|
+
source.sourceGeneration
|
|
130
|
+
]), this.database.prepare(D1_BATCH_CAS_GUARD_SQL)];
|
|
131
|
+
}
|
|
132
|
+
async readImport(source) {
|
|
133
|
+
const row = await prepareD1TenantStatement(this.database, this.scope, `
|
|
134
|
+
SELECT wallet_id, move_id, request_digest_hex, source_generation
|
|
135
|
+
FROM wallet_relocation_authorization_imports
|
|
136
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4 AND wallet_id = ?5`, [source.walletId]).first();
|
|
137
|
+
if (!row) return false;
|
|
138
|
+
if (source.matches(row)) return true;
|
|
139
|
+
if (typeof row.source_generation === "number" && row.source_generation + 1 < source.sourceGeneration) return false;
|
|
140
|
+
throw new Error("Authorization history import identity conflicts");
|
|
141
|
+
}
|
|
142
|
+
validateRow(source, row) {
|
|
143
|
+
const layout = row.layout;
|
|
144
|
+
const raw = row.json;
|
|
145
|
+
if (typeof raw !== "string" || new TextEncoder().encode(raw).byteLength > MAX_RECORD_BYTES) throw new Error("Authorization history requires a bounded assembled record");
|
|
146
|
+
const table = layout.table;
|
|
147
|
+
const fields = [];
|
|
148
|
+
const keys = [];
|
|
149
|
+
for (const column of layout.columns) fields.push(`'${column}', json_extract(?6, '$.${column}')`);
|
|
150
|
+
for (const column of layout.keyColumns) keys.push(`json_extract(?6, '$.${column}')`);
|
|
151
|
+
const ownership = table === "authorization_wallet_session_quotas" ? "target.namespace = ?1" : layout.expressions().ownership;
|
|
152
|
+
const projectedColumns = [];
|
|
153
|
+
for (const column of layout.columns) projectedColumns.push(`json_extract(?6, '$.${column}') AS ${column}`);
|
|
154
|
+
let lifecycle = "1";
|
|
155
|
+
if (table === "wallet_session_authorizations_v2") lifecycle = `json_type(?6, '$.retired_at_ms') = 'integer'`;
|
|
156
|
+
if (table === "wallet_session_hosted_credentials_v2") lifecycle = `json_type(?6, '$.retired_at_ms') = 'integer' AND json_extract(?6, '$.lifecycle_kind') = 'retired'`;
|
|
157
|
+
if (table === "authorized_operations") lifecycle = "target.lifecycle_kind = 'completed'";
|
|
158
|
+
if (table === "authorized_operation_audit_events") lifecycle = "target.result_kind != 'pending'";
|
|
159
|
+
return prepareD1TenantStatement(this.database, this.scope, `
|
|
160
|
+
UPDATE wallet_relocation_authorization_imports SET state = state
|
|
161
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4 AND wallet_id = ?5
|
|
162
|
+
AND move_id = ?7 AND request_digest_hex = ?8 AND source_generation = ?9 AND state = 'importing'
|
|
163
|
+
AND EXISTS (SELECT 1 FROM (SELECT ${projectedColumns.join(", ")}) AS target
|
|
164
|
+
WHERE json_valid(?6) AND json_type(?6) = 'object' AND ${ownership} AND ${lifecycle}
|
|
165
|
+
AND (SELECT COUNT(*) FROM json_each(?6)) = ${layout.columns.length}
|
|
166
|
+
AND (SELECT COUNT(DISTINCT key) FROM json_each(?6)) = ${layout.columns.length}
|
|
167
|
+
AND NOT EXISTS (SELECT 1 FROM json_each(?6) AS value
|
|
168
|
+
LEFT JOIN pragma_table_info('${table}') AS field ON field.name = value.key
|
|
169
|
+
WHERE field.name IS NULL OR NOT (value.type = 'null'
|
|
170
|
+
OR (field.type = 'TEXT' AND value.type = 'text')
|
|
171
|
+
OR (field.type = 'INTEGER' AND value.type = 'integer' AND typeof(value.atom) = 'integer')))
|
|
172
|
+
AND json_object(${fields.join(", ")}) = ?6
|
|
173
|
+
AND json_array(${keys.join(", ")}) = ?10)`, [
|
|
174
|
+
source.walletId,
|
|
175
|
+
raw,
|
|
176
|
+
source.moveId,
|
|
177
|
+
source.requestDigestHex,
|
|
178
|
+
source.sourceGeneration,
|
|
179
|
+
row.key
|
|
180
|
+
]);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
function prepareCleanedDestinationReturn(database, scope, source) {
|
|
184
|
+
const identity = [
|
|
185
|
+
source.walletId,
|
|
186
|
+
source.moveId,
|
|
187
|
+
source.requestDigestHex,
|
|
188
|
+
source.sourceGeneration
|
|
189
|
+
];
|
|
190
|
+
const statements = [prepareD1TenantStatement(database, scope, `
|
|
191
|
+
INSERT INTO wallet_relocation_authorization_returns
|
|
192
|
+
(namespace, org_id, project_id, env_id, wallet_id, move_id, request_digest_hex,
|
|
193
|
+
source_generation, previous_move_id, previous_request_digest_hex, retired_generation)
|
|
194
|
+
SELECT ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, cleanup.move_id, cleanup.request_digest_hex, execution.generation
|
|
195
|
+
FROM wallet_relocation_authorization_cleanups AS cleanup
|
|
196
|
+
JOIN wallet_execution_generations AS execution USING (namespace, org_id, project_id, env_id, wallet_id)
|
|
197
|
+
WHERE cleanup.namespace = ?1 AND cleanup.org_id = ?2 AND cleanup.project_id = ?3
|
|
198
|
+
AND cleanup.env_id = ?4 AND cleanup.wallet_id = ?5 AND cleanup.state = 'cleaned'
|
|
199
|
+
AND execution.state = 'retired' AND execution.generation = cleanup.source_generation
|
|
200
|
+
AND execution.generation < ?8
|
|
201
|
+
ON CONFLICT (namespace, org_id, project_id, env_id, wallet_id, move_id) DO NOTHING`, identity)];
|
|
202
|
+
for (const table of [
|
|
203
|
+
"wallet_relocation_authorization_imports",
|
|
204
|
+
"wallet_relocation_authorization_intakes",
|
|
205
|
+
"wallet_relocation_authorization_snapshots",
|
|
206
|
+
"wallet_relocation_authorization_fences",
|
|
207
|
+
"wallet_relocation_session_fences",
|
|
208
|
+
"wallet_execution_generations"
|
|
209
|
+
]) {
|
|
210
|
+
let priorIdentity;
|
|
211
|
+
switch (table) {
|
|
212
|
+
case "wallet_relocation_authorization_imports":
|
|
213
|
+
case "wallet_relocation_authorization_intakes":
|
|
214
|
+
priorIdentity = "target.source_generation + 1 = returned.retired_generation";
|
|
215
|
+
break;
|
|
216
|
+
case "wallet_execution_generations":
|
|
217
|
+
priorIdentity = "target.generation = returned.retired_generation AND target.state = 'retired'";
|
|
218
|
+
break;
|
|
219
|
+
default: priorIdentity = `target.source_generation = returned.retired_generation
|
|
220
|
+
AND target.move_id = returned.previous_move_id
|
|
221
|
+
AND target.request_digest_hex = returned.previous_request_digest_hex`;
|
|
222
|
+
}
|
|
223
|
+
statements.push(prepareD1TenantStatement(database, scope, `
|
|
224
|
+
DELETE FROM ${table} AS target
|
|
225
|
+
WHERE target.namespace = ?1 AND target.org_id = ?2 AND target.project_id = ?3
|
|
226
|
+
AND target.env_id = ?4 AND target.wallet_id = ?5 AND EXISTS (
|
|
227
|
+
SELECT 1 FROM wallet_relocation_authorization_returns AS returned
|
|
228
|
+
WHERE returned.namespace = ?1 AND returned.org_id = ?2 AND returned.project_id = ?3
|
|
229
|
+
AND returned.env_id = ?4 AND returned.wallet_id = ?5 AND returned.move_id = ?6
|
|
230
|
+
AND returned.request_digest_hex = ?7 AND returned.source_generation = ?8
|
|
231
|
+
AND ${priorIdentity})`, identity));
|
|
232
|
+
}
|
|
233
|
+
return statements;
|
|
234
|
+
}
|
|
235
|
+
//#endregion
|
|
236
|
+
export { D1WalletAuthorizationHistory };
|
|
237
|
+
|
|
238
|
+
//# sourceMappingURL=d1WalletAuthorizationHistory.js.map
|