@seams/wallet-server 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.md +1 -9
- package/artifact-manifest.json +78 -33
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/index.js +2 -2
- package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
- package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +0 -2
- package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +77 -20
- package/dist/esm/authorization/lifecycleRouting.js +62 -0
- package/dist/esm/authorization/service.js +35 -12
- package/dist/esm/cloud-host.js +20 -22
- package/dist/esm/core/EmailOtpRecords.js +1 -217
- package/dist/esm/core/EmailOtpStores.js +0 -859
- package/dist/esm/core/IdentityStore.js +2 -339
- package/dist/esm/core/ThresholdService/config.js +1 -9
- package/dist/esm/core/ThresholdService/index.js +0 -4
- package/dist/esm/core/ThresholdService/kv.js +1 -66
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +1 -13
- package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +1 -11
- package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +0 -541
- package/dist/esm/core/ThresholdService/validation.js +2 -346
- package/dist/esm/core/WalletAuthMethodStore.js +2 -123
- package/dist/esm/core/WalletStore.js +3 -209
- package/dist/esm/core/WebAuthnAuthenticatorStore.js +0 -202
- package/dist/esm/core/WebAuthnCredentialBindingStore.js +2 -182
- package/dist/esm/core/WebAuthnLoginChallengeStore.js +0 -52
- package/dist/esm/core/WebAuthnSyncChallengeStore.js +0 -54
- package/dist/esm/core/authService/emailOtpConfig.js +1 -195
- package/dist/esm/core/authService/emailOtpEnrollment.js +0 -110
- package/dist/esm/core/authService/emailOtpSeal.js +0 -63
- package/dist/esm/core/authService/nearTransactions.js +3 -98
- package/dist/esm/core/authService/rateLimits.js +0 -84
- package/dist/esm/core/authService/webauthn.js +2 -298
- package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -24
- package/dist/esm/core/authService/webauthnWalletBinding.js +0 -37
- package/dist/esm/core/config.js +1 -95
- package/dist/esm/core/d1EcdsaSignerRead.js +1 -1
- package/dist/esm/core/d1IdentityStore.js +1 -2
- package/dist/esm/core/d1TenantStore.js +1 -24
- package/dist/esm/core/d1WalletAuthMethodStore.js +2 -5
- package/dist/esm/core/d1WalletStore.js +2 -2
- package/dist/esm/core/deviceLinking/linkedDeviceBootstrap.js +13 -0
- package/dist/esm/core/deviceLinking/linkedDeviceSession.js +20 -14
- package/dist/esm/core/deviceLinking/requestProof.js +9 -6
- package/dist/esm/core/emailOtpD1Statements.js +107 -94
- package/dist/esm/core/keyMaterialBrands.js +2 -12
- package/dist/esm/core/nearKeys.js +0 -1
- package/dist/esm/core/nearRelayerAccountProvisioning.js +6 -9
- package/dist/esm/core/passkeyCredentialClaims.js +8 -0
- package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +2 -6
- package/dist/esm/core/routerAbSigning/RouterAbNormalSigningRuntime.js +2 -30
- package/dist/esm/core/thresholdEcdsaChainTarget.js +1 -4
- package/dist/esm/hosted-wallet-gateway.js +66 -43
- package/dist/esm/index.js +6 -19
- package/dist/esm/localHostedWalletGatewayHandler.js +12 -0
- package/dist/esm/localRegistrationSetupAuthority.js +89 -0
- package/dist/esm/router/auth/authRequestValidation.js +8 -16
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +0 -1
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizationAssembly.js +87 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +12 -2
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +32 -281
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +24 -22
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +8 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +12 -13
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.js +6 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +12 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +4 -4
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -9
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.js +2 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +89 -7
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +23 -14
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +9 -6
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +1 -7
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +19 -13
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +2 -2
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +44 -12
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +1 -49
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +19 -31
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleRegistrationCompletion.js +85 -0
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +0 -1
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +0 -48
- package/dist/esm/router/cloudflare/d1/near/d1SponsoredNearAccount.js +242 -0
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +0 -1
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +2 -29
- package/dist/esm/router/cloudflare/d1/oidc/googleOidcToken.js +41 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +5 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +34 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +9 -3
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +7 -13
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +25 -13
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +0 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +74 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +7 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +69 -238
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +12 -56
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +155 -0
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +1 -3
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +12 -6
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +68 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +7 -54
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +9 -8
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +2 -142
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +25 -4
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +4 -70
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +23 -7
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +1 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +1 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +5 -0
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletRuntimeOps.js +16 -4
- package/dist/esm/router/cloudflare-adaptor.js +1 -2
- package/dist/esm/router/cloudflare.js +1342 -1733
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +11 -8
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +3 -2
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +6 -6
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +6 -6
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +3 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +8 -0
- package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +0 -1
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +2 -8
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -8
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +5 -19
- package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +2 -3
- package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +70 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +10 -11
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +2 -3
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +14 -0
- package/dist/esm/router/express.js +574 -479
- package/dist/esm/router/framework/http.js +2 -0
- package/dist/esm/router/framework/registrationSetupDispatch.js +14 -0
- package/dist/esm/router/framework/ror/normalize.js +0 -1
- package/dist/esm/router/framework/ror/options.js +0 -1
- package/dist/esm/router/framework/ror/provider.js +0 -1
- package/dist/esm/router/framework/ror/staticProvider.js +0 -1
- package/dist/esm/router/framework/routeDefinitions.js +1 -2
- package/dist/esm/router/framework/routerApiWebhooks.js +0 -1
- package/dist/esm/router/ror.js +0 -1
- package/dist/esm/router/transport/fetch/createFetchRouter.js +0 -2
- package/dist/esm/router/transport/fetch/routes/auth.js +2 -0
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +36 -147
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +3 -2
- package/dist/esm/router/transport/fetch/routes/deviceLinkingResponses.js +130 -0
- package/dist/esm/router/transport/fetch/routes/ecdsaOperationStepUpFactor.js +171 -0
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +1 -0
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +7 -2
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +19 -115
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +3 -1
- package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +0 -1
- package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +0 -2
- package/dist/esm/shared-ts/src/device-linking/contracts.js +16 -1
- package/dist/esm/shared-ts/src/device-linking/digests.js +1 -8
- package/dist/esm/shared-ts/src/near/actions.js +0 -1
- package/dist/esm/shared-ts/src/near/nearClient.js +0 -2
- package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/index.js +1 -6
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +2 -81
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +1 -219
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +0 -3
- package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +1 -2
- package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +0 -1
- package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +1 -22
- package/dist/esm/shared-ts/src/threshold/participants.js +0 -1
- package/dist/esm/shared-ts/src/threshold/signingRootScope.js +0 -1
- package/dist/esm/shared-ts/src/utils/addWalletAuthMethod.js +4 -13
- package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +1 -7
- package/dist/esm/shared-ts/src/utils/domainIds.js +1 -16
- package/dist/esm/shared-ts/src/utils/ecdsaCapabilityActivation.js +1 -11
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +0 -1
- package/dist/esm/shared-ts/src/utils/errors.js +1 -19
- package/dist/esm/shared-ts/src/utils/near.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationIds.js +1 -5
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +0 -1
- package/dist/esm/shared-ts/src/utils/registrationSetupOperation.js +8 -0
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +1 -1
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +0 -1
- package/dist/esm/shared-ts/src/utils/validation.js +1 -5
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +0 -1
- package/dist/esm/shared-ts/src/utils/walletManagementProtocol.js +6 -0
- package/dist/esm/shared-ts/src/utils/wireSchema.js +2 -13
- package/dist/esm/shared-ts/src/wallet-recovery/backupAcknowledgement.js +6 -24
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +5 -6
- package/dist/esm/storage/d1Sql.js +1 -7
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +0 -1
- package/dist/esm/threshold/session/signingSessionSeal/guards/backends.js +1 -2
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +0 -1
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +0 -1
- package/dist/esm/threshold/session/signingSessionSeal/options.js +0 -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 +0 -611
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime_bg.wasm +0 -0
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +0 -4
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +1 -0
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +0 -11
- package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +2 -7
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +0 -4
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +0 -1
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +0 -18
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +6 -35
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +6 -843
- package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +0 -10
- package/dist/types/shared-ts/src/threshold/participants.d.ts +1 -1
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +1 -133
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +4 -18
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +0 -12
- package/dist/types/shared-ts/src/utils/errors.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/near.d.ts +0 -20
- package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/registrationSetupOperation.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/validation.d.ts +1 -3
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +0 -1
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/wireSchema.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +0 -1
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +1 -10
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodes.d.ts +1 -3
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +5 -21
- package/dist/types/wallet-server/src/authorization/lifecycleRouting.d.ts +32 -0
- package/dist/types/wallet-server/src/authorization/lifecycleRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/recoveryRouting.d.ts +22 -0
- package/dist/types/wallet-server/src/authorization/recoveryRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/service.d.ts +8 -1
- package/dist/types/wallet-server/src/authorization/sessionRouting.d.ts +20 -0
- package/dist/types/wallet-server/src/authorization/sessionRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +31 -9
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +1 -22
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +1 -79
- package/dist/types/wallet-server/src/core/IdentityStore.d.ts +0 -10
- package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +0 -1
- package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -2
- package/dist/types/wallet-server/src/core/ThresholdService/index.d.ts +1 -3
- package/dist/types/wallet-server/src/core/ThresholdService/kv.d.ts +0 -7
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +0 -3
- package/dist/types/wallet-server/src/core/ThresholdService/routerAbNormalSigningPolicy.d.ts +0 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +7 -19
- package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +0 -34
- package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +1 -5
- package/dist/types/wallet-server/src/core/WalletStore.d.ts +0 -3
- package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +0 -20
- package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +1 -27
- package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +2 -16
- package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +22 -14
- package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +0 -24
- package/dist/types/wallet-server/src/core/authService/emailOtpEnrollment.d.ts +1 -70
- package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +0 -13
- package/dist/types/wallet-server/src/core/authService/githubOAuth.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +1 -39
- package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -17
- package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +0 -125
- package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +1 -1
- package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +0 -12
- package/dist/types/wallet-server/src/core/config.d.ts +0 -10
- package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +0 -2
- package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +0 -7
- package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +0 -1
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceBootstrap.d.ts +19 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +8 -6
- package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -5
- package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +10 -7
- package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +1 -5
- package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +0 -1
- package/dist/types/wallet-server/src/core/passkeyCredentialClaims.d.ts +9 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +0 -2
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +0 -2
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +1 -92
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +4 -52
- package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +0 -1
- package/dist/types/wallet-server/src/core/types.d.ts +0 -299
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +15 -3
- package/dist/types/wallet-server/src/index.d.ts +8 -13
- package/dist/types/wallet-server/src/localRegistrationSetupAuthority.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizationAssembly.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +25 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +3 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +7 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.d.ts +1 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +6 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +1 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +18 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +29 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -16
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.d.ts +7 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleRegistrationCompletion.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityService.d.ts +0 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1SponsoredNearAccount.d.ts +24 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1SponsoredNearAccount.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcVerificationService.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/googleOidcToken.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +9 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -11
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +3 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +51 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +30 -47
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +3 -30
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.d.ts +27 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +1 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +0 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +23 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/cloudflare.types.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRuntimeOps.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +0 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +0 -2
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +0 -3
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +0 -17
- package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +1 -2
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +1 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +51 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +2 -10
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +2 -2
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +14 -34
- package/dist/types/wallet-server/src/router/framework/googleLoginResolution.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/framework/registrationSetupDispatch.d.ts +13 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +1 -1
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingResponses.d.ts +17 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/ecdsaOperationStepUpFactor.d.ts +37 -0
- package/dist/types/wallet-server/src/storage/d1Sql.d.ts +0 -1
- package/migrations/d1-signer/0040_namespace_home_challenges.sql +16 -0
- package/migrations/d1-signer/0041_step_up_admission_expiry.sql +28 -0
- package/migrations/d1-signer/0042_deployment_resource_challenges.sql +4 -0
- package/migrations/d1-signer/0043_google_registration_candidate_claim.sql +2 -0
- package/migrations/d1-signer/0044_linked_device_bootstrap_imports.sql +6 -0
- package/migrations/d1-signer/0045_wallet_owned_capability_receipts.sql +29 -0
- package/migrations/d1-signer/0046_wallet_owned_signing_abuse.sql +41 -0
- package/migrations/d1-signer/0047_remove_unused_near_public_keys.sql +2 -0
- package/migrations/d1-signer/0048_operation_owner_scope.sql +45 -0
- package/package.json +2 -3
- package/src/README.md +11 -3
- package/dist/esm/core/AuthService.js +0 -2
- package/dist/esm/core/NearPublicKeyStore.js +0 -200
- package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +0 -397
- package/dist/esm/core/ThresholdService/stores/KeyStore.js +0 -140
- package/dist/esm/core/ThresholdService/stores/SessionStore.js +0 -361
- package/dist/esm/core/ThresholdService/stores/StoreConfig.js +0 -13
- package/dist/esm/core/ThresholdService/stores/exportReplayGuard.js +0 -7
- package/dist/esm/core/authService/AuthService.js +0 -594
- package/dist/esm/core/authService/bytes.js +0 -19
- package/dist/esm/core/authService/configValues.js +0 -15
- package/dist/esm/core/authService/emailOtpChallengeOperations.js +0 -123
- package/dist/esm/core/authService/emailOtpChallengeProof.js +0 -183
- package/dist/esm/core/authService/emailOtpChallengeVerification.js +0 -264
- package/dist/esm/core/authService/emailOtpChallenges.js +0 -225
- package/dist/esm/core/authService/emailOtpDelivery.js +0 -134
- package/dist/esm/core/authService/emailOtpGrant.js +0 -43
- package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +0 -144
- package/dist/esm/core/authService/emailOtpUnlock.js +0 -174
- package/dist/esm/core/authService/googleEmailOtpOperations.js +0 -141
- package/dist/esm/core/authService/googleEmailOtpRegistration.js +0 -587
- package/dist/esm/core/authService/identity.js +0 -42
- package/dist/esm/core/authService/identityOperations.js +0 -32
- package/dist/esm/core/authService/nearAccountOperations.js +0 -229
- package/dist/esm/core/authService/nearPublicKeyMetadata.js +0 -108
- package/dist/esm/core/authService/oidcVerification.js +0 -249
- package/dist/esm/core/authService/registrationThresholdHelpers.js +0 -30
- package/dist/esm/core/authService/runtime.js +0 -45
- package/dist/esm/core/authService/storeRegistry.js +0 -102
- package/dist/esm/core/authService/thresholdStoreSummary.js +0 -32
- package/dist/esm/core/authService/webauthnAuthority.js +0 -17
- package/dist/esm/core/defaultConfigsServer.js +0 -9
- package/dist/esm/core/hostedAccountIds.js +0 -225
- package/dist/esm/core/routerAbSigning/createRouterAbSigningRuntimes.js +0 -84
- package/dist/esm/core/signingLanes/LaneAggregateRevocationApplicationService.js +0 -86
- package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +0 -324
- package/dist/esm/core/signingLanes/LaneEnrollmentRevocation.js +0 -173
- package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +0 -198
- package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +0 -73
- package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +0 -68
- package/dist/esm/core/signingLanes/signingWorkerLaneMaterialIdentity.js +0 -0
- package/dist/esm/core/storeBackends.js +0 -208
- package/dist/esm/core/utils.js +0 -14
- package/dist/esm/core/webAuthnStoreBackends.js +0 -198
- package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +0 -49
- package/dist/esm/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.js +0 -10
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.js +0 -22
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -166
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.js +0 -38
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.js +0 -20
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +0 -1459
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLockStore.js +0 -114
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.js +0 -16
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +0 -171
- package/dist/esm/router/cloudflare/d1/signingLanes/index.js +0 -10
- package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +0 -397
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +0 -597
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +0 -273
- package/dist/esm/router/cloudflare/signingLanes/index.js +0 -4
- package/dist/esm/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.js +0 -32
- package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +0 -27
- package/dist/esm/shared-ts/src/signing-lanes/rotation.js +0 -8
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +0 -358
- package/dist/esm/shared-ts/src/signing-lanes/rotationLifecycle.js +0 -313
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +0 -532
- package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +0 -323
- package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +0 -59
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +0 -13
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +0 -78
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +0 -27
- package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +0 -6
- package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +0 -20
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeAttempt.d.ts +0 -59
- package/dist/types/wallet-server/src/core/AuthService.d.ts +0 -3
- package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +0 -48
- package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +0 -21
- package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +0 -40
- package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +0 -98
- package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +0 -4
- package/dist/types/wallet-server/src/core/ThresholdService/stores/ThresholdStoreConfig.typecheck.d.ts +0 -2
- package/dist/types/wallet-server/src/core/ThresholdService/stores/exportReplayGuard.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -490
- package/dist/types/wallet-server/src/core/authService/bytes.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/configValues.d.ts +0 -7
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +0 -109
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +0 -169
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +0 -47
- package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +0 -86
- package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +0 -66
- package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +0 -43
- package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +0 -49
- package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +0 -64
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpOperations.d.ts +0 -126
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +0 -169
- package/dist/types/wallet-server/src/core/authService/identity.d.ts +0 -25
- package/dist/types/wallet-server/src/core/authService/identityOperations.d.ts +0 -19
- package/dist/types/wallet-server/src/core/authService/nearAccountOperations.d.ts +0 -55
- package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +0 -44
- package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +0 -66
- package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -11
- package/dist/types/wallet-server/src/core/authService/runtime.d.ts +0 -20
- package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -53
- package/dist/types/wallet-server/src/core/authService/thresholdStoreSummary.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/webauthnAuthority.d.ts +0 -5
- package/dist/types/wallet-server/src/core/defaultConfigsServer.d.ts +0 -5
- package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -16
- package/dist/types/wallet-server/src/core/routerAbSigning/createRouterAbSigningRuntimes.d.ts +0 -16
- package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +0 -36
- package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +0 -62
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentActivation.d.ts +0 -13
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentRevocation.d.ts +0 -24
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleApplicationService.d.ts +0 -141
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +0 -228
- package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +0 -58
- package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +0 -30
- package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +0 -4
- package/dist/types/wallet-server/src/core/storeBackends.d.ts +0 -83
- package/dist/types/wallet-server/src/core/utils.d.ts +0 -3
- package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +0 -96
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +0 -29
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -24
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.d.ts +0 -20
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.d.ts +0 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.d.ts +0 -51
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLockStore.d.ts +0 -28
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.d.ts +0 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneRecords.d.ts +0 -107
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/index.d.ts +0 -10
- package/dist/types/wallet-server/src/router/cloudflare/durableObjects/thresholdStore.d.ts +0 -18
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.d.ts +0 -217
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.d.ts +0 -73
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/index.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.d.ts +0 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/nearPublicKeys.d.ts +0 -3
- /package/dist/esm/{core/signingLanes/LaneEffectJournalStore.js → authorization/recoveryRouting.js} +0 -0
- /package/dist/esm/{core/signingLanes/LaneLifecycleStore.js → authorization/sessionRouting.js} +0 -0
package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js
CHANGED
|
@@ -14,14 +14,15 @@ import { computeCommittedSignerPackageSetDigestB64u, parseCommittedAuthorityPack
|
|
|
14
14
|
import { unknownWebAuthnAuthenticatorDeviceInfo } from "../../../../shared-ts/src/utils/webauthnDeviceInfo.js";
|
|
15
15
|
import { assertLinkedDeviceWalletSessionCredentialDeliveryIntegrityV1, buildLinkedDeviceWalletSessionCredentialDeliveryBindingV1, computeLinkedDeviceActivationCleanupReceiptDigestB64u, computeLinkedDeviceWalletSessionCredentialDeliveryAadDigestB64u, computeLinkedDeviceWalletSessionCredentialEnvelopeDigestB64u, encodeLinkedDeviceWalletSessionCredentialDeliveryAadV1, parseLinkedDeviceActivationCleanupReceiptV1, parseLinkedDeviceWalletSessionCredentialDeliveryV1 } from "../../../../shared-ts/src/device-linking/walletSessionCredentialDelivery.js";
|
|
16
16
|
import { parseLocalAuthorityActivationFinalAckV1 } from "../../../../shared-ts/src/device-linking/authorityActivation.js";
|
|
17
|
-
import { computeWalletSessionInstallationReceiptDigestB64u
|
|
17
|
+
import { computeWalletSessionInstallationReceiptDigestB64u } from "../../../../shared-ts/src/device-linking/digests.js";
|
|
18
18
|
import { computeLinkedDevicePublicKeyDigestV1 } from "../../../../shared-ts/src/device-linking/requestProof.js";
|
|
19
|
-
import {
|
|
19
|
+
import { walletSessionAuthorizationV2RecordsEqual } from "../../../../authorization/domain.js";
|
|
20
20
|
import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
|
|
21
21
|
import { EcdsaMaterialReadSnapshot } from "../../../../core/ecdsaMaterialReadSnapshot.js";
|
|
22
22
|
import { parseD1JsonColumn } from "../../../../storage/d1Sql.js";
|
|
23
23
|
import { parseWalletEcdsaSignerRows, prepareWalletEcdsaSignersRead } from "../../../../core/d1EcdsaSignerRead.js";
|
|
24
24
|
import "../../../../core/deviceLinking/requestProof.js";
|
|
25
|
+
import { reservePasskeyCredential } from "../../../../core/passkeyCredentialClaims.js";
|
|
25
26
|
import { prepareD1WebAuthnCredentialBindingInsertStatement } from "../../../../core/WebAuthnCredentialBindingStore.js";
|
|
26
27
|
import { prepareD1WebAuthnAuthenticatorInsertStatement } from "../webauthn/d1WebAuthnStore.js";
|
|
27
28
|
import { findInstalledEcdsaAuthority, installedEcdsaAuthorityChain, projectInstalledEcdsaAuthority } from "./installedEcdsaAuthority.js";
|
|
@@ -257,6 +258,7 @@ var D1LinkedDeviceAuthorityInstallServiceV1 = class {
|
|
|
257
258
|
const activeAuthority = await buildActiveAuthority(authority, receipt.installedAtMs);
|
|
258
259
|
const activeAuthMethod = buildActiveAuthMethod(authMethod, receipt.installedAtMs);
|
|
259
260
|
const passkeyCredentialStatements = await buildPasskeyCredentialPromotionStatements({
|
|
261
|
+
credentialClaims: this.options.credentialClaims,
|
|
260
262
|
database: this.options.database,
|
|
261
263
|
scope: this.options.scope,
|
|
262
264
|
listWalletEd25519Signers: this.options.listWalletEd25519Signers,
|
|
@@ -279,17 +281,9 @@ var D1LinkedDeviceAuthorityInstallServiceV1 = class {
|
|
|
279
281
|
nowMs
|
|
280
282
|
});
|
|
281
283
|
const preparedWalletSession = await this.options.authorizationService.prepareWalletSessionAuthorizationV2(this.buildWalletSessionAuthorizationInput(activeAuthority, activeAuthMethod, receipt.installedAtMs));
|
|
282
|
-
const operationCredential =
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
walletSessionId: preparedWalletSession.session.walletSessionId
|
|
286
|
-
};
|
|
287
|
-
const credentialDigestB64u = await computeWalletSessionOperationCredentialDigestB64u(operationCredential);
|
|
288
|
-
const walletSessionStatements = this.options.authorizationStore.prepareDirectWalletSessionAuthorizationV2Statements(buildPersistedActiveWalletSessionAuthorizationV2({
|
|
289
|
-
session: preparedWalletSession.session,
|
|
290
|
-
quota: preparedWalletSession.quota,
|
|
291
|
-
primaryOperationCredentialDigestB64u: credentialDigestB64u
|
|
292
|
-
}));
|
|
284
|
+
const { operationCredential, persisted } = await this.options.authorizationService.prepareDirectWalletSessionCredential(preparedWalletSession);
|
|
285
|
+
const credentialDigestB64u = persisted.primaryOperationCredentialDigestB64u;
|
|
286
|
+
const walletSessionStatements = this.options.authorizationStore.prepareDirectWalletSessionAuthorizationV2Statements(persisted);
|
|
293
287
|
const installationReceiptDigestB64u = await computeWalletSessionInstallationReceiptDigestB64u(receipt);
|
|
294
288
|
const sealedDelivery = await sealLinkedDeviceWalletSessionCredentialV1({
|
|
295
289
|
scope: this.options.scope,
|
|
@@ -1413,6 +1407,11 @@ function buildActiveAuthMethod(pending, activatedAtMs) {
|
|
|
1413
1407
|
}
|
|
1414
1408
|
async function buildPasskeyCredentialPromotionStatements(input) {
|
|
1415
1409
|
if (input.authMethod.kind !== "passkey") return [];
|
|
1410
|
+
await reservePasskeyCredential(input.credentialClaims, {
|
|
1411
|
+
walletId: input.authMethod.walletId,
|
|
1412
|
+
rpId: input.authMethod.rpId,
|
|
1413
|
+
credentialIdB64u: input.authMethod.credentialIdB64u
|
|
1414
|
+
});
|
|
1416
1415
|
const signer = await resolveLinkedDeviceEd25519Signer({
|
|
1417
1416
|
authority: input.authority,
|
|
1418
1417
|
listWalletEd25519Signers: input.listWalletEd25519Signers
|
|
@@ -13,7 +13,12 @@ var D1LinkedDeviceEd25519ExportRootStoreV1 = class {
|
|
|
13
13
|
namespace, org_id, project_id, env_id, link_session_id,
|
|
14
14
|
wallet_id, enrollment_id, device_id, state, transfer_alg,
|
|
15
15
|
recipient_public_key_b64u, recipient_json, registered_at_ms
|
|
16
|
-
)
|
|
16
|
+
) SELECT ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, 'recipient_registered', ?9, ?10, ?11, ?12
|
|
17
|
+
FROM linked_device_sessions
|
|
18
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
19
|
+
AND link_session_id = ?5
|
|
20
|
+
AND state IN ('awaiting_target_factor', 'awaiting_source_contribution',
|
|
21
|
+
'provisioning', 'authority_pending_local_install', 'active')`).bind(...scopeValues(this.scope), String(recipient.linkSessionId), String(recipient.walletId), String(recipient.enrollmentId), String(recipient.deviceId), "x25519-hkdf-sha256-chacha20poly1305-v1", String(recipient.recipientPublicKeyB64u), JSON.stringify(recipient), recipient.registeredAtMs).run()) === 1) return { outcome: "applied" };
|
|
17
22
|
const existing = await this.readRowV1(String(recipient.linkSessionId));
|
|
18
23
|
if (!existing) return {
|
|
19
24
|
outcome: "conflict",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { d1ChangedRows } from "../../../../storage/d1Sql.js";
|
|
1
2
|
import { SESSION_CAS_GUARD_SQL } from "./d1LinkedDeviceSessionStore.js";
|
|
2
3
|
import { parseLinkedDeviceEmailOtpGrantRecordV1 } from "../../../../core/deviceLinking/linkedDeviceEmailOtpGrant.js";
|
|
3
4
|
//#region src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.ts
|
|
@@ -18,7 +19,7 @@ var D1LinkedDeviceEmailOtpGrantStoreV1 = class {
|
|
|
18
19
|
async issueV1(record) {
|
|
19
20
|
const parsed = parseLinkedDeviceEmailOtpGrantRecordV1(record);
|
|
20
21
|
if (parsed.state.kind !== "issued") throw new Error("a linked-device email OTP grant is only ever inserted as issued");
|
|
21
|
-
await this.database.prepare(`INSERT INTO ${GRANT_TABLE} (
|
|
22
|
+
if (d1ChangedRows(await this.database.prepare(`INSERT INTO ${GRANT_TABLE} (
|
|
22
23
|
namespace, org_id, project_id, env_id, grant_id,
|
|
23
24
|
grant_token_digest_b64u, wallet_id, link_session_id, enrollment_id,
|
|
24
25
|
device_id, target_factor, target_preparation_digest_b64u,
|
|
@@ -27,7 +28,16 @@ var D1LinkedDeviceEmailOtpGrantStoreV1 = class {
|
|
|
27
28
|
base_wallet_auth_method_id, linked_owner_auth_method_id,
|
|
28
29
|
authority_digest_b64u, challenge_id, state, record_json,
|
|
29
30
|
issued_at_ms, expires_at_ms, consumed_at_ms
|
|
30
|
-
)
|
|
31
|
+
) SELECT ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, 'email_otp',
|
|
32
|
+
?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18, ?19, ?20, 'issued', ?21, ?22, ?23, NULL
|
|
33
|
+
FROM linked_device_sessions
|
|
34
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
35
|
+
AND link_session_id = ?8 AND state = 'awaiting_target_factor'`).bind(...scopeValues(this.scope), parsed.grantId, parsed.grantTokenDigestB64u, String(parsed.walletId), String(parsed.linkSessionId), String(parsed.enrollmentId), String(parsed.deviceId), parsed.targetPreparationDigestB64u, parsed.targetEmail, parsed.enrollment.kind, parsed.emailHashHex, parsed.registrationAuthorityId, parsed.providerUserId, parsed.baseWalletAuthMethodId ?? null, String(parsed.walletAuthMethodId), parsed.authorityDigestB64u, parsed.challengeId, serializeGrantForD1(parsed), parsed.issuedAtMs, parsed.expiresAtMs).run()) === 1) return { kind: "issued" };
|
|
36
|
+
return {
|
|
37
|
+
kind: "refused",
|
|
38
|
+
code: "link_session_inactive",
|
|
39
|
+
message: "linked-device session no longer accepts Email OTP grants"
|
|
40
|
+
};
|
|
31
41
|
}
|
|
32
42
|
async readByIdV1(grantId) {
|
|
33
43
|
const row = await this.database.prepare(`SELECT json_set(
|
|
@@ -177,7 +177,8 @@ var D1LinkedDeviceEmailOtpTargetFactorV1 = class {
|
|
|
177
177
|
code: sealed.code,
|
|
178
178
|
message: sealed.message
|
|
179
179
|
};
|
|
180
|
-
await this.options.grants.issueV1(grantRecord);
|
|
180
|
+
const issued = await this.options.grants.issueV1(grantRecord);
|
|
181
|
+
if (issued.kind === "refused") return issued;
|
|
181
182
|
return {
|
|
182
183
|
kind: "verified",
|
|
183
184
|
grant: {
|
|
@@ -264,7 +265,8 @@ var D1LinkedDeviceEmailOtpTargetFactorV1 = class {
|
|
|
264
265
|
issuedAtMs,
|
|
265
266
|
expiresAtMs
|
|
266
267
|
});
|
|
267
|
-
await this.options.grants.issueV1(grantRecord);
|
|
268
|
+
const issued = await this.options.grants.issueV1(grantRecord);
|
|
269
|
+
if (issued.kind === "refused") return issued;
|
|
268
270
|
return {
|
|
269
271
|
kind: "verified",
|
|
270
272
|
grant: {
|
|
@@ -409,7 +411,6 @@ var D1LinkedDeviceEmailOtpTargetFactorV1 = class {
|
|
|
409
411
|
kind: "existing_enrollment",
|
|
410
412
|
resolved,
|
|
411
413
|
targetEmail,
|
|
412
|
-
enrollment: { kind: "existing_enrollment" },
|
|
413
414
|
targetPreparationDigestB64u,
|
|
414
415
|
walletAuthMethodId,
|
|
415
416
|
authorityDigestB64u: await computeLinkedDeviceEmailOtpAuthorityDigestV1({
|
|
@@ -448,7 +449,6 @@ var D1LinkedDeviceEmailOtpTargetFactorV1 = class {
|
|
|
448
449
|
return {
|
|
449
450
|
kind: "new_enrollment",
|
|
450
451
|
targetEmail,
|
|
451
|
-
enrollment: { kind: "new_enrollment" },
|
|
452
452
|
targetPreparationDigestB64u,
|
|
453
453
|
walletAuthMethodId,
|
|
454
454
|
authorityDigestB64u: await computeLinkedDeviceEmailOtpAuthorityDigestV1({
|
package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js
CHANGED
|
@@ -11,9 +11,9 @@ import { buildEmailOtpWalletAuthAuthority, buildPasskeyWalletAuthAuthority, wall
|
|
|
11
11
|
import { walletAuthorityDigestsMatchV1 } from "../../../../shared-ts/src/authorization/walletAuthority.js";
|
|
12
12
|
import { buildWalletSessionLinkedDeviceOwnerAuthorizationV1, parseQrLinkedDeviceSessionPayloadV5 } from "../../../../shared-ts/src/device-linking/parsers.js";
|
|
13
13
|
import { computeLinkedDevicePublicKeyDigestV1 } from "../../../../shared-ts/src/device-linking/requestProof.js";
|
|
14
|
-
import { thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
|
|
15
14
|
import { resolveActiveOwnerWalletExecutionLane, resolveWalletAuthMethodIdForAuthority } from "../../../../core/signingLanes/WalletExecutionLaneProjection.js";
|
|
16
15
|
import "../../../../core/deviceLinking/requestProof.js";
|
|
16
|
+
import { thresholdEd25519AuthorityScopeFromWalletAuthAuthority } from "../../../../core/ThresholdService/validation.js";
|
|
17
17
|
import { sourceKeyManifestDigestForFamilyV1 } from "../../../../core/deviceLinking/linkedDeviceSessionRecord.js";
|
|
18
18
|
import { LinkedDeviceSourceFamilyUnavailableErrorV1 } from "./d1LinkedDeviceVerifiedLinkSourceReader.js";
|
|
19
19
|
import { linkedDeviceSignerManifestsEqualV1 } from "./d1LinkedDeviceVerifiedLinkBuilder.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseLinkDeviceSessionId } from "../../../../shared-ts/src/utils/domainIds.js";
|
|
2
2
|
import { base64UrlDecode, base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
3
3
|
import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
4
|
-
import { requireCanonicalString } from "../../../../shared-ts/src/utils/validation.js";
|
|
4
|
+
import { isObject, requireCanonicalString } from "../../../../shared-ts/src/utils/validation.js";
|
|
5
5
|
import { d1ChangedRows } from "../../../../storage/d1Sql.js";
|
|
6
6
|
//#region src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.ts
|
|
7
7
|
const NONCE_TABLE = "linked_device_request_proof_nonces";
|
|
@@ -12,14 +12,7 @@ var D1LinkedDeviceRequestProofNonceStoreV1 = class {
|
|
|
12
12
|
this.scope = normalizeScope(options.scope);
|
|
13
13
|
}
|
|
14
14
|
async consumeRequestProofNonceV1(input) {
|
|
15
|
-
const normalized = parseNonceRecord(
|
|
16
|
-
linkSessionId: input.linkSessionId,
|
|
17
|
-
requestNonceB64u: input.requestNonceB64u,
|
|
18
|
-
proofDigestB64u: input.proofDigestB64u,
|
|
19
|
-
issuedAtMs: input.issuedAtMs,
|
|
20
|
-
expiresAtMs: input.expiresAtMs,
|
|
21
|
-
consumedAtMs: input.consumedAtMs
|
|
22
|
-
});
|
|
15
|
+
const normalized = parseNonceRecord(input);
|
|
23
16
|
await this.pruneExpiredNoncesV1(normalized.consumedAtMs);
|
|
24
17
|
try {
|
|
25
18
|
if (d1ChangedRows(await this.database.prepare(`INSERT INTO ${NONCE_TABLE} (
|
|
@@ -60,6 +53,7 @@ var D1LinkedDeviceRequestProofNonceStoreV1 = class {
|
|
|
60
53
|
}
|
|
61
54
|
};
|
|
62
55
|
function parseNonceRecord(raw) {
|
|
56
|
+
if (!isObject(raw)) throw new Error("Invalid device request nonce");
|
|
63
57
|
const linkSessionId = parseSessionId(raw.linkSessionId);
|
|
64
58
|
const requestNonceB64u = parseFixedB64u(raw.requestNonceB64u, "requestNonceB64u");
|
|
65
59
|
const proofDigestB64u = parseDigest(raw.proofDigestB64u, "proofDigestB64u");
|
|
@@ -8,12 +8,13 @@ import { D1LinkedDeviceSessionStoreV1 } from "./d1LinkedDeviceSessionStore.js";
|
|
|
8
8
|
//#region src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.ts
|
|
9
9
|
function createD1LinkedDeviceRouteServiceV1(options) {
|
|
10
10
|
const nowV1 = options.nowV1 ?? Date.now;
|
|
11
|
-
const proofVerifier = new LinkedDeviceRequestProofVerifierV1({ nonceStore: new D1LinkedDeviceRequestProofNonceStoreV1({
|
|
11
|
+
const proofVerifier = new LinkedDeviceRequestProofVerifierV1({ nonceStore: options.proofNonces ?? new D1LinkedDeviceRequestProofNonceStoreV1({
|
|
12
12
|
database: options.database,
|
|
13
13
|
scope: options.scope
|
|
14
14
|
}) });
|
|
15
15
|
const { sessionService } = createD1LinkedDeviceSessionServiceV1({
|
|
16
16
|
sessionStore: new D1LinkedDeviceSessionStoreV1({
|
|
17
|
+
bootstrap: options.bootstrap,
|
|
17
18
|
database: options.database,
|
|
18
19
|
scope: options.scope,
|
|
19
20
|
now: nowV1
|
|
@@ -3,6 +3,7 @@ import { assertNeverLinkSessionStateV1 } from "../../../../shared-ts/src/device-
|
|
|
3
3
|
import { parseLinkedDeviceApprovalV1, parseLinkedDeviceSessionClaimV1 } from "../../../../shared-ts/src/device-linking/parsers.js";
|
|
4
4
|
import { computeLinkedDeviceApprovalDigestV1, computeLinkedDeviceSessionClaimDigestV1 } from "../../../../shared-ts/src/device-linking/digests.js";
|
|
5
5
|
import { d1ChangedRows, queryD1All } from "../../../../storage/d1Sql.js";
|
|
6
|
+
import { requireLinkedDeviceBootstrapRecord } from "../../../../core/deviceLinking/linkedDeviceBootstrap.js";
|
|
6
7
|
import { LinkedDeviceRetiredSessionShapeErrorV1, approvalTranscriptMatchesDigest, claimTranscriptMatchesDigest, conflictResult, integrityResult, invalidStateResult, isPrecommitState, linkedDeviceEmailOtpChallengesEqualV1, linkedDeviceQrPayloadsEqualV1, parseLinkedDeviceSessionRecordV1, sessionExpiryMsV1, sourceContributionTranscriptMatchesDigest } from "../../../../core/deviceLinking/linkedDeviceSessionRecord.js";
|
|
7
8
|
import { parseD1LinkedDeviceSessionRowV1, parseD1LinkedDeviceSessionTranscriptRowV1 } from "./d1LinkedDeviceSessionRecords.js";
|
|
8
9
|
//#region src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.ts
|
|
@@ -29,21 +30,33 @@ const PRECOMMIT_STATES = [
|
|
|
29
30
|
];
|
|
30
31
|
var D1LinkedDeviceSessionStoreV1 = class {
|
|
31
32
|
constructor(options) {
|
|
33
|
+
this.bootstrap = options.bootstrap;
|
|
32
34
|
this.database = options.database;
|
|
33
35
|
this.scope = normalizeScope(options.scope);
|
|
34
36
|
}
|
|
35
37
|
async createUnclaimedSessionV1(record) {
|
|
36
38
|
const normalized = parseLinkedDeviceSessionRecordV1(record);
|
|
37
39
|
if (normalized.state.state !== "displaying_qr" || normalized.revision !== 1) return invalidStateResult(normalized);
|
|
40
|
+
if (this.bootstrap) {
|
|
41
|
+
const existing = requireLinkedDeviceBootstrapRecord(await this.bootstrap.create(normalized));
|
|
42
|
+
if (!existing) throw new Error("Bootstrap creation returned no session");
|
|
43
|
+
if (!linkedDeviceQrPayloadsEqualV1(existing.qrPayload, normalized.qrPayload)) return conflictResult(1, existing);
|
|
44
|
+
if (existing.state.state === "claimed") {
|
|
45
|
+
const current = await this.getSessionV1(normalized.linkSessionId);
|
|
46
|
+
if (!current) return conflictResult(1, null);
|
|
47
|
+
return {
|
|
48
|
+
outcome: "replayed",
|
|
49
|
+
record: current
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
outcome: "applied",
|
|
54
|
+
record: existing
|
|
55
|
+
};
|
|
56
|
+
}
|
|
38
57
|
let insertError;
|
|
39
58
|
try {
|
|
40
|
-
if (d1ChangedRows(await this.
|
|
41
|
-
namespace, org_id, project_id, env_id, link_session_id,
|
|
42
|
-
link_public_key_b64u, device_public_key_b64u, state, record_json,
|
|
43
|
-
revision, expires_at_ms, claim_expires_at_ms, claim_digest_b64u,
|
|
44
|
-
approval_digest_b64u, authority_id, package_set_digest_b64u,
|
|
45
|
-
created_at_ms, updated_at_ms
|
|
46
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).bind(...scopeValues(this.scope), ...sessionColumnValues(normalized)).run()) === 1) return {
|
|
59
|
+
if (d1ChangedRows(await this.sessionInsertStatement(normalized).run()) === 1) return {
|
|
47
60
|
outcome: "applied",
|
|
48
61
|
record: normalized
|
|
49
62
|
};
|
|
@@ -62,6 +75,44 @@ var D1LinkedDeviceSessionStoreV1 = class {
|
|
|
62
75
|
return conflictResult(1, existing);
|
|
63
76
|
}
|
|
64
77
|
async getSessionV1(linkSessionId) {
|
|
78
|
+
const local = await this.readLocalSession(linkSessionId);
|
|
79
|
+
if (local || !this.bootstrap) return local;
|
|
80
|
+
if (await this.database.prepare(`SELECT 1 AS imported FROM linked_device_bootstrap_imports
|
|
81
|
+
WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ? AND link_session_id = ?`).bind(...scopeValues(this.scope), String(linkSessionId)).first()) return null;
|
|
82
|
+
const record = requireLinkedDeviceBootstrapRecord(await this.bootstrap.read(linkSessionId));
|
|
83
|
+
if (!record || record.state.state !== "claimed") return record;
|
|
84
|
+
return this.importClaimedSession(record);
|
|
85
|
+
}
|
|
86
|
+
sessionInsertStatement(normalized) {
|
|
87
|
+
return this.database.prepare(`INSERT INTO ${SESSION_TABLE} (
|
|
88
|
+
namespace, org_id, project_id, env_id, link_session_id,
|
|
89
|
+
link_public_key_b64u, device_public_key_b64u, state, record_json,
|
|
90
|
+
revision, expires_at_ms, claim_expires_at_ms, claim_digest_b64u,
|
|
91
|
+
approval_digest_b64u, authority_id, package_set_digest_b64u,
|
|
92
|
+
created_at_ms, updated_at_ms
|
|
93
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).bind(...scopeValues(this.scope), ...sessionColumnValues(normalized));
|
|
94
|
+
}
|
|
95
|
+
async importClaimedSession(record) {
|
|
96
|
+
if (record.state.state !== "claimed" || !record.claimTranscript || record.revision !== 2) throw new Error("Invalid bootstrap claim");
|
|
97
|
+
const transcript = record.claimTranscript;
|
|
98
|
+
if (await computeLinkedDeviceSessionClaimDigestV1(transcript.value) !== transcript.digestB64u) throw new Error("Invalid bootstrap claim digest");
|
|
99
|
+
try {
|
|
100
|
+
await this.database.batch([
|
|
101
|
+
this.sessionInsertStatement(record),
|
|
102
|
+
this.database.prepare(`INSERT INTO linked_device_session_transcripts
|
|
103
|
+
(namespace, org_id, project_id, env_id, link_session_id, transcript_kind, digest_b64u, transcript_json, created_at_ms)
|
|
104
|
+
VALUES (?, ?, ?, ?, ?, 'claim', ?, ?, ?)`).bind(...scopeValues(this.scope), record.linkSessionId, transcript.digestB64u, JSON.stringify(transcript.value), record.updatedAtMs),
|
|
105
|
+
this.database.prepare(`INSERT INTO linked_device_bootstrap_imports
|
|
106
|
+
(namespace, org_id, project_id, env_id, link_session_id) VALUES (?, ?, ?, ?, ?)`).bind(...scopeValues(this.scope), record.linkSessionId)
|
|
107
|
+
]);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
const raced = await this.readLocalSession(record.linkSessionId);
|
|
110
|
+
if (raced && claimTranscriptMatchesDigest(raced, transcript.digestB64u)) return raced;
|
|
111
|
+
throw Object.assign(new Error("Linked-device claim import is unavailable", { cause: error }), { code: "home_unavailable" });
|
|
112
|
+
}
|
|
113
|
+
return record;
|
|
114
|
+
}
|
|
115
|
+
async readLocalSession(linkSessionId) {
|
|
65
116
|
const row = await this.database.prepare(`SELECT link_session_id, link_public_key_b64u, device_public_key_b64u,
|
|
66
117
|
state, record_json, revision, expires_at_ms, claim_expires_at_ms,
|
|
67
118
|
claim_digest_b64u, approval_digest_b64u, authority_id,
|
|
@@ -157,6 +208,21 @@ var D1LinkedDeviceSessionStoreV1 = class {
|
|
|
157
208
|
};
|
|
158
209
|
}
|
|
159
210
|
async claimSessionV1(input) {
|
|
211
|
+
if (this.bootstrap) {
|
|
212
|
+
const selected = requireLinkedDeviceBootstrapRecord(await this.bootstrap.claim(input.nextRecord));
|
|
213
|
+
if (selected?.state.state !== "claimed" || !selected.claimTranscript) throw Object.assign(/* @__PURE__ */ new Error("Bootstrap claim returned invalid state"), { code: "home_unavailable" });
|
|
214
|
+
const current = await this.readLocalSession(input.linkSessionId);
|
|
215
|
+
if (current) return claimTranscriptMatchesDigest(current, selected.claimTranscript.digestB64u) ? {
|
|
216
|
+
outcome: "replayed",
|
|
217
|
+
record: current
|
|
218
|
+
} : conflictResult(input.expectedRevision, current);
|
|
219
|
+
const imported = await this.getSessionV1(input.linkSessionId);
|
|
220
|
+
if (!imported) return conflictResult(input.expectedRevision, null);
|
|
221
|
+
return {
|
|
222
|
+
outcome: "applied",
|
|
223
|
+
record: imported
|
|
224
|
+
};
|
|
225
|
+
}
|
|
160
226
|
const current = await this.getSessionV1(input.linkSessionId);
|
|
161
227
|
if (!current) return conflictResult(input.expectedRevision, null);
|
|
162
228
|
if (claimTranscriptMatchesDigest(current, input.claimDigestB64u)) return {
|
|
@@ -293,6 +359,14 @@ var D1LinkedDeviceSessionStoreV1 = class {
|
|
|
293
359
|
});
|
|
294
360
|
}
|
|
295
361
|
async cancelSessionV1(input) {
|
|
362
|
+
if (this.bootstrap && !await this.readLocalSession(input.linkSessionId)) {
|
|
363
|
+
const record = requireLinkedDeviceBootstrapRecord(await this.bootstrap.finish(input.nextRecord));
|
|
364
|
+
if (!record) return conflictResult(input.expectedRevision, null);
|
|
365
|
+
return {
|
|
366
|
+
outcome: "applied",
|
|
367
|
+
record
|
|
368
|
+
};
|
|
369
|
+
}
|
|
296
370
|
return this.applyTerminalStateCas({
|
|
297
371
|
...sessionMutationFieldsV1(input),
|
|
298
372
|
expectedStates: PRECOMMIT_STATES,
|
|
@@ -301,6 +375,14 @@ var D1LinkedDeviceSessionStoreV1 = class {
|
|
|
301
375
|
});
|
|
302
376
|
}
|
|
303
377
|
async expireSessionV1(input) {
|
|
378
|
+
if (this.bootstrap && !await this.readLocalSession(input.linkSessionId)) {
|
|
379
|
+
const record = requireLinkedDeviceBootstrapRecord(await this.bootstrap.finish(input.nextRecord));
|
|
380
|
+
if (!record) return conflictResult(input.expectedRevision, null);
|
|
381
|
+
return {
|
|
382
|
+
outcome: "applied",
|
|
383
|
+
record
|
|
384
|
+
};
|
|
385
|
+
}
|
|
304
386
|
const current = await this.getSessionV1(input.linkSessionId);
|
|
305
387
|
if (!current) return conflictResult(input.expectedRevision, null);
|
|
306
388
|
if (current.state.state === "expired") return {
|
package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js
CHANGED
|
@@ -128,14 +128,7 @@ var D1LinkedDeviceTargetCredentialProviderV1 = class {
|
|
|
128
128
|
}
|
|
129
129
|
async getTargetPreparationV1(input) {
|
|
130
130
|
const persisted = await this.readV1(input.session.linkSessionId);
|
|
131
|
-
if (persisted)
|
|
132
|
-
assertPreparationMatchesSession(persisted.preparation, input.session, input.approval);
|
|
133
|
-
if (input.access === "create_or_replay" && input.deliveryRecipientPublicKey65B64u !== persisted.preparation.deliveryRecipientPublicKey65B64u) return {
|
|
134
|
-
kind: "conflict",
|
|
135
|
-
message: "linked-device target preparation recipient conflicts with its durable replay"
|
|
136
|
-
};
|
|
137
|
-
return persisted.preparation;
|
|
138
|
-
}
|
|
131
|
+
if (persisted) return replayTargetPreparation(persisted.preparation, input);
|
|
139
132
|
if (input.session.state.state !== "awaiting_target_factor") throw new Error("linked-device target preparation is unavailable in this session state");
|
|
140
133
|
if (input.access === "replay_only") throw new Error("linked-device target preparation has not been created");
|
|
141
134
|
const preparation = parseLinkedDeviceTargetPreparationV1(await this.planner.createTargetPreparationV1(input));
|
|
@@ -146,11 +139,16 @@ var D1LinkedDeviceTargetCredentialProviderV1 = class {
|
|
|
146
139
|
namespace, org_id, project_id, env_id, link_session_id,
|
|
147
140
|
wallet_id, enrollment_id, device_id, state, target_factor,
|
|
148
141
|
preparation_digest_b64u, preparation_json, prepared_at_ms, expires_at_ms
|
|
149
|
-
)
|
|
142
|
+
) SELECT ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, 'prepared', ?9, ?10, ?11, ?12, ?13
|
|
143
|
+
FROM linked_device_sessions
|
|
144
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
145
|
+
AND link_session_id = ?5 AND state = 'awaiting_target_factor'`).bind(...scopeValues(this.scope), String(preparation.linkSessionId), String(preparation.walletId), String(preparation.enrollmentId), String(preparation.deviceId), preparation.targetFactor.kind, preparationDigestB64u, JSON.stringify(preparation), preparation.issuedAtMs, preparation.expiresAtMs).run();
|
|
150
146
|
const stored = await this.readV1(input.session.linkSessionId);
|
|
151
|
-
if (!stored)
|
|
152
|
-
|
|
153
|
-
|
|
147
|
+
if (!stored) return {
|
|
148
|
+
kind: "conflict",
|
|
149
|
+
message: "linked-device session no longer accepts target preparation"
|
|
150
|
+
};
|
|
151
|
+
return replayTargetPreparation(stored.preparation, input);
|
|
154
152
|
}
|
|
155
153
|
async registerTargetCredentialV1(input) {
|
|
156
154
|
try {
|
|
@@ -441,9 +439,12 @@ var D1LinkedDeviceTargetCredentialProviderV1 = class {
|
|
|
441
439
|
if (d1ChangedRows(await this.database.prepare(`INSERT OR IGNORE INTO ${TARGET_COMMIT_RESERVATION_TABLE} (
|
|
442
440
|
namespace, org_id, project_id, env_id, link_session_id,
|
|
443
441
|
registration_digest_b64u, state, reserved_at_ms
|
|
444
|
-
)
|
|
442
|
+
) SELECT ?1, ?2, ?3, ?4, ?5, ?6, 'reserved', ?7
|
|
443
|
+
FROM linked_device_sessions
|
|
444
|
+
WHERE namespace = ?1 AND org_id = ?2 AND project_id = ?3 AND env_id = ?4
|
|
445
|
+
AND link_session_id = ?5 AND state = 'awaiting_target_factor'`).bind(...scopeValues(this.scope), input.linkSessionId, input.registrationDigestB64u, input.nowMs).run()) === 1) return { outcome: "acquired" };
|
|
445
446
|
const row = await this.readCommitReservationV1(input.linkSessionId);
|
|
446
|
-
if (!row)
|
|
447
|
+
if (!row) throw new Error("linked-device session no longer accepts target credential registration");
|
|
447
448
|
if (row.registrationDigestB64u !== input.registrationDigestB64u) throw new Error("linked-device target credential conflicts with its durable commit reservation");
|
|
448
449
|
if (row.state === "committed") return {
|
|
449
450
|
outcome: "replayed",
|
|
@@ -560,6 +561,14 @@ async function assertRegistrationReplay(persisted, registration, keyManifestDige
|
|
|
560
561
|
if (!persisted.registration || persisted.registration.keyManifestDigestB64u !== keyManifestDigestB64u) throw new Error("linked-device target credential conflicts with its durable record");
|
|
561
562
|
await assertRegistrationValueReplay(persisted.registration.value, registration);
|
|
562
563
|
}
|
|
564
|
+
function replayTargetPreparation(preparation, input) {
|
|
565
|
+
assertPreparationMatchesSession(preparation, input.session, input.approval);
|
|
566
|
+
if (input.access === "create_or_replay" && input.deliveryRecipientPublicKey65B64u !== preparation.deliveryRecipientPublicKey65B64u) return {
|
|
567
|
+
kind: "conflict",
|
|
568
|
+
message: "linked-device target preparation recipient conflicts with its durable replay"
|
|
569
|
+
};
|
|
570
|
+
return preparation;
|
|
571
|
+
}
|
|
563
572
|
function assertPreparationMatchesSession(preparation, session, approval) {
|
|
564
573
|
const sourceSignerManifest = session.approvalTranscript?.sourceSignerManifest;
|
|
565
574
|
if (!sourceSignerManifest) throw new Error("linked-device verified source signer manifest is unavailable");
|
|
@@ -13,6 +13,7 @@ const CAPABILITY_REPLACEMENT_SCHEMA_SQL = `
|
|
|
13
13
|
org_id TEXT NOT NULL,
|
|
14
14
|
project_id TEXT NOT NULL,
|
|
15
15
|
env_id TEXT NOT NULL,
|
|
16
|
+
wallet_id TEXT NOT NULL CHECK (length(wallet_id) > 0),
|
|
16
17
|
operation_id TEXT NOT NULL,
|
|
17
18
|
operation_fingerprint TEXT NOT NULL,
|
|
18
19
|
previous_capability_binding_json TEXT NOT NULL,
|
|
@@ -76,6 +77,10 @@ var CloudflareD1RouterAbEd25519YaoCapabilityPersistence = class {
|
|
|
76
77
|
async prepareActiveCapabilityReplacement(input) {
|
|
77
78
|
const operation = validateReplacementOperation(input.operation);
|
|
78
79
|
if (!operation.ok) return operation.failure;
|
|
80
|
+
const application = activeCapabilityApplication(input.next);
|
|
81
|
+
const walletId = parseWalletId(application.wallet_id);
|
|
82
|
+
if (!walletId.ok) return persistenceFailure("invalid_wallet", "promoted Yao capability wallet ID is invalid");
|
|
83
|
+
if (activeCapabilityApplication(input.previous).wallet_id !== walletId.value) return persistenceFailure("identity_mismatch", "capability replacement crosses wallet ownership");
|
|
79
84
|
await this.ensureSchema();
|
|
80
85
|
const receiptMatch = matchReceipt(await this.readReceipt(operation.value.operationId), operation.value, input);
|
|
81
86
|
if (receiptMatch === "match") return {
|
|
@@ -83,9 +88,6 @@ var CloudflareD1RouterAbEd25519YaoCapabilityPersistence = class {
|
|
|
83
88
|
disposition: "exact_retry"
|
|
84
89
|
};
|
|
85
90
|
if (receiptMatch === "conflict") return persistenceFailure("operation_conflict", "capability replacement operation belongs to a different activation");
|
|
86
|
-
const application = activeCapabilityApplication(input.next);
|
|
87
|
-
const walletId = parseWalletId(application.wallet_id);
|
|
88
|
-
if (!walletId.ok) return persistenceFailure("invalid_wallet", "promoted Yao capability wallet ID is invalid");
|
|
89
91
|
const signer = await this.walletStore.getEd25519SignerBySlot({
|
|
90
92
|
walletId: walletId.value,
|
|
91
93
|
signerSlot: application.key_creation_signer_slot
|
|
@@ -127,13 +129,14 @@ var CloudflareD1RouterAbEd25519YaoCapabilityPersistence = class {
|
|
|
127
129
|
org_id,
|
|
128
130
|
project_id,
|
|
129
131
|
env_id,
|
|
132
|
+
wallet_id,
|
|
130
133
|
operation_id,
|
|
131
134
|
operation_fingerprint,
|
|
132
135
|
previous_capability_binding_json,
|
|
133
136
|
next_capability_binding_json,
|
|
134
137
|
created_at_ms
|
|
135
138
|
)
|
|
136
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).bind(this.scope.namespace, this.scope.orgId, this.scope.projectId, this.scope.envId, operation.value.operationId, operation.value.operationFingerprint, previousBindingJson, nextBindingJson, now));
|
|
139
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).bind(this.scope.namespace, this.scope.orgId, this.scope.projectId, this.scope.envId, walletId.value, operation.value.operationId, operation.value.operationFingerprint, previousBindingJson, nextBindingJson, now));
|
|
137
140
|
for (const authorityReplacement of authorityReplacements) {
|
|
138
141
|
statements.push(this.prepareAuthorityReplacementStatement(authorityReplacement));
|
|
139
142
|
statements.push(this.database.prepare(D1_BATCH_CAS_GUARD_SQL));
|
|
@@ -243,7 +246,7 @@ var CloudflareD1RouterAbEd25519YaoCapabilityPersistence = class {
|
|
|
243
246
|
AND retired_at_ms IS NULL`).bind(String(next.authorityDigestB64u), JSON.stringify(next.capabilitySubjects), JSON.stringify(next), this.scope.namespace, this.scope.orgId, this.scope.projectId, this.scope.envId, String(next.authorizationId), String(next.authorityId), String(input.previous.authorityDigestB64u), input.previous.authorityRevocationEpoch);
|
|
244
247
|
}
|
|
245
248
|
async readReceipt(operationId) {
|
|
246
|
-
return await this.database.prepare(`SELECT operation_fingerprint,
|
|
249
|
+
return await this.database.prepare(`SELECT wallet_id, operation_fingerprint,
|
|
247
250
|
previous_capability_binding_json,
|
|
248
251
|
next_capability_binding_json
|
|
249
252
|
FROM ${ROUTER_AB_ED25519_YAO_CAPABILITY_REPLACEMENT_TABLE_V1}
|
|
@@ -274,7 +277,7 @@ function validateReplacementOperation(operation) {
|
|
|
274
277
|
}
|
|
275
278
|
function matchReceipt(receipt, operation, input) {
|
|
276
279
|
if (!receipt) return "missing";
|
|
277
|
-
return receipt.operation_fingerprint === operation.operationFingerprint && receipt.previous_capability_binding_json === JSON.stringify(input.previous.activeCapabilityBinding) && receipt.next_capability_binding_json === JSON.stringify(input.next.activeCapabilityBinding) ? "match" : "conflict";
|
|
280
|
+
return receipt.wallet_id === activeCapabilityApplication(input.next).wallet_id && receipt.operation_fingerprint === operation.operationFingerprint && receipt.previous_capability_binding_json === JSON.stringify(input.previous.activeCapabilityBinding) && receipt.next_capability_binding_json === JSON.stringify(input.next.activeCapabilityBinding) ? "match" : "conflict";
|
|
278
281
|
}
|
|
279
282
|
//#endregion
|
|
280
283
|
export { CloudflareD1RouterAbEd25519YaoCapabilityPersistence, ROUTER_AB_ED25519_YAO_CAPABILITY_REPLACEMENT_TABLE_V1 };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
|
|
2
|
-
import "../../../../shared-ts/src/utils/validation.js";
|
|
3
2
|
import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
|
|
4
3
|
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
5
4
|
import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
|
|
2
|
-
import "../../../../shared-ts/src/utils/validation.js";
|
|
3
2
|
import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
|
|
4
3
|
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
5
4
|
import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS, WALLET_EMAIL_OTP_REGISTRATION_OPERATION, WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { D1_BATCH_CAS_GUARD_SQL } from "../../../../storage/d1Sql.js";
|
|
2
2
|
import { parseD1NonNegativeCount } from "../auth/d1RouterApiAuthBoundary.js";
|
|
3
|
-
import { emailOtpChallengeRows, emailOtpUnlockChallengeRows } from "../../../../core/emailOtpD1Statements.js";
|
|
4
3
|
import { emailOtpChallengeContextValues, emailOtpChallengeWithAttemptCount, parseEmailOtpChallengeRow, parseEmailOtpRegistrationVerificationReceiptV1, parseEmailOtpUnlockChallengeRow } from "./d1EmailOtpRecords.js";
|
|
4
|
+
import { emailOtpChallengeRows, emailOtpUnlockChallengeRows } from "../../../../core/emailOtpD1Statements.js";
|
|
5
5
|
//#region src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.ts
|
|
6
6
|
const REGISTRATION_VERIFICATION_RECEIPT_SCOPE = "email-otp-registration-verification-v1";
|
|
7
7
|
const REGISTRATION_CEREMONY_CAS_GUARD_SQL = `INSERT INTO registration_ceremony_cas_guard (guard_id)
|
|
@@ -2,7 +2,6 @@ import { base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
|
2
2
|
import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
|
|
3
3
|
import "../../../../shared-ts/src/utils/encoders.js";
|
|
4
4
|
import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
|
|
5
|
-
import "../../../../shared-ts/src/utils/validation.js";
|
|
6
5
|
import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS, WALLET_EMAIL_OTP_REGISTRATION_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
7
6
|
import { emailOtpChallengeBindingMismatchCode, emailOtpChallengeInvalidOrExpired, emailOtpRegistrationChallengeBindingMismatchCode } from "./d1EmailOtpRecords.js";
|
|
8
7
|
//#region src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { emailOtpAuthStateRows, emailOtpWalletEnrollmentRows } from "../../../../core/emailOtpD1Statements.js";
|
|
2
1
|
import { emailOtpAuthStateRecord, parseEmailOtpAuthStateRow, parseEmailOtpWalletEnrollmentRow } from "./d1EmailOtpRecords.js";
|
|
2
|
+
import { emailOtpAuthStateRows, emailOtpWalletEnrollmentRows } from "../../../../core/emailOtpD1Statements.js";
|
|
3
3
|
//#region src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.ts
|
|
4
4
|
var CloudflareD1EmailOtpEnrollmentStore = class {
|
|
5
5
|
constructor(input) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { emailOtpGrantRows } from "../../../../core/emailOtpD1Statements.js";
|
|
2
1
|
import { parseEmailOtpGrantRow } from "./d1EmailOtpRecords.js";
|
|
2
|
+
import { emailOtpGrantRows } from "../../../../core/emailOtpD1Statements.js";
|
|
3
3
|
//#region src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.ts
|
|
4
4
|
var CloudflareD1EmailOtpGrantStore = class {
|
|
5
5
|
constructor(input) {
|
|
@@ -11,12 +11,6 @@ var CloudflareD1EmailOtpGrantStore = class {
|
|
|
11
11
|
async consume(grantToken) {
|
|
12
12
|
return parseEmailOtpGrantRow(await emailOtpGrantRows.consume(this.prepare, grantToken).first());
|
|
13
13
|
}
|
|
14
|
-
async read(grantToken) {
|
|
15
|
-
return parseEmailOtpGrantRow(await emailOtpGrantRows.select(this.prepare, grantToken).first());
|
|
16
|
-
}
|
|
17
|
-
async delete(grantToken) {
|
|
18
|
-
await emailOtpGrantRows.delete(this.prepare, grantToken).run();
|
|
19
|
-
}
|
|
20
14
|
};
|
|
21
15
|
//#endregion
|
|
22
16
|
export { CloudflareD1EmailOtpGrantStore };
|
|
@@ -2,8 +2,8 @@ import { emailOtpRateLimitExceeded, emailOtpRateLimitKeys } from "./d1EmailOtpRe
|
|
|
2
2
|
//#region src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.ts
|
|
3
3
|
var CloudflareD1EmailOtpRateLimitStore = class {
|
|
4
4
|
constructor(input) {
|
|
5
|
-
this.prepare = input.prepare;
|
|
6
5
|
this.rateLimits = input.rateLimits;
|
|
6
|
+
this.counter = input.counter ?? new D1EmailOtpRateLimitCounter(input.prepare);
|
|
7
7
|
}
|
|
8
8
|
async consume(input) {
|
|
9
9
|
const policy = this.rateLimits[input.scope];
|
|
@@ -12,17 +12,23 @@ var CloudflareD1EmailOtpRateLimitStore = class {
|
|
|
12
12
|
policy
|
|
13
13
|
});
|
|
14
14
|
for (const key of keys) {
|
|
15
|
-
const consumed = await this.
|
|
15
|
+
const consumed = await this.counter.consume({
|
|
16
16
|
key,
|
|
17
|
-
policy,
|
|
18
|
-
|
|
17
|
+
limit: policy.limit,
|
|
18
|
+
windowMs: policy.windowMs
|
|
19
19
|
});
|
|
20
20
|
if (!consumed.ok) return consumed;
|
|
21
21
|
}
|
|
22
22
|
return { ok: true };
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
};
|
|
25
|
+
var D1EmailOtpRateLimitCounter = class {
|
|
26
|
+
constructor(prepare) {
|
|
27
|
+
this.prepare = prepare;
|
|
28
|
+
}
|
|
29
|
+
async consume(input) {
|
|
30
|
+
const nowMs = Date.now();
|
|
31
|
+
const resetAtMs = nowMs + input.windowMs;
|
|
26
32
|
if (await this.prepare(`INSERT INTO email_otp_rate_limits (
|
|
27
33
|
namespace,
|
|
28
34
|
org_id,
|
|
@@ -52,13 +58,13 @@ var CloudflareD1EmailOtpRateLimitStore = class {
|
|
|
52
58
|
RETURNING consumed_count, reset_at_ms`, [
|
|
53
59
|
input.key,
|
|
54
60
|
resetAtMs,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
nowMs,
|
|
62
|
+
nowMs,
|
|
63
|
+
nowMs,
|
|
58
64
|
resetAtMs,
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
input.
|
|
65
|
+
nowMs,
|
|
66
|
+
nowMs,
|
|
67
|
+
input.limit
|
|
62
68
|
]).first()) return { ok: true };
|
|
63
69
|
return emailOtpRateLimitExceeded(await this.prepare(`SELECT consumed_count, reset_at_ms
|
|
64
70
|
FROM email_otp_rate_limits
|
|
@@ -71,6 +77,6 @@ var CloudflareD1EmailOtpRateLimitStore = class {
|
|
|
71
77
|
}
|
|
72
78
|
};
|
|
73
79
|
//#endregion
|
|
74
|
-
export { CloudflareD1EmailOtpRateLimitStore };
|
|
80
|
+
export { CloudflareD1EmailOtpRateLimitStore, D1EmailOtpRateLimitCounter };
|
|
75
81
|
|
|
76
82
|
//# sourceMappingURL=d1EmailOtpRateLimitStore.js.map
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { base64UrlDecode } from "../../../../shared-ts/src/utils/base64.js";
|
|
2
2
|
import "../../../../shared-ts/src/utils/encoders.js";
|
|
3
3
|
import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
|
|
4
|
-
import "../../../../shared-ts/src/utils/validation.js";
|
|
5
4
|
import { hasExactKeys } from "../../../../shared-ts/src/utils/exactKeys.js";
|
|
6
5
|
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
7
6
|
import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS, WALLET_EMAIL_OTP_DEVICE_LINK_OPERATION, WALLET_EMAIL_OTP_REGISTRATION_OPERATION, WALLET_EMAIL_OTP_UNLOCK_OPERATION, isWalletEmailOtpLoginOperation } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|