@seams/wallet-server 0.7.1 → 0.8.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 +1 -113
- package/artifact-manifest.json +78 -33
- 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/scripts/prepare-local-runtime-config.mjs +0 -2
- package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +77 -20
- package/dist/esm/authorization/lifecycleRouting.js +62 -0
- package/dist/esm/authorization/service.js +43 -12
- package/dist/esm/authorization/vaultProxyUse.js +2 -6
- package/dist/esm/cloud-host.js +23 -25
- package/dist/esm/core/EmailOtpRecords.js +1 -217
- package/dist/esm/core/EmailOtpStores.js +0 -859
- package/dist/esm/core/IdentityStore.js +2 -426
- package/dist/esm/core/SessionService.js +7 -30
- package/dist/esm/core/ThresholdService/config.js +1 -9
- package/dist/esm/core/ThresholdService/index.js +0 -4
- package/dist/esm/core/ThresholdService/kv.js +1 -66
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +1 -13
- package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +4 -21
- package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +0 -617
- package/dist/esm/core/ThresholdService/validation.js +2 -346
- package/dist/esm/core/WalletAuthMethodStore.js +2 -123
- package/dist/esm/core/WalletStore.js +6 -214
- package/dist/esm/core/WebAuthnAuthenticatorStore.js +0 -202
- package/dist/esm/core/WebAuthnCredentialBindingStore.js +2 -182
- package/dist/esm/core/WebAuthnLoginChallengeStore.js +0 -52
- package/dist/esm/core/WebAuthnSyncChallengeStore.js +0 -54
- package/dist/esm/core/authService/emailOtpConfig.js +1 -195
- package/dist/esm/core/authService/emailOtpEnrollment.js +0 -141
- package/dist/esm/core/authService/emailOtpSeal.js +0 -78
- package/dist/esm/core/authService/nearTransactions.js +3 -98
- package/dist/esm/core/authService/rateLimits.js +0 -87
- package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +2 -1
- package/dist/esm/core/authService/webauthn.js +14 -464
- package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -24
- package/dist/esm/core/authService/webauthnVerificationOutcomes.js +5 -24
- package/dist/esm/core/authService/webauthnWalletBinding.js +0 -37
- package/dist/esm/core/config.js +1 -95
- package/dist/esm/core/d1EcdsaSignerRead.js +76 -0
- package/dist/esm/core/d1IdentityStore.js +17 -77
- package/dist/esm/core/d1TenantStore.js +1 -24
- package/dist/esm/core/d1WalletAuthMethodStore.js +2 -5
- package/dist/esm/core/d1WalletStore.js +15 -25
- package/dist/esm/core/deviceLinking/linkedDeviceBootstrap.js +13 -0
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +1 -5
- package/dist/esm/core/deviceLinking/linkedDeviceSession.js +20 -14
- package/dist/esm/core/deviceLinking/linkedDeviceSessionApproval.js +1 -3
- package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +2 -8
- package/dist/esm/core/deviceLinking/requestProof.js +22 -10
- package/dist/esm/core/ecdsaMaterialReadSnapshot.js +85 -0
- package/dist/esm/core/emailOtpD1Statements.js +107 -94
- package/dist/esm/core/keyMaterialBrands.js +2 -12
- package/dist/esm/core/nearKeys.js +0 -1
- package/dist/esm/core/nearRelayerAccountProvisioning.js +8 -14
- package/dist/esm/core/passkeyCredentialClaims.js +8 -0
- package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +2 -6
- package/dist/esm/core/routerAbSigning/RouterAbNormalSigningRuntime.js +2 -30
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +3 -6
- package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +2 -5
- package/dist/esm/core/thresholdEcdsaChainTarget.js +2 -7
- package/dist/esm/hosted-wallet-gateway.js +68 -45
- package/dist/esm/index.js +6 -19
- package/dist/esm/localHostedWalletGatewayHandler.js +25 -0
- package/dist/esm/localIntendedMaterialAdmissionFault.js +176 -0
- package/dist/esm/localIntendedPresignCancellation.js +44 -0
- package/dist/esm/localRegistrationSetupAuthority.js +89 -0
- package/dist/esm/router/auth/authRequestValidation.js +8 -16
- package/dist/esm/router/auth/commonRouterUtils.js +24 -10
- package/dist/esm/router/auth/walletSessionFailure.js +2 -5
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +4 -16
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizationAssembly.js +87 -0
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +1 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.js +2 -6
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +12 -2
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +37 -308
- package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +76 -0
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +52 -43
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +217 -50
- package/dist/esm/router/cloudflare/d1/authorization/d1VaultProxyStore.js +8 -12
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +62 -21
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.js +6 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +12 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +4 -4
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -9
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.js +2 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +89 -7
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +24 -15
- package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +3 -3
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +9 -6
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +12 -56
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +17 -81
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.js +6 -25
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +1 -7
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +19 -13
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +12 -48
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +24 -86
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +9 -32
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +5 -21
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +44 -12
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +1 -49
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +37 -136
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleRegistrationCompletion.js +85 -0
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +0 -1
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +9 -88
- package/dist/esm/router/cloudflare/d1/near/d1SponsoredNearAccount.js +242 -0
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +18 -92
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +4 -55
- package/dist/esm/router/cloudflare/d1/oidc/googleOidcToken.js +41 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +9 -15
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +36 -7
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +9 -13
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +11 -50
- package/dist/esm/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.js +5 -20
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +13 -10
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +9 -14
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +25 -13
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +7 -31
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +74 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +7 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +101 -260
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +12 -56
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +155 -0
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +1 -3
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +1 -4
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +131 -31
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +68 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +7 -54
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +9 -8
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +2 -142
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +55 -171
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +10 -79
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +23 -7
- package/dist/esm/router/cloudflare/runtime/routerAbPrewarm.js +2 -2
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +6 -20
- package/dist/esm/router/cloudflare/runtime/tenantRootCreationGrant.js +2 -9
- package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +1 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +5 -0
- package/dist/esm/router/cloudflare/runtime/walletControlOps.js +2 -1
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletRuntimeOps.js +16 -4
- package/dist/esm/router/cloudflare-adaptor.js +1 -2
- package/dist/esm/router/cloudflare.js +3390 -3437
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +11 -8
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +3 -2
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +6 -6
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +5 -8
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +6 -6
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +3 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +8 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +3 -6
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +6 -25
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +39 -55
- package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +0 -1
- package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +15 -62
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +2 -8
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -8
- package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +83 -74
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +1 -0
- package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +1 -0
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +5 -19
- package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +3 -7
- package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +7 -13
- package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +70 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +10 -11
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +2 -3
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +55 -200
- package/dist/esm/router/express.js +858 -1145
- package/dist/esm/router/framework/http.js +7 -1
- package/dist/esm/router/framework/registrationSetupDispatch.js +14 -0
- package/dist/esm/router/framework/ror/normalize.js +0 -1
- package/dist/esm/router/framework/ror/options.js +0 -1
- package/dist/esm/router/framework/ror/provider.js +0 -1
- package/dist/esm/router/framework/ror/staticProvider.js +0 -1
- package/dist/esm/router/framework/routeDefinitions.js +1 -2
- package/dist/esm/router/framework/routerApiWebhooks.js +0 -1
- package/dist/esm/router/framework/runtimeSnapshotConsumer.js +8 -35
- package/dist/esm/router/ror.js +0 -1
- package/dist/esm/router/transport/fetch/createFetchRouter.js +3 -8
- package/dist/esm/router/transport/fetch/routes/auth.js +11 -41
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +36 -147
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +7 -23
- package/dist/esm/router/transport/fetch/routes/deviceLinkingResponses.js +130 -0
- package/dist/esm/router/transport/fetch/routes/ecdsaOperationStepUpFactor.js +171 -0
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +1 -0
- package/dist/esm/router/transport/fetch/routes/sessions.js +1 -0
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +15 -38
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +46 -194
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +4 -1
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +3 -1
- package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +4 -16
- package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +0 -1
- package/dist/esm/shared-ts/src/authorization/walletSignerActivationEquality.js +12 -0
- package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +0 -2
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +2 -5
- package/dist/esm/shared-ts/src/device-linking/contracts.js +16 -1
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +1 -5
- package/dist/esm/shared-ts/src/device-linking/digests.js +1 -8
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +12 -16
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +5 -8
- package/dist/esm/shared-ts/src/near/actions.js +0 -1
- package/dist/esm/shared-ts/src/near/nearClient.js +0 -2
- package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -1
- package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/index.js +1 -6
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +5 -9
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +2 -81
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +1 -219
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +0 -3
- package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentifier.js +12 -0
- package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentity.js +2 -9
- package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +2 -6
- package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +0 -1
- package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +1 -22
- package/dist/esm/shared-ts/src/threshold/participants.js +0 -1
- package/dist/esm/shared-ts/src/threshold/signingRootScope.js +0 -1
- package/dist/esm/shared-ts/src/utils/addWalletAuthMethod.js +4 -13
- package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +1 -7
- package/dist/esm/shared-ts/src/utils/domainIds.js +1 -16
- package/dist/esm/shared-ts/src/utils/ecdsaCapabilityActivation.js +1 -11
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +2 -5
- package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +0 -1
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +3 -1
- package/dist/esm/shared-ts/src/utils/errors.js +1 -19
- package/dist/esm/shared-ts/src/utils/exactKeys.js +17 -0
- package/dist/esm/shared-ts/src/utils/failure.js +20 -0
- package/dist/esm/shared-ts/src/utils/near.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationIds.js +1 -5
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +3 -13
- package/dist/esm/shared-ts/src/utils/registrationSetupOperation.js +8 -0
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +3 -6
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -2
- package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +1 -1
- package/dist/esm/shared-ts/src/utils/thresholdEcdsaChainTarget.js +9 -0
- package/dist/esm/shared-ts/src/utils/validation.js +1 -5
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +0 -1
- package/dist/esm/shared-ts/src/utils/walletManagementProtocol.js +6 -0
- package/dist/esm/shared-ts/src/utils/wireSchema.js +2 -13
- package/dist/esm/shared-ts/src/wallet-recovery/backupAcknowledgement.js +6 -24
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +5 -6
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +1 -4
- package/dist/esm/storage/d1Sql.js +1 -7
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +10 -33
- package/dist/esm/threshold/session/signingSessionSeal/guards/backends.js +1 -2
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +3 -4
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +3 -10
- package/dist/esm/threshold/session/signingSessionSeal/options.js +0 -1
- package/dist/esm/threshold/session/signingSessionSeal/service.js +8 -35
- package/dist/esm/threshold/session/signingSessionSeal/transport/express.js +18 -94
- package/dist/esm/threshold/session/signingSessionSeal/transport/fetch.js +6 -30
- package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +5 -20
- package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +0 -611
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime_bg.wasm +0 -0
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +0 -4
- package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +2 -1
- package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +9 -2
- package/dist/types/shared-ts/src/authorization/walletSignerActivationEquality.d.ts +4 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +3 -4
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +6 -63
- package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +2 -0
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +5 -12
- package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +9 -0
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +11 -12
- package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +3 -17
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +0 -4
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +0 -1
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +0 -18
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +6 -35
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +6 -845
- package/dist/types/shared-ts/src/tenant-root/tenantRootIdentifier.d.ts +3 -0
- package/dist/types/shared-ts/src/tenant-root/tenantRootOperationRecord.d.ts +2 -1
- package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +6 -0
- package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +0 -10
- package/dist/types/shared-ts/src/threshold/participants.d.ts +1 -1
- package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +1 -133
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +4 -18
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +0 -12
- package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +2 -11
- package/dist/types/shared-ts/src/utils/eip1559TxWasmJson.d.ts +16 -0
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/errors.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/exactKeys.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/failure.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/near.d.ts +0 -20
- package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +3 -8
- package/dist/types/shared-ts/src/utils/registrationSetupOperation.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +7 -19
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +3 -1
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/routerAbNormalSigningIdentity.d.ts +30 -8
- package/dist/types/shared-ts/src/utils/routerApiKeyAuth.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +10 -11
- package/dist/types/shared-ts/src/utils/thresholdEcdsaChainTarget.d.ts +25 -0
- package/dist/types/shared-ts/src/utils/validation.d.ts +1 -3
- package/dist/types/shared-ts/src/utils/variant.d.ts +18 -0
- package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +3 -6
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +0 -1
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +4 -2
- package/dist/types/shared-ts/src/utils/wireSchema.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +0 -1
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +1 -10
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodes.d.ts +1 -3
- package/dist/types/shared-ts/src/wallet-recovery/recoveryEnvelopes.d.ts +3 -16
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +5 -21
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryPreparation.d.ts +15 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.d.ts +3 -4
- package/dist/types/wallet-server/src/authorization/domain.d.ts +13 -2
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +27 -3
- package/dist/types/wallet-server/src/authorization/lifecycleRouting.d.ts +32 -0
- package/dist/types/wallet-server/src/authorization/lifecycleRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/recoveryRouting.d.ts +22 -0
- package/dist/types/wallet-server/src/authorization/recoveryRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/service.d.ts +27 -1
- package/dist/types/wallet-server/src/authorization/sessionRouting.d.ts +20 -0
- package/dist/types/wallet-server/src/authorization/sessionRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +31 -9
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +1 -22
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +1 -79
- package/dist/types/wallet-server/src/core/IdentityStore.d.ts +0 -10
- package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +0 -1
- package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -2
- package/dist/types/wallet-server/src/core/ThresholdService/index.d.ts +1 -3
- package/dist/types/wallet-server/src/core/ThresholdService/kv.d.ts +0 -7
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +0 -3
- package/dist/types/wallet-server/src/core/ThresholdService/routerAbNormalSigningPolicy.d.ts +0 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +6 -18
- package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +0 -127
- package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +1 -5
- package/dist/types/wallet-server/src/core/WalletStore.d.ts +0 -3
- package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +8 -20
- package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +1 -27
- package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +2 -16
- package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +22 -14
- package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +0 -24
- package/dist/types/wallet-server/src/core/authService/emailOtpEnrollment.d.ts +1 -70
- package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +1 -14
- package/dist/types/wallet-server/src/core/authService/githubOAuth.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +1 -39
- package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -17
- package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +0 -125
- package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +1 -1
- package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +0 -12
- package/dist/types/wallet-server/src/core/config.d.ts +0 -10
- package/dist/types/wallet-server/src/core/d1EcdsaSignerRead.d.ts +39 -0
- package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +0 -2
- package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +0 -7
- package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +0 -1
- package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +10 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceBootstrap.d.ts +19 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +8 -6
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionRecord.d.ts +3 -4
- package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -5
- package/dist/types/wallet-server/src/core/ecdsaMaterialReadSnapshot.d.ts +19 -0
- package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +10 -7
- package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +1 -5
- package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +0 -1
- package/dist/types/wallet-server/src/core/passkeyCredentialClaims.d.ts +9 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +0 -2
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +3 -7
- package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +1 -2
- package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +2 -11
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +1 -92
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +4 -52
- package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +3 -12
- package/dist/types/wallet-server/src/core/types.d.ts +2 -305
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +15 -3
- package/dist/types/wallet-server/src/index.d.ts +8 -13
- package/dist/types/wallet-server/src/localIntendedMaterialAdmissionFault.d.ts +38 -0
- package/dist/types/wallet-server/src/localIntendedPresignCancellation.d.ts +4 -0
- package/dist/types/wallet-server/src/localRegistrationSetupAuthority.d.ts +13 -0
- package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +4 -9
- package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +15 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizationAssembly.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +25 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/walletSessionCredentialReaders.d.ts +9 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/authorizedOperationStatements.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +11 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +22 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +7 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.d.ts +1 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +8 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +5 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +1 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +2 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +20 -11
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +5 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.d.ts +4 -14
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +29 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -16
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.d.ts +7 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleRegistrationCompletion.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityService.d.ts +0 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1SponsoredNearAccount.d.ts +24 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1SponsoredNearAccount.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcVerificationService.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/googleOidcToken.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +9 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +3 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -11
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +3 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +51 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +35 -50
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +3 -30
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +14 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.d.ts +27 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +1 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +8 -50
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +23 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/cloudflare.types.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +9 -34
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRuntimeOps.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +0 -1
- package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +3 -15
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +9 -50
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +0 -2
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +0 -3
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +1 -13
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.d.ts +8 -9
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +13 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +3 -4
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +7 -33
- package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +1 -2
- package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +2 -7
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +1 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +51 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +2 -10
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +2 -2
- package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +3 -1
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +39 -38
- package/dist/types/wallet-server/src/router/framework/googleLoginResolution.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/framework/http.d.ts +1 -0
- package/dist/types/wallet-server/src/router/framework/registrationSetupDispatch.d.ts +13 -0
- package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +1 -9
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +1 -1
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +3 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingResponses.d.ts +17 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/ecdsaOperationStepUpFactor.d.ts +37 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +3 -5
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +0 -1
- package/dist/types/wallet-server/src/storage/d1Sql.d.ts +0 -1
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +1 -2
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.types.d.ts +6 -8
- package/migrations/d1-signer/0040_namespace_home_challenges.sql +16 -0
- package/migrations/d1-signer/0041_step_up_admission_expiry.sql +28 -0
- package/migrations/d1-signer/0042_deployment_resource_challenges.sql +4 -0
- package/migrations/d1-signer/0043_google_registration_candidate_claim.sql +2 -0
- package/migrations/d1-signer/0044_linked_device_bootstrap_imports.sql +6 -0
- package/migrations/d1-signer/0045_wallet_owned_capability_receipts.sql +29 -0
- package/migrations/d1-signer/0046_wallet_owned_signing_abuse.sql +41 -0
- package/migrations/d1-signer/0047_remove_unused_near_public_keys.sql +2 -0
- package/migrations/d1-signer/0048_operation_owner_scope.sql +45 -0
- package/package.json +2 -3
- package/src/README.md +11 -3
- package/dist/esm/core/AuthService.js +0 -2
- package/dist/esm/core/NearPublicKeyStore.js +0 -200
- package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +0 -397
- package/dist/esm/core/ThresholdService/stores/KeyStore.js +0 -140
- package/dist/esm/core/ThresholdService/stores/SessionStore.js +0 -361
- package/dist/esm/core/ThresholdService/stores/StoreConfig.js +0 -13
- package/dist/esm/core/authService/AuthService.js +0 -594
- package/dist/esm/core/authService/bytes.js +0 -22
- package/dist/esm/core/authService/configValues.js +0 -15
- package/dist/esm/core/authService/emailOtpChallengeOperations.js +0 -126
- package/dist/esm/core/authService/emailOtpChallengeProof.js +0 -214
- package/dist/esm/core/authService/emailOtpChallengeVerification.js +0 -335
- package/dist/esm/core/authService/emailOtpChallenges.js +0 -260
- package/dist/esm/core/authService/emailOtpDelivery.js +0 -169
- package/dist/esm/core/authService/emailOtpGrant.js +0 -74
- package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +0 -175
- package/dist/esm/core/authService/emailOtpUnlock.js +0 -264
- package/dist/esm/core/authService/googleEmailOtpOperations.js +0 -141
- package/dist/esm/core/authService/googleEmailOtpRegistration.js +0 -674
- package/dist/esm/core/authService/identity.js +0 -57
- package/dist/esm/core/authService/identityOperations.js +0 -32
- package/dist/esm/core/authService/nearAccountOperations.js +0 -229
- package/dist/esm/core/authService/nearPublicKeyMetadata.js +0 -127
- package/dist/esm/core/authService/oidcVerification.js +0 -261
- package/dist/esm/core/authService/registrationThresholdHelpers.js +0 -30
- package/dist/esm/core/authService/runtime.js +0 -45
- package/dist/esm/core/authService/storeRegistry.js +0 -102
- package/dist/esm/core/authService/thresholdStoreSummary.js +0 -32
- package/dist/esm/core/authService/webauthnAuthority.js +0 -17
- package/dist/esm/core/defaultConfigsServer.js +0 -9
- package/dist/esm/core/hostedAccountIds.js +0 -225
- package/dist/esm/core/routerAbSigning/createRouterAbSigningRuntimes.js +0 -84
- package/dist/esm/core/signingLanes/LaneAggregateRevocationApplicationService.js +0 -86
- package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +0 -324
- package/dist/esm/core/signingLanes/LaneEnrollmentRevocation.js +0 -173
- package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +0 -198
- package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +0 -73
- package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +0 -68
- package/dist/esm/core/signingLanes/signingWorkerLaneMaterialIdentity.js +0 -0
- package/dist/esm/core/storeBackends.js +0 -208
- package/dist/esm/core/utils.js +0 -14
- package/dist/esm/core/webAuthnStoreBackends.js +0 -198
- package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +0 -56
- package/dist/esm/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.js +0 -10
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.js +0 -22
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -166
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.js +0 -38
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.js +0 -20
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +0 -1459
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLockStore.js +0 -114
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.js +0 -16
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +0 -171
- package/dist/esm/router/cloudflare/d1/signingLanes/index.js +0 -10
- package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +0 -404
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +0 -596
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +0 -273
- package/dist/esm/router/cloudflare/signingLanes/index.js +0 -4
- package/dist/esm/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.js +0 -32
- package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +0 -39
- package/dist/esm/shared-ts/src/signing-lanes/rotation.js +0 -8
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +0 -358
- package/dist/esm/shared-ts/src/signing-lanes/rotationLifecycle.js +0 -313
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +0 -532
- package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +0 -323
- package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +0 -59
- package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +0 -13
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +0 -78
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +0 -27
- package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +0 -6
- package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +0 -20
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeAttempt.d.ts +0 -59
- package/dist/types/wallet-server/src/core/AuthService.d.ts +0 -3
- package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +0 -48
- package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +0 -21
- package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +0 -40
- package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +0 -98
- package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +0 -4
- package/dist/types/wallet-server/src/core/ThresholdService/stores/ThresholdStoreConfig.typecheck.d.ts +0 -2
- package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -490
- package/dist/types/wallet-server/src/core/authService/bytes.d.ts +0 -4
- package/dist/types/wallet-server/src/core/authService/configValues.d.ts +0 -7
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +0 -109
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +0 -169
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +0 -47
- package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +0 -94
- package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +0 -66
- package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +0 -43
- package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +0 -49
- package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +0 -71
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpOperations.d.ts +0 -126
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +0 -169
- package/dist/types/wallet-server/src/core/authService/identity.d.ts +0 -25
- package/dist/types/wallet-server/src/core/authService/identityOperations.d.ts +0 -19
- package/dist/types/wallet-server/src/core/authService/nearAccountOperations.d.ts +0 -55
- package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +0 -44
- package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +0 -66
- package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -11
- package/dist/types/wallet-server/src/core/authService/runtime.d.ts +0 -20
- package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -53
- package/dist/types/wallet-server/src/core/authService/thresholdStoreSummary.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/webauthnAuthority.d.ts +0 -5
- package/dist/types/wallet-server/src/core/defaultConfigsServer.d.ts +0 -5
- package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -16
- package/dist/types/wallet-server/src/core/routerAbSigning/createRouterAbSigningRuntimes.d.ts +0 -16
- package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +0 -36
- package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +0 -62
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentActivation.d.ts +0 -13
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentRevocation.d.ts +0 -24
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleApplicationService.d.ts +0 -141
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +0 -228
- package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +0 -58
- package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +0 -30
- package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +0 -21
- package/dist/types/wallet-server/src/core/storeBackends.d.ts +0 -83
- package/dist/types/wallet-server/src/core/utils.d.ts +0 -3
- package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +0 -96
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +0 -29
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -24
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.d.ts +0 -20
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.d.ts +0 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.d.ts +0 -51
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLockStore.d.ts +0 -28
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.d.ts +0 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneRecords.d.ts +0 -107
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/index.d.ts +0 -10
- package/dist/types/wallet-server/src/router/cloudflare/durableObjects/thresholdStore.d.ts +0 -18
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.d.ts +0 -217
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.d.ts +0 -73
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/index.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.d.ts +0 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/nearPublicKeys.d.ts +0 -3
- /package/dist/esm/{core/signingLanes/LaneEffectJournalStore.js → authorization/recoveryRouting.js} +0 -0
- /package/dist/esm/{core/signingLanes/LaneLifecycleStore.js → authorization/sessionRouting.js} +0 -0
|
@@ -38,16 +38,25 @@ function ecdsaSignerMatchBindings(walletSignerScope, material) {
|
|
|
38
38
|
];
|
|
39
39
|
}
|
|
40
40
|
const PINNED_OWNER_WALLET = `
|
|
41
|
-
|
|
41
|
+
CASE operation.authorization_source_kind
|
|
42
|
+
WHEN 'verified_step_up' THEN (
|
|
43
|
+
SELECT evidence.wallet_id
|
|
44
|
+
FROM verified_wallet_operation_evidence_sets AS evidence
|
|
45
|
+
WHERE evidence.namespace = operation.namespace
|
|
46
|
+
AND evidence.tenant_id = operation.tenant_id
|
|
47
|
+
AND evidence.evidence_set_digest = operation.evidence_set_digest
|
|
48
|
+
LIMIT 1)
|
|
49
|
+
WHEN 'authorization_grant' THEN (
|
|
50
|
+
SELECT session.wallet_id
|
|
42
51
|
FROM wallet_session_authorizations_v2 AS session
|
|
43
52
|
WHERE session.namespace = operation.namespace
|
|
44
53
|
AND session.tenant_id = operation.tenant_id
|
|
45
54
|
AND session.authorization_id = operation.authorization_id
|
|
46
|
-
AND session.org_id = operation.
|
|
47
|
-
AND session.project_id = operation.
|
|
48
|
-
AND session.env_id = operation.
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
AND session.org_id = operation.owner_scope_org_id
|
|
56
|
+
AND session.project_id = operation.owner_scope_project_id
|
|
57
|
+
AND session.env_id = operation.owner_scope_env_id
|
|
58
|
+
LIMIT 1)
|
|
59
|
+
END AS pinned_owner_wallet_id`;
|
|
51
60
|
function prepareAuthorizedOperationCommittedRead(database, namespace, input) {
|
|
52
61
|
return database.prepare(`SELECT operation.*, ${PINNED_OWNER_WALLET}
|
|
53
62
|
FROM authorized_operations AS operation
|
|
@@ -61,7 +70,11 @@ function prepareAuthorizedOperationRead(database, namespace, input) {
|
|
|
61
70
|
LIMIT 1`).bind(namespace, input.tenantId, input.operationFingerprintDigest);
|
|
62
71
|
}
|
|
63
72
|
function prepareAuthorizedOperationAdmissionRead(input) {
|
|
64
|
-
|
|
73
|
+
const material = input.materialSnapshot?.condition(input.walletSignerScope) ?? {
|
|
74
|
+
sql: "1",
|
|
75
|
+
bindings: []
|
|
76
|
+
};
|
|
77
|
+
return input.database.prepare(`SELECT operation.*, ${PINNED_OWNER_WALLET}, (${material.sql}) AS material_snapshot_active,
|
|
65
78
|
CASE operation.authorization_source_kind
|
|
66
79
|
WHEN 'authorization_grant' THEN EXISTS (
|
|
67
80
|
SELECT 1
|
|
@@ -82,9 +95,9 @@ function prepareAuthorizedOperationAdmissionRead(input) {
|
|
|
82
95
|
AND auth_method.wallet_id = session.wallet_id
|
|
83
96
|
AND auth_method.wallet_authority_id = session.authority_id
|
|
84
97
|
WHERE session.namespace = operation.namespace
|
|
85
|
-
AND session.org_id = operation.
|
|
86
|
-
AND session.project_id = operation.
|
|
87
|
-
AND session.env_id = operation.
|
|
98
|
+
AND session.org_id = operation.owner_scope_org_id
|
|
99
|
+
AND session.project_id = operation.owner_scope_project_id
|
|
100
|
+
AND session.env_id = operation.owner_scope_env_id
|
|
88
101
|
AND session.org_id = ? AND session.project_id = ? AND session.env_id = ?
|
|
89
102
|
AND session.tenant_id = operation.tenant_id
|
|
90
103
|
AND session.authorization_id = operation.authorization_id
|
|
@@ -110,14 +123,16 @@ function prepareAuthorizedOperationAdmissionRead(input) {
|
|
|
110
123
|
AND evidence.intent_digest = operation.intent_digest
|
|
111
124
|
AND evidence.display_digest = operation.display_digest
|
|
112
125
|
AND evidence.assurance = 'step_up'
|
|
113
|
-
AND evidence.expires_at_ms >
|
|
126
|
+
AND evidence.expires_at_ms > MAX(
|
|
127
|
+
?, CAST(round(unixepoch('subsec') * 1000) AS INTEGER)
|
|
128
|
+
)
|
|
114
129
|
)
|
|
115
130
|
ELSE 0
|
|
116
131
|
END AS authorization_source_active
|
|
117
132
|
FROM authorized_operations AS operation
|
|
118
133
|
WHERE operation.namespace = ? AND operation.tenant_id = ?
|
|
119
134
|
AND operation.operation_fingerprint_digest = ?
|
|
120
|
-
LIMIT 1`).bind(input.walletSignerScope.orgId, input.walletSignerScope.projectId, input.walletSignerScope.envId, input.nowMs, input.nowMs, input.namespace, input.tenantId, input.operationFingerprintDigest);
|
|
135
|
+
LIMIT 1`).bind(...material.bindings, input.walletSignerScope.orgId, input.walletSignerScope.projectId, input.walletSignerScope.envId, input.nowMs, input.nowMs, input.namespace, input.tenantId, input.operationFingerprintDigest);
|
|
121
136
|
}
|
|
122
137
|
function prepareAuthorizedOperationInsert(input) {
|
|
123
138
|
const { database, namespace, walletSignerScope, operation, material } = input;
|
|
@@ -154,18 +169,31 @@ function prepareAuthorizedOperationInsert(input) {
|
|
|
154
169
|
material?.materialActivation.key_binding ?? null,
|
|
155
170
|
material?.materialActivation.lifecycle_binding ?? null,
|
|
156
171
|
material?.materialActivation.signing_worker ?? null,
|
|
157
|
-
null,
|
|
158
|
-
null,
|
|
159
|
-
null,
|
|
160
|
-
null,
|
|
161
|
-
null,
|
|
162
|
-
null,
|
|
163
|
-
null,
|
|
164
172
|
source.kind === "authorization_grant" ? walletSignerScope.orgId : null,
|
|
165
173
|
source.kind === "authorization_grant" ? walletSignerScope.projectId : null,
|
|
166
174
|
source.kind === "authorization_grant" ? walletSignerScope.envId : null
|
|
167
175
|
];
|
|
168
|
-
|
|
176
|
+
let condition = input.materialSnapshot?.condition(walletSignerScope) ?? null;
|
|
177
|
+
if (condition === null) condition = material?.kind === "ecdsa_material_activation" ? {
|
|
178
|
+
sql: ECDSA_SIGNER_MATCH,
|
|
179
|
+
bindings: ecdsaSignerMatchBindings(walletSignerScope, material)
|
|
180
|
+
} : {
|
|
181
|
+
sql: "1",
|
|
182
|
+
bindings: []
|
|
183
|
+
};
|
|
184
|
+
const absence = input.existingOperation === "preserve" ? {
|
|
185
|
+
sql: `NOT EXISTS (SELECT 1 FROM authorized_operations
|
|
186
|
+
WHERE namespace = ? AND tenant_id = ? AND operation_fingerprint_digest = ?)`,
|
|
187
|
+
bindings: [
|
|
188
|
+
namespace,
|
|
189
|
+
operation.tenantId,
|
|
190
|
+
operation.operationFingerprintDigest
|
|
191
|
+
]
|
|
192
|
+
} : {
|
|
193
|
+
sql: "1",
|
|
194
|
+
bindings: []
|
|
195
|
+
};
|
|
196
|
+
return database.prepare(`INSERT INTO authorized_operations (
|
|
169
197
|
namespace, tenant_id, authorized_operation_id, audit_event_id,
|
|
170
198
|
principal_id, capability_id, capability_kind, operation_kind, operation_id,
|
|
171
199
|
operation_fingerprint_digest, lane_digest, intent_digest, display_digest,
|
|
@@ -176,31 +204,12 @@ function prepareAuthorizedOperationInsert(input) {
|
|
|
176
204
|
material_activation_id, material_activation_capability,
|
|
177
205
|
material_activation_owner, material_activation_key_binding,
|
|
178
206
|
material_activation_lifecycle_binding, material_activation_signing_worker,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
linked_revocation_epoch, linked_scope_org_id, linked_scope_project_id,
|
|
182
|
-
linked_scope_env_id
|
|
207
|
+
owner_scope_org_id, owner_scope_project_id,
|
|
208
|
+
owner_scope_env_id
|
|
183
209
|
) SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
|
184
210
|
'claimed', 'pending', NULL, NULL, NULL, NULL, ?, NULL, ?,
|
|
185
|
-
?, ?, ?, ?, ?, ?, ?,
|
|
186
|
-
WHERE ${
|
|
187
|
-
namespace, tenant_id, authorized_operation_id, audit_event_id,
|
|
188
|
-
principal_id, capability_id, capability_kind, operation_kind, operation_id,
|
|
189
|
-
operation_fingerprint_digest, lane_digest, intent_digest, display_digest,
|
|
190
|
-
authorization_source_kind, authorization_id, evidence_set_digest,
|
|
191
|
-
quota_id, quota_kind, authorization_grant_kind, lifecycle_kind, result_kind,
|
|
192
|
-
result_digest, result_status, result_content_type, result_body_text,
|
|
193
|
-
claimed_at_ms, completed_at_ms,
|
|
194
|
-
material_activation_id, material_activation_capability,
|
|
195
|
-
material_activation_owner, material_activation_key_binding,
|
|
196
|
-
material_activation_lifecycle_binding, material_activation_signing_worker,
|
|
197
|
-
linked_wallet_id, linked_enrollment_id, linked_device_id,
|
|
198
|
-
linked_wallet_key_id, linked_lane_id, linked_lane_share_epoch,
|
|
199
|
-
linked_revocation_epoch, linked_scope_org_id, linked_scope_project_id,
|
|
200
|
-
linked_scope_env_id
|
|
201
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
|
202
|
-
'claimed', 'pending', NULL, NULL, NULL, NULL, ?, NULL, ?,
|
|
203
|
-
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).bind(...values);
|
|
211
|
+
?, ?, ?, ?, ?, ?, ?, ?
|
|
212
|
+
WHERE (${condition.sql}) AND (${absence.sql})`).bind(...values, ...condition.bindings, ...absence.bindings);
|
|
204
213
|
}
|
|
205
214
|
//#endregion
|
|
206
215
|
export { prepareAuthorizedOperationAdmissionRead, prepareAuthorizedOperationCommittedRead, prepareAuthorizedOperationInsert, prepareAuthorizedOperationRead };
|
|
@@ -2,11 +2,15 @@ import { mpcMaterialActivationRefsEqual } from "../../../../shared-ts/src/utils/
|
|
|
2
2
|
import { CAPABILITY_KINDS, parseAuthorizationAuditEventId, parseAuthorizationGrantRef, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId, parseCapabilityOperationRef, parseMpcWalletSigningQuotaId, parsePrincipalId, parseTenantId, parseWalletSessionAuthorizationId, parseWalletSessionId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
3
|
import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
4
4
|
import { buildCapabilityOperationEnvelope, computeCapabilityOperationFingerprintDigest, parseCapabilityOperationFingerprintDigest } from "../../../../shared-ts/src/authorization/operationFingerprint.js";
|
|
5
|
-
import { routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
5
|
+
import { routerAbMpcMaterialActivationRefFromWire, routerAbMpcMaterialActivationRefToWire, sameRouterAbMpcMaterialActivationRef } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
6
6
|
import { buildActiveWalletSessionQuota, buildAuthorizedOperation, buildExactWalletSessionQuotaProjectionV1, computeAuthorizedOperationResultDigest, exactWalletSessionCapabilitySubjectsResolveAuthority, parseAuthorizedOperationReplayResponse, parseHostedWalletSessionCredentialId, parseSessionOrigin, parseWalletSessionAuthorizationV2, walletSessionAuthorizationV2RecordsEqual } from "../../../../authorization/domain.js";
|
|
7
|
+
import { ECDSA_INSTALLATION_SNAPSHOT_COLUMNS } from "../../../../core/ecdsaMaterialReadSnapshot.js";
|
|
7
8
|
import { d1ChangedRows, parseD1JsonColumn } from "../../../../storage/d1Sql.js";
|
|
9
|
+
import { EcdsaMaterialRead } from "../../../../core/d1EcdsaSignerRead.js";
|
|
8
10
|
import { D1WalletStore } from "../../../../core/d1WalletStore.js";
|
|
9
11
|
import { normalizeWalletAuthMethodV2 } from "../../../../core/d1WalletAuthMethodStore.js";
|
|
12
|
+
import { D1EcdsaAdmissionPolicyRead, ECDSA_CREDENTIAL_POLICY_PROJECTION } from "../signingAdmission/d1RouterAbNormalSigningAdmissionStore.js";
|
|
13
|
+
import { parseInstalledEcdsaCustodySnapshotV1 } from "../deviceLinking/d1LinkedDeviceAuthorityInstallService.js";
|
|
10
14
|
import { prepareAuthorizedOperationAdmissionRead, prepareAuthorizedOperationCommittedRead, prepareAuthorizedOperationInsert, prepareAuthorizedOperationRead } from "./authorizedOperationStatements.js";
|
|
11
15
|
import { prepareD1WalletSessionAuthorityProjectionStatements } from "./walletSessionAuthorityProjection.js";
|
|
12
16
|
import { parseD1WalletAuthorityRow } from "../wallet/d1WalletAuthorityStore.js";
|
|
@@ -315,11 +319,12 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
315
319
|
AND quota.expires_at_ms >= ?
|
|
316
320
|
AND ${ACTIVE_V2_HOSTED_PARENT_PROVENANCE_SQL}`).bind(this.namespace, this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, exchange.tenantId, exchange.exchangeCodeId, exchange.authorizationId, exchange.walletSessionId, exchange.quotaId, exchange.principalId, exchange.walletId, exchange.authorityId, exchange.walletAuthMethodId, exchange.codeHash, exchange.nonceDigest, exchange.appOrigin, exchange.walletOrigin, requirePositiveInteger(exchange.issuedAtMs, "exchange.issuedAtMs"), requirePositiveInteger(exchange.expiresAtMs, "exchange.expiresAtMs"), this.namespace, this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, exchange.tenantId, exchange.authorizationId, exchange.walletSessionId, exchange.quotaId, exchange.principalId, exchange.walletId, exchange.authorityId, exchange.walletAuthMethodId, exchange.expiresAtMs, exchange.expiresAtMs).run(), "hosted-wallet Seams session exchange code");
|
|
317
321
|
}
|
|
318
|
-
async redeemHostedWalletSeamsSessionExchange(input) {
|
|
322
|
+
async redeemHostedWalletSeamsSessionExchange(input, publishCredentialLocator) {
|
|
319
323
|
const current = await this.readHostedWalletExchangeV2(input.codeHash);
|
|
320
324
|
const rejected = classifyHostedWalletExchangeV2(current, input);
|
|
321
325
|
if (rejected) return rejected;
|
|
322
326
|
if (!current) throw new Error("hosted-wallet exchange disappeared");
|
|
327
|
+
await publishCredentialLocator?.();
|
|
323
328
|
try {
|
|
324
329
|
const insertCredential = this.database.prepare(`INSERT INTO wallet_session_hosted_credentials_v2 (
|
|
325
330
|
namespace,
|
|
@@ -931,6 +936,7 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
931
936
|
}
|
|
932
937
|
async readLiveWalletSessionAuthorizationProjectionV2(input) {
|
|
933
938
|
const row = await this.readJoinedWalletSessionAuthorizationV2Row({
|
|
939
|
+
projection: { kind: "session" },
|
|
934
940
|
lookupColumn: "authorization_id",
|
|
935
941
|
tenantId: input.expected.tenantId,
|
|
936
942
|
lookupValue: input.expected.authorizationId
|
|
@@ -989,31 +995,48 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
989
995
|
*/
|
|
990
996
|
async readWalletSessionAdmissionSnapshotByOperationCredential(input) {
|
|
991
997
|
const row = await this.readJoinedWalletSessionAuthorizationV2Row({
|
|
998
|
+
projection: { kind: "session" },
|
|
992
999
|
lookupColumn: "operation_credential_hash",
|
|
993
1000
|
tenantId: input.tenantId,
|
|
994
1001
|
lookupValue: input.tokenHash
|
|
995
1002
|
});
|
|
996
1003
|
if (!row) return null;
|
|
997
|
-
|
|
998
|
-
|
|
1004
|
+
return parseWalletSessionAdmissionRow(row, input);
|
|
1005
|
+
}
|
|
1006
|
+
async readEcdsaWalletSessionAdmissionSnapshotByOperationCredential(input) {
|
|
1007
|
+
const row = await this.readJoinedWalletSessionAuthorizationV2Row({
|
|
1008
|
+
projection: {
|
|
1009
|
+
kind: "ecdsa_material",
|
|
1010
|
+
materialActivation: input.materialActivation
|
|
1011
|
+
},
|
|
1012
|
+
lookupColumn: "operation_credential_hash",
|
|
999
1013
|
tenantId: input.tenantId,
|
|
1000
|
-
|
|
1014
|
+
lookupValue: input.tokenHash
|
|
1001
1015
|
});
|
|
1016
|
+
if (!row) return null;
|
|
1017
|
+
const snapshot = await parseWalletSessionAdmissionRow(row, input);
|
|
1018
|
+
const session = snapshot.kind === "active" ? snapshot.authorization.session : snapshot.session;
|
|
1002
1019
|
return {
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1020
|
+
snapshot,
|
|
1021
|
+
materialRead: EcdsaMaterialRead.fromRows(this.walletSignerScope, session.walletId, input.materialActivation, parseD1JsonColumn(row.ecdsa_material_records_json), await parseInstalledEcdsaCustodySnapshotV1({
|
|
1022
|
+
scope: this.walletSignerScope,
|
|
1023
|
+
walletId: session.walletId,
|
|
1024
|
+
materialActivation: routerAbMpcMaterialActivationRefFromWire(input.materialActivation),
|
|
1025
|
+
installations: parseD1JsonColumn(row.ecdsa_installations_json),
|
|
1026
|
+
signers: parseD1JsonColumn(row.ecdsa_source_signers_json)
|
|
1027
|
+
})),
|
|
1028
|
+
policyRead: D1EcdsaAdmissionPolicyRead.fromRows(this.database, this.namespace, session.walletId, input.materialActivation.activation_id, parseD1JsonColumn(row.ecdsa_policy_records_json))
|
|
1008
1029
|
};
|
|
1009
1030
|
}
|
|
1010
1031
|
async readWalletSessionExactOperationContextByCredential(input) {
|
|
1011
1032
|
const row = await this.readJoinedWalletSessionAuthorizationV2Row({
|
|
1033
|
+
projection: { kind: "session" },
|
|
1012
1034
|
lookupColumn: "operation_credential_hash",
|
|
1013
1035
|
tenantId: input.tenantId,
|
|
1014
1036
|
lookupValue: input.tokenHash
|
|
1015
1037
|
});
|
|
1016
1038
|
if (!row) return null;
|
|
1039
|
+
if (row.session_retired_at_ms !== null && row.session_retired_at_ms !== void 0 || integerColumn(row.session_expires_at_ms, "session.expiresAtMs") <= input.nowMs) return null;
|
|
1017
1040
|
const session = parseLiveWalletSessionAuthorizationV2Row(row, {
|
|
1018
1041
|
operationCredentialHash: input.tokenHash,
|
|
1019
1042
|
tenantId: input.tenantId,
|
|
@@ -1058,6 +1081,7 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1058
1081
|
});
|
|
1059
1082
|
const nowMs = requirePositiveInteger(input.nowMs, "exact Wallet Session status time");
|
|
1060
1083
|
const row = await this.readJoinedWalletSessionAuthorizationV2Row({
|
|
1084
|
+
projection: { kind: "session_status" },
|
|
1061
1085
|
lookupColumn: "operation_credential_hash",
|
|
1062
1086
|
tenantId: input.tenantId,
|
|
1063
1087
|
lookupValue: input.tokenHash
|
|
@@ -1120,7 +1144,7 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1120
1144
|
session,
|
|
1121
1145
|
quota
|
|
1122
1146
|
});
|
|
1123
|
-
if (!await this.exactWalletSessionCapabilitySubjectsResolveMaterial(session)) return judged({
|
|
1147
|
+
if (!await this.exactWalletSessionCapabilitySubjectsResolveMaterial(session, parseD1JsonColumn(row.status_ecdsa_material_records_json))) return judged({
|
|
1124
1148
|
kind: "capability_unavailable",
|
|
1125
1149
|
session,
|
|
1126
1150
|
quota
|
|
@@ -1131,15 +1155,20 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1131
1155
|
quota
|
|
1132
1156
|
});
|
|
1133
1157
|
}
|
|
1134
|
-
async exactWalletSessionCapabilitySubjectsResolveMaterial(session) {
|
|
1158
|
+
async exactWalletSessionCapabilitySubjectsResolveMaterial(session, ecdsaMaterialRows) {
|
|
1135
1159
|
const materials = [];
|
|
1136
1160
|
for (const subject of session.capabilitySubjects) switch (subject.kind) {
|
|
1137
1161
|
case "sign":
|
|
1138
1162
|
case "export_keys":
|
|
1139
|
-
if (!materials.some((material) => material.keyFamily === subject.keyFamily && mpcMaterialActivationRefsEqual(material.materialActivation, subject.materialActivation))) materials.push({
|
|
1140
|
-
keyFamily:
|
|
1163
|
+
if (!materials.some((material) => material.keyFamily === subject.keyFamily && mpcMaterialActivationRefsEqual(material.materialActivation, subject.materialActivation))) if (subject.keyFamily === "ed25519") materials.push({
|
|
1164
|
+
keyFamily: "ed25519",
|
|
1141
1165
|
materialActivation: subject.materialActivation
|
|
1142
1166
|
});
|
|
1167
|
+
else materials.push({
|
|
1168
|
+
keyFamily: "ecdsa_secp256k1",
|
|
1169
|
+
materialActivation: subject.materialActivation,
|
|
1170
|
+
materialRead: EcdsaMaterialRead.fromRows(this.walletSignerScope, session.walletId, routerAbMpcMaterialActivationRefToWire(subject.materialActivation), ecdsaMaterialRows, null)
|
|
1171
|
+
});
|
|
1143
1172
|
break;
|
|
1144
1173
|
case "link_devices":
|
|
1145
1174
|
case "revoke_devices": break;
|
|
@@ -1152,10 +1181,7 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1152
1181
|
const signer = subject.keyFamily === "ed25519" ? await this.walletStore.getEd25519SignerByMaterialActivation({
|
|
1153
1182
|
walletId,
|
|
1154
1183
|
materialActivation
|
|
1155
|
-
}) :
|
|
1156
|
-
walletId,
|
|
1157
|
-
materialActivation
|
|
1158
|
-
});
|
|
1184
|
+
}) : subject.materialRead.resolve(this.walletSignerScope, walletId, materialActivation)?.signer;
|
|
1159
1185
|
if (!signer) return await this.readLinkedAuthorityMaterial(walletId, subject) !== null;
|
|
1160
1186
|
if (signer.walletId !== walletId) throw new Error("Stored wallet signer material identity does not match the session");
|
|
1161
1187
|
return true;
|
|
@@ -1176,8 +1202,64 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1176
1202
|
return projection;
|
|
1177
1203
|
}
|
|
1178
1204
|
async readJoinedWalletSessionAuthorizationV2Row(input) {
|
|
1179
|
-
|
|
1205
|
+
const installationProjection = ECDSA_INSTALLATION_SNAPSHOT_COLUMNS.map(installationJsonColumn).join(", ");
|
|
1206
|
+
let materialProjection = "";
|
|
1207
|
+
let materialBindings = [];
|
|
1208
|
+
if (input.projection.kind === "ecdsa_material") {
|
|
1209
|
+
materialProjection = `
|
|
1210
|
+
(SELECT json_group_array(json_object('record_json', signer.record_json))
|
|
1211
|
+
FROM wallet_signers AS signer
|
|
1212
|
+
WHERE signer.namespace = session.namespace
|
|
1213
|
+
AND signer.org_id = session.org_id
|
|
1214
|
+
AND signer.project_id = session.project_id
|
|
1215
|
+
AND signer.env_id = session.env_id
|
|
1216
|
+
AND signer.wallet_id = session.wallet_id
|
|
1217
|
+
AND signer.signer_family = 'ecdsa'
|
|
1218
|
+
AND CASE WHEN json_valid(signer.record_json) THEN
|
|
1219
|
+
json_extract(signer.record_json,
|
|
1220
|
+
'$.walletKey.publicCapability.material_activation.activation_id') = ?
|
|
1221
|
+
ELSE 1 END
|
|
1222
|
+
) AS ecdsa_material_records_json,
|
|
1223
|
+
CASE WHEN authority.provenance_kind = 'device_link' THEN
|
|
1224
|
+
(SELECT json_group_array(json_object(${installationProjection}))
|
|
1225
|
+
FROM linked_device_authority_installations AS installation
|
|
1226
|
+
WHERE installation.namespace = session.namespace
|
|
1227
|
+
AND installation.org_id = session.org_id
|
|
1228
|
+
AND installation.project_id = session.project_id
|
|
1229
|
+
AND installation.env_id = session.env_id
|
|
1230
|
+
AND installation.wallet_id = session.wallet_id)
|
|
1231
|
+
END AS ecdsa_installations_json,
|
|
1232
|
+
CASE WHEN authority.provenance_kind = 'device_link' THEN
|
|
1233
|
+
(SELECT json_group_array(json_object('record_json', source_signer.record_json))
|
|
1234
|
+
FROM wallet_signers AS source_signer
|
|
1235
|
+
WHERE source_signer.namespace = session.namespace
|
|
1236
|
+
AND source_signer.org_id = session.org_id
|
|
1237
|
+
AND source_signer.project_id = session.project_id
|
|
1238
|
+
AND source_signer.env_id = session.env_id
|
|
1239
|
+
AND source_signer.wallet_id = session.wallet_id
|
|
1240
|
+
AND source_signer.signer_family = 'ecdsa')
|
|
1241
|
+
END AS ecdsa_source_signers_json,
|
|
1242
|
+
${ECDSA_CREDENTIAL_POLICY_PROJECTION}`;
|
|
1243
|
+
materialBindings = [input.projection.materialActivation.activation_id, input.projection.materialActivation.activation_id];
|
|
1244
|
+
} else if (input.projection.kind === "session_status") {
|
|
1245
|
+
materialProjection = `
|
|
1246
|
+
(SELECT json_group_array(json_object('record_json', signer.record_json))
|
|
1247
|
+
FROM wallet_signers AS signer
|
|
1248
|
+
WHERE signer.namespace = ? AND signer.org_id = ?
|
|
1249
|
+
AND signer.project_id = ? AND signer.env_id = ?
|
|
1250
|
+
AND signer.wallet_id = session.wallet_id
|
|
1251
|
+
AND signer.signer_family = 'ecdsa'
|
|
1252
|
+
) AS status_ecdsa_material_records_json,`;
|
|
1253
|
+
materialBindings = [
|
|
1254
|
+
this.walletSignerScope.namespace,
|
|
1255
|
+
this.walletSignerScope.orgId,
|
|
1256
|
+
this.walletSignerScope.projectId,
|
|
1257
|
+
this.walletSignerScope.envId
|
|
1258
|
+
];
|
|
1259
|
+
}
|
|
1260
|
+
return await this.database.prepare(`SELECT ${materialProjection}
|
|
1180
1261
|
authority.*,
|
|
1262
|
+
session.namespace AS session_namespace,
|
|
1181
1263
|
session.record_json AS session_record_json,
|
|
1182
1264
|
session.capability_subjects_json AS session_capability_subjects_json,
|
|
1183
1265
|
session.tenant_id AS session_tenant_id,
|
|
@@ -1240,12 +1322,13 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1240
1322
|
AND session.env_id = ?
|
|
1241
1323
|
AND session.tenant_id = ?
|
|
1242
1324
|
AND session.${input.lookupColumn} = ?
|
|
1243
|
-
LIMIT 1`).bind(this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, this.namespace, this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, input.tenantId, input.lookupValue).first();
|
|
1325
|
+
LIMIT 1`).bind(...materialBindings, this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, this.namespace, this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, input.tenantId, input.lookupValue).first();
|
|
1244
1326
|
}
|
|
1245
1327
|
async readWalletSessionAuthorizationV2(input, lookupColumn) {
|
|
1246
1328
|
const lookup = "expected" in input ? input.expected : "identity" in input ? input.identity : null;
|
|
1247
1329
|
const operationCredentialHash = "operationCredentialHash" in input ? input.operationCredentialHash : null;
|
|
1248
1330
|
const row = await this.readJoinedWalletSessionAuthorizationV2Row({
|
|
1331
|
+
projection: { kind: "session" },
|
|
1249
1332
|
lookupColumn,
|
|
1250
1333
|
tenantId: "operationCredentialHash" in input ? input.tenantId : lookup?.tenantId,
|
|
1251
1334
|
lookupValue: lookupColumn === "mint_id" ? String("expected" in input ? input.expected.mintId : lookup?.authorizationId) : lookupColumn === "authorization_id" ? String(lookup?.authorizationId) : operationCredentialHash
|
|
@@ -1273,7 +1356,7 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1273
1356
|
const row = await prepareAuthorizedOperationCommittedRead(this.database, this.namespace, operation).first();
|
|
1274
1357
|
if (!row || row.authorized_operation_id !== operation.authorizedOperationId || row.authorization_source_kind !== operation.authorization.kind) throw new Error("Pinned owner operation is not claimed");
|
|
1275
1358
|
if (operation.authorization.kind === "verified_step_up") {
|
|
1276
|
-
if (row.evidence_set_digest !== operation.authorization.evidenceSetDigest) throw new Error("Verified step-up operation is not claimed");
|
|
1359
|
+
if (row.evidence_set_digest !== operation.authorization.evidenceSetDigest || row.pinned_owner_wallet_id !== walletId) throw new Error("Verified step-up operation is not claimed");
|
|
1277
1360
|
return {
|
|
1278
1361
|
orgId: this.walletSignerScope.orgId,
|
|
1279
1362
|
projectId: this.walletSignerScope.projectId,
|
|
@@ -1286,9 +1369,9 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1286
1369
|
pinnedWalletSessionOwnerScope(row, walletId) {
|
|
1287
1370
|
if (row.pinned_owner_wallet_id !== walletId) throw new Error("Pinned owner Wallet Session scope is unavailable");
|
|
1288
1371
|
return {
|
|
1289
|
-
orgId: requireString(row.
|
|
1290
|
-
projectId: requireString(row.
|
|
1291
|
-
projectEnvironmentId: requireString(row.
|
|
1372
|
+
orgId: requireString(row.owner_scope_org_id, "operation.ownerScope.orgId"),
|
|
1373
|
+
projectId: requireString(row.owner_scope_project_id, "operation.ownerScope.projectId"),
|
|
1374
|
+
projectEnvironmentId: requireString(row.owner_scope_env_id, "operation.ownerScope.projectEnvironmentId")
|
|
1292
1375
|
};
|
|
1293
1376
|
}
|
|
1294
1377
|
async readAuthorizedOperationForAdmission(input) {
|
|
@@ -1296,20 +1379,16 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1296
1379
|
database: this.database,
|
|
1297
1380
|
namespace: this.namespace,
|
|
1298
1381
|
walletSignerScope: this.walletSignerScope,
|
|
1382
|
+
materialSnapshot: input.materialSnapshot,
|
|
1299
1383
|
tenantId: input.tenantId,
|
|
1300
1384
|
operationFingerprintDigest: input.operationFingerprintDigest,
|
|
1301
1385
|
nowMs: requirePositiveInteger(input.nowMs, "operation replay time")
|
|
1302
1386
|
}).first();
|
|
1303
|
-
|
|
1304
|
-
if (row.authorization_source_active !== 0 && row.authorization_source_active !== 1) throw new Error("Authorized operation source status must be a SQL boolean");
|
|
1305
|
-
return {
|
|
1306
|
-
row,
|
|
1307
|
-
operation: await parseAuthorizedOperationRow(row),
|
|
1308
|
-
sourceActive: row.authorization_source_active === 1
|
|
1309
|
-
};
|
|
1387
|
+
return row ? parseAuthorizedOperationAdmissionRecord(row) : null;
|
|
1310
1388
|
}
|
|
1311
1389
|
/** How an operation already admitted for this fingerprint answers another admission. */
|
|
1312
1390
|
answerExistingAuthorizedOperation(existing, operation, material) {
|
|
1391
|
+
if (!existing.materialActive) return { kind: "material_mismatch" };
|
|
1313
1392
|
const replayMismatch = authorizedOperationReplayMismatch({
|
|
1314
1393
|
existing: existing.row,
|
|
1315
1394
|
incoming: operation,
|
|
@@ -1343,7 +1422,8 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1343
1422
|
const existing = await this.readAuthorizedOperationForAdmission({
|
|
1344
1423
|
tenantId: operation.tenantId,
|
|
1345
1424
|
operationFingerprintDigest: operation.operationFingerprintDigest,
|
|
1346
|
-
nowMs: operation.claimedAtMs
|
|
1425
|
+
nowMs: operation.claimedAtMs,
|
|
1426
|
+
materialSnapshot: null
|
|
1347
1427
|
});
|
|
1348
1428
|
if (existing) {
|
|
1349
1429
|
const result = this.answerExistingAuthorizedOperation(existing, operation, void 0);
|
|
@@ -1360,7 +1440,9 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1360
1440
|
namespace: this.namespace,
|
|
1361
1441
|
walletSignerScope: this.walletSignerScope,
|
|
1362
1442
|
operation,
|
|
1363
|
-
material: null
|
|
1443
|
+
material: null,
|
|
1444
|
+
materialSnapshot: null,
|
|
1445
|
+
existingOperation: "reject"
|
|
1364
1446
|
})]
|
|
1365
1447
|
};
|
|
1366
1448
|
}
|
|
@@ -1368,17 +1450,50 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1368
1450
|
return classifyAuthorizedOperationAdmissionError(error);
|
|
1369
1451
|
}
|
|
1370
1452
|
async admitAuthorizedOperation(input) {
|
|
1371
|
-
const result = await this.admitAuthorizedOperationRecord(
|
|
1453
|
+
const result = await this.admitAuthorizedOperationRecord({
|
|
1454
|
+
operation: input.operation,
|
|
1455
|
+
material: input.material,
|
|
1456
|
+
materialSnapshot: null
|
|
1457
|
+
});
|
|
1372
1458
|
if (result.kind === "claimed" || result.kind === "replayed" || result.kind === "operation_in_progress") return {
|
|
1373
1459
|
kind: result.kind,
|
|
1374
1460
|
operation: result.operation
|
|
1375
1461
|
};
|
|
1376
1462
|
return result;
|
|
1377
1463
|
}
|
|
1464
|
+
async resolveEcdsaWalletSessionOperation(input) {
|
|
1465
|
+
const operation = await buildAuthorizedOperation(input.operation);
|
|
1466
|
+
if (!authorizedOperationMaterialScopeMatches(operation, input.material, input.material.readSnapshot)) return { kind: "material_mismatch" };
|
|
1467
|
+
const existing = await this.readAuthorizedOperationForAdmission({
|
|
1468
|
+
tenantId: operation.tenantId,
|
|
1469
|
+
operationFingerprintDigest: operation.operationFingerprintDigest,
|
|
1470
|
+
nowMs: operation.claimedAtMs,
|
|
1471
|
+
materialSnapshot: input.material.readSnapshot
|
|
1472
|
+
});
|
|
1473
|
+
if (!existing) return { kind: "authorized_operation_missing" };
|
|
1474
|
+
const result = this.answerExistingAuthorizedOperation(existing, operation, input.material);
|
|
1475
|
+
if (result.kind === "operation_in_progress") return {
|
|
1476
|
+
kind: result.kind,
|
|
1477
|
+
operation: result.operation,
|
|
1478
|
+
ownerScope: this.pinnedWalletSessionOwnerScope(result.row, input.material.walletId)
|
|
1479
|
+
};
|
|
1480
|
+
if (result.kind === "replayed") return {
|
|
1481
|
+
kind: result.kind,
|
|
1482
|
+
operation: result.operation
|
|
1483
|
+
};
|
|
1484
|
+
switch (result.kind) {
|
|
1485
|
+
case "authorization_grant_rejected":
|
|
1486
|
+
case "verified_step_up_rejected":
|
|
1487
|
+
case "wallet_session_quota_exhausted":
|
|
1488
|
+
case "material_mismatch": return result;
|
|
1489
|
+
default: throw new Error("Unexpected ECDSA operation resolution");
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1378
1492
|
async admitEcdsaWalletSessionOperation(input) {
|
|
1379
1493
|
const result = await this.admitAuthorizedOperationRecord({
|
|
1380
1494
|
operation: input.operation,
|
|
1381
|
-
material: input.material
|
|
1495
|
+
material: input.material,
|
|
1496
|
+
materialSnapshot: input.material.readSnapshot
|
|
1382
1497
|
});
|
|
1383
1498
|
switch (result.kind) {
|
|
1384
1499
|
case "claimed":
|
|
@@ -1403,42 +1518,52 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1403
1518
|
}
|
|
1404
1519
|
async admitAuthorizedOperationRecord(input) {
|
|
1405
1520
|
const operation = await buildAuthorizedOperation(input.operation);
|
|
1406
|
-
if (operation
|
|
1407
|
-
if (input.material && input.material.kind === "ecdsa_material_activation" && (operation.operation.operation.capabilityKind !== CAPABILITY_KINDS.evmEcdsaMpcSigning || input.material.runtimePolicyScope.orgId !== operation.tenantId || input.material.materialActivation.capability !== operation.operation.capabilityId || input.material.materialActivation.material_owner !== input.material.walletId)) return { kind: "material_mismatch" };
|
|
1408
|
-
const existing = await this.readAuthorizedOperationForAdmission({
|
|
1409
|
-
tenantId: operation.tenantId,
|
|
1410
|
-
operationFingerprintDigest: operation.operationFingerprintDigest,
|
|
1411
|
-
nowMs: operation.claimedAtMs
|
|
1412
|
-
});
|
|
1413
|
-
if (existing) return this.answerExistingAuthorizedOperation(existing, operation, input.material);
|
|
1521
|
+
if (!authorizedOperationMaterialScopeMatches(operation, input.material, input.materialSnapshot)) return { kind: "material_mismatch" };
|
|
1414
1522
|
let committedRow;
|
|
1523
|
+
let claimed;
|
|
1415
1524
|
try {
|
|
1416
1525
|
const statement = prepareAuthorizedOperationInsert({
|
|
1417
1526
|
database: this.database,
|
|
1418
1527
|
namespace: this.namespace,
|
|
1419
1528
|
walletSignerScope: this.walletSignerScope,
|
|
1420
1529
|
operation,
|
|
1421
|
-
material: input.material ?? null
|
|
1530
|
+
material: input.material ?? null,
|
|
1531
|
+
materialSnapshot: input.materialSnapshot,
|
|
1532
|
+
existingOperation: "preserve"
|
|
1422
1533
|
});
|
|
1423
|
-
const [result, readback] = await this.database.batch([statement,
|
|
1534
|
+
const [result, readback] = await this.database.batch([statement, prepareAuthorizedOperationAdmissionRead({
|
|
1535
|
+
database: this.database,
|
|
1536
|
+
namespace: this.namespace,
|
|
1537
|
+
walletSignerScope: this.walletSignerScope,
|
|
1538
|
+
tenantId: operation.tenantId,
|
|
1539
|
+
operationFingerprintDigest: operation.operationFingerprintDigest,
|
|
1540
|
+
nowMs: operation.claimedAtMs,
|
|
1541
|
+
materialSnapshot: input.materialSnapshot
|
|
1542
|
+
})]);
|
|
1424
1543
|
if (!result?.success || !readback?.success) throw new Error("authorized operation admission batch returned incomplete results");
|
|
1425
|
-
|
|
1544
|
+
claimed = d1ChangedRows(result) !== 0;
|
|
1426
1545
|
committedRow = readback.results?.[0] ?? null;
|
|
1427
1546
|
} catch (error) {
|
|
1428
1547
|
const raced = await this.readAuthorizedOperationForAdmission({
|
|
1429
1548
|
tenantId: operation.tenantId,
|
|
1430
1549
|
operationFingerprintDigest: operation.operationFingerprintDigest,
|
|
1431
|
-
nowMs: operation.claimedAtMs
|
|
1550
|
+
nowMs: operation.claimedAtMs,
|
|
1551
|
+
materialSnapshot: input.materialSnapshot
|
|
1432
1552
|
});
|
|
1433
1553
|
if (raced) return this.answerExistingAuthorizedOperation(raced, operation, input.material);
|
|
1434
1554
|
const triggerFailure = classifyAuthorizedOperationAdmissionError(error);
|
|
1435
1555
|
if (triggerFailure) return triggerFailure;
|
|
1436
1556
|
throw error;
|
|
1437
1557
|
}
|
|
1438
|
-
if (!committedRow)
|
|
1558
|
+
if (!committedRow) {
|
|
1559
|
+
if (!claimed && input.material) return { kind: "material_mismatch" };
|
|
1560
|
+
throw new Error("authorized operation admission could not be read back");
|
|
1561
|
+
}
|
|
1562
|
+
const admitted = await parseAuthorizedOperationAdmissionRecord(committedRow);
|
|
1563
|
+
if (!claimed) return this.answerExistingAuthorizedOperation(admitted, operation, input.material);
|
|
1439
1564
|
return {
|
|
1440
1565
|
kind: "claimed",
|
|
1441
|
-
operation:
|
|
1566
|
+
operation: admitted.operation,
|
|
1442
1567
|
row: committedRow
|
|
1443
1568
|
};
|
|
1444
1569
|
}
|
|
@@ -1498,6 +1623,21 @@ var CloudflareD1AuthorizationStore = class {
|
|
|
1498
1623
|
LIMIT 1`).bind(this.namespace, this.walletSignerScope.orgId, this.walletSignerScope.projectId, this.walletSignerScope.envId, codeHash).first();
|
|
1499
1624
|
}
|
|
1500
1625
|
};
|
|
1626
|
+
async function parseAuthorizedOperationAdmissionRecord(row) {
|
|
1627
|
+
if (row.authorization_source_active !== 0 && row.authorization_source_active !== 1) throw new Error("Authorized operation source status must be a SQL boolean");
|
|
1628
|
+
return {
|
|
1629
|
+
row,
|
|
1630
|
+
operation: await parseAuthorizedOperationRow(row),
|
|
1631
|
+
sourceActive: row.authorization_source_active === 1,
|
|
1632
|
+
materialActive: row.material_snapshot_active === 1
|
|
1633
|
+
};
|
|
1634
|
+
}
|
|
1635
|
+
function authorizedOperationMaterialScopeMatches(operation, material, snapshot) {
|
|
1636
|
+
if (snapshot && snapshot.walletId !== material?.walletId) return false;
|
|
1637
|
+
const requiresMaterial = operation.operation.operation.capabilityKind === CAPABILITY_KINDS.evmEcdsaMpcSigning;
|
|
1638
|
+
if (!material) return !requiresMaterial;
|
|
1639
|
+
return requiresMaterial && material.runtimePolicyScope.orgId === operation.tenantId && material.materialActivation.capability === operation.operation.capabilityId && material.materialActivation.material_owner === material.walletId;
|
|
1640
|
+
}
|
|
1501
1641
|
function classifyAuthorizedOperationAdmissionError(error) {
|
|
1502
1642
|
const message = error instanceof Error ? error.message : String(error);
|
|
1503
1643
|
if (message.includes("authorization_wallet_session_quota_rejected")) return { kind: "wallet_session_quota_exhausted" };
|
|
@@ -1508,7 +1648,7 @@ function classifyAuthorizedOperationAdmissionError(error) {
|
|
|
1508
1648
|
function authorizedOperationReplayMismatch(input) {
|
|
1509
1649
|
if (requireString(input.existing.authorization_source_kind, "operation.authorization.kind") !== input.incoming.authorization.kind) return authorizationSourceRejected(input.incoming.authorization);
|
|
1510
1650
|
if (input.incoming.authorization.kind === "authorization_grant") {
|
|
1511
|
-
if (input.existing.
|
|
1651
|
+
if (input.existing.owner_scope_org_id !== input.scope.orgId || input.existing.owner_scope_project_id !== input.scope.projectId || input.existing.owner_scope_env_id !== input.scope.envId) return { kind: "authorization_grant_rejected" };
|
|
1512
1652
|
const expectedGrantKind = input.incoming.authorization.authorizationGrantRef.kind;
|
|
1513
1653
|
if (input.existing.authorization_grant_kind !== expectedGrantKind) return { kind: "authorization_grant_rejected" };
|
|
1514
1654
|
if (input.existing.authorization_id !== input.incoming.authorization.authorizationGrantRef.authorizationId) return { kind: "authorization_grant_rejected" };
|
|
@@ -1805,6 +1945,33 @@ function parseExactWalletSessionQuotaProjectionRow(row, session) {
|
|
|
1805
1945
|
function assertNeverDirectV2CommitMode(value) {
|
|
1806
1946
|
throw new Error(`Unsupported direct V2 Wallet Session commit mode: ${String(value)}`);
|
|
1807
1947
|
}
|
|
1948
|
+
async function parseWalletSessionAdmissionRow(row, input) {
|
|
1949
|
+
const session = parseLiveWalletSessionAuthorizationV2Row(row, {
|
|
1950
|
+
operationCredentialHash: input.tokenHash,
|
|
1951
|
+
tenantId: input.tenantId,
|
|
1952
|
+
nowMs: input.nowMs
|
|
1953
|
+
});
|
|
1954
|
+
const { authority, authMethod } = await joinedAuthorityAndMethod(row);
|
|
1955
|
+
if (row.quota_lifecycle_kind === "exhausted") return {
|
|
1956
|
+
kind: "exhausted",
|
|
1957
|
+
session,
|
|
1958
|
+
quota: parseExactWalletSessionQuotaProjectionRow(row, session),
|
|
1959
|
+
authority,
|
|
1960
|
+
authMethod
|
|
1961
|
+
};
|
|
1962
|
+
return {
|
|
1963
|
+
kind: "active",
|
|
1964
|
+
authorization: {
|
|
1965
|
+
session,
|
|
1966
|
+
quota: parseWalletSessionAuthorizationV2QuotaRow(row, session)
|
|
1967
|
+
},
|
|
1968
|
+
authority,
|
|
1969
|
+
authMethod
|
|
1970
|
+
};
|
|
1971
|
+
}
|
|
1972
|
+
function installationJsonColumn(column) {
|
|
1973
|
+
return `'${column}', installation.${column}`;
|
|
1974
|
+
}
|
|
1808
1975
|
//#endregion
|
|
1809
1976
|
export { CloudflareD1AuthorizationStore };
|
|
1810
1977
|
|