@seams/wallet-server 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.md +1 -113
- package/artifact-manifest.json +78 -33
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/index.js +2 -2
- package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
- package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +0 -2
- package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +77 -20
- package/dist/esm/authorization/lifecycleRouting.js +62 -0
- package/dist/esm/authorization/service.js +43 -12
- package/dist/esm/authorization/vaultProxyUse.js +2 -6
- package/dist/esm/cloud-host.js +23 -25
- package/dist/esm/core/EmailOtpRecords.js +1 -217
- package/dist/esm/core/EmailOtpStores.js +0 -859
- package/dist/esm/core/IdentityStore.js +2 -426
- package/dist/esm/core/SessionService.js +7 -30
- package/dist/esm/core/ThresholdService/config.js +1 -9
- package/dist/esm/core/ThresholdService/index.js +0 -4
- package/dist/esm/core/ThresholdService/kv.js +1 -66
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +1 -13
- package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +4 -21
- package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +0 -617
- package/dist/esm/core/ThresholdService/validation.js +2 -346
- package/dist/esm/core/WalletAuthMethodStore.js +2 -123
- package/dist/esm/core/WalletStore.js +6 -214
- package/dist/esm/core/WebAuthnAuthenticatorStore.js +0 -202
- package/dist/esm/core/WebAuthnCredentialBindingStore.js +2 -182
- package/dist/esm/core/WebAuthnLoginChallengeStore.js +0 -52
- package/dist/esm/core/WebAuthnSyncChallengeStore.js +0 -54
- package/dist/esm/core/authService/emailOtpConfig.js +1 -195
- package/dist/esm/core/authService/emailOtpEnrollment.js +0 -141
- package/dist/esm/core/authService/emailOtpSeal.js +0 -78
- package/dist/esm/core/authService/nearTransactions.js +3 -98
- package/dist/esm/core/authService/rateLimits.js +0 -87
- package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +2 -1
- package/dist/esm/core/authService/webauthn.js +14 -464
- package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -24
- package/dist/esm/core/authService/webauthnVerificationOutcomes.js +5 -24
- package/dist/esm/core/authService/webauthnWalletBinding.js +0 -37
- package/dist/esm/core/config.js +1 -95
- package/dist/esm/core/d1EcdsaSignerRead.js +76 -0
- package/dist/esm/core/d1IdentityStore.js +17 -77
- package/dist/esm/core/d1TenantStore.js +1 -24
- package/dist/esm/core/d1WalletAuthMethodStore.js +2 -5
- package/dist/esm/core/d1WalletStore.js +15 -25
- package/dist/esm/core/deviceLinking/linkedDeviceBootstrap.js +13 -0
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +1 -5
- package/dist/esm/core/deviceLinking/linkedDeviceSession.js +20 -14
- package/dist/esm/core/deviceLinking/linkedDeviceSessionApproval.js +1 -3
- package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +2 -8
- package/dist/esm/core/deviceLinking/requestProof.js +22 -10
- package/dist/esm/core/ecdsaMaterialReadSnapshot.js +85 -0
- package/dist/esm/core/emailOtpD1Statements.js +107 -94
- package/dist/esm/core/keyMaterialBrands.js +2 -12
- package/dist/esm/core/nearKeys.js +0 -1
- package/dist/esm/core/nearRelayerAccountProvisioning.js +8 -14
- package/dist/esm/core/passkeyCredentialClaims.js +8 -0
- package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +2 -6
- package/dist/esm/core/routerAbSigning/RouterAbNormalSigningRuntime.js +2 -30
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +3 -6
- package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +2 -5
- package/dist/esm/core/thresholdEcdsaChainTarget.js +2 -7
- package/dist/esm/hosted-wallet-gateway.js +68 -45
- package/dist/esm/index.js +6 -19
- package/dist/esm/localHostedWalletGatewayHandler.js +25 -0
- package/dist/esm/localIntendedMaterialAdmissionFault.js +176 -0
- package/dist/esm/localIntendedPresignCancellation.js +44 -0
- package/dist/esm/localRegistrationSetupAuthority.js +89 -0
- package/dist/esm/router/auth/authRequestValidation.js +8 -16
- package/dist/esm/router/auth/commonRouterUtils.js +24 -10
- package/dist/esm/router/auth/walletSessionFailure.js +2 -5
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +4 -16
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizationAssembly.js +87 -0
- package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +1 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.js +2 -6
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +12 -2
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +37 -308
- package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +76 -0
- package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +52 -43
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +217 -50
- package/dist/esm/router/cloudflare/d1/authorization/d1VaultProxyStore.js +8 -12
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +62 -21
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.js +6 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +12 -2
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +4 -4
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -9
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.js +2 -1
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +89 -7
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +24 -15
- package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +3 -3
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +9 -6
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +12 -56
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +17 -81
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +0 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.js +6 -25
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +1 -7
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +19 -13
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +12 -48
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +24 -86
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +9 -32
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +5 -21
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +44 -12
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +1 -49
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +37 -136
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleRegistrationCompletion.js +85 -0
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +0 -1
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +9 -88
- package/dist/esm/router/cloudflare/d1/near/d1SponsoredNearAccount.js +242 -0
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +18 -92
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +4 -55
- package/dist/esm/router/cloudflare/d1/oidc/googleOidcToken.js +41 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +9 -15
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +36 -7
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +9 -13
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +11 -50
- package/dist/esm/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.js +5 -20
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +13 -10
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +9 -14
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +25 -13
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +7 -31
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +74 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +7 -1
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +101 -260
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +12 -56
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +155 -0
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +1 -3
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +1 -4
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +131 -31
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +68 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +7 -54
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +9 -8
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +2 -142
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +55 -171
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +10 -79
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +23 -7
- package/dist/esm/router/cloudflare/runtime/routerAbPrewarm.js +2 -2
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +6 -20
- package/dist/esm/router/cloudflare/runtime/tenantRootCreationGrant.js +2 -9
- package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +1 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +5 -0
- package/dist/esm/router/cloudflare/runtime/walletControlOps.js +2 -1
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletRuntimeOps.js +16 -4
- package/dist/esm/router/cloudflare-adaptor.js +1 -2
- package/dist/esm/router/cloudflare.js +3390 -3437
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +11 -8
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +3 -2
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +6 -6
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +5 -8
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +6 -6
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +3 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +8 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +3 -6
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +6 -25
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +39 -55
- package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +0 -1
- package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +15 -62
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +2 -8
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -8
- package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +83 -74
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +1 -0
- package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +1 -0
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +5 -19
- package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +3 -7
- package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +7 -13
- package/dist/esm/router/domains/walletRegistration/walletRegistrationReservation.js +70 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +10 -11
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +2 -3
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +55 -200
- package/dist/esm/router/express.js +858 -1145
- package/dist/esm/router/framework/http.js +7 -1
- package/dist/esm/router/framework/registrationSetupDispatch.js +14 -0
- package/dist/esm/router/framework/ror/normalize.js +0 -1
- package/dist/esm/router/framework/ror/options.js +0 -1
- package/dist/esm/router/framework/ror/provider.js +0 -1
- package/dist/esm/router/framework/ror/staticProvider.js +0 -1
- package/dist/esm/router/framework/routeDefinitions.js +1 -2
- package/dist/esm/router/framework/routerApiWebhooks.js +0 -1
- package/dist/esm/router/framework/runtimeSnapshotConsumer.js +8 -35
- package/dist/esm/router/ror.js +0 -1
- package/dist/esm/router/transport/fetch/createFetchRouter.js +3 -8
- package/dist/esm/router/transport/fetch/routes/auth.js +11 -41
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +36 -147
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +7 -23
- package/dist/esm/router/transport/fetch/routes/deviceLinkingResponses.js +130 -0
- package/dist/esm/router/transport/fetch/routes/ecdsaOperationStepUpFactor.js +171 -0
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +1 -0
- package/dist/esm/router/transport/fetch/routes/sessions.js +1 -0
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +15 -38
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +46 -194
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +4 -1
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +3 -1
- package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +4 -16
- package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +0 -1
- package/dist/esm/shared-ts/src/authorization/walletSignerActivationEquality.js +12 -0
- package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +0 -2
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +2 -5
- package/dist/esm/shared-ts/src/device-linking/contracts.js +16 -1
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +1 -5
- package/dist/esm/shared-ts/src/device-linking/digests.js +1 -8
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +12 -16
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +5 -8
- package/dist/esm/shared-ts/src/near/actions.js +0 -1
- package/dist/esm/shared-ts/src/near/nearClient.js +0 -2
- package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -1
- package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/index.js +1 -6
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +5 -9
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +2 -81
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +1 -219
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +0 -3
- package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentifier.js +12 -0
- package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentity.js +2 -9
- package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +2 -6
- package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +0 -1
- package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +1 -22
- package/dist/esm/shared-ts/src/threshold/participants.js +0 -1
- package/dist/esm/shared-ts/src/threshold/signingRootScope.js +0 -1
- package/dist/esm/shared-ts/src/utils/addWalletAuthMethod.js +4 -13
- package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +1 -7
- package/dist/esm/shared-ts/src/utils/domainIds.js +1 -16
- package/dist/esm/shared-ts/src/utils/ecdsaCapabilityActivation.js +1 -11
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +2 -5
- package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +0 -1
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +3 -1
- package/dist/esm/shared-ts/src/utils/errors.js +1 -19
- package/dist/esm/shared-ts/src/utils/exactKeys.js +17 -0
- package/dist/esm/shared-ts/src/utils/failure.js +20 -0
- package/dist/esm/shared-ts/src/utils/near.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationIds.js +1 -5
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +3 -13
- package/dist/esm/shared-ts/src/utils/registrationSetupOperation.js +8 -0
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +3 -6
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -2
- package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +1 -1
- package/dist/esm/shared-ts/src/utils/thresholdEcdsaChainTarget.js +9 -0
- package/dist/esm/shared-ts/src/utils/validation.js +1 -5
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +0 -1
- package/dist/esm/shared-ts/src/utils/walletManagementProtocol.js +6 -0
- package/dist/esm/shared-ts/src/utils/wireSchema.js +2 -13
- package/dist/esm/shared-ts/src/wallet-recovery/backupAcknowledgement.js +6 -24
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +5 -6
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +1 -4
- package/dist/esm/storage/d1Sql.js +1 -7
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +10 -33
- package/dist/esm/threshold/session/signingSessionSeal/guards/backends.js +1 -2
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +3 -4
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +3 -10
- package/dist/esm/threshold/session/signingSessionSeal/options.js +0 -1
- package/dist/esm/threshold/session/signingSessionSeal/service.js +8 -35
- package/dist/esm/threshold/session/signingSessionSeal/transport/express.js +18 -94
- package/dist/esm/threshold/session/signingSessionSeal/transport/fetch.js +6 -30
- package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +5 -20
- package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +0 -611
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime_bg.wasm +0 -0
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +0 -4
- package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +2 -1
- package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +9 -2
- package/dist/types/shared-ts/src/authorization/walletSignerActivationEquality.d.ts +4 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +3 -4
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +6 -63
- package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +2 -0
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +5 -12
- package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +9 -0
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +11 -12
- package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +3 -17
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +0 -4
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +0 -1
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +0 -18
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +6 -35
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +6 -845
- package/dist/types/shared-ts/src/tenant-root/tenantRootIdentifier.d.ts +3 -0
- package/dist/types/shared-ts/src/tenant-root/tenantRootOperationRecord.d.ts +2 -1
- package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +6 -0
- package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +0 -10
- package/dist/types/shared-ts/src/threshold/participants.d.ts +1 -1
- package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +1 -133
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +4 -18
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +0 -12
- package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +2 -11
- package/dist/types/shared-ts/src/utils/eip1559TxWasmJson.d.ts +16 -0
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/errors.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/exactKeys.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/failure.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/near.d.ts +0 -20
- package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +3 -8
- package/dist/types/shared-ts/src/utils/registrationSetupOperation.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +7 -19
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +3 -1
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/routerAbNormalSigningIdentity.d.ts +30 -8
- package/dist/types/shared-ts/src/utils/routerApiKeyAuth.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +10 -11
- package/dist/types/shared-ts/src/utils/thresholdEcdsaChainTarget.d.ts +25 -0
- package/dist/types/shared-ts/src/utils/validation.d.ts +1 -3
- package/dist/types/shared-ts/src/utils/variant.d.ts +18 -0
- package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +3 -6
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +0 -1
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +4 -2
- package/dist/types/shared-ts/src/utils/wireSchema.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +0 -1
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +1 -10
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodes.d.ts +1 -3
- package/dist/types/shared-ts/src/wallet-recovery/recoveryEnvelopes.d.ts +3 -16
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +5 -21
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryPreparation.d.ts +15 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.d.ts +3 -4
- package/dist/types/wallet-server/src/authorization/domain.d.ts +13 -2
- package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +27 -3
- package/dist/types/wallet-server/src/authorization/lifecycleRouting.d.ts +32 -0
- package/dist/types/wallet-server/src/authorization/lifecycleRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/recoveryRouting.d.ts +22 -0
- package/dist/types/wallet-server/src/authorization/recoveryRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/service.d.ts +27 -1
- package/dist/types/wallet-server/src/authorization/sessionRouting.d.ts +20 -0
- package/dist/types/wallet-server/src/authorization/sessionRouting.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +31 -9
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +1 -22
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +1 -79
- package/dist/types/wallet-server/src/core/IdentityStore.d.ts +0 -10
- package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +0 -1
- package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -2
- package/dist/types/wallet-server/src/core/ThresholdService/index.d.ts +1 -3
- package/dist/types/wallet-server/src/core/ThresholdService/kv.d.ts +0 -7
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +0 -3
- package/dist/types/wallet-server/src/core/ThresholdService/routerAbNormalSigningPolicy.d.ts +0 -1
- package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +6 -18
- package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +0 -127
- package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +1 -5
- package/dist/types/wallet-server/src/core/WalletStore.d.ts +0 -3
- package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +8 -20
- package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +1 -27
- package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +2 -16
- package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +22 -14
- package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +0 -24
- package/dist/types/wallet-server/src/core/authService/emailOtpEnrollment.d.ts +1 -70
- package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +1 -14
- package/dist/types/wallet-server/src/core/authService/githubOAuth.d.ts +2 -1
- package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +1 -39
- package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -17
- package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +0 -125
- package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +1 -1
- package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +0 -12
- package/dist/types/wallet-server/src/core/config.d.ts +0 -10
- package/dist/types/wallet-server/src/core/d1EcdsaSignerRead.d.ts +39 -0
- package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +0 -2
- package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +0 -7
- package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +0 -1
- package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +10 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceBootstrap.d.ts +19 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +8 -6
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionRecord.d.ts +3 -4
- package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -5
- package/dist/types/wallet-server/src/core/ecdsaMaterialReadSnapshot.d.ts +19 -0
- package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +10 -7
- package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +1 -5
- package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +0 -1
- package/dist/types/wallet-server/src/core/passkeyCredentialClaims.d.ts +9 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +0 -2
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +3 -7
- package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +1 -2
- package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +2 -11
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +1 -92
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +4 -52
- package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +3 -12
- package/dist/types/wallet-server/src/core/types.d.ts +2 -305
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +15 -3
- package/dist/types/wallet-server/src/index.d.ts +8 -13
- package/dist/types/wallet-server/src/localIntendedMaterialAdmissionFault.d.ts +38 -0
- package/dist/types/wallet-server/src/localIntendedPresignCancellation.d.ts +4 -0
- package/dist/types/wallet-server/src/localRegistrationSetupAuthority.d.ts +13 -0
- package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +4 -9
- package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +15 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizationAssembly.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +25 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/walletSessionCredentialReaders.d.ts +9 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/authorizedOperationStatements.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +11 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +22 -3
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +7 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.d.ts +1 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +8 -6
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +5 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +1 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +2 -8
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +20 -11
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +5 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.d.ts +4 -14
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +29 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -16
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.d.ts +7 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleRegistrationCompletion.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityService.d.ts +0 -12
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1SponsoredNearAccount.d.ts +24 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1SponsoredNearAccount.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcVerificationService.d.ts +0 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/googleOidcToken.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +9 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +3 -7
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -11
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +3 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +51 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +35 -50
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +3 -30
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +14 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.d.ts +27 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +1 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +2 -2
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +8 -50
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +23 -10
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/cloudflare.types.d.ts +0 -2
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +9 -34
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRuntimeOps.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +0 -1
- package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +3 -15
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +9 -50
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +0 -2
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +0 -3
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +1 -13
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.d.ts +8 -9
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +13 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +3 -4
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +7 -33
- package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +1 -2
- package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +2 -7
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +1 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +51 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +2 -10
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +2 -2
- package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +3 -1
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +39 -38
- package/dist/types/wallet-server/src/router/framework/googleLoginResolution.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/framework/http.d.ts +1 -0
- package/dist/types/wallet-server/src/router/framework/registrationSetupDispatch.d.ts +13 -0
- package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +1 -9
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +1 -1
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +3 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingResponses.d.ts +17 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/ecdsaOperationStepUpFactor.d.ts +37 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +3 -5
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +0 -1
- package/dist/types/wallet-server/src/storage/d1Sql.d.ts +0 -1
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +1 -2
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.types.d.ts +6 -8
- package/migrations/d1-signer/0040_namespace_home_challenges.sql +16 -0
- package/migrations/d1-signer/0041_step_up_admission_expiry.sql +28 -0
- package/migrations/d1-signer/0042_deployment_resource_challenges.sql +4 -0
- package/migrations/d1-signer/0043_google_registration_candidate_claim.sql +2 -0
- package/migrations/d1-signer/0044_linked_device_bootstrap_imports.sql +6 -0
- package/migrations/d1-signer/0045_wallet_owned_capability_receipts.sql +29 -0
- package/migrations/d1-signer/0046_wallet_owned_signing_abuse.sql +41 -0
- package/migrations/d1-signer/0047_remove_unused_near_public_keys.sql +2 -0
- package/migrations/d1-signer/0048_operation_owner_scope.sql +45 -0
- package/package.json +2 -3
- package/src/README.md +11 -3
- package/dist/esm/core/AuthService.js +0 -2
- package/dist/esm/core/NearPublicKeyStore.js +0 -200
- package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +0 -397
- package/dist/esm/core/ThresholdService/stores/KeyStore.js +0 -140
- package/dist/esm/core/ThresholdService/stores/SessionStore.js +0 -361
- package/dist/esm/core/ThresholdService/stores/StoreConfig.js +0 -13
- package/dist/esm/core/authService/AuthService.js +0 -594
- package/dist/esm/core/authService/bytes.js +0 -22
- package/dist/esm/core/authService/configValues.js +0 -15
- package/dist/esm/core/authService/emailOtpChallengeOperations.js +0 -126
- package/dist/esm/core/authService/emailOtpChallengeProof.js +0 -214
- package/dist/esm/core/authService/emailOtpChallengeVerification.js +0 -335
- package/dist/esm/core/authService/emailOtpChallenges.js +0 -260
- package/dist/esm/core/authService/emailOtpDelivery.js +0 -169
- package/dist/esm/core/authService/emailOtpGrant.js +0 -74
- package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +0 -175
- package/dist/esm/core/authService/emailOtpUnlock.js +0 -264
- package/dist/esm/core/authService/googleEmailOtpOperations.js +0 -141
- package/dist/esm/core/authService/googleEmailOtpRegistration.js +0 -674
- package/dist/esm/core/authService/identity.js +0 -57
- package/dist/esm/core/authService/identityOperations.js +0 -32
- package/dist/esm/core/authService/nearAccountOperations.js +0 -229
- package/dist/esm/core/authService/nearPublicKeyMetadata.js +0 -127
- package/dist/esm/core/authService/oidcVerification.js +0 -261
- package/dist/esm/core/authService/registrationThresholdHelpers.js +0 -30
- package/dist/esm/core/authService/runtime.js +0 -45
- package/dist/esm/core/authService/storeRegistry.js +0 -102
- package/dist/esm/core/authService/thresholdStoreSummary.js +0 -32
- package/dist/esm/core/authService/webauthnAuthority.js +0 -17
- package/dist/esm/core/defaultConfigsServer.js +0 -9
- package/dist/esm/core/hostedAccountIds.js +0 -225
- package/dist/esm/core/routerAbSigning/createRouterAbSigningRuntimes.js +0 -84
- package/dist/esm/core/signingLanes/LaneAggregateRevocationApplicationService.js +0 -86
- package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +0 -324
- package/dist/esm/core/signingLanes/LaneEnrollmentRevocation.js +0 -173
- package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +0 -198
- package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +0 -73
- package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +0 -68
- package/dist/esm/core/signingLanes/signingWorkerLaneMaterialIdentity.js +0 -0
- package/dist/esm/core/storeBackends.js +0 -208
- package/dist/esm/core/utils.js +0 -14
- package/dist/esm/core/webAuthnStoreBackends.js +0 -198
- package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +0 -56
- package/dist/esm/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.js +0 -10
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.js +0 -22
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -166
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.js +0 -38
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.js +0 -20
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +0 -1459
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLockStore.js +0 -114
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.js +0 -16
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +0 -171
- package/dist/esm/router/cloudflare/d1/signingLanes/index.js +0 -10
- package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +0 -404
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +0 -596
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +0 -273
- package/dist/esm/router/cloudflare/signingLanes/index.js +0 -4
- package/dist/esm/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.js +0 -32
- package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +0 -39
- package/dist/esm/shared-ts/src/signing-lanes/rotation.js +0 -8
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +0 -358
- package/dist/esm/shared-ts/src/signing-lanes/rotationLifecycle.js +0 -313
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +0 -532
- package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +0 -323
- package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +0 -59
- package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +0 -13
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +0 -78
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +0 -27
- package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +0 -6
- package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +0 -20
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeAttempt.d.ts +0 -59
- package/dist/types/wallet-server/src/core/AuthService.d.ts +0 -3
- package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +0 -48
- package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +0 -21
- package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +0 -40
- package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +0 -98
- package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +0 -4
- package/dist/types/wallet-server/src/core/ThresholdService/stores/ThresholdStoreConfig.typecheck.d.ts +0 -2
- package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -490
- package/dist/types/wallet-server/src/core/authService/bytes.d.ts +0 -4
- package/dist/types/wallet-server/src/core/authService/configValues.d.ts +0 -7
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +0 -109
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +0 -169
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +0 -47
- package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +0 -94
- package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +0 -66
- package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +0 -43
- package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +0 -49
- package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +0 -71
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpOperations.d.ts +0 -126
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +0 -169
- package/dist/types/wallet-server/src/core/authService/identity.d.ts +0 -25
- package/dist/types/wallet-server/src/core/authService/identityOperations.d.ts +0 -19
- package/dist/types/wallet-server/src/core/authService/nearAccountOperations.d.ts +0 -55
- package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +0 -44
- package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +0 -66
- package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -11
- package/dist/types/wallet-server/src/core/authService/runtime.d.ts +0 -20
- package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -53
- package/dist/types/wallet-server/src/core/authService/thresholdStoreSummary.d.ts +0 -3
- package/dist/types/wallet-server/src/core/authService/webauthnAuthority.d.ts +0 -5
- package/dist/types/wallet-server/src/core/defaultConfigsServer.d.ts +0 -5
- package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -16
- package/dist/types/wallet-server/src/core/routerAbSigning/createRouterAbSigningRuntimes.d.ts +0 -16
- package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +0 -36
- package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +0 -62
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentActivation.d.ts +0 -13
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentRevocation.d.ts +0 -24
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleApplicationService.d.ts +0 -141
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +0 -228
- package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +0 -58
- package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +0 -30
- package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +0 -21
- package/dist/types/wallet-server/src/core/storeBackends.d.ts +0 -83
- package/dist/types/wallet-server/src/core/utils.d.ts +0 -3
- package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +0 -96
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +0 -29
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -24
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.d.ts +0 -20
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.d.ts +0 -13
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.d.ts +0 -51
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLockStore.d.ts +0 -28
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.d.ts +0 -5
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneRecords.d.ts +0 -107
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/index.d.ts +0 -10
- package/dist/types/wallet-server/src/router/cloudflare/durableObjects/thresholdStore.d.ts +0 -18
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.d.ts +0 -217
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.d.ts +0 -73
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/index.d.ts +0 -4
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.d.ts +0 -6
- package/dist/types/wallet-server/src/router/transport/fetch/routes/nearPublicKeys.d.ts +0 -3
- /package/dist/esm/{core/signingLanes/LaneEffectJournalStore.js → authorization/recoveryRouting.js} +0 -0
- /package/dist/esm/{core/signingLanes/LaneLifecycleStore.js → authorization/sessionRouting.js} +0 -0
|
@@ -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,6 +1,6 @@
|
|
|
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";
|
|
3
|
+
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
4
4
|
import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
5
5
|
import { emailOtpChallengePurposeIsValid, emailOtpChallengeRecord, generateNumericOtp } from "./d1EmailOtpRecords.js";
|
|
6
6
|
//#region src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.ts
|
|
@@ -8,18 +8,10 @@ function errorMessage(error) {
|
|
|
8
8
|
return error instanceof Error ? error.message : String(error || "");
|
|
9
9
|
}
|
|
10
10
|
function emailOtpEnrollmentTenantMismatch() {
|
|
11
|
-
return
|
|
12
|
-
ok: false,
|
|
13
|
-
code: "tenant_scope_mismatch",
|
|
14
|
-
message: "Email OTP enrollment does not match the requested orgId"
|
|
15
|
-
};
|
|
11
|
+
return failure("tenant_scope_mismatch", "Email OTP enrollment does not match the requested orgId");
|
|
16
12
|
}
|
|
17
13
|
function emailOtpProviderIdentityMismatch() {
|
|
18
|
-
return
|
|
19
|
-
ok: false,
|
|
20
|
-
code: "provider_identity_mismatch",
|
|
21
|
-
message: "Email OTP enrollment does not match the requested provider user"
|
|
22
|
-
};
|
|
14
|
+
return failure("provider_identity_mismatch", "Email OTP enrollment does not match the requested provider user");
|
|
23
15
|
}
|
|
24
16
|
var CloudflareD1EmailOtpChallengeIssuer = class {
|
|
25
17
|
constructor(input) {
|
|
@@ -40,39 +32,15 @@ var CloudflareD1EmailOtpChallengeIssuer = class {
|
|
|
40
32
|
const clientIp = normalizeOptionalTrimmedString(input.clientIp);
|
|
41
33
|
const action = input.action;
|
|
42
34
|
const operation = input.operation;
|
|
43
|
-
if (!userId) return
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (!walletId) return {
|
|
49
|
-
ok: false,
|
|
50
|
-
code: "invalid_body",
|
|
51
|
-
message: "Missing walletId"
|
|
52
|
-
};
|
|
53
|
-
if (!orgId) return {
|
|
54
|
-
ok: false,
|
|
55
|
-
code: "invalid_body",
|
|
56
|
-
message: "Missing orgId"
|
|
57
|
-
};
|
|
58
|
-
if (otpChannel !== "email_otp") return {
|
|
59
|
-
ok: false,
|
|
60
|
-
code: "invalid_body",
|
|
61
|
-
message: "otpChannel must be email_otp"
|
|
62
|
-
};
|
|
63
|
-
if (!ownerProofBindingDigest) return {
|
|
64
|
-
ok: false,
|
|
65
|
-
code: "invalid_body",
|
|
66
|
-
message: "Missing ownerProofBindingDigest"
|
|
67
|
-
};
|
|
35
|
+
if (!userId) return failure("invalid_body", "Missing userId");
|
|
36
|
+
if (!walletId) return failure("invalid_body", "Missing walletId");
|
|
37
|
+
if (!orgId) return failure("invalid_body", "Missing orgId");
|
|
38
|
+
if (otpChannel !== "email_otp") return failure("invalid_body", "otpChannel must be email_otp");
|
|
39
|
+
if (!ownerProofBindingDigest) return failure("invalid_body", "Missing ownerProofBindingDigest");
|
|
68
40
|
if (!emailOtpChallengePurposeIsValid({
|
|
69
41
|
action,
|
|
70
42
|
operation
|
|
71
|
-
})) return
|
|
72
|
-
ok: false,
|
|
73
|
-
code: "invalid_body",
|
|
74
|
-
message: "Email OTP challenge action does not match operation"
|
|
75
|
-
};
|
|
43
|
+
})) return failure("invalid_body", "Email OTP challenge action does not match operation");
|
|
76
44
|
let challengeEmail = email;
|
|
77
45
|
if (action !== WALLET_EMAIL_OTP_ACTIONS.registration && action !== WALLET_EMAIL_OTP_ACTIONS.recoveryBootstrap) {
|
|
78
46
|
const enrollment = await this.readActiveEnrollment({
|
|
@@ -91,11 +59,7 @@ var CloudflareD1EmailOtpChallengeIssuer = class {
|
|
|
91
59
|
};
|
|
92
60
|
challengeEmail = enrollment.enrollment.verifiedEmail;
|
|
93
61
|
}
|
|
94
|
-
if (!challengeEmail) return
|
|
95
|
-
ok: false,
|
|
96
|
-
code: "recovery_email_missing",
|
|
97
|
-
message: "Authenticated identity does not include a recovery email"
|
|
98
|
-
};
|
|
62
|
+
if (!challengeEmail) return failure("recovery_email_missing", "Authenticated identity does not include a recovery email");
|
|
99
63
|
const nowMs = Date.now();
|
|
100
64
|
await this.emailOtpChallenges.pruneExpired(nowMs);
|
|
101
65
|
if (input.reuseActiveChallenge === true) {
|
|
@@ -188,20 +152,12 @@ var CloudflareD1EmailOtpChallengeIssuer = class {
|
|
|
188
152
|
delivery: delivery.delivery
|
|
189
153
|
};
|
|
190
154
|
} catch (error) {
|
|
191
|
-
return
|
|
192
|
-
ok: false,
|
|
193
|
-
code: "internal",
|
|
194
|
-
message: errorMessage(error) || "Failed to create Email OTP challenge"
|
|
195
|
-
};
|
|
155
|
+
return failure("internal", errorMessage(error) || "Failed to create Email OTP challenge");
|
|
196
156
|
}
|
|
197
157
|
}
|
|
198
158
|
async readActiveEnrollment(input) {
|
|
199
159
|
const enrollment = await this.emailOtpEnrollments.readEnrollment(input.walletId);
|
|
200
|
-
if (!enrollment) return
|
|
201
|
-
ok: false,
|
|
202
|
-
code: "not_found",
|
|
203
|
-
message: "Email OTP enrollment not found"
|
|
204
|
-
};
|
|
160
|
+
if (!enrollment) return failure("not_found", "Email OTP enrollment not found");
|
|
205
161
|
if (enrollment.orgId !== input.orgId) return emailOtpEnrollmentTenantMismatch();
|
|
206
162
|
if (enrollment.providerUserId !== input.providerUserId) return emailOtpProviderIdentityMismatch();
|
|
207
163
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
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";
|
|
3
|
+
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
4
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";
|
|
5
5
|
import { emailOtpGrantRecord, maskEmail, parseEmailOtpLoginOperation } from "./d1EmailOtpRecords.js";
|
|
6
6
|
//#region src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.ts
|
|
@@ -89,26 +89,10 @@ var CloudflareD1EmailOtpChallengeService = class {
|
|
|
89
89
|
const orgId = normalizeOptionalTrimmedString(input.orgId);
|
|
90
90
|
const challengeId = normalizeOptionalTrimmedString(input.challengeId);
|
|
91
91
|
const registrationAttemptId = normalizeOptionalTrimmedString(input.googleEmailOtpRegistrationAttemptId);
|
|
92
|
-
if (!providerSubject) return
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
};
|
|
97
|
-
if (!walletId) return {
|
|
98
|
-
ok: false,
|
|
99
|
-
code: "invalid_body",
|
|
100
|
-
message: "Email OTP registration requires walletId"
|
|
101
|
-
};
|
|
102
|
-
if (!orgId) return {
|
|
103
|
-
ok: false,
|
|
104
|
-
code: "invalid_body",
|
|
105
|
-
message: "Email OTP registration requires orgId"
|
|
106
|
-
};
|
|
107
|
-
if (!challengeId) return {
|
|
108
|
-
ok: false,
|
|
109
|
-
code: "invalid_body",
|
|
110
|
-
message: "Email OTP registration requires challengeId"
|
|
111
|
-
};
|
|
92
|
+
if (!providerSubject) return failure("invalid_body", "Email OTP registration requires providerSubject");
|
|
93
|
+
if (!walletId) return failure("invalid_body", "Email OTP registration requires walletId");
|
|
94
|
+
if (!orgId) return failure("invalid_body", "Email OTP registration requires orgId");
|
|
95
|
+
if (!challengeId) return failure("invalid_body", "Email OTP registration requires challengeId");
|
|
112
96
|
const proofEmail = await this.resolveRegistrationProofEmail({
|
|
113
97
|
explicitProofEmail: input.proofEmail,
|
|
114
98
|
providerSubject,
|
|
@@ -129,11 +113,7 @@ var CloudflareD1EmailOtpChallengeService = class {
|
|
|
129
113
|
});
|
|
130
114
|
if (!verified.ok) return verified;
|
|
131
115
|
const verifiedEmail = normalizeOptionalTrimmedString(verified.email)?.toLowerCase() || "";
|
|
132
|
-
if (!verifiedEmail) return
|
|
133
|
-
ok: false,
|
|
134
|
-
code: "internal",
|
|
135
|
-
message: "Email OTP enrollment verification did not include a verified email"
|
|
136
|
-
};
|
|
116
|
+
if (!verifiedEmail) return failure("internal", "Email OTP enrollment verification did not include a verified email");
|
|
137
117
|
const persisted = await this.finalizer.persistVerifiedEnrollment({
|
|
138
118
|
walletId: verified.walletId,
|
|
139
119
|
orgId: verified.orgId,
|
|
@@ -151,11 +131,7 @@ var CloudflareD1EmailOtpChallengeService = class {
|
|
|
151
131
|
enrollment: persisted.enrollment
|
|
152
132
|
};
|
|
153
133
|
} catch (error) {
|
|
154
|
-
return
|
|
155
|
-
ok: false,
|
|
156
|
-
code: "internal",
|
|
157
|
-
message: errorMessage(error) || "Failed to verify Email OTP enrollment"
|
|
158
|
-
};
|
|
134
|
+
return failure("internal", errorMessage(error) || "Failed to verify Email OTP enrollment");
|
|
159
135
|
}
|
|
160
136
|
}
|
|
161
137
|
async verifyEmailOtpChallenge(input) {
|
|
@@ -232,41 +208,21 @@ var CloudflareD1EmailOtpChallengeService = class {
|
|
|
232
208
|
};
|
|
233
209
|
}
|
|
234
210
|
async readEmailOtpOutboxEntry(input) {
|
|
235
|
-
if (!this.devOutboxEnabled) return
|
|
236
|
-
ok: false,
|
|
237
|
-
code: "not_found",
|
|
238
|
-
message: "Email OTP dev outbox is not enabled"
|
|
239
|
-
};
|
|
211
|
+
if (!this.devOutboxEnabled) return failure("not_found", "Email OTP dev outbox is not enabled");
|
|
240
212
|
const challengeId = normalizeOptionalTrimmedString(input.challengeId);
|
|
241
213
|
const userId = normalizeOptionalTrimmedString(input.userId);
|
|
242
214
|
const walletId = normalizeOptionalTrimmedString(input.walletId);
|
|
243
|
-
if (!userId) return
|
|
244
|
-
|
|
245
|
-
code: "invalid_body",
|
|
246
|
-
message: "Missing userId"
|
|
247
|
-
};
|
|
248
|
-
if (!walletId) return {
|
|
249
|
-
ok: false,
|
|
250
|
-
code: "invalid_body",
|
|
251
|
-
message: "Missing walletId"
|
|
252
|
-
};
|
|
215
|
+
if (!userId) return failure("invalid_body", "Missing userId");
|
|
216
|
+
if (!walletId) return failure("invalid_body", "Missing walletId");
|
|
253
217
|
const record = challengeId ? await this.challenges.read(challengeId) : await this.challenges.readLatestActiveForSubjectWallet({
|
|
254
218
|
challengeSubjectId: userId,
|
|
255
219
|
walletId,
|
|
256
220
|
nowMs: Date.now()
|
|
257
221
|
});
|
|
258
|
-
if (!record || record.challengeSubjectId !== userId || record.walletId !== walletId) return
|
|
259
|
-
ok: false,
|
|
260
|
-
code: "not_found",
|
|
261
|
-
message: "Email OTP outbox entry was not found"
|
|
262
|
-
};
|
|
222
|
+
if (!record || record.challengeSubjectId !== userId || record.walletId !== walletId) return failure("not_found", "Email OTP outbox entry was not found");
|
|
263
223
|
if (Date.now() > record.expiresAtMs) {
|
|
264
224
|
await this.challenges.delete(challengeId);
|
|
265
|
-
return
|
|
266
|
-
ok: false,
|
|
267
|
-
code: "not_found",
|
|
268
|
-
message: "Email OTP outbox entry expired"
|
|
269
|
-
};
|
|
225
|
+
return failure("not_found", "Email OTP outbox entry expired");
|
|
270
226
|
}
|
|
271
227
|
return {
|
|
272
228
|
ok: true,
|
|
@@ -286,33 +242,13 @@ var CloudflareD1EmailOtpChallengeService = class {
|
|
|
286
242
|
ok: true,
|
|
287
243
|
email: proofEmail
|
|
288
244
|
};
|
|
289
|
-
return
|
|
290
|
-
ok: false,
|
|
291
|
-
code: "invalid_body",
|
|
292
|
-
message: "Email OTP registration requires proofEmail"
|
|
293
|
-
};
|
|
245
|
+
return failure("invalid_body", "Email OTP registration requires proofEmail");
|
|
294
246
|
}
|
|
295
247
|
const attempt = await this.registrationAttempts.read(input.registrationAttemptId);
|
|
296
|
-
if (!attempt) return
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
};
|
|
301
|
-
if (attempt.providerSubject !== input.providerSubject) return {
|
|
302
|
-
ok: false,
|
|
303
|
-
code: "challenge_subject_mismatch",
|
|
304
|
-
message: "Email OTP registration attempt does not match the provider subject"
|
|
305
|
-
};
|
|
306
|
-
if (attempt.expiresAtMs <= Date.now()) return {
|
|
307
|
-
ok: false,
|
|
308
|
-
code: "registration_attempt_expired",
|
|
309
|
-
message: "Google Email OTP registration attempt expired"
|
|
310
|
-
};
|
|
311
|
-
if (attempt.walletId !== input.walletId) return {
|
|
312
|
-
ok: false,
|
|
313
|
-
code: "wallet_identity_mismatch",
|
|
314
|
-
message: "registrationAttemptId does not match walletId"
|
|
315
|
-
};
|
|
248
|
+
if (!attempt) return failure("registration_attempt_missing", "Google Email OTP registration attempt expired or was not found");
|
|
249
|
+
if (attempt.providerSubject !== input.providerSubject) return failure("challenge_subject_mismatch", "Email OTP registration attempt does not match the provider subject");
|
|
250
|
+
if (attempt.expiresAtMs <= Date.now()) return failure("registration_attempt_expired", "Google Email OTP registration attempt expired");
|
|
251
|
+
if (attempt.walletId !== input.walletId) return failure("wallet_identity_mismatch", "registrationAttemptId does not match walletId");
|
|
316
252
|
proofEmail = attempt.email.toLowerCase();
|
|
317
253
|
return {
|
|
318
254
|
ok: true,
|
|
@@ -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,3 +1,4 @@
|
|
|
1
|
+
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
1
2
|
import { EMAIL_OTP_CHANNEL } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
|
|
2
3
|
import { maskEmail } from "./d1EmailOtpRecords.js";
|
|
3
4
|
//#region src/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.ts
|
|
@@ -24,11 +25,7 @@ var CloudflareD1EmailOtpDeliveryRuntime = class {
|
|
|
24
25
|
return this.resolveDelivery(record, requestOrigin, "reused");
|
|
25
26
|
}
|
|
26
27
|
async deliverEmailOtpCode(record, requestOrigin) {
|
|
27
|
-
if (this.config.production && this.config.deliveryMode !== "email_provider" && this.config.deliveryMode !== "provider_and_demo_code" && this.config.deliveryMode !== "demo_code_response") return {
|
|
28
|
-
ok: false,
|
|
29
|
-
code: "email_otp_delivery_not_allowed",
|
|
30
|
-
message: `Email OTP delivery mode ${this.config.deliveryMode} is disabled in production`
|
|
31
|
-
};
|
|
28
|
+
if (this.config.production && this.config.deliveryMode !== "email_provider" && this.config.deliveryMode !== "provider_and_demo_code" && this.config.deliveryMode !== "demo_code_response") return failure("email_otp_delivery_not_allowed", `Email OTP delivery mode ${this.config.deliveryMode} is disabled in production`);
|
|
32
29
|
const emailHint = maskEmail(record.email);
|
|
33
30
|
switch (this.config.deliveryMode) {
|
|
34
31
|
case "provider_and_demo_code": {
|
|
@@ -58,11 +55,7 @@ var CloudflareD1EmailOtpDeliveryRuntime = class {
|
|
|
58
55
|
}
|
|
59
56
|
async dispatchProviderEmail(record, emailHint) {
|
|
60
57
|
const provider = this.config.deliveryProvider;
|
|
61
|
-
if (!provider) return
|
|
62
|
-
ok: false,
|
|
63
|
-
code: "email_otp_delivery_not_configured",
|
|
64
|
-
message: "Email OTP email_provider delivery is not configured"
|
|
65
|
-
};
|
|
58
|
+
if (!provider) return failure("email_otp_delivery_not_configured", "Email OTP email_provider delivery is not configured");
|
|
66
59
|
const result = await provider.deliver({
|
|
67
60
|
challengeId: record.challengeId,
|
|
68
61
|
walletId: record.walletId,
|
|
@@ -86,11 +79,7 @@ var CloudflareD1EmailOtpDeliveryRuntime = class {
|
|
|
86
79
|
const emailHint = maskEmail(record.email);
|
|
87
80
|
switch (this.config.deliveryMode) {
|
|
88
81
|
case "email_provider":
|
|
89
|
-
if (!this.config.deliveryProvider) return
|
|
90
|
-
ok: false,
|
|
91
|
-
code: "email_otp_delivery_not_configured",
|
|
92
|
-
message: "Email OTP email_provider delivery is not configured"
|
|
93
|
-
};
|
|
82
|
+
if (!this.config.deliveryProvider) return failure("email_otp_delivery_not_configured", "Email OTP email_provider delivery is not configured");
|
|
94
83
|
return {
|
|
95
84
|
ok: true,
|
|
96
85
|
delivery: {
|
|
@@ -101,11 +90,7 @@ var CloudflareD1EmailOtpDeliveryRuntime = class {
|
|
|
101
90
|
}
|
|
102
91
|
};
|
|
103
92
|
case "provider_and_demo_code":
|
|
104
|
-
if (!this.config.deliveryProvider) return
|
|
105
|
-
ok: false,
|
|
106
|
-
code: "email_otp_delivery_not_configured",
|
|
107
|
-
message: "Email OTP email_provider delivery is not configured"
|
|
108
|
-
};
|
|
93
|
+
if (!this.config.deliveryProvider) return failure("email_otp_delivery_not_configured", "Email OTP email_provider delivery is not configured");
|
|
109
94
|
return this.resolveDemoCodeDelivery(record, requestOrigin, status, emailHint);
|
|
110
95
|
case "log":
|
|
111
96
|
case "dev_d1_outbox":
|
|
@@ -124,11 +109,7 @@ var CloudflareD1EmailOtpDeliveryRuntime = class {
|
|
|
124
109
|
}
|
|
125
110
|
resolveDemoCodeDelivery(record, requestOrigin, status, emailHint) {
|
|
126
111
|
const origin = typeof requestOrigin === "string" ? requestOrigin.trim() : "";
|
|
127
|
-
if (!this.config.demoAllowedOrigins.includes(origin)) return
|
|
128
|
-
ok: false,
|
|
129
|
-
code: "email_otp_demo_origin_not_allowed",
|
|
130
|
-
message: "Email OTP demo code delivery is not allowed for this origin"
|
|
131
|
-
};
|
|
112
|
+
if (!this.config.demoAllowedOrigins.includes(origin)) return failure("email_otp_demo_origin_not_allowed", "Email OTP demo code delivery is not allowed for this origin");
|
|
132
113
|
if (this.config.deliveryMode === "provider_and_demo_code") return {
|
|
133
114
|
ok: true,
|
|
134
115
|
delivery: {
|
|
@@ -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,8 @@
|
|
|
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/
|
|
4
|
+
import { hasExactKeys } from "../../../../shared-ts/src/utils/exactKeys.js";
|
|
5
|
+
import { failure } from "../../../../shared-ts/src/utils/failure.js";
|
|
5
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";
|
|
6
7
|
import { isB64uString, nonNegativeSafeInteger, parseJsonObject, positiveSafeInteger } from "../auth/d1RouterApiAuthBoundary.js";
|
|
7
8
|
import { parseCurrentEmailOtpChallengeRow, parseCurrentEmailOtpGrantRow, parseCurrentEmailOtpUnlockChallengeRow } from "../../../../core/EmailOtpRecords.js";
|
|
@@ -165,7 +166,7 @@ function parseEmailOtpChallengeRow(row) {
|
|
|
165
166
|
}
|
|
166
167
|
function parseEmailOtpRegistrationVerificationReceiptV1(input) {
|
|
167
168
|
const record = parseJsonObject(input);
|
|
168
|
-
if (!record || !
|
|
169
|
+
if (!record || !hasExactKeys(record, [
|
|
169
170
|
"version",
|
|
170
171
|
"requestFingerprint",
|
|
171
172
|
"verified",
|
|
@@ -176,7 +177,7 @@ function parseEmailOtpRegistrationVerificationReceiptV1(input) {
|
|
|
176
177
|
const verified = parseJsonObject(record.verified);
|
|
177
178
|
const verifiedAtMs = positiveSafeInteger(record.verifiedAtMs);
|
|
178
179
|
const expiresAtMs = positiveSafeInteger(record.expiresAtMs);
|
|
179
|
-
if (!requestFingerprint || !isB64uString(requestFingerprint) || !verified || !
|
|
180
|
+
if (!requestFingerprint || !isB64uString(requestFingerprint) || !verified || !hasExactKeys(verified, [
|
|
180
181
|
"challengeId",
|
|
181
182
|
"challengeSubjectId",
|
|
182
183
|
"walletId",
|
|
@@ -284,11 +285,7 @@ function emailOtpRegistrationChallengeBindingMismatchCode(input) {
|
|
|
284
285
|
return null;
|
|
285
286
|
}
|
|
286
287
|
function emailOtpChallengeInvalidOrExpired() {
|
|
287
|
-
return
|
|
288
|
-
ok: false,
|
|
289
|
-
code: "challenge_expired_or_invalid",
|
|
290
|
-
message: "Email OTP challenge expired or invalid"
|
|
291
|
-
};
|
|
288
|
+
return failure("challenge_expired_or_invalid", "Email OTP challenge expired or invalid");
|
|
292
289
|
}
|
|
293
290
|
function emailOtpGrantRecord(input) {
|
|
294
291
|
return {
|
|
@@ -330,49 +327,21 @@ async function validateEmailOtpEnrollmentMaterial(input) {
|
|
|
330
327
|
const clientUnlockPublicKeyB64u = normalizeOptionalTrimmedString(input.material.clientUnlockPublicKeyB64u);
|
|
331
328
|
const unlockKeyVersion = normalizeOptionalTrimmedString(input.material.unlockKeyVersion);
|
|
332
329
|
const serverSealedFactorCiphertextB64u = normalizeOptionalTrimmedString(input.material.serverSealedFactorCiphertextB64u);
|
|
333
|
-
if (!enrollmentSealKeyVersion) return
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
};
|
|
338
|
-
if (!clientUnlockPublicKeyB64u) return {
|
|
339
|
-
ok: false,
|
|
340
|
-
code: "invalid_body",
|
|
341
|
-
message: "clientUnlockPublicKeyB64u is required"
|
|
342
|
-
};
|
|
343
|
-
if (!unlockKeyVersion) return {
|
|
344
|
-
ok: false,
|
|
345
|
-
code: "invalid_body",
|
|
346
|
-
message: "unlockKeyVersion is required"
|
|
347
|
-
};
|
|
348
|
-
if (!serverSealedFactorCiphertextB64u) return {
|
|
349
|
-
ok: false,
|
|
350
|
-
code: "invalid_body",
|
|
351
|
-
message: "serverSealedFactorCiphertextB64u is required"
|
|
352
|
-
};
|
|
330
|
+
if (!enrollmentSealKeyVersion) return failure("invalid_body", "enrollmentSealKeyVersion is required");
|
|
331
|
+
if (!clientUnlockPublicKeyB64u) return failure("invalid_body", "clientUnlockPublicKeyB64u is required");
|
|
332
|
+
if (!unlockKeyVersion) return failure("invalid_body", "unlockKeyVersion is required");
|
|
333
|
+
if (!serverSealedFactorCiphertextB64u) return failure("invalid_body", "serverSealedFactorCiphertextB64u is required");
|
|
353
334
|
let unlockPublicKeyBytes;
|
|
354
335
|
try {
|
|
355
336
|
unlockPublicKeyBytes = base64UrlDecode(clientUnlockPublicKeyB64u);
|
|
356
337
|
} catch {
|
|
357
|
-
return
|
|
358
|
-
ok: false,
|
|
359
|
-
code: "invalid_body",
|
|
360
|
-
message: "clientUnlockPublicKeyB64u must be valid base64url"
|
|
361
|
-
};
|
|
338
|
+
return failure("invalid_body", "clientUnlockPublicKeyB64u must be valid base64url");
|
|
362
339
|
}
|
|
363
|
-
if (unlockPublicKeyBytes.length !== 33) return
|
|
364
|
-
ok: false,
|
|
365
|
-
code: "invalid_body",
|
|
366
|
-
message: "clientUnlockPublicKeyB64u must decode to 33 bytes (compressed secp256k1 pubkey)"
|
|
367
|
-
};
|
|
340
|
+
if (unlockPublicKeyBytes.length !== 33) return failure("invalid_body", "clientUnlockPublicKeyB64u must decode to 33 bytes (compressed secp256k1 pubkey)");
|
|
368
341
|
try {
|
|
369
342
|
await input.validateSecp256k1PublicKey33(unlockPublicKeyBytes);
|
|
370
343
|
} catch {
|
|
371
|
-
return
|
|
372
|
-
ok: false,
|
|
373
|
-
code: "invalid_body",
|
|
374
|
-
message: "clientUnlockPublicKeyB64u is not a valid secp256k1 public key"
|
|
375
|
-
};
|
|
344
|
+
return failure("invalid_body", "clientUnlockPublicKeyB64u is not a valid secp256k1 public key");
|
|
376
345
|
}
|
|
377
346
|
return {
|
|
378
347
|
ok: true,
|
|
@@ -421,11 +390,6 @@ function optionalNonNegativeSafeIntegerField(record, field) {
|
|
|
421
390
|
function hasRecordField(record, field) {
|
|
422
391
|
return Object.prototype.hasOwnProperty.call(record, field);
|
|
423
392
|
}
|
|
424
|
-
function hasExactRecordFields(record, expectedFields) {
|
|
425
|
-
const actualFields = Object.keys(record).sort();
|
|
426
|
-
const expected = [...expectedFields].sort();
|
|
427
|
-
return actualFields.length === expected.length && actualFields.every((field, index) => field === expected[index]);
|
|
428
|
-
}
|
|
429
393
|
function patchedPositiveAuthStateValue(current, patch) {
|
|
430
394
|
if (patch === null) return void 0;
|
|
431
395
|
if (patch === void 0) return current;
|