@seams/wallet-server 0.6.2 → 0.7.3
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 -105
- package/artifact-manifest.json +147 -32
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -0
- 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 -0
- 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 -0
- 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 -0
- 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 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/migrations/deriver-a/0012_tenant_root_creation_tombstones.sql +20 -0
- package/cloudflare-router-ab/migrations/deriver-a/0013_tenant_root_root_use_admissions.sql +32 -0
- package/cloudflare-router-ab/migrations/deriver-a/0014_tenant_root_refresh_supersessions.sql +24 -0
- package/cloudflare-router-ab/migrations/deriver-a/0015_tenant_root_root_use_attempts.sql +56 -0
- package/cloudflare-router-ab/migrations/deriver-a/0016_tenant_root_root_use_admission_settlement.sql +5 -0
- package/cloudflare-router-ab/migrations/deriver-a/0017_tenant_root_root_use_admission_claims.sql +64 -0
- package/cloudflare-router-ab/migrations/deriver-a/0018_tenant_root_recovery_retention_keys.sql +12 -0
- package/cloudflare-router-ab/migrations/deriver-b/0012_tenant_root_creation_tombstones.sql +20 -0
- package/cloudflare-router-ab/migrations/deriver-b/0013_tenant_root_root_use_admissions.sql +32 -0
- package/cloudflare-router-ab/migrations/deriver-b/0014_tenant_root_refresh_supersessions.sql +24 -0
- package/cloudflare-router-ab/migrations/deriver-b/0015_tenant_root_root_use_attempts.sql +56 -0
- package/cloudflare-router-ab/migrations/deriver-b/0016_tenant_root_root_use_admission_settlement.sql +5 -0
- package/cloudflare-router-ab/migrations/deriver-b/0017_tenant_root_root_use_admission_claims.sql +64 -0
- package/cloudflare-router-ab/migrations/deriver-b/0018_tenant_root_recovery_retention_keys.sql +12 -0
- package/cloudflare-router-ab/scripts/bootstrap-local-tenant-root.mjs +81 -16
- package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +102 -9
- package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +4 -1
- package/cloudflare-router-ab/wrangler.deriver-a.toml +24 -0
- package/cloudflare-router-ab/wrangler.router.toml +13 -0
- package/dist/esm/authorization/capabilityPolicy.js +1 -1
- package/dist/esm/authorization/domain.js +2 -2
- package/dist/esm/authorization/factorEvidence.js +6 -100
- package/dist/esm/authorization/service.js +42 -2
- package/dist/esm/authorization/vaultProxyUse.js +5 -10
- package/dist/esm/cloud-host.js +17 -12
- package/dist/esm/core/EmailOtpRecords.js +19 -1
- package/dist/esm/core/EmailOtpStores.js +323 -924
- package/dist/esm/core/IdentityStore.js +67 -345
- package/dist/esm/core/NearPublicKeyStore.js +21 -63
- package/dist/esm/core/RegistrationCeremonyStore.js +3 -1793
- package/dist/esm/core/SessionService.js +7 -30
- package/dist/esm/core/ThresholdService/config.js +1 -82
- package/dist/esm/core/ThresholdService/kv.js +3 -3
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +37 -5
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +4 -74
- package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +3 -10
- package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +15 -51
- package/dist/esm/core/ThresholdService/stores/KeyStore.js +3 -3
- package/dist/esm/core/ThresholdService/stores/SessionStore.js +5 -81
- package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +191 -372
- package/dist/esm/core/ThresholdService/stores/exportReplayGuard.js +7 -0
- package/dist/esm/core/ThresholdService/validation.js +18 -230
- package/dist/esm/core/WalletAuthMethodStore.js +22 -79
- package/dist/esm/core/WalletStore.js +62 -191
- package/dist/esm/core/WebAuthnAuthenticatorStore.js +57 -340
- package/dist/esm/core/WebAuthnCredentialBindingStore.js +90 -369
- package/dist/esm/core/WebAuthnLoginChallengeStore.js +17 -397
- package/dist/esm/core/WebAuthnSyncChallengeStore.js +17 -397
- package/dist/esm/core/authService/AuthService.js +2 -19
- package/dist/esm/core/authService/bytes.js +1 -4
- package/dist/esm/core/authService/emailOtpChallengeOperations.js +2 -5
- package/dist/esm/core/authService/emailOtpChallengeProof.js +10 -41
- package/dist/esm/core/authService/emailOtpChallengeVerification.js +19 -90
- package/dist/esm/core/authService/emailOtpChallenges.js +11 -46
- package/dist/esm/core/authService/emailOtpConfig.js +1 -32
- package/dist/esm/core/authService/emailOtpDelivery.js +10 -45
- package/dist/esm/core/authService/emailOtpEnrollment.js +9 -40
- package/dist/esm/core/authService/emailOtpGrant.js +9 -40
- package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +15 -193
- package/dist/esm/core/authService/emailOtpSeal.js +5 -20
- package/dist/esm/core/authService/emailOtpUnlock.js +20 -110
- package/dist/esm/core/authService/googleEmailOtpRegistration.js +29 -116
- package/dist/esm/core/authService/identity.js +5 -20
- package/dist/esm/core/authService/nearPrivateKeySigning.js +7 -15
- package/dist/esm/core/authService/nearPublicKeyMetadata.js +6 -25
- package/dist/esm/core/authService/nearTransactions.js +2 -1
- package/dist/esm/core/authService/oidcVerification.js +25 -38
- package/dist/esm/core/authService/rateLimits.js +3 -36
- package/dist/esm/core/authService/registrationThresholdHelpers.js +2 -103
- package/dist/esm/core/authService/storeRegistry.js +2 -13
- package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +6 -6
- package/dist/esm/core/authService/webauthn.js +52 -241
- package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -6
- package/dist/esm/core/authService/webauthnVerificationOutcomes.js +41 -0
- package/dist/esm/core/authService/webauthnWalletBinding.js +2 -122
- package/dist/esm/core/d1EcdsaSignerRead.js +76 -0
- package/dist/esm/core/d1IdentityStore.js +46 -139
- package/dist/esm/core/d1TenantStore.js +82 -0
- package/dist/esm/core/d1WalletAuthMethodStore.js +92 -143
- package/dist/esm/core/d1WalletStore.js +28 -36
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +10 -12
- package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +25 -3
- package/dist/esm/core/deviceLinking/linkedDeviceSession.js +6 -895
- package/dist/esm/core/deviceLinking/linkedDeviceSessionApproval.js +100 -0
- package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +662 -0
- package/dist/esm/core/deviceLinking/requestProof.js +13 -4
- package/dist/esm/core/ecdsaMaterialReadSnapshot.js +85 -0
- package/dist/esm/core/emailOtpD1Statements.js +383 -0
- package/dist/esm/core/hostedAccountIds.js +2 -2
- package/dist/esm/core/keyMaterialBrands.js +2 -48
- package/dist/esm/core/nearRelayerAccountProvisioning.js +27 -155
- package/dist/esm/core/nearSignerWasmRuntime.js +1 -4
- package/dist/esm/core/rpcClients/near/NearClient.js +15 -218
- package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +1 -1
- package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +2 -4
- package/dist/esm/core/signingLanes/LaneLifecycleStore.js +0 -24
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +8 -11
- package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +3 -8
- package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +1 -4
- package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +2 -5
- package/dist/esm/core/storeBackends.js +208 -0
- package/dist/esm/core/thresholdEcdsaChainTarget.js +2 -10
- package/dist/esm/core/webAuthnD1Statements.js +92 -0
- package/dist/esm/core/webAuthnStoreBackends.js +198 -0
- package/dist/esm/hosted-wallet-gateway.js +34 -17
- package/dist/esm/index.js +2 -2
- package/dist/esm/local-hosted-wallet-gateway-worker.js +2 -23
- package/dist/esm/localHostedWalletGatewayHandler.js +312 -0
- package/dist/esm/localIntendedEcdsaFinalizeFault.js +85 -0
- package/dist/esm/localIntendedLinkExecuteFault.js +140 -0
- package/dist/esm/localIntendedMaterialAdmissionFault.js +176 -0
- package/dist/esm/localIntendedPresignCancellation.js +44 -0
- package/dist/esm/localIntendedRevokeFault.js +106 -0
- package/dist/esm/localIntendedSessionAdmissionFault.js +139 -0
- package/dist/esm/localIntendedYaoExportFault.js +117 -0
- package/dist/esm/localIntendedYaoFault.js +13 -16
- package/dist/esm/localIntendedYaoFinalizeFault.js +99 -0
- package/dist/esm/localIntendedYaoRecoveryFault.js +102 -0
- package/dist/esm/localIntendedYaoSigningFault.js +127 -0
- package/dist/esm/router/auth/authRequestValidation.js +1 -1
- package/dist/esm/router/auth/commonRouterUtils.js +34 -12
- package/dist/esm/router/auth/walletSessionFailure.js +3 -19
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +4 -15
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +24 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.js +2 -6
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +87 -89
- package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +76 -0
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +215 -0
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +423 -308
- package/dist/esm/router/cloudflare/d1/authorization/d1VaultProxyStore.js +8 -12
- package/dist/esm/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.js +14 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +107 -66
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +3 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +1 -19
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.js +4 -3
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +52 -9
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.js +100 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +7 -10
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +33 -124
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js +2 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +10 -18
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +6 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.js +3 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +4 -4
- package/dist/esm/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.js +69 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +39 -68
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +69 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +2 -2
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +12 -55
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +17 -80
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +26 -71
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +20 -3
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.js +6 -25
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +7 -94
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +5 -47
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +38 -170
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +24 -87
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +9 -32
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +5 -20
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +15 -134
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +54 -260
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +24 -111
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +1 -28
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +9 -40
- package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +5 -18
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +18 -91
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +6 -30
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +7 -18
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +25 -80
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +24 -15
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +23 -253
- package/dist/esm/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.js +5 -20
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +20 -39
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +31 -73
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +4 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +10 -31
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +6 -30
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +286 -220
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +5 -3
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +2 -2
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +4 -7
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +139 -27
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -1
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +2 -1
- package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +2 -60
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +158 -19
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.js +19 -49
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.js +100 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +132 -33
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +83 -4
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +45 -217
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +10 -13
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +22 -116
- package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +59 -66
- package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +1 -2
- package/dist/esm/router/cloudflare/runtime/routerAbPrewarm.js +2 -2
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +5 -20
- package/dist/esm/router/cloudflare/runtime/tenantRootCreationGrant.js +2 -9
- package/dist/esm/router/cloudflare/runtime/walletConsoleTenantRootLineage.js +11 -2
- 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/signingLanes/cloudflareLaneCurveExecution.js +7 -7
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +4 -3
- package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +48 -21
- package/dist/esm/router/cloudflare.js +13343 -14372
- package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +16 -5
- package/dist/esm/router/domains/ecdsa/thresholdEcdsaRequestValidation.js +2 -8
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js +33 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +17 -9
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +29 -431
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +7 -2
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +5 -8
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.js +2 -1
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +70 -2
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +134 -169
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +77 -162
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +205 -51
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +29 -11
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +3 -6
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +182 -55
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +2 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +63 -247
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +9 -27
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +87 -132
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +39 -55
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js +5 -4
- package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +45 -0
- package/dist/esm/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.js +1 -1
- package/dist/esm/router/domains/emailOtp/emailOtpExportPolicy.js +1 -42
- package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +1 -6
- package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +15 -62
- package/dist/esm/router/domains/emailOtp/emailOtpSessionRouteHelpers.js +1 -142
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.js +1 -1
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -2
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryFinalization.js +23 -45
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryKeyManifest.js +5 -5
- package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
- package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +836 -0
- package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +698 -0
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +210 -0
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.js +16 -15
- package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +314 -0
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +62 -2159
- package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +1 -4
- package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +8 -14
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +18 -22
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +3 -4
- package/dist/esm/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.js +2 -2
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +127 -339
- package/dist/esm/router/express.js +7172 -7997
- package/dist/esm/router/framework/http.js +5 -4
- package/dist/esm/router/framework/ror/normalize.js +1 -1
- package/dist/esm/router/framework/routerApiRouteSurface.js +1 -1
- package/dist/esm/router/framework/runtimeSnapshotConsumer.js +8 -35
- package/dist/esm/router/node/nodeHostedWalletGateway.js +64 -0
- package/dist/esm/router/node/nodeHostedWalletGatewayCheck.js +163 -0
- package/dist/esm/router/node/nodeHostedWalletGatewayMain.js +120 -0
- package/dist/esm/router/node/nodeHttp.js +79 -0
- package/dist/esm/router/node/nodeSqlite.js +43 -0
- package/dist/esm/router/node/signerSqlMigrations.js +48 -0
- package/dist/esm/router/transport/fetch/createFetchRouter.js +4 -7
- package/dist/esm/router/transport/fetch/routes/auth.js +9 -41
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +16 -18
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +8 -27
- package/dist/esm/router/transport/fetch/routes/deviceManagement.js +15 -24
- package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +4 -16
- package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +3 -16
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +144 -461
- package/dist/esm/router/transport/fetch/routes/sessions.js +5 -4
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +12 -42
- package/dist/esm/router/transport/fetch/routes/syncAccountBootstrap.js +2 -2
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +96 -102
- package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +52 -27
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +4 -1
- package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +4 -16
- package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +1 -1
- package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
- package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -2
- package/dist/esm/shared-ts/src/authorization/walletAuthority.js +99 -227
- package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
- package/dist/esm/shared-ts/src/authorization/walletSignerActivationEquality.js +12 -0
- package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +74 -0
- package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +50 -0
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +10 -14
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -5
- package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +55 -0
- package/dist/esm/shared-ts/src/device-linking/digests.js +10 -65
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +14 -16
- package/dist/esm/shared-ts/src/device-linking/index.js +4 -1
- package/dist/esm/shared-ts/src/device-linking/parsers.js +510 -1063
- package/dist/esm/shared-ts/src/device-linking/requestProof.js +5 -14
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +10 -16
- package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +9 -9
- package/dist/esm/shared-ts/src/device-linking/wireFields.js +59 -0
- package/dist/esm/shared-ts/src/near/nearClient.js +252 -0
- package/dist/esm/shared-ts/src/passkey-custody/credentialActivity.js +3 -1
- package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +7 -5
- package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
- package/dist/esm/shared-ts/src/passkey-custody/primitives.js +9 -39
- package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -5
- package/dist/esm/shared-ts/src/signing-lanes/index.js +3 -3
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +8 -19
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +5 -14
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +2 -5
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +7 -5
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +6 -45
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +423 -1511
- package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +323 -0
- package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +59 -0
- 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 -5
- package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +1 -2
- package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +49 -0
- package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
- package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +8 -1
- package/dist/esm/shared-ts/src/utils/digestEncoding.js +63 -0
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +2 -4
- package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +0 -1
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +5 -3
- package/dist/esm/shared-ts/src/utils/exactKeys.js +17 -0
- package/dist/esm/shared-ts/src/utils/exactRecord.js +44 -0
- package/dist/esm/shared-ts/src/utils/failure.js +20 -0
- package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +127 -0
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +2 -2
- package/dist/esm/shared-ts/src/utils/registrationIds.js +280 -0
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +7 -1182
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +426 -0
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +11 -136
- package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +3 -163
- package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +160 -0
- package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
- package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +7 -15
- package/dist/esm/shared-ts/src/utils/thresholdEcdsaChainTarget.js +9 -0
- package/dist/esm/shared-ts/src/utils/validation.js +37 -6
- package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +362 -0
- package/dist/esm/shared-ts/src/utils/wireSchema.js +77 -0
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +8 -15
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
- package/dist/esm/storage/d1Sql.js +10 -1
- package/dist/esm/storage/syncSqlite.js +79 -0
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +11 -33
- package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +3 -3
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +3 -10
- package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -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 +23 -75
- package/dist/esm/threshold/statusCodes.js +1 -1
- package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +3 -3
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +8 -26
- package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +2 -9
- package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +1 -3
- package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +25 -12
- package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +8 -0
- package/dist/types/shared-ts/src/authorization/walletSignerActivationEquality.d.ts +4 -0
- package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -2
- package/dist/types/shared-ts/src/device-linking/authorityActivation.d.ts +5 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +4 -8
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +13 -74
- package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/deviceManagement.d.ts +7 -0
- package/dist/types/shared-ts/src/device-linking/digests.d.ts +0 -5
- package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +3 -2
- package/dist/types/shared-ts/src/device-linking/index.d.ts +2 -0
- package/dist/types/shared-ts/src/device-linking/parsers.d.ts +4 -41
- package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +0 -1
- package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +5 -2
- package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/wireFields.d.ts +26 -0
- package/dist/types/shared-ts/src/near/actions.d.ts +4 -4
- package/dist/types/shared-ts/src/near/delegate.d.ts +3 -2
- package/dist/types/shared-ts/src/near/nearClient.d.ts +145 -0
- package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +0 -22
- package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +2 -4
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +14 -30
- package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +8 -24
- package/dist/types/shared-ts/src/passkey-custody/index.d.ts +0 -2
- package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +9 -14
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -15
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +11 -50
- package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +1 -10
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +5 -27
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +0 -11
- package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +6 -53
- package/dist/types/shared-ts/src/signing-lanes/records.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +18 -42
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +1 -20
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +4 -25
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +1 -41
- package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +6 -0
- package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +20 -0
- 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 +8 -35
- package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +8 -35
- package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +25 -0
- package/dist/types/shared-ts/src/threshold/participants.d.ts +3 -9
- package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +0 -37
- package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +24 -0
- package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +3 -5
- package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +7 -108
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +16 -3
- package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +9 -0
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +1 -2
- package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +3 -13
- package/dist/types/shared-ts/src/utils/eip1559TxWasmJson.d.ts +16 -0
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +7 -5
- package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/errors.d.ts +0 -7
- package/dist/types/shared-ts/src/utils/exactKeys.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/exactRecord.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/failure.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/index.d.ts +5 -2
- package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +6 -6
- package/dist/types/shared-ts/src/utils/near.d.ts +2 -1
- package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +8 -7
- package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +179 -0
- package/dist/types/shared-ts/src/utils/registrationContracts.d.ts +76 -0
- package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +1 -2
- package/dist/types/shared-ts/src/utils/registrationIds.d.ts +56 -0
- package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +9 -514
- package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +130 -0
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +24 -93
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +15 -99
- package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +38 -0
- package/dist/types/shared-ts/src/utils/routerAbNormalSigningIdentity.d.ts +30 -8
- package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +10 -15
- package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +2 -1
- package/dist/types/shared-ts/src/utils/routerApiKeyAuth.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -35
- package/dist/types/shared-ts/src/utils/signerSlot.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +10 -17
- package/dist/types/shared-ts/src/utils/thresholdEcdsaChainTarget.d.ts +25 -0
- package/dist/types/shared-ts/src/utils/validation.d.ts +10 -10
- package/dist/types/shared-ts/src/utils/variant.d.ts +29 -0
- package/dist/types/shared-ts/src/utils/variant.typecheck.d.ts +22 -0
- package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +2 -2
- package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +1 -58
- package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +101 -0
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +3 -7
- package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +5 -4
- package/dist/types/shared-ts/src/utils/wireSchema.d.ts +60 -0
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +2 -1
- package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +0 -1
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +0 -16
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +2 -11
- package/dist/types/shared-ts/src/wallet-recovery/recoveryEnvelopes.d.ts +3 -16
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +6 -18
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +1 -3
- 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/capabilityPolicy.d.ts +0 -1
- package/dist/types/wallet-server/src/authorization/domain.d.ts +36 -5
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +61 -0
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/factorEvidence.d.ts +6 -7
- package/dist/types/wallet-server/src/authorization/service.d.ts +71 -3
- package/dist/types/wallet-server/src/cloud-host.d.ts +6 -2
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +10 -1
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +16 -116
- package/dist/types/wallet-server/src/core/IdentityStore.d.ts +2 -7
- package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +6 -16
- package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +29 -90
- package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -12
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +10 -3
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +17 -48
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +2 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +4 -71
- package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +2 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +2 -6
- package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +2 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +2 -4
- package/dist/types/wallet-server/src/core/ThresholdService/stores/exportReplayGuard.d.ts +3 -0
- package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +11 -137
- package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +2 -7
- package/dist/types/wallet-server/src/core/WalletStore.d.ts +3 -8
- package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +15 -22
- package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +14 -36
- package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +9 -34
- package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +9 -34
- package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/bytes.d.ts +0 -1
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +6 -5
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +9 -17
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +3 -2
- package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +8 -32
- package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +3 -10
- package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +4 -3
- package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +4 -3
- package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +3 -70
- package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +6 -12
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +5 -8
- package/dist/types/wallet-server/src/core/authService/nearPrivateKeySigning.d.ts +3 -2
- package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +4 -3
- package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -26
- package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -5
- package/dist/types/wallet-server/src/core/authService/thresholdEcdsaKeyInventory.d.ts +0 -23
- package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +8 -16
- package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +7 -7
- package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +43 -0
- package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +1 -28
- package/dist/types/wallet-server/src/core/d1EcdsaSignerRead.d.ts +39 -0
- package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +6 -16
- package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +51 -0
- package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +11 -29
- package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +16 -1
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEd25519ExportRoot.d.ts +2 -1
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEmailOtpGrant.d.ts +2 -1
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceManagement.d.ts +44 -26
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +19 -217
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionApproval.d.ts +8 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionRecord.d.ts +258 -0
- package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -2
- package/dist/types/wallet-server/src/core/ecdsaMaterialReadSnapshot.d.ts +19 -0
- package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +54 -0
- package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -15
- package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +4 -24
- package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +2 -3
- package/dist/types/wallet-server/src/core/nearSignerWasmRuntime.d.ts +0 -1
- package/dist/types/wallet-server/src/core/registrationContracts.d.ts +37 -108
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +8 -9
- package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +10 -107
- package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +4 -3
- package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +2 -3
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +2 -3
- package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +5 -20
- package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +4 -4
- package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +3 -3
- package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +2 -19
- package/dist/types/wallet-server/src/core/storeBackends.d.ts +83 -0
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +13 -59
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +51 -3
- package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +3 -12
- package/dist/types/wallet-server/src/core/types.d.ts +5 -30
- package/dist/types/wallet-server/src/core/webAuthnD1Statements.d.ts +29 -0
- package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +96 -0
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +11 -7
- package/dist/types/wallet-server/src/index.d.ts +1 -1
- package/dist/types/wallet-server/src/local-hosted-wallet-gateway-worker.d.ts +1 -4
- package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +12 -0
- package/dist/types/wallet-server/src/localIntendedEcdsaFinalizeFault.d.ts +33 -0
- package/dist/types/wallet-server/src/localIntendedLinkExecuteFault.d.ts +47 -0
- 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/localIntendedRevokeFault.d.ts +40 -0
- package/dist/types/wallet-server/src/localIntendedSessionAdmissionFault.d.ts +41 -0
- package/dist/types/wallet-server/src/localIntendedYaoExportFault.d.ts +41 -0
- package/dist/types/wallet-server/src/localIntendedYaoFault.d.ts +7 -1
- package/dist/types/wallet-server/src/localIntendedYaoFinalizeFault.d.ts +37 -0
- package/dist/types/wallet-server/src/localIntendedYaoRecoveryFault.d.ts +45 -0
- package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +51 -0
- package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +13 -29
- package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +20 -11
- package/dist/types/wallet-server/src/router/auth/walletSessionFailure.d.ts +1 -4
- package/dist/types/wallet-server/src/router/auth/webAuthnCredentialCodecs.d.ts +3 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +3 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +2 -2
- 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 +34 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +54 -21
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.d.ts +2 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +74 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +2 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.d.ts +8 -21
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.d.ts +14 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.d.ts +49 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +6 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +7 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +8 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.d.ts +3 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.d.ts +1 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +33 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +13 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +24 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +4 -11
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +1 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +4 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +13 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.d.ts +5 -4
- 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 +1 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -21
- package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityRecords.d.ts +0 -23
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +1 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.d.ts +11 -19
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -54
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +7 -19
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.d.ts +4 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.d.ts +8 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +7 -14
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -22
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +6 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +10 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +21 -26
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +5 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +4 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +17 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +0 -16
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +29 -14
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.d.ts +15 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.d.ts +71 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +34 -24
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +44 -26
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +13 -46
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +8 -19
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +8 -34
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleTenantRootLineage.d.ts +2 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +15 -2
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +9 -7
- package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +6 -18
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.d.ts +46 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +5 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +20 -79
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +4 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +62 -42
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +108 -32
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryActivation.typecheck.d.ts +5 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +36 -5
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +5 -4
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +41 -50
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +3 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +6 -5
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.d.ts +14 -4
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +11 -52
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.d.ts +3 -4
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpExportPolicy.d.ts +2 -27
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRequestValidation.d.ts +1 -2
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRouteHandlers.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpSessionRouteHelpers.d.ts +2 -102
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/envelopeRevocationAdmission.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +3 -2
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.d.ts +1 -9
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/verifiedCustodyFactor.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +2 -28
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryFinalization.d.ts +43 -1
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +7 -19
- package/dist/types/wallet-server/src/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.d.ts +0 -3
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.d.ts +164 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.d.ts +110 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +373 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.d.ts +11 -10
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +164 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +22 -717
- package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +5 -12
- package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +6 -10
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootCustodyLineage.d.ts +6 -1
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootIdentityResolution.d.ts +4 -7
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +2 -1
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +8 -8
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +4 -4
- package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.d.ts +4 -4
- package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRouteHandlers.d.ts +4 -62
- package/dist/types/wallet-server/src/router/express-adaptor.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 +89 -65
- package/dist/types/wallet-server/src/router/framework/http.d.ts +1 -1
- package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +1 -9
- package/dist/types/wallet-server/src/router/framework/routeMeteringPolicy.d.ts +3 -2
- package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +1 -1
- package/dist/types/wallet-server/src/router/framework/routerApiRouteSurface.d.ts +3 -3
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGateway.d.ts +34 -0
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayCheck.d.ts +21 -0
- package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayMain.d.ts +2 -0
- package/dist/types/wallet-server/src/router/node/nodeHttp.d.ts +13 -0
- package/dist/types/wallet-server/src/router/node/nodeSqlite.d.ts +22 -0
- package/dist/types/wallet-server/src/router/node/signerSqlMigrations.d.ts +20 -0
- package/dist/types/wallet-server/src/router/transport/fetch/createFetchRouter.d.ts +1 -3
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +5 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +5 -8
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceManagement.d.ts +14 -16
- package/dist/types/wallet-server/src/router/transport/fetch/routes/normalSigningRouterProxy.d.ts +0 -12
- package/dist/types/wallet-server/src/router/transport/fetch/routes/passkeyCustody.d.ts +1 -1
- package/dist/types/wallet-server/src/router/transport/fetch/routes/sessions.d.ts +2 -1
- package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +9 -17
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +3 -58
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEd25519.d.ts +0 -44
- package/dist/types/wallet-server/src/storage/d1Sql.d.ts +7 -0
- package/dist/types/wallet-server/src/storage/syncSqlite.d.ts +28 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +0 -1
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +5 -7
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.types.d.ts +6 -8
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/shared.d.ts +1 -0
- package/dist/types/wallet-server/src/threshold/statusCodes.d.ts +4 -4
- package/migrations/d1-signer/0036_r150_yao_lifecycle_decisions.sql +22 -0
- package/migrations/d1-signer/0037_r150_wallet_auth_method_revocation_replays.sql +26 -0
- package/migrations/d1-signer/0038_r150_registration_ceremony_cas_guard_seed.sql +8 -0
- package/migrations/d1-signer/0039_r150_revocation_replay_answer_kind.sql +9 -0
- package/package.json +1 -1
- package/dist/esm/core/ThresholdService/ecdsaClientRootProof.js +0 -27
- package/dist/esm/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.js +0 -115
- package/dist/esm/core/ThresholdService/secureRandomId.js +0 -9
- package/dist/esm/core/authService/record.js +0 -8
- package/dist/esm/core/authService/thresholdRuntimePolicy.js +0 -19
- package/dist/esm/core/authService/walletRegistrationPlanning.js +0 -49
- package/dist/esm/core/deviceLinking/index.js +0 -5
- package/dist/esm/core/errors.js +0 -54
- package/dist/esm/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.js +0 -39
- package/dist/esm/core/signingLanes/WalletKeyStore.js +0 -0
- package/dist/esm/core/signingLanes/index.js +0 -8
- package/dist/esm/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.js +0 -55
- package/dist/esm/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.js +0 -56
- package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
- package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker.js +0 -414
- 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/passkey-custody/credentialObservations.d.ts +0 -74
- package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +0 -34
- package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +0 -62
- package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +0 -11
- package/dist/types/shared-ts/src/utils/bigint.d.ts +0 -3
- package/dist/types/shared-ts/src/utils/paillier.d.ts +0 -37
- package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +0 -12
- package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +0 -37
- package/dist/types/wallet-server/src/core/ThresholdService/ecdsaClientRootProof.d.ts +0 -12
- package/dist/types/wallet-server/src/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.d.ts +0 -17
- package/dist/types/wallet-server/src/core/ThresholdService/secureRandomId.d.ts +0 -2
- package/dist/types/wallet-server/src/core/authService/record.d.ts +0 -2
- package/dist/types/wallet-server/src/core/authService/thresholdRuntimePolicy.d.ts +0 -4
- package/dist/types/wallet-server/src/core/authService/walletRegistrationPlanning.d.ts +0 -19
- package/dist/types/wallet-server/src/core/deviceLinking/index.d.ts +0 -5
- package/dist/types/wallet-server/src/core/errors.d.ts +0 -10
- package/dist/types/wallet-server/src/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.d.ts +0 -28
- package/dist/types/wallet-server/src/core/signingLanes/SigningLaneStore.d.ts +0 -15
- package/dist/types/wallet-server/src/core/signingLanes/WalletKeyStore.d.ts +0 -13
- package/dist/types/wallet-server/src/core/signingLanes/index.d.ts +0 -11
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.d.ts +0 -35
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.d.ts +0 -35
- /package/dist/esm/{core/signingLanes/SigningLaneStore.js → authorization/ecdsaWalletSessionAdmission.js} +0 -0
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../shared-ts/src/utils/normalize.js";
|
|
2
2
|
import { isPlainObject } from "../shared-ts/src/utils/validation.js";
|
|
3
|
-
import { d1ChangedRows,
|
|
4
|
-
import "./
|
|
5
|
-
import { parseCurrentEmailOtpAuthStateRecord, parseCurrentEmailOtpAuthStateRow, parseCurrentEmailOtpChallengeRecord, parseCurrentEmailOtpChallengeRow, parseCurrentEmailOtpGrantRecord, parseCurrentEmailOtpGrantRow, parseCurrentEmailOtpUnlockChallengeRecord, parseCurrentEmailOtpUnlockChallengeRow, parseCurrentEmailOtpWalletEnrollmentRecord, parseCurrentEmailOtpWalletEnrollmentRow, parseCurrentGoogleEmailOtpRegistrationAttemptRecord, parseCurrentGoogleEmailOtpRegistrationAttemptRow } from "./EmailOtpRecords.js";
|
|
3
|
+
import { d1ChangedRows, resolveD1DatabaseFromConfig } from "../storage/d1Sql.js";
|
|
4
|
+
import { D1TenantTable, d1TenantScopeFromConfig, resolveStorePrefix } from "./d1TenantStore.js";
|
|
5
|
+
import { parseCurrentEmailOtpAuthStateRecord, parseCurrentEmailOtpAuthStateRow, parseCurrentEmailOtpChallengeRecord, parseCurrentEmailOtpChallengeRow, parseCurrentEmailOtpGrantRecord, parseCurrentEmailOtpGrantRow, parseCurrentEmailOtpUnlockChallengeRecord, parseCurrentEmailOtpUnlockChallengeRow, parseCurrentEmailOtpWalletEnrollmentRecord, parseCurrentEmailOtpWalletEnrollmentRow, parseCurrentGoogleEmailOtpRegistrationAttemptRecord, parseCurrentGoogleEmailOtpRegistrationAttemptRow, parseJsonRecord, registrationAttemptMatchesReplacementScope, registrationAttemptMatchesStartedScope } from "./EmailOtpRecords.js";
|
|
6
|
+
import { emailOtpAuthStateRows, emailOtpChallengeRows, emailOtpGrantRows, emailOtpRegistrationAttemptRows, emailOtpUnlockChallengeRows, emailOtpWalletEnrollmentRows } from "./emailOtpD1Statements.js";
|
|
6
7
|
//#region src/core/EmailOtpStores.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return `${scope.orgId}\n${scope.projectId}\n${scope.envId}\n${scope.signingRootVersion}`;
|
|
10
|
-
}
|
|
11
|
-
function registrationAttemptMatchesStartedScope(record, input) {
|
|
12
|
-
return record.providerSubject === input.providerSubject && record.email === input.email && record.ownerProofBindingDigest === input.ownerProofBindingDigest && record.runtimePolicyScope?.orgId === input.orgId && runtimePolicyScopeKey(record.runtimePolicyScope) === runtimePolicyScopeKey(input.runtimePolicyScope) && (record.state === "started" || record.state === "key_finalized") && record.expiresAtMs > input.nowMs;
|
|
13
|
-
}
|
|
14
|
-
function registrationAttemptMatchesReplacementScope(record, input) {
|
|
15
|
-
return record.providerSubject === input.providerSubject && record.email === input.email && record.ownerProofBindingDigest !== input.ownerProofBindingDigest && record.runtimePolicyScope?.orgId === input.orgId && runtimePolicyScopeKey(record.runtimePolicyScope) === runtimePolicyScopeKey(input.runtimePolicyScope) && (record.state === "started" || record.state === "key_finalized") && record.expiresAtMs > input.nowMs;
|
|
16
|
-
}
|
|
8
|
+
/** Names the Email OTP stores in D1 scope errors. */
|
|
9
|
+
const EMAIL_OTP_D1_STORE = "Email OTP store";
|
|
17
10
|
const EMAIL_OTP_STORE_D1_SCHEMA_SQL = Object.freeze([
|
|
18
11
|
`
|
|
19
12
|
CREATE TABLE IF NOT EXISTS email_otp_challenges (
|
|
@@ -261,99 +254,109 @@ const EMAIL_OTP_STORE_D1_SCHEMA_SQL = Object.freeze([
|
|
|
261
254
|
)
|
|
262
255
|
`
|
|
263
256
|
]);
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
return normalized;
|
|
284
|
-
}
|
|
285
|
-
function normalizeD1EmailOtpStoreOptions(input) {
|
|
286
|
-
return {
|
|
287
|
-
database: input.database,
|
|
288
|
-
namespace: requireD1ScopeString(input.namespace, "namespace"),
|
|
289
|
-
orgId: requireD1ScopeString(input.orgId, "orgId"),
|
|
290
|
-
projectId: requireD1ScopeString(input.projectId, "projectId"),
|
|
291
|
-
envId: requireD1ScopeString(input.envId, "envId"),
|
|
292
|
-
ensureSchema: input.ensureSchema !== false
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
function d1ScopeFromConfig(input) {
|
|
296
|
-
return {
|
|
297
|
-
namespace: requireD1ScopeString(input.namespace, "namespace"),
|
|
298
|
-
orgId: requireD1ScopeString(input.config.orgId || input.config.ORG_ID, "orgId"),
|
|
299
|
-
projectId: requireD1ScopeString(input.config.projectId || input.config.PROJECT_ID, "projectId"),
|
|
300
|
-
envId: requireD1ScopeString(input.config.envId || input.config.ENV_ID, "envId")
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
function bindD1EmailOtpScope(database, scope, statement, values = []) {
|
|
304
|
-
return database.prepare(statement).bind(scope.namespace, scope.orgId, scope.projectId, scope.envId, ...values);
|
|
305
|
-
}
|
|
306
|
-
function assertD1EmailOtpOrgScope(input) {
|
|
307
|
-
if (!input.recordOrgId) return;
|
|
308
|
-
if (input.recordOrgId !== input.scope.orgId) throw new Error(`${input.label} orgId must match D1 Email OTP store orgId`);
|
|
309
|
-
}
|
|
310
|
-
function resolveD1EmailOtpStoreOptions(input, storeLabel) {
|
|
311
|
-
const config = getStoreConfig(input);
|
|
312
|
-
if (normalizeOptionalTrimmedString(config.kind) !== "d1") return null;
|
|
313
|
-
const database = resolveD1DatabaseFromConfig(config);
|
|
314
|
-
if (!database) throw new Error(`[email-otp] D1 ${storeLabel} store selected but no D1 database was provided`);
|
|
315
|
-
return {
|
|
316
|
-
database,
|
|
317
|
-
...d1ScopeFromConfig({
|
|
318
|
-
config,
|
|
319
|
-
namespace: resolveEmailOtpStoreNamespace(config)
|
|
320
|
-
})
|
|
321
|
-
};
|
|
257
|
+
/**
|
|
258
|
+
* Selects a store's backend: D1 when the config's `kind` is `d1`, else in memory; any other
|
|
259
|
+
* `kind` is an error. `label` names the store in log lines and errors; the unknown-kind error
|
|
260
|
+
* uses `kindLabel`, which the wallet enrollment store shortens to `enrollment`. The store type
|
|
261
|
+
* `S` comes from the caller's return type.
|
|
262
|
+
*/
|
|
263
|
+
function createEmailOtpStore(input, label, build, kindLabel = label) {
|
|
264
|
+
const config = isPlainObject(input?.config) ? input.config : {};
|
|
265
|
+
const kind = normalizeOptionalTrimmedString(config.kind);
|
|
266
|
+
if (kind === "d1") {
|
|
267
|
+
const database = resolveD1DatabaseFromConfig(config);
|
|
268
|
+
if (!database) throw new Error(`[email-otp] D1 ${label} store selected but no D1 database was provided`);
|
|
269
|
+
const scope = d1TenantScopeFromConfig(config, resolveStorePrefix(config, ["EMAIL_OTP_PREFIX", "EMAIL_OTP_STORE_PREFIX"], "email-otp:"), EMAIL_OTP_D1_STORE);
|
|
270
|
+
input?.logger?.info(`[email-otp] Using D1 ${label} store`);
|
|
271
|
+
return build.d1(database, scope);
|
|
272
|
+
}
|
|
273
|
+
if (kind && kind !== "in-memory") throw new Error(`[email-otp] Unknown ${kindLabel} store kind: ${kind}`);
|
|
274
|
+
input?.logger?.info(`[email-otp] Using in-memory ${label} store (non-persistent)`);
|
|
275
|
+
return build.inMemory();
|
|
322
276
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
277
|
+
const CHALLENGE_RECORD = {
|
|
278
|
+
label: "Email OTP challenge",
|
|
279
|
+
parse: parseCurrentEmailOtpChallengeRecord,
|
|
280
|
+
id: (record) => record.challengeId,
|
|
281
|
+
orgId: (record) => record.orgId
|
|
282
|
+
};
|
|
283
|
+
const GRANT_RECORD = {
|
|
284
|
+
label: "Email OTP grant",
|
|
285
|
+
parse: parseCurrentEmailOtpGrantRecord,
|
|
286
|
+
id: (record) => record.grantToken,
|
|
287
|
+
orgId: (record) => record.orgId
|
|
288
|
+
};
|
|
289
|
+
const WALLET_ENROLLMENT_RECORD = {
|
|
290
|
+
label: "Email OTP wallet enrollment",
|
|
291
|
+
parse: parseCurrentEmailOtpWalletEnrollmentRecord,
|
|
292
|
+
id: (record) => record.walletId,
|
|
293
|
+
orgId: (record) => record.orgId
|
|
294
|
+
};
|
|
295
|
+
const AUTH_STATE_RECORD = {
|
|
296
|
+
label: "Email OTP auth state",
|
|
297
|
+
parse: parseCurrentEmailOtpAuthStateRecord,
|
|
298
|
+
id: (record) => record.walletId,
|
|
299
|
+
orgId: (record) => record.orgId
|
|
300
|
+
};
|
|
301
|
+
const UNLOCK_CHALLENGE_RECORD = {
|
|
302
|
+
label: "Email OTP unlock challenge",
|
|
303
|
+
parse: parseCurrentEmailOtpUnlockChallengeRecord,
|
|
304
|
+
id: (record) => record.challengeId,
|
|
305
|
+
orgId: (record) => record.orgId
|
|
306
|
+
};
|
|
307
|
+
const REGISTRATION_ATTEMPT_RECORD = {
|
|
308
|
+
label: "Google Email OTP registration attempt",
|
|
309
|
+
parse: parseCurrentGoogleEmailOtpRegistrationAttemptRecord,
|
|
310
|
+
id: (record) => record.attemptId,
|
|
311
|
+
orgId: (record) => record.runtimePolicyScope?.orgId
|
|
312
|
+
};
|
|
313
|
+
function parseEmailOtpRecord(spec, record) {
|
|
314
|
+
const parsed = spec.parse(record);
|
|
315
|
+
if (!parsed) throw new Error(`Invalid ${spec.label} record`);
|
|
316
|
+
return parsed;
|
|
327
317
|
}
|
|
328
318
|
function cloneRecord(value) {
|
|
329
319
|
return JSON.parse(JSON.stringify(value));
|
|
330
320
|
}
|
|
331
|
-
function parseJsonRecord(raw) {
|
|
332
|
-
if (typeof raw !== "string") return raw;
|
|
333
|
-
try {
|
|
334
|
-
return JSON.parse(raw);
|
|
335
|
-
} catch {
|
|
336
|
-
return raw;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
321
|
function challengeContextMatches(record, input) {
|
|
340
322
|
return record.expiresAtMs > input.nowMs && record.challengeSubjectId === input.challengeSubjectId && record.walletId === input.walletId && String(record.orgId || "") === String(input.orgId || "") && record.otpChannel === input.otpChannel && record.ownerProofBindingDigest === input.ownerProofBindingDigest && record.action === input.action && record.operation === input.operation;
|
|
341
323
|
}
|
|
342
|
-
|
|
343
|
-
|
|
324
|
+
/** Keeps copies of parsed records by id, so no caller shares a stored object. */
|
|
325
|
+
var InMemoryEmailOtpStore = class {
|
|
326
|
+
constructor(spec) {
|
|
327
|
+
this.spec = spec;
|
|
344
328
|
this.map = /* @__PURE__ */ new Map();
|
|
345
329
|
}
|
|
346
330
|
async put(record) {
|
|
347
|
-
|
|
348
|
-
if (!parsed) throw new Error("Invalid Email OTP challenge record");
|
|
349
|
-
this.map.set(parsed.challengeId, cloneRecord(parsed));
|
|
331
|
+
this.set(parseEmailOtpRecord(this.spec, record));
|
|
350
332
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
333
|
+
set(record) {
|
|
334
|
+
this.map.set(this.spec.id(record), cloneRecord(record));
|
|
335
|
+
}
|
|
336
|
+
async get(id) {
|
|
337
|
+
const key = normalizeOptionalTrimmedString(id);
|
|
338
|
+
if (!key) return null;
|
|
339
|
+
const record = this.map.get(key);
|
|
340
|
+
return record ? cloneRecord(record) : null;
|
|
341
|
+
}
|
|
342
|
+
/** Reads and deletes, so a one-time record is used at most once. */
|
|
343
|
+
async consume(id) {
|
|
344
|
+
const key = normalizeOptionalTrimmedString(id);
|
|
345
|
+
if (!key) return null;
|
|
346
|
+
const record = this.map.get(key);
|
|
347
|
+
this.map.delete(key);
|
|
355
348
|
return record ? cloneRecord(record) : null;
|
|
356
349
|
}
|
|
350
|
+
async del(id) {
|
|
351
|
+
const key = normalizeOptionalTrimmedString(id);
|
|
352
|
+
if (!key) return;
|
|
353
|
+
this.map.delete(key);
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
var InMemoryEmailOtpChallengeStore = class extends InMemoryEmailOtpStore {
|
|
357
|
+
constructor() {
|
|
358
|
+
super(CHALLENGE_RECORD);
|
|
359
|
+
}
|
|
357
360
|
async deleteExpired(nowMs) {
|
|
358
361
|
const deleted = [];
|
|
359
362
|
for (const [challengeId, record] of this.map.entries()) {
|
|
@@ -397,49 +400,10 @@ var InMemoryEmailOtpChallengeStore = class {
|
|
|
397
400
|
}
|
|
398
401
|
return null;
|
|
399
402
|
}
|
|
400
|
-
async del(challengeId) {
|
|
401
|
-
const id = normalizeOptionalTrimmedString(challengeId);
|
|
402
|
-
if (!id) return;
|
|
403
|
-
this.map.delete(id);
|
|
404
|
-
}
|
|
405
|
-
};
|
|
406
|
-
var InMemoryEmailOtpGrantStore = class {
|
|
407
|
-
constructor() {
|
|
408
|
-
this.map = /* @__PURE__ */ new Map();
|
|
409
|
-
}
|
|
410
|
-
async put(record) {
|
|
411
|
-
const parsed = parseCurrentEmailOtpGrantRecord(record);
|
|
412
|
-
if (!parsed) throw new Error("Invalid Email OTP grant record");
|
|
413
|
-
this.map.set(parsed.grantToken, cloneRecord(parsed));
|
|
414
|
-
}
|
|
415
|
-
async get(grantToken) {
|
|
416
|
-
const token = normalizeOptionalTrimmedString(grantToken);
|
|
417
|
-
if (!token) return null;
|
|
418
|
-
const record = this.map.get(token);
|
|
419
|
-
return record ? cloneRecord(record) : null;
|
|
420
|
-
}
|
|
421
|
-
async consume(grantToken) {
|
|
422
|
-
const token = normalizeOptionalTrimmedString(grantToken);
|
|
423
|
-
if (!token) return null;
|
|
424
|
-
const record = this.map.get(token);
|
|
425
|
-
this.map.delete(token);
|
|
426
|
-
return record ? cloneRecord(record) : null;
|
|
427
|
-
}
|
|
428
|
-
async del(grantToken) {
|
|
429
|
-
const token = normalizeOptionalTrimmedString(grantToken);
|
|
430
|
-
if (!token) return;
|
|
431
|
-
this.map.delete(token);
|
|
432
|
-
}
|
|
433
403
|
};
|
|
434
|
-
var InMemoryEmailOtpWalletEnrollmentStore = class {
|
|
404
|
+
var InMemoryEmailOtpWalletEnrollmentStore = class extends InMemoryEmailOtpStore {
|
|
435
405
|
constructor() {
|
|
436
|
-
|
|
437
|
-
}
|
|
438
|
-
async get(walletId) {
|
|
439
|
-
const key = normalizeOptionalTrimmedString(walletId);
|
|
440
|
-
if (!key) return null;
|
|
441
|
-
const record = this.map.get(key);
|
|
442
|
-
return record ? cloneRecord(record) : null;
|
|
406
|
+
super(WALLET_ENROLLMENT_RECORD);
|
|
443
407
|
}
|
|
444
408
|
async getByProviderUserId(input) {
|
|
445
409
|
const providerUserId = normalizeOptionalTrimmedString(input.providerUserId);
|
|
@@ -449,74 +413,14 @@ var InMemoryEmailOtpWalletEnrollmentStore = class {
|
|
|
449
413
|
return record ? cloneRecord(record) : null;
|
|
450
414
|
}
|
|
451
415
|
async put(record) {
|
|
452
|
-
const parsed =
|
|
453
|
-
if (!parsed) throw new Error("Invalid Email OTP wallet enrollment record");
|
|
416
|
+
const parsed = parseEmailOtpRecord(this.spec, record);
|
|
454
417
|
if (Array.from(this.map.values()).find((existing) => existing.walletId !== parsed.walletId && existing.orgId === parsed.orgId && existing.providerUserId === parsed.providerUserId)) throw new Error("Email OTP wallet enrollment already exists for this provider user in org");
|
|
455
|
-
this.
|
|
456
|
-
}
|
|
457
|
-
async del(walletId) {
|
|
458
|
-
const key = normalizeOptionalTrimmedString(walletId);
|
|
459
|
-
if (!key) return;
|
|
460
|
-
this.map.delete(key);
|
|
461
|
-
}
|
|
462
|
-
};
|
|
463
|
-
var InMemoryEmailOtpAuthStateStore = class {
|
|
464
|
-
constructor() {
|
|
465
|
-
this.map = /* @__PURE__ */ new Map();
|
|
466
|
-
}
|
|
467
|
-
async get(walletId) {
|
|
468
|
-
const key = normalizeOptionalTrimmedString(walletId);
|
|
469
|
-
if (!key) return null;
|
|
470
|
-
const record = this.map.get(key);
|
|
471
|
-
return record ? cloneRecord(record) : null;
|
|
472
|
-
}
|
|
473
|
-
async put(record) {
|
|
474
|
-
const parsed = parseCurrentEmailOtpAuthStateRecord(record);
|
|
475
|
-
if (!parsed) throw new Error("Invalid Email OTP auth state record");
|
|
476
|
-
this.map.set(parsed.walletId, cloneRecord(parsed));
|
|
477
|
-
}
|
|
478
|
-
async del(walletId) {
|
|
479
|
-
const key = normalizeOptionalTrimmedString(walletId);
|
|
480
|
-
if (!key) return;
|
|
481
|
-
this.map.delete(key);
|
|
482
|
-
}
|
|
483
|
-
};
|
|
484
|
-
var InMemoryEmailOtpUnlockChallengeStore = class {
|
|
485
|
-
constructor() {
|
|
486
|
-
this.map = /* @__PURE__ */ new Map();
|
|
487
|
-
}
|
|
488
|
-
async put(record) {
|
|
489
|
-
const parsed = parseCurrentEmailOtpUnlockChallengeRecord(record);
|
|
490
|
-
if (!parsed) throw new Error("Invalid Email OTP unlock challenge record");
|
|
491
|
-
this.map.set(parsed.challengeId, cloneRecord(parsed));
|
|
492
|
-
}
|
|
493
|
-
async consume(challengeId) {
|
|
494
|
-
const id = normalizeOptionalTrimmedString(challengeId);
|
|
495
|
-
if (!id) return null;
|
|
496
|
-
const record = this.map.get(id);
|
|
497
|
-
this.map.delete(id);
|
|
498
|
-
return record ? cloneRecord(record) : null;
|
|
499
|
-
}
|
|
500
|
-
async del(challengeId) {
|
|
501
|
-
const id = normalizeOptionalTrimmedString(challengeId);
|
|
502
|
-
if (!id) return;
|
|
503
|
-
this.map.delete(id);
|
|
418
|
+
this.set(parsed);
|
|
504
419
|
}
|
|
505
420
|
};
|
|
506
|
-
var InMemoryEmailOtpRegistrationAttemptStore = class {
|
|
421
|
+
var InMemoryEmailOtpRegistrationAttemptStore = class extends InMemoryEmailOtpStore {
|
|
507
422
|
constructor() {
|
|
508
|
-
|
|
509
|
-
}
|
|
510
|
-
async put(record) {
|
|
511
|
-
const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRecord(record);
|
|
512
|
-
if (!parsed) throw new Error("Invalid Google Email OTP registration attempt record");
|
|
513
|
-
this.map.set(parsed.attemptId, cloneRecord(parsed));
|
|
514
|
-
}
|
|
515
|
-
async get(attemptId) {
|
|
516
|
-
const id = normalizeOptionalTrimmedString(attemptId);
|
|
517
|
-
if (!id) return null;
|
|
518
|
-
const record = this.map.get(id);
|
|
519
|
-
return record ? cloneRecord(record) : null;
|
|
423
|
+
super(REGISTRATION_ATTEMPT_RECORD);
|
|
520
424
|
}
|
|
521
425
|
async findStartedBySubjectEmail(input) {
|
|
522
426
|
for (const record of this.map.values()) if (registrationAttemptMatchesStartedScope(record, input)) return cloneRecord(record);
|
|
@@ -549,93 +453,135 @@ var InMemoryEmailOtpRegistrationAttemptStore = class {
|
|
|
549
453
|
return deleted;
|
|
550
454
|
}
|
|
551
455
|
};
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
456
|
+
function challengeFromRow(row) {
|
|
457
|
+
return parseCurrentEmailOtpChallengeRow({
|
|
458
|
+
recordJson: parseJsonRecord(row?.record_json),
|
|
459
|
+
expiresAtMs: row?.expires_at_ms
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
function grantFromRow(row) {
|
|
463
|
+
return parseCurrentEmailOtpGrantRow({
|
|
464
|
+
recordJson: parseJsonRecord(row?.record_json),
|
|
465
|
+
expiresAtMs: row?.expires_at_ms
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
function walletEnrollmentFromRow(row) {
|
|
469
|
+
return parseCurrentEmailOtpWalletEnrollmentRow({
|
|
470
|
+
recordJson: parseJsonRecord(row?.record_json),
|
|
471
|
+
updatedAtMs: row?.updated_at_ms
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
function authStateFromRow(row) {
|
|
475
|
+
return parseCurrentEmailOtpAuthStateRow({
|
|
476
|
+
recordJson: parseJsonRecord(row?.record_json),
|
|
477
|
+
updatedAtMs: row?.updated_at_ms
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
function unlockChallengeFromRow(row) {
|
|
481
|
+
return parseCurrentEmailOtpUnlockChallengeRow({
|
|
482
|
+
recordJson: parseJsonRecord(row?.record_json),
|
|
483
|
+
expiresAtMs: row?.expires_at_ms
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
function registrationAttemptFromRow(row) {
|
|
487
|
+
return parseCurrentGoogleEmailOtpRegistrationAttemptRow({
|
|
488
|
+
recordJson: parseJsonRecord(row?.record_json),
|
|
489
|
+
expiresAtMs: row?.expires_at_ms,
|
|
490
|
+
updatedAtMs: row?.updated_at_ms
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* A record's store in one D1 tenant scope. The core schema is created on first use, and a row
|
|
495
|
+
* that no longer parses is deleted when it is read.
|
|
496
|
+
*/
|
|
497
|
+
var D1EmailOtpStore = class {
|
|
498
|
+
constructor(database, scope, spec, rows) {
|
|
499
|
+
this.spec = spec;
|
|
500
|
+
this.rows = rows;
|
|
501
|
+
this.adapterKind = "d1";
|
|
502
|
+
this.prepare = (sql, values) => this.table.prepare(sql, values);
|
|
503
|
+
this.table = new D1TenantTable({
|
|
504
|
+
database,
|
|
505
|
+
...scope
|
|
506
|
+
}, EMAIL_OTP_D1_STORE, EMAIL_OTP_STORE_D1_SCHEMA_SQL);
|
|
564
507
|
}
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
await ensureEmailOtpStoreD1Schema({ database: this.database });
|
|
568
|
-
this.schemaReady = true;
|
|
508
|
+
ensureSchema() {
|
|
509
|
+
return this.table.ensureSchema();
|
|
569
510
|
}
|
|
570
|
-
|
|
571
|
-
|
|
511
|
+
async put(record) {
|
|
512
|
+
await this.ensureSchema();
|
|
513
|
+
const parsed = parseEmailOtpRecord(this.spec, record);
|
|
514
|
+
const recordOrgId = this.spec.orgId(parsed);
|
|
515
|
+
if (recordOrgId && recordOrgId !== this.table.scope.orgId) throw new Error(`${this.spec.label} orgId must match D1 Email OTP store orgId`);
|
|
516
|
+
await this.rows.upsert(this.prepare, parsed).run();
|
|
572
517
|
}
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
this.
|
|
518
|
+
async getById(id, select) {
|
|
519
|
+
await this.ensureSchema();
|
|
520
|
+
const key = normalizeOptionalTrimmedString(id);
|
|
521
|
+
if (!key) return null;
|
|
522
|
+
const row = await select(this.prepare, key).first();
|
|
523
|
+
return row ? this.recordOrDiscard(row, key) : null;
|
|
578
524
|
}
|
|
579
|
-
|
|
525
|
+
/** Reads and deletes, so a one-time record is used at most once. */
|
|
526
|
+
async consumeById(id, consume) {
|
|
580
527
|
await this.ensureSchema();
|
|
581
|
-
const
|
|
582
|
-
if (!
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
528
|
+
const key = normalizeOptionalTrimmedString(id);
|
|
529
|
+
if (!key) return null;
|
|
530
|
+
const row = await consume(this.prepare, key).first();
|
|
531
|
+
const parsed = this.rows.fromRow(row);
|
|
532
|
+
return parsed ? cloneRecord(parsed) : null;
|
|
533
|
+
}
|
|
534
|
+
async deleteById(id, remove) {
|
|
535
|
+
await this.ensureSchema();
|
|
536
|
+
const key = normalizeOptionalTrimmedString(id);
|
|
537
|
+
if (!key) return;
|
|
538
|
+
await remove(this.prepare, key).run();
|
|
539
|
+
}
|
|
540
|
+
/** The row's record; a row that does not parse is deleted by `malformedId` and reads as null. */
|
|
541
|
+
async recordOrDiscard(row, malformedId) {
|
|
542
|
+
const parsed = this.rows.fromRow(row);
|
|
543
|
+
if (parsed) return cloneRecord(parsed);
|
|
544
|
+
const id = normalizeOptionalTrimmedString(malformedId);
|
|
545
|
+
if (id) await this.del(id);
|
|
546
|
+
return null;
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
const ACTIVE_CHALLENGE_CONTEXT_SQL = `WHERE namespace = ?
|
|
550
|
+
AND org_id = ?
|
|
551
|
+
AND project_id = ?
|
|
552
|
+
AND env_id = ?
|
|
553
|
+
AND expires_at_ms > ?
|
|
554
|
+
AND challenge_subject_id = ?
|
|
555
|
+
AND wallet_id = ?
|
|
556
|
+
AND record_org_id = ?
|
|
557
|
+
AND otp_channel = ?
|
|
558
|
+
AND owner_proof_binding_digest = ?
|
|
559
|
+
AND action = ?
|
|
560
|
+
AND operation = ?`;
|
|
561
|
+
function challengeContextValues(input) {
|
|
562
|
+
return [
|
|
563
|
+
input.nowMs,
|
|
564
|
+
input.challengeSubjectId,
|
|
565
|
+
input.walletId,
|
|
566
|
+
String(input.orgId || ""),
|
|
567
|
+
input.otpChannel,
|
|
568
|
+
input.ownerProofBindingDigest,
|
|
569
|
+
input.action,
|
|
570
|
+
input.operation
|
|
571
|
+
];
|
|
572
|
+
}
|
|
573
|
+
var D1EmailOtpChallengeStore = class extends D1EmailOtpStore {
|
|
574
|
+
constructor(database, scope) {
|
|
575
|
+
super(database, scope, CHALLENGE_RECORD, {
|
|
576
|
+
fromRow: challengeFromRow,
|
|
577
|
+
upsert: emailOtpChallengeRows.upsert
|
|
587
578
|
});
|
|
588
|
-
await this.bindScope(`INSERT INTO email_otp_challenges (
|
|
589
|
-
namespace,
|
|
590
|
-
org_id,
|
|
591
|
-
project_id,
|
|
592
|
-
env_id,
|
|
593
|
-
challenge_id,
|
|
594
|
-
challenge_subject_id,
|
|
595
|
-
wallet_id,
|
|
596
|
-
record_org_id,
|
|
597
|
-
otp_channel,
|
|
598
|
-
owner_proof_binding_digest,
|
|
599
|
-
action,
|
|
600
|
-
operation,
|
|
601
|
-
otp_code,
|
|
602
|
-
record_json,
|
|
603
|
-
created_at_ms,
|
|
604
|
-
expires_at_ms
|
|
605
|
-
)
|
|
606
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
607
|
-
ON CONFLICT (namespace, org_id, project_id, env_id, challenge_id)
|
|
608
|
-
DO UPDATE SET
|
|
609
|
-
challenge_subject_id = EXCLUDED.challenge_subject_id,
|
|
610
|
-
wallet_id = EXCLUDED.wallet_id,
|
|
611
|
-
record_org_id = EXCLUDED.record_org_id,
|
|
612
|
-
otp_channel = EXCLUDED.otp_channel,
|
|
613
|
-
owner_proof_binding_digest = EXCLUDED.owner_proof_binding_digest,
|
|
614
|
-
action = EXCLUDED.action,
|
|
615
|
-
operation = EXCLUDED.operation,
|
|
616
|
-
otp_code = EXCLUDED.otp_code,
|
|
617
|
-
record_json = EXCLUDED.record_json,
|
|
618
|
-
created_at_ms = EXCLUDED.created_at_ms,
|
|
619
|
-
expires_at_ms = EXCLUDED.expires_at_ms`, [
|
|
620
|
-
parsed.challengeId,
|
|
621
|
-
parsed.challengeSubjectId,
|
|
622
|
-
parsed.walletId,
|
|
623
|
-
parsed.orgId || "",
|
|
624
|
-
parsed.otpChannel,
|
|
625
|
-
parsed.ownerProofBindingDigest,
|
|
626
|
-
parsed.action,
|
|
627
|
-
parsed.operation,
|
|
628
|
-
parsed.otpCode,
|
|
629
|
-
JSON.stringify(parsed),
|
|
630
|
-
parsed.createdAtMs,
|
|
631
|
-
parsed.expiresAtMs
|
|
632
|
-
]).run();
|
|
633
579
|
}
|
|
634
580
|
async get(challengeId) {
|
|
635
581
|
await this.ensureSchema();
|
|
636
582
|
const id = normalizeOptionalTrimmedString(challengeId);
|
|
637
583
|
if (!id) return null;
|
|
638
|
-
const row = await this.
|
|
584
|
+
const row = await this.prepare(`SELECT record_json, expires_at_ms, challenge_id
|
|
639
585
|
FROM email_otp_challenges
|
|
640
586
|
WHERE namespace = ?
|
|
641
587
|
AND org_id = ?
|
|
@@ -643,96 +589,37 @@ var D1EmailOtpChallengeStore = class extends D1EmailOtpStoreBase {
|
|
|
643
589
|
AND env_id = ?
|
|
644
590
|
AND challenge_id = ?
|
|
645
591
|
LIMIT 1`, [id]).first();
|
|
646
|
-
|
|
647
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
648
|
-
expiresAtMs: row?.expires_at_ms
|
|
649
|
-
});
|
|
650
|
-
if (!row) return null;
|
|
651
|
-
if (!parsed) {
|
|
652
|
-
await this.del(id);
|
|
653
|
-
return null;
|
|
654
|
-
}
|
|
655
|
-
return cloneRecord(parsed);
|
|
592
|
+
return row ? this.recordOrDiscard(row, id) : null;
|
|
656
593
|
}
|
|
657
594
|
async deleteExpired(nowMs) {
|
|
658
595
|
await this.ensureSchema();
|
|
659
|
-
return ((await this.
|
|
596
|
+
return ((await this.prepare(`DELETE FROM email_otp_challenges
|
|
660
597
|
WHERE namespace = ?
|
|
661
598
|
AND org_id = ?
|
|
662
599
|
AND project_id = ?
|
|
663
600
|
AND env_id = ?
|
|
664
601
|
AND expires_at_ms <= ?
|
|
665
|
-
RETURNING record_json, expires_at_ms`, [nowMs]).all()).results || []).map((row) =>
|
|
666
|
-
recordJson: parseJsonRecord(row.record_json),
|
|
667
|
-
expiresAtMs: row.expires_at_ms
|
|
668
|
-
})).filter((record) => Boolean(record)).map((record) => cloneRecord(record));
|
|
602
|
+
RETURNING record_json, expires_at_ms`, [nowMs]).all()).results || []).map((row) => challengeFromRow(row)).filter((record) => Boolean(record)).map((record) => cloneRecord(record));
|
|
669
603
|
}
|
|
670
604
|
async countActiveByContext(input) {
|
|
671
605
|
await this.ensureSchema();
|
|
672
|
-
const row = await this.
|
|
606
|
+
const row = await this.prepare(`SELECT COUNT(*) AS count
|
|
673
607
|
FROM email_otp_challenges
|
|
674
|
-
|
|
675
|
-
AND org_id = ?
|
|
676
|
-
AND project_id = ?
|
|
677
|
-
AND env_id = ?
|
|
678
|
-
AND expires_at_ms > ?
|
|
679
|
-
AND challenge_subject_id = ?
|
|
680
|
-
AND wallet_id = ?
|
|
681
|
-
AND record_org_id = ?
|
|
682
|
-
AND otp_channel = ?
|
|
683
|
-
AND owner_proof_binding_digest = ?
|
|
684
|
-
AND action = ?
|
|
685
|
-
AND operation = ?`, [
|
|
686
|
-
input.nowMs,
|
|
687
|
-
input.challengeSubjectId,
|
|
688
|
-
input.walletId,
|
|
689
|
-
String(input.orgId || ""),
|
|
690
|
-
input.otpChannel,
|
|
691
|
-
input.ownerProofBindingDigest,
|
|
692
|
-
input.action,
|
|
693
|
-
input.operation
|
|
694
|
-
]).first();
|
|
608
|
+
${ACTIVE_CHALLENGE_CONTEXT_SQL}`, challengeContextValues(input)).first();
|
|
695
609
|
return Number(row?.count || 0);
|
|
696
610
|
}
|
|
697
611
|
async findLatestActiveByContext(input) {
|
|
698
612
|
await this.ensureSchema();
|
|
699
|
-
const row = await this.
|
|
613
|
+
const row = await this.prepare(`SELECT record_json, expires_at_ms, challenge_id
|
|
700
614
|
FROM email_otp_challenges
|
|
701
|
-
|
|
702
|
-
AND org_id = ?
|
|
703
|
-
AND project_id = ?
|
|
704
|
-
AND env_id = ?
|
|
705
|
-
AND expires_at_ms > ?
|
|
706
|
-
AND challenge_subject_id = ?
|
|
707
|
-
AND wallet_id = ?
|
|
708
|
-
AND record_org_id = ?
|
|
709
|
-
AND otp_channel = ?
|
|
710
|
-
AND owner_proof_binding_digest = ?
|
|
711
|
-
AND action = ?
|
|
712
|
-
AND operation = ?
|
|
615
|
+
${ACTIVE_CHALLENGE_CONTEXT_SQL}
|
|
713
616
|
ORDER BY expires_at_ms DESC, created_at_ms DESC
|
|
714
|
-
LIMIT 1`,
|
|
715
|
-
|
|
716
|
-
input.challengeSubjectId,
|
|
717
|
-
input.walletId,
|
|
718
|
-
String(input.orgId || ""),
|
|
719
|
-
input.otpChannel,
|
|
720
|
-
input.ownerProofBindingDigest,
|
|
721
|
-
input.action,
|
|
722
|
-
input.operation
|
|
723
|
-
]).first();
|
|
724
|
-
const parsed = parseCurrentEmailOtpChallengeRow({
|
|
725
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
726
|
-
expiresAtMs: row?.expires_at_ms
|
|
727
|
-
});
|
|
728
|
-
if (parsed) return cloneRecord(parsed);
|
|
729
|
-
const malformedId = normalizeOptionalTrimmedString(row?.challenge_id);
|
|
730
|
-
if (malformedId) await this.del(malformedId);
|
|
731
|
-
return null;
|
|
617
|
+
LIMIT 1`, challengeContextValues(input)).first();
|
|
618
|
+
return this.recordOrDiscard(row, row?.challenge_id);
|
|
732
619
|
}
|
|
733
620
|
async deleteOldestActiveByContext(input) {
|
|
734
621
|
await this.ensureSchema();
|
|
735
|
-
const row = await this.
|
|
622
|
+
const row = await this.prepare(`WITH oldest AS (
|
|
736
623
|
SELECT challenge_id
|
|
737
624
|
FROM email_otp_challenges
|
|
738
625
|
WHERE namespace = ?
|
|
@@ -757,191 +644,57 @@ var D1EmailOtpChallengeStore = class extends D1EmailOtpStoreBase {
|
|
|
757
644
|
AND env_id = ?
|
|
758
645
|
AND challenge_id IN (SELECT challenge_id FROM oldest)
|
|
759
646
|
RETURNING record_json, expires_at_ms, challenge_id`, [
|
|
760
|
-
input
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
input.ownerProofBindingDigest,
|
|
766
|
-
input.action,
|
|
767
|
-
input.operation,
|
|
768
|
-
this.scope.namespace,
|
|
769
|
-
this.scope.orgId,
|
|
770
|
-
this.scope.projectId,
|
|
771
|
-
this.scope.envId
|
|
647
|
+
...challengeContextValues(input),
|
|
648
|
+
this.table.scope.namespace,
|
|
649
|
+
this.table.scope.orgId,
|
|
650
|
+
this.table.scope.projectId,
|
|
651
|
+
this.table.scope.envId
|
|
772
652
|
]).first();
|
|
773
|
-
|
|
774
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
775
|
-
expiresAtMs: row?.expires_at_ms
|
|
776
|
-
});
|
|
777
|
-
if (parsed) return cloneRecord(parsed);
|
|
778
|
-
const malformedId = normalizeOptionalTrimmedString(row?.challenge_id);
|
|
779
|
-
if (malformedId) await this.del(malformedId);
|
|
780
|
-
return null;
|
|
653
|
+
return this.recordOrDiscard(row, row?.challenge_id);
|
|
781
654
|
}
|
|
782
655
|
async findActiveByContext(input) {
|
|
783
656
|
await this.ensureSchema();
|
|
784
|
-
const row = await this.
|
|
657
|
+
const row = await this.prepare(`SELECT record_json, expires_at_ms, challenge_id
|
|
785
658
|
FROM email_otp_challenges
|
|
786
|
-
|
|
787
|
-
AND org_id = ?
|
|
788
|
-
AND project_id = ?
|
|
789
|
-
AND env_id = ?
|
|
790
|
-
AND expires_at_ms > ?
|
|
791
|
-
AND challenge_subject_id = ?
|
|
792
|
-
AND wallet_id = ?
|
|
793
|
-
AND record_org_id = ?
|
|
794
|
-
AND otp_channel = ?
|
|
795
|
-
AND owner_proof_binding_digest = ?
|
|
796
|
-
AND action = ?
|
|
797
|
-
AND operation = ?
|
|
659
|
+
${ACTIVE_CHALLENGE_CONTEXT_SQL}
|
|
798
660
|
AND otp_code = ?
|
|
799
661
|
ORDER BY expires_at_ms DESC
|
|
800
|
-
LIMIT 1`, [
|
|
801
|
-
|
|
802
|
-
input.challengeSubjectId,
|
|
803
|
-
input.walletId,
|
|
804
|
-
String(input.orgId || ""),
|
|
805
|
-
input.otpChannel,
|
|
806
|
-
input.ownerProofBindingDigest,
|
|
807
|
-
input.action,
|
|
808
|
-
input.operation,
|
|
809
|
-
input.otpCode
|
|
810
|
-
]).first();
|
|
811
|
-
const parsed = parseCurrentEmailOtpChallengeRow({
|
|
812
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
813
|
-
expiresAtMs: row?.expires_at_ms
|
|
814
|
-
});
|
|
815
|
-
if (parsed) return cloneRecord(parsed);
|
|
816
|
-
const malformedId = normalizeOptionalTrimmedString(row?.challenge_id);
|
|
817
|
-
if (malformedId) await this.del(malformedId);
|
|
818
|
-
return null;
|
|
662
|
+
LIMIT 1`, [...challengeContextValues(input), input.otpCode]).first();
|
|
663
|
+
return this.recordOrDiscard(row, row?.challenge_id);
|
|
819
664
|
}
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
const id = normalizeOptionalTrimmedString(challengeId);
|
|
823
|
-
if (!id) return;
|
|
824
|
-
await this.bindScope(`DELETE FROM email_otp_challenges
|
|
825
|
-
WHERE namespace = ?
|
|
826
|
-
AND org_id = ?
|
|
827
|
-
AND project_id = ?
|
|
828
|
-
AND env_id = ?
|
|
829
|
-
AND challenge_id = ?`, [id]).run();
|
|
665
|
+
del(challengeId) {
|
|
666
|
+
return this.deleteById(challengeId, emailOtpChallengeRows.delete);
|
|
830
667
|
}
|
|
831
668
|
};
|
|
832
|
-
var D1EmailOtpGrantStore = class extends
|
|
833
|
-
constructor(
|
|
834
|
-
super(
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
async put(record) {
|
|
838
|
-
await this.ensureSchema();
|
|
839
|
-
const parsed = parseCurrentEmailOtpGrantRecord(record);
|
|
840
|
-
if (!parsed) throw new Error("Invalid Email OTP grant record");
|
|
841
|
-
assertD1EmailOtpOrgScope({
|
|
842
|
-
recordOrgId: parsed.orgId,
|
|
843
|
-
scope: this.scope,
|
|
844
|
-
label: "Email OTP grant"
|
|
669
|
+
var D1EmailOtpGrantStore = class extends D1EmailOtpStore {
|
|
670
|
+
constructor(database, scope) {
|
|
671
|
+
super(database, scope, GRANT_RECORD, {
|
|
672
|
+
fromRow: grantFromRow,
|
|
673
|
+
upsert: emailOtpGrantRows.upsert
|
|
845
674
|
});
|
|
846
|
-
await this.bindScope(`INSERT INTO email_otp_grants (
|
|
847
|
-
namespace,
|
|
848
|
-
org_id,
|
|
849
|
-
project_id,
|
|
850
|
-
env_id,
|
|
851
|
-
grant_token,
|
|
852
|
-
user_id,
|
|
853
|
-
wallet_id,
|
|
854
|
-
record_org_id,
|
|
855
|
-
challenge_id,
|
|
856
|
-
action,
|
|
857
|
-
record_json,
|
|
858
|
-
issued_at_ms,
|
|
859
|
-
expires_at_ms
|
|
860
|
-
)
|
|
861
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
862
|
-
ON CONFLICT (namespace, org_id, project_id, env_id, grant_token)
|
|
863
|
-
DO UPDATE SET
|
|
864
|
-
user_id = EXCLUDED.user_id,
|
|
865
|
-
wallet_id = EXCLUDED.wallet_id,
|
|
866
|
-
record_org_id = EXCLUDED.record_org_id,
|
|
867
|
-
challenge_id = EXCLUDED.challenge_id,
|
|
868
|
-
action = EXCLUDED.action,
|
|
869
|
-
record_json = EXCLUDED.record_json,
|
|
870
|
-
issued_at_ms = EXCLUDED.issued_at_ms,
|
|
871
|
-
expires_at_ms = EXCLUDED.expires_at_ms`, [
|
|
872
|
-
parsed.grantToken,
|
|
873
|
-
parsed.userId,
|
|
874
|
-
parsed.walletId,
|
|
875
|
-
parsed.orgId || "",
|
|
876
|
-
parsed.challengeId,
|
|
877
|
-
parsed.action,
|
|
878
|
-
JSON.stringify(parsed),
|
|
879
|
-
parsed.issuedAtMs,
|
|
880
|
-
parsed.expiresAtMs
|
|
881
|
-
]).run();
|
|
882
675
|
}
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
const token = normalizeOptionalTrimmedString(grantToken);
|
|
886
|
-
if (!token) return null;
|
|
887
|
-
const row = await this.bindScope(`SELECT record_json, expires_at_ms
|
|
888
|
-
FROM email_otp_grants
|
|
889
|
-
WHERE namespace = ?
|
|
890
|
-
AND org_id = ?
|
|
891
|
-
AND project_id = ?
|
|
892
|
-
AND env_id = ?
|
|
893
|
-
AND grant_token = ?
|
|
894
|
-
LIMIT 1`, [token]).first();
|
|
895
|
-
const parsed = parseCurrentEmailOtpGrantRow({
|
|
896
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
897
|
-
expiresAtMs: row?.expires_at_ms
|
|
898
|
-
});
|
|
899
|
-
if (!row) return null;
|
|
900
|
-
if (!parsed) {
|
|
901
|
-
await this.del(token);
|
|
902
|
-
return null;
|
|
903
|
-
}
|
|
904
|
-
return cloneRecord(parsed);
|
|
676
|
+
get(grantToken) {
|
|
677
|
+
return this.getById(grantToken, emailOtpGrantRows.select);
|
|
905
678
|
}
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
const token = normalizeOptionalTrimmedString(grantToken);
|
|
909
|
-
if (!token) return null;
|
|
910
|
-
const row = await this.bindScope(`DELETE FROM email_otp_grants
|
|
911
|
-
WHERE namespace = ?
|
|
912
|
-
AND org_id = ?
|
|
913
|
-
AND project_id = ?
|
|
914
|
-
AND env_id = ?
|
|
915
|
-
AND grant_token = ?
|
|
916
|
-
RETURNING record_json, expires_at_ms`, [token]).first();
|
|
917
|
-
const parsed = parseCurrentEmailOtpGrantRow({
|
|
918
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
919
|
-
expiresAtMs: row?.expires_at_ms
|
|
920
|
-
});
|
|
921
|
-
return parsed ? cloneRecord(parsed) : null;
|
|
679
|
+
consume(grantToken) {
|
|
680
|
+
return this.consumeById(grantToken, emailOtpGrantRows.consume);
|
|
922
681
|
}
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
const token = normalizeOptionalTrimmedString(grantToken);
|
|
926
|
-
if (!token) return;
|
|
927
|
-
await this.bindScope(`DELETE FROM email_otp_grants
|
|
928
|
-
WHERE namespace = ?
|
|
929
|
-
AND org_id = ?
|
|
930
|
-
AND project_id = ?
|
|
931
|
-
AND env_id = ?
|
|
932
|
-
AND grant_token = ?`, [token]).run();
|
|
682
|
+
del(grantToken) {
|
|
683
|
+
return this.deleteById(grantToken, emailOtpGrantRows.delete);
|
|
933
684
|
}
|
|
934
685
|
};
|
|
935
|
-
var D1EmailOtpWalletEnrollmentStore = class extends
|
|
936
|
-
constructor(
|
|
937
|
-
super(
|
|
938
|
-
|
|
686
|
+
var D1EmailOtpWalletEnrollmentStore = class extends D1EmailOtpStore {
|
|
687
|
+
constructor(database, scope) {
|
|
688
|
+
super(database, scope, WALLET_ENROLLMENT_RECORD, {
|
|
689
|
+
fromRow: walletEnrollmentFromRow,
|
|
690
|
+
upsert: emailOtpWalletEnrollmentRows.upsert
|
|
691
|
+
});
|
|
939
692
|
}
|
|
940
693
|
async get(walletId) {
|
|
941
694
|
await this.ensureSchema();
|
|
942
695
|
const key = normalizeOptionalTrimmedString(walletId);
|
|
943
696
|
if (!key) return null;
|
|
944
|
-
const row = await this.
|
|
697
|
+
const row = await this.prepare(`SELECT record_json, updated_at_ms, wallet_id
|
|
945
698
|
FROM email_otp_wallet_enrollments
|
|
946
699
|
WHERE namespace = ?
|
|
947
700
|
AND org_id = ?
|
|
@@ -949,23 +702,14 @@ var D1EmailOtpWalletEnrollmentStore = class extends D1EmailOtpStoreBase {
|
|
|
949
702
|
AND env_id = ?
|
|
950
703
|
AND wallet_id = ?
|
|
951
704
|
LIMIT 1`, [key]).first();
|
|
952
|
-
|
|
953
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
954
|
-
updatedAtMs: row?.updated_at_ms
|
|
955
|
-
});
|
|
956
|
-
if (!row) return null;
|
|
957
|
-
if (!parsed) {
|
|
958
|
-
await this.del(key);
|
|
959
|
-
return null;
|
|
960
|
-
}
|
|
961
|
-
return cloneRecord(parsed);
|
|
705
|
+
return row ? this.recordOrDiscard(row, key) : null;
|
|
962
706
|
}
|
|
963
707
|
async getByProviderUserId(input) {
|
|
964
708
|
await this.ensureSchema();
|
|
965
709
|
const providerUserId = normalizeOptionalTrimmedString(input.providerUserId);
|
|
966
710
|
const orgId = normalizeOptionalTrimmedString(input.orgId);
|
|
967
711
|
if (!providerUserId || !orgId) return null;
|
|
968
|
-
const row = await this.
|
|
712
|
+
const row = await this.prepare(`SELECT record_json, updated_at_ms, wallet_id
|
|
969
713
|
FROM email_otp_wallet_enrollments
|
|
970
714
|
WHERE namespace = ?
|
|
971
715
|
AND org_id = ?
|
|
@@ -975,137 +719,27 @@ var D1EmailOtpWalletEnrollmentStore = class extends D1EmailOtpStoreBase {
|
|
|
975
719
|
AND provider_user_id = ?
|
|
976
720
|
ORDER BY updated_at_ms DESC
|
|
977
721
|
LIMIT 1`, [orgId, providerUserId]).first();
|
|
978
|
-
|
|
979
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
980
|
-
updatedAtMs: row?.updated_at_ms
|
|
981
|
-
});
|
|
982
|
-
if (parsed) return cloneRecord(parsed);
|
|
983
|
-
const malformedWalletId = normalizeOptionalTrimmedString(row?.wallet_id);
|
|
984
|
-
if (malformedWalletId) await this.del(malformedWalletId);
|
|
985
|
-
return null;
|
|
722
|
+
return this.recordOrDiscard(row, row?.wallet_id);
|
|
986
723
|
}
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
const parsed = parseCurrentEmailOtpWalletEnrollmentRecord(record);
|
|
990
|
-
if (!parsed) throw new Error("Invalid Email OTP wallet enrollment record");
|
|
991
|
-
assertD1EmailOtpOrgScope({
|
|
992
|
-
recordOrgId: parsed.orgId,
|
|
993
|
-
scope: this.scope,
|
|
994
|
-
label: "Email OTP wallet enrollment"
|
|
995
|
-
});
|
|
996
|
-
await this.bindScope(`INSERT INTO email_otp_wallet_enrollments (
|
|
997
|
-
namespace,
|
|
998
|
-
org_id,
|
|
999
|
-
project_id,
|
|
1000
|
-
env_id,
|
|
1001
|
-
wallet_id,
|
|
1002
|
-
provider_user_id,
|
|
1003
|
-
record_org_id,
|
|
1004
|
-
verified_email,
|
|
1005
|
-
record_json,
|
|
1006
|
-
created_at_ms,
|
|
1007
|
-
updated_at_ms
|
|
1008
|
-
)
|
|
1009
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1010
|
-
ON CONFLICT (namespace, org_id, project_id, env_id, wallet_id)
|
|
1011
|
-
DO UPDATE SET
|
|
1012
|
-
provider_user_id = EXCLUDED.provider_user_id,
|
|
1013
|
-
record_org_id = EXCLUDED.record_org_id,
|
|
1014
|
-
verified_email = EXCLUDED.verified_email,
|
|
1015
|
-
record_json = EXCLUDED.record_json,
|
|
1016
|
-
created_at_ms = EXCLUDED.created_at_ms,
|
|
1017
|
-
updated_at_ms = EXCLUDED.updated_at_ms`, [
|
|
1018
|
-
parsed.walletId,
|
|
1019
|
-
parsed.providerUserId,
|
|
1020
|
-
parsed.orgId,
|
|
1021
|
-
parsed.verifiedEmail,
|
|
1022
|
-
JSON.stringify(parsed),
|
|
1023
|
-
parsed.createdAtMs,
|
|
1024
|
-
parsed.updatedAtMs
|
|
1025
|
-
]).run();
|
|
1026
|
-
}
|
|
1027
|
-
async del(walletId) {
|
|
1028
|
-
await this.ensureSchema();
|
|
1029
|
-
const key = normalizeOptionalTrimmedString(walletId);
|
|
1030
|
-
if (!key) return;
|
|
1031
|
-
await this.bindScope(`DELETE FROM email_otp_wallet_enrollments
|
|
1032
|
-
WHERE namespace = ?
|
|
1033
|
-
AND org_id = ?
|
|
1034
|
-
AND project_id = ?
|
|
1035
|
-
AND env_id = ?
|
|
1036
|
-
AND wallet_id = ?`, [key]).run();
|
|
724
|
+
del(walletId) {
|
|
725
|
+
return this.deleteById(walletId, emailOtpWalletEnrollmentRows.delete);
|
|
1037
726
|
}
|
|
1038
727
|
};
|
|
1039
|
-
var D1EmailOtpAuthStateStore = class extends
|
|
1040
|
-
constructor(
|
|
1041
|
-
super(
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
async get(walletId) {
|
|
1045
|
-
await this.ensureSchema();
|
|
1046
|
-
const key = normalizeOptionalTrimmedString(walletId);
|
|
1047
|
-
if (!key) return null;
|
|
1048
|
-
const row = await this.bindScope(`SELECT record_json, updated_at_ms
|
|
1049
|
-
FROM email_otp_auth_states
|
|
1050
|
-
WHERE namespace = ?
|
|
1051
|
-
AND org_id = ?
|
|
1052
|
-
AND project_id = ?
|
|
1053
|
-
AND env_id = ?
|
|
1054
|
-
AND wallet_id = ?
|
|
1055
|
-
LIMIT 1`, [key]).first();
|
|
1056
|
-
const parsed = parseCurrentEmailOtpAuthStateRow({
|
|
1057
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
1058
|
-
updatedAtMs: row?.updated_at_ms
|
|
728
|
+
var D1EmailOtpAuthStateStore = class extends D1EmailOtpStore {
|
|
729
|
+
constructor(database, scope) {
|
|
730
|
+
super(database, scope, AUTH_STATE_RECORD, {
|
|
731
|
+
fromRow: authStateFromRow,
|
|
732
|
+
upsert: emailOtpAuthStateRows.upsert
|
|
1059
733
|
});
|
|
1060
|
-
if (!row) return null;
|
|
1061
|
-
if (!parsed) {
|
|
1062
|
-
await this.del(key);
|
|
1063
|
-
return null;
|
|
1064
|
-
}
|
|
1065
|
-
return cloneRecord(parsed);
|
|
1066
734
|
}
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
const parsed = parseCurrentEmailOtpAuthStateRecord(record);
|
|
1070
|
-
if (!parsed) throw new Error("Invalid Email OTP auth state record");
|
|
1071
|
-
assertD1EmailOtpOrgScope({
|
|
1072
|
-
recordOrgId: parsed.orgId,
|
|
1073
|
-
scope: this.scope,
|
|
1074
|
-
label: "Email OTP auth state"
|
|
1075
|
-
});
|
|
1076
|
-
await this.bindScope(`INSERT INTO email_otp_auth_states (
|
|
1077
|
-
namespace,
|
|
1078
|
-
org_id,
|
|
1079
|
-
project_id,
|
|
1080
|
-
env_id,
|
|
1081
|
-
wallet_id,
|
|
1082
|
-
provider_user_id,
|
|
1083
|
-
record_org_id,
|
|
1084
|
-
record_json,
|
|
1085
|
-
created_at_ms,
|
|
1086
|
-
updated_at_ms
|
|
1087
|
-
)
|
|
1088
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1089
|
-
ON CONFLICT (namespace, org_id, project_id, env_id, wallet_id)
|
|
1090
|
-
DO UPDATE SET
|
|
1091
|
-
provider_user_id = EXCLUDED.provider_user_id,
|
|
1092
|
-
record_org_id = EXCLUDED.record_org_id,
|
|
1093
|
-
record_json = EXCLUDED.record_json,
|
|
1094
|
-
created_at_ms = EXCLUDED.created_at_ms,
|
|
1095
|
-
updated_at_ms = EXCLUDED.updated_at_ms`, [
|
|
1096
|
-
parsed.walletId,
|
|
1097
|
-
parsed.providerUserId,
|
|
1098
|
-
parsed.orgId,
|
|
1099
|
-
JSON.stringify(parsed),
|
|
1100
|
-
parsed.createdAtMs,
|
|
1101
|
-
parsed.updatedAtMs
|
|
1102
|
-
]).run();
|
|
735
|
+
get(walletId) {
|
|
736
|
+
return this.getById(walletId, emailOtpAuthStateRows.select);
|
|
1103
737
|
}
|
|
1104
738
|
async del(walletId) {
|
|
1105
739
|
await this.ensureSchema();
|
|
1106
740
|
const key = normalizeOptionalTrimmedString(walletId);
|
|
1107
741
|
if (!key) return;
|
|
1108
|
-
await this.
|
|
742
|
+
await this.prepare(`DELETE FROM email_otp_auth_states
|
|
1109
743
|
WHERE namespace = ?
|
|
1110
744
|
AND org_id = ?
|
|
1111
745
|
AND project_id = ?
|
|
@@ -1113,73 +747,21 @@ var D1EmailOtpAuthStateStore = class extends D1EmailOtpStoreBase {
|
|
|
1113
747
|
AND wallet_id = ?`, [key]).run();
|
|
1114
748
|
}
|
|
1115
749
|
};
|
|
1116
|
-
var D1EmailOtpUnlockChallengeStore = class extends
|
|
1117
|
-
constructor(
|
|
1118
|
-
super(
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
async put(record) {
|
|
1122
|
-
await this.ensureSchema();
|
|
1123
|
-
const parsed = parseCurrentEmailOtpUnlockChallengeRecord(record);
|
|
1124
|
-
if (!parsed) throw new Error("Invalid Email OTP unlock challenge record");
|
|
1125
|
-
assertD1EmailOtpOrgScope({
|
|
1126
|
-
recordOrgId: parsed.orgId,
|
|
1127
|
-
scope: this.scope,
|
|
1128
|
-
label: "Email OTP unlock challenge"
|
|
750
|
+
var D1EmailOtpUnlockChallengeStore = class extends D1EmailOtpStore {
|
|
751
|
+
constructor(database, scope) {
|
|
752
|
+
super(database, scope, UNLOCK_CHALLENGE_RECORD, {
|
|
753
|
+
fromRow: unlockChallengeFromRow,
|
|
754
|
+
upsert: emailOtpUnlockChallengeRows.upsert
|
|
1129
755
|
});
|
|
1130
|
-
await this.bindScope(`INSERT INTO email_otp_unlock_challenges (
|
|
1131
|
-
namespace,
|
|
1132
|
-
org_id,
|
|
1133
|
-
project_id,
|
|
1134
|
-
env_id,
|
|
1135
|
-
challenge_id,
|
|
1136
|
-
wallet_id,
|
|
1137
|
-
user_id,
|
|
1138
|
-
record_org_id,
|
|
1139
|
-
record_json,
|
|
1140
|
-
created_at_ms,
|
|
1141
|
-
expires_at_ms
|
|
1142
|
-
)
|
|
1143
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1144
|
-
ON CONFLICT (namespace, org_id, project_id, env_id, challenge_id)
|
|
1145
|
-
DO UPDATE SET
|
|
1146
|
-
wallet_id = EXCLUDED.wallet_id,
|
|
1147
|
-
user_id = EXCLUDED.user_id,
|
|
1148
|
-
record_org_id = EXCLUDED.record_org_id,
|
|
1149
|
-
record_json = EXCLUDED.record_json,
|
|
1150
|
-
created_at_ms = EXCLUDED.created_at_ms,
|
|
1151
|
-
expires_at_ms = EXCLUDED.expires_at_ms`, [
|
|
1152
|
-
parsed.challengeId,
|
|
1153
|
-
parsed.walletId,
|
|
1154
|
-
parsed.userId,
|
|
1155
|
-
parsed.orgId || "",
|
|
1156
|
-
JSON.stringify(parsed),
|
|
1157
|
-
parsed.createdAtMs,
|
|
1158
|
-
parsed.expiresAtMs
|
|
1159
|
-
]).run();
|
|
1160
756
|
}
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
const id = normalizeOptionalTrimmedString(challengeId);
|
|
1164
|
-
if (!id) return null;
|
|
1165
|
-
const row = await this.bindScope(`DELETE FROM email_otp_unlock_challenges
|
|
1166
|
-
WHERE namespace = ?
|
|
1167
|
-
AND org_id = ?
|
|
1168
|
-
AND project_id = ?
|
|
1169
|
-
AND env_id = ?
|
|
1170
|
-
AND challenge_id = ?
|
|
1171
|
-
RETURNING record_json, expires_at_ms`, [id]).first();
|
|
1172
|
-
const parsed = parseCurrentEmailOtpUnlockChallengeRow({
|
|
1173
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
1174
|
-
expiresAtMs: row?.expires_at_ms
|
|
1175
|
-
});
|
|
1176
|
-
return parsed ? cloneRecord(parsed) : null;
|
|
757
|
+
consume(challengeId) {
|
|
758
|
+
return this.consumeById(challengeId, emailOtpUnlockChallengeRows.consume);
|
|
1177
759
|
}
|
|
1178
760
|
async del(challengeId) {
|
|
1179
761
|
await this.ensureSchema();
|
|
1180
762
|
const id = normalizeOptionalTrimmedString(challengeId);
|
|
1181
763
|
if (!id) return;
|
|
1182
|
-
await this.
|
|
764
|
+
await this.prepare(`DELETE FROM email_otp_unlock_challenges
|
|
1183
765
|
WHERE namespace = ?
|
|
1184
766
|
AND org_id = ?
|
|
1185
767
|
AND project_id = ?
|
|
@@ -1187,158 +769,31 @@ var D1EmailOtpUnlockChallengeStore = class extends D1EmailOtpStoreBase {
|
|
|
1187
769
|
AND challenge_id = ?`, [id]).run();
|
|
1188
770
|
}
|
|
1189
771
|
};
|
|
1190
|
-
var D1EmailOtpRegistrationAttemptStore = class extends
|
|
1191
|
-
constructor(
|
|
1192
|
-
super(
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
async put(record) {
|
|
1196
|
-
await this.ensureSchema();
|
|
1197
|
-
const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRecord(record);
|
|
1198
|
-
if (!parsed) throw new Error("Invalid Google Email OTP registration attempt record");
|
|
1199
|
-
assertD1EmailOtpOrgScope({
|
|
1200
|
-
recordOrgId: parsed.runtimePolicyScope?.orgId,
|
|
1201
|
-
scope: this.scope,
|
|
1202
|
-
label: "Google Email OTP registration attempt"
|
|
772
|
+
var D1EmailOtpRegistrationAttemptStore = class extends D1EmailOtpStore {
|
|
773
|
+
constructor(database, scope) {
|
|
774
|
+
super(database, scope, REGISTRATION_ATTEMPT_RECORD, {
|
|
775
|
+
fromRow: registrationAttemptFromRow,
|
|
776
|
+
upsert: emailOtpRegistrationAttemptRows.upsert
|
|
1203
777
|
});
|
|
1204
|
-
await this.bindScope(`INSERT INTO email_otp_registration_attempts (
|
|
1205
|
-
namespace,
|
|
1206
|
-
org_id,
|
|
1207
|
-
project_id,
|
|
1208
|
-
env_id,
|
|
1209
|
-
attempt_id,
|
|
1210
|
-
provider_subject,
|
|
1211
|
-
email,
|
|
1212
|
-
wallet_id,
|
|
1213
|
-
state,
|
|
1214
|
-
owner_proof_binding_digest,
|
|
1215
|
-
runtime_org_id,
|
|
1216
|
-
runtime_policy_key,
|
|
1217
|
-
offer_wallet_ids_json,
|
|
1218
|
-
record_json,
|
|
1219
|
-
created_at_ms,
|
|
1220
|
-
updated_at_ms,
|
|
1221
|
-
expires_at_ms
|
|
1222
|
-
)
|
|
1223
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1224
|
-
ON CONFLICT (namespace, org_id, project_id, env_id, attempt_id)
|
|
1225
|
-
DO UPDATE SET
|
|
1226
|
-
provider_subject = EXCLUDED.provider_subject,
|
|
1227
|
-
email = EXCLUDED.email,
|
|
1228
|
-
wallet_id = EXCLUDED.wallet_id,
|
|
1229
|
-
state = EXCLUDED.state,
|
|
1230
|
-
owner_proof_binding_digest = EXCLUDED.owner_proof_binding_digest,
|
|
1231
|
-
runtime_org_id = EXCLUDED.runtime_org_id,
|
|
1232
|
-
runtime_policy_key = EXCLUDED.runtime_policy_key,
|
|
1233
|
-
offer_wallet_ids_json = EXCLUDED.offer_wallet_ids_json,
|
|
1234
|
-
record_json = EXCLUDED.record_json,
|
|
1235
|
-
created_at_ms = EXCLUDED.created_at_ms,
|
|
1236
|
-
updated_at_ms = EXCLUDED.updated_at_ms,
|
|
1237
|
-
expires_at_ms = EXCLUDED.expires_at_ms`, [
|
|
1238
|
-
parsed.attemptId,
|
|
1239
|
-
parsed.providerSubject,
|
|
1240
|
-
parsed.email,
|
|
1241
|
-
parsed.walletId,
|
|
1242
|
-
parsed.state,
|
|
1243
|
-
parsed.ownerProofBindingDigest,
|
|
1244
|
-
parsed.runtimePolicyScope?.orgId || "",
|
|
1245
|
-
runtimePolicyScopeKey(parsed.runtimePolicyScope),
|
|
1246
|
-
JSON.stringify(parsed.offerCandidates.map((candidate) => candidate.walletId)),
|
|
1247
|
-
JSON.stringify(parsed),
|
|
1248
|
-
parsed.createdAtMs,
|
|
1249
|
-
parsed.updatedAtMs,
|
|
1250
|
-
parsed.expiresAtMs
|
|
1251
|
-
]).run();
|
|
1252
778
|
}
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
const id = normalizeOptionalTrimmedString(attemptId);
|
|
1256
|
-
if (!id) return null;
|
|
1257
|
-
const row = await this.bindScope(`SELECT record_json, expires_at_ms, updated_at_ms, attempt_id
|
|
1258
|
-
FROM email_otp_registration_attempts
|
|
1259
|
-
WHERE namespace = ?
|
|
1260
|
-
AND org_id = ?
|
|
1261
|
-
AND project_id = ?
|
|
1262
|
-
AND env_id = ?
|
|
1263
|
-
AND attempt_id = ?
|
|
1264
|
-
LIMIT 1`, [id]).first();
|
|
1265
|
-
const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRow({
|
|
1266
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
1267
|
-
expiresAtMs: row?.expires_at_ms,
|
|
1268
|
-
updatedAtMs: row?.updated_at_ms
|
|
1269
|
-
});
|
|
1270
|
-
if (!row) return null;
|
|
1271
|
-
if (!parsed) {
|
|
1272
|
-
await this.deleteAttempt(id);
|
|
1273
|
-
return null;
|
|
1274
|
-
}
|
|
1275
|
-
return cloneRecord(parsed);
|
|
779
|
+
get(attemptId) {
|
|
780
|
+
return this.getById(attemptId, emailOtpRegistrationAttemptRows.select);
|
|
1276
781
|
}
|
|
1277
782
|
async findStartedBySubjectEmail(input) {
|
|
1278
783
|
await this.ensureSchema();
|
|
1279
|
-
const row = await this.
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
AND org_id = ?
|
|
1283
|
-
AND project_id = ?
|
|
1284
|
-
AND env_id = ?
|
|
1285
|
-
AND provider_subject = ?
|
|
1286
|
-
AND email = ?
|
|
1287
|
-
AND state IN ('started', 'key_finalized')
|
|
1288
|
-
AND expires_at_ms > ?
|
|
1289
|
-
AND owner_proof_binding_digest = ?
|
|
1290
|
-
AND runtime_org_id = ?
|
|
1291
|
-
AND runtime_policy_key = ?
|
|
1292
|
-
ORDER BY updated_at_ms DESC
|
|
1293
|
-
LIMIT 1`, [
|
|
1294
|
-
input.providerSubject,
|
|
1295
|
-
input.email,
|
|
1296
|
-
input.nowMs,
|
|
1297
|
-
input.ownerProofBindingDigest,
|
|
1298
|
-
input.orgId,
|
|
1299
|
-
runtimePolicyScopeKey(input.runtimePolicyScope)
|
|
1300
|
-
]).first();
|
|
1301
|
-
const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRow({
|
|
1302
|
-
recordJson: parseJsonRecord(row?.record_json),
|
|
1303
|
-
expiresAtMs: row?.expires_at_ms,
|
|
1304
|
-
updatedAtMs: row?.updated_at_ms
|
|
1305
|
-
});
|
|
1306
|
-
if (parsed && registrationAttemptMatchesStartedScope(parsed, input)) return cloneRecord(parsed);
|
|
1307
|
-
const malformedAttemptId = normalizeOptionalTrimmedString(row?.attempt_id);
|
|
1308
|
-
if (row && !parsed && malformedAttemptId) await this.deleteAttempt(malformedAttemptId);
|
|
1309
|
-
return null;
|
|
784
|
+
const row = await emailOtpRegistrationAttemptRows.selectStarted(this.prepare, input).first();
|
|
785
|
+
const record = await this.recordOrDiscard(row, row?.attempt_id);
|
|
786
|
+
return record && registrationAttemptMatchesStartedScope(record, input) ? record : null;
|
|
1310
787
|
}
|
|
1311
788
|
async abandonStartedBySubjectEmailExceptBinding(input) {
|
|
1312
789
|
await this.ensureSchema();
|
|
1313
|
-
const result = await this.
|
|
1314
|
-
FROM email_otp_registration_attempts
|
|
1315
|
-
WHERE namespace = ?
|
|
1316
|
-
AND org_id = ?
|
|
1317
|
-
AND project_id = ?
|
|
1318
|
-
AND env_id = ?
|
|
1319
|
-
AND provider_subject = ?
|
|
1320
|
-
AND email = ?
|
|
1321
|
-
AND state IN ('started', 'key_finalized')
|
|
1322
|
-
AND expires_at_ms > ?`, [
|
|
1323
|
-
input.providerSubject,
|
|
1324
|
-
input.email,
|
|
1325
|
-
input.nowMs
|
|
1326
|
-
]).all();
|
|
790
|
+
const result = await emailOtpRegistrationAttemptRows.selectPending(this.prepare, input).all();
|
|
1327
791
|
let abandoned = 0;
|
|
1328
792
|
for (const row of result.results || []) {
|
|
1329
|
-
const
|
|
1330
|
-
|
|
1331
|
-
expiresAtMs: row.expires_at_ms,
|
|
1332
|
-
updatedAtMs: row.updated_at_ms
|
|
1333
|
-
});
|
|
1334
|
-
if (!parsed) {
|
|
1335
|
-
const attemptId = normalizeOptionalTrimmedString(row.attempt_id);
|
|
1336
|
-
if (attemptId) await this.deleteAttempt(attemptId);
|
|
1337
|
-
continue;
|
|
1338
|
-
}
|
|
1339
|
-
if (!registrationAttemptMatchesReplacementScope(parsed, input)) continue;
|
|
793
|
+
const record = await this.recordOrDiscard(row, row.attempt_id);
|
|
794
|
+
if (!record || !registrationAttemptMatchesReplacementScope(record, input)) continue;
|
|
1340
795
|
await this.put({
|
|
1341
|
-
...
|
|
796
|
+
...record,
|
|
1342
797
|
state: "abandoned",
|
|
1343
798
|
failureCode: input.failureCode,
|
|
1344
799
|
updatedAtMs: input.nowMs
|
|
@@ -1351,110 +806,54 @@ var D1EmailOtpRegistrationAttemptStore = class extends D1EmailOtpStoreBase {
|
|
|
1351
806
|
await this.ensureSchema();
|
|
1352
807
|
const walletId = normalizeOptionalTrimmedString(input.walletId);
|
|
1353
808
|
if (!walletId) return false;
|
|
1354
|
-
const row = await this.
|
|
1355
|
-
FROM email_otp_registration_attempts
|
|
1356
|
-
WHERE namespace = ?
|
|
1357
|
-
AND org_id = ?
|
|
1358
|
-
AND project_id = ?
|
|
1359
|
-
AND env_id = ?
|
|
1360
|
-
AND state IN ('started', 'key_finalized')
|
|
1361
|
-
AND expires_at_ms > ?
|
|
1362
|
-
AND (
|
|
1363
|
-
wallet_id = ?
|
|
1364
|
-
OR EXISTS (
|
|
1365
|
-
SELECT 1
|
|
1366
|
-
FROM json_each(offer_wallet_ids_json)
|
|
1367
|
-
WHERE value = ?
|
|
1368
|
-
)
|
|
1369
|
-
)
|
|
1370
|
-
LIMIT 1`, [
|
|
1371
|
-
input.nowMs,
|
|
1372
|
-
walletId,
|
|
1373
|
-
walletId
|
|
1374
|
-
]).first();
|
|
809
|
+
const row = await emailOtpRegistrationAttemptRows.selectLiveForWallet(this.prepare, walletId, input.nowMs).first();
|
|
1375
810
|
return Boolean(row);
|
|
1376
811
|
}
|
|
1377
812
|
async deleteExpired(nowMs) {
|
|
1378
813
|
await this.ensureSchema();
|
|
1379
|
-
return d1ChangedRows(await this.
|
|
1380
|
-
WHERE namespace = ?
|
|
1381
|
-
AND org_id = ?
|
|
1382
|
-
AND project_id = ?
|
|
1383
|
-
AND env_id = ?
|
|
1384
|
-
AND (expires_at_ms <= ? OR state = 'expired')`, [nowMs]).run());
|
|
814
|
+
return d1ChangedRows(await emailOtpRegistrationAttemptRows.deleteExpired(this.prepare, nowMs).run());
|
|
1385
815
|
}
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
if (!id) return;
|
|
1389
|
-
await this.bindScope(`DELETE FROM email_otp_registration_attempts
|
|
1390
|
-
WHERE namespace = ?
|
|
1391
|
-
AND org_id = ?
|
|
1392
|
-
AND project_id = ?
|
|
1393
|
-
AND env_id = ?
|
|
1394
|
-
AND attempt_id = ?`, [id]).run();
|
|
816
|
+
del(attemptId) {
|
|
817
|
+
return this.deleteById(attemptId, emailOtpRegistrationAttemptRows.delete);
|
|
1395
818
|
}
|
|
1396
819
|
};
|
|
1397
820
|
function createEmailOtpChallengeStore(input) {
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
}
|
|
1403
|
-
assertEmailOtpStoreKindKnown(input, "challenge");
|
|
1404
|
-
input?.logger?.info("[email-otp] Using in-memory challenge store (non-persistent)");
|
|
1405
|
-
return new InMemoryEmailOtpChallengeStore();
|
|
821
|
+
return createEmailOtpStore(input, "challenge", {
|
|
822
|
+
d1: (database, scope) => new D1EmailOtpChallengeStore(database, scope),
|
|
823
|
+
inMemory: () => new InMemoryEmailOtpChallengeStore()
|
|
824
|
+
});
|
|
1406
825
|
}
|
|
1407
826
|
function createEmailOtpGrantStore(input) {
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
}
|
|
1413
|
-
assertEmailOtpStoreKindKnown(input, "grant");
|
|
1414
|
-
input?.logger?.info("[email-otp] Using in-memory grant store (non-persistent)");
|
|
1415
|
-
return new InMemoryEmailOtpGrantStore();
|
|
827
|
+
return createEmailOtpStore(input, "grant", {
|
|
828
|
+
d1: (database, scope) => new D1EmailOtpGrantStore(database, scope),
|
|
829
|
+
inMemory: () => new InMemoryEmailOtpStore(GRANT_RECORD)
|
|
830
|
+
});
|
|
1416
831
|
}
|
|
1417
832
|
function createEmailOtpWalletEnrollmentStore(input) {
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
}
|
|
1423
|
-
assertEmailOtpStoreKindKnown(input, "enrollment");
|
|
1424
|
-
input?.logger?.info("[email-otp] Using in-memory wallet enrollment store (non-persistent)");
|
|
1425
|
-
return new InMemoryEmailOtpWalletEnrollmentStore();
|
|
833
|
+
return createEmailOtpStore(input, "wallet enrollment", {
|
|
834
|
+
d1: (database, scope) => new D1EmailOtpWalletEnrollmentStore(database, scope),
|
|
835
|
+
inMemory: () => new InMemoryEmailOtpWalletEnrollmentStore()
|
|
836
|
+
}, "enrollment");
|
|
1426
837
|
}
|
|
1427
838
|
function createEmailOtpAuthStateStore(input) {
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
}
|
|
1433
|
-
assertEmailOtpStoreKindKnown(input, "auth state");
|
|
1434
|
-
input?.logger?.info("[email-otp] Using in-memory auth state store (non-persistent)");
|
|
1435
|
-
return new InMemoryEmailOtpAuthStateStore();
|
|
839
|
+
return createEmailOtpStore(input, "auth state", {
|
|
840
|
+
d1: (database, scope) => new D1EmailOtpAuthStateStore(database, scope),
|
|
841
|
+
inMemory: () => new InMemoryEmailOtpStore(AUTH_STATE_RECORD)
|
|
842
|
+
});
|
|
1436
843
|
}
|
|
1437
844
|
function createEmailOtpUnlockChallengeStore(input) {
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
}
|
|
1443
|
-
assertEmailOtpStoreKindKnown(input, "unlock challenge");
|
|
1444
|
-
input?.logger?.info("[email-otp] Using in-memory unlock challenge store (non-persistent)");
|
|
1445
|
-
return new InMemoryEmailOtpUnlockChallengeStore();
|
|
845
|
+
return createEmailOtpStore(input, "unlock challenge", {
|
|
846
|
+
d1: (database, scope) => new D1EmailOtpUnlockChallengeStore(database, scope),
|
|
847
|
+
inMemory: () => new InMemoryEmailOtpStore(UNLOCK_CHALLENGE_RECORD)
|
|
848
|
+
});
|
|
1446
849
|
}
|
|
1447
850
|
function createEmailOtpRegistrationAttemptStore(input) {
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
}
|
|
1453
|
-
assertEmailOtpStoreKindKnown(input, "registration attempt");
|
|
1454
|
-
input?.logger?.info("[email-otp] Using in-memory registration attempt store (non-persistent)");
|
|
1455
|
-
return new InMemoryEmailOtpRegistrationAttemptStore();
|
|
851
|
+
return createEmailOtpStore(input, "registration attempt", {
|
|
852
|
+
d1: (database, scope) => new D1EmailOtpRegistrationAttemptStore(database, scope),
|
|
853
|
+
inMemory: () => new InMemoryEmailOtpRegistrationAttemptStore()
|
|
854
|
+
});
|
|
1456
855
|
}
|
|
1457
856
|
//#endregion
|
|
1458
|
-
export {
|
|
857
|
+
export { createEmailOtpAuthStateStore, createEmailOtpChallengeStore, createEmailOtpGrantStore, createEmailOtpRegistrationAttemptStore, createEmailOtpUnlockChallengeStore, createEmailOtpWalletEnrollmentStore };
|
|
1459
858
|
|
|
1460
859
|
//# sourceMappingURL=EmailOtpStores.js.map
|