@seams/wallet-server 0.5.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/LICENSE +21 -0
- package/README.md +8 -0
- package/artifact-manifest.json +464 -0
- package/cloudflare-router-ab/build/deriver-a/index.js +2 -0
- package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-a/package.json +16 -0
- package/cloudflare-router-ab/build/deriver-a/worker/shim.mjs +4 -0
- package/cloudflare-router-ab/build/deriver-b/index.js +2 -0
- package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-b/package.json +16 -0
- package/cloudflare-router-ab/build/deriver-b/worker/shim.mjs +4 -0
- package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/router/index.js +2 -0
- package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/router/package.json +16 -0
- package/cloudflare-router-ab/build/router/worker/shim.mjs +4 -0
- package/cloudflare-router-ab/build/signing-worker/index.js +2 -0
- package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/package.json +16 -0
- package/cloudflare-router-ab/build/signing-worker/worker/shim.mjs +4 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/package.json +16 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/worker/shim.mjs +4 -0
- package/cloudflare-router-ab/env/tenant-root-control-plane.local.example +6 -0
- package/cloudflare-router-ab/migrations/deriver-a/0001_role_private_storage.sql +14 -0
- package/cloudflare-router-ab/migrations/deriver-a/0002_tenant_root_role_shares.sql +32 -0
- package/cloudflare-router-ab/migrations/deriver-a/0003_tenant_root_command_replays.sql +76 -0
- package/cloudflare-router-ab/migrations/deriver-a/0004_tenant_root_creation_admission.sql +7 -0
- package/cloudflare-router-ab/migrations/deriver-a/0005_tenant_root_refresh_state.sql +15 -0
- package/cloudflare-router-ab/migrations/deriver-a/0006_tenant_root_restore_import_keys.sql +119 -0
- package/cloudflare-router-ab/migrations/deriver-a/0007_tenant_root_restore_refresh_attempts.sql +103 -0
- package/cloudflare-router-ab/migrations/deriver-a/0008_tenant_root_restore_promotion.sql +40 -0
- package/cloudflare-router-ab/migrations/deriver-a/0009_tenant_root_restore_preactivation_cleanup.sql +8 -0
- package/cloudflare-router-ab/migrations/deriver-a/0010_tenant_root_recovery_attempts.sql +26 -0
- package/cloudflare-router-ab/migrations/deriver-a/0011_tenant_root_source_retirement.sql +100 -0
- package/cloudflare-router-ab/migrations/deriver-b/0001_role_private_storage.sql +14 -0
- package/cloudflare-router-ab/migrations/deriver-b/0002_tenant_root_role_shares.sql +32 -0
- package/cloudflare-router-ab/migrations/deriver-b/0003_tenant_root_command_replays.sql +76 -0
- package/cloudflare-router-ab/migrations/deriver-b/0004_tenant_root_creation_admission.sql +7 -0
- package/cloudflare-router-ab/migrations/deriver-b/0005_tenant_root_refresh_state.sql +15 -0
- package/cloudflare-router-ab/migrations/deriver-b/0006_tenant_root_restore_import_keys.sql +119 -0
- package/cloudflare-router-ab/migrations/deriver-b/0007_tenant_root_restore_refresh_attempts.sql +103 -0
- package/cloudflare-router-ab/migrations/deriver-b/0008_tenant_root_restore_promotion.sql +40 -0
- package/cloudflare-router-ab/migrations/deriver-b/0009_tenant_root_restore_preactivation_cleanup.sql +8 -0
- package/cloudflare-router-ab/migrations/deriver-b/0010_tenant_root_recovery_attempts.sql +26 -0
- package/cloudflare-router-ab/migrations/deriver-b/0011_tenant_root_source_retirement.sql +100 -0
- package/cloudflare-router-ab/migrations/signing-worker/0001_private_storage.sql +67 -0
- package/cloudflare-router-ab/migrations/signing-worker/0002_activation_revocation_fences.sql +3 -0
- package/cloudflare-router-ab/scripts/bootstrap-local-tenant-root.mjs +182 -0
- package/cloudflare-router-ab/scripts/initialize-local-wallet.mjs +17 -0
- package/cloudflare-router-ab/scripts/local-key-material.mjs +29 -0
- package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +1110 -0
- package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +333 -0
- package/cloudflare-router-ab/scripts/start-local-wallet-system.mjs +427 -0
- package/cloudflare-router-ab/wrangler.deriver-a.toml +123 -0
- package/cloudflare-router-ab/wrangler.deriver-b.toml +123 -0
- package/cloudflare-router-ab/wrangler.router.toml +126 -0
- package/cloudflare-router-ab/wrangler.signing-worker.toml +86 -0
- package/cloudflare-router-ab/wrangler.tenant-root-control-plane.toml +56 -0
- package/dist/esm/authorization/capabilityPolicy.js +96 -0
- package/dist/esm/authorization/domain.js +434 -0
- package/dist/esm/authorization/factorEvidence.js +405 -0
- package/dist/esm/authorization/service.js +319 -0
- package/dist/esm/authorization/vaultProxyUse.js +295 -0
- package/dist/esm/cloud-host.js +126 -0
- package/dist/esm/core/AuthService.js +2 -0
- package/dist/esm/core/EmailOtpRecords.js +361 -0
- package/dist/esm/core/EmailOtpStores.js +1460 -0
- package/dist/esm/core/IdentityStore.js +617 -0
- package/dist/esm/core/NearPublicKeyStore.js +242 -0
- package/dist/esm/core/RegistrationCeremonyStore.js +2101 -0
- package/dist/esm/core/SessionService.js +255 -0
- package/dist/esm/core/ThresholdService/config.js +111 -0
- package/dist/esm/core/ThresholdService/ecdsaClientRootProof.js +27 -0
- package/dist/esm/core/ThresholdService/evmCryptoWasm.js +167 -0
- package/dist/esm/core/ThresholdService/index.js +4 -0
- package/dist/esm/core/ThresholdService/kv.js +368 -0
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +360 -0
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillLiveSession.js +282 -0
- package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +272 -0
- package/dist/esm/core/ThresholdService/routerAb/internalServiceHttp.js +57 -0
- package/dist/esm/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.js +115 -0
- package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +31 -0
- package/dist/esm/core/ThresholdService/secureRandomId.js +9 -0
- package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +603 -0
- package/dist/esm/core/ThresholdService/stores/EcdsaSigningStore.js +422 -0
- package/dist/esm/core/ThresholdService/stores/KeyStore.js +140 -0
- package/dist/esm/core/ThresholdService/stores/SessionStore.js +437 -0
- package/dist/esm/core/ThresholdService/stores/StoreConfig.js +13 -0
- package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +722 -0
- package/dist/esm/core/ThresholdService/validation.js +718 -0
- package/dist/esm/core/WalletAuthMethodStore.js +180 -0
- package/dist/esm/core/WalletStore.js +495 -0
- package/dist/esm/core/WebAuthnAuthenticatorStore.js +485 -0
- package/dist/esm/core/WebAuthnCredentialBindingStore.js +594 -0
- package/dist/esm/core/WebAuthnLoginChallengeStore.js +432 -0
- package/dist/esm/core/WebAuthnSyncChallengeStore.js +434 -0
- package/dist/esm/core/authService/AuthService.js +611 -0
- package/dist/esm/core/authService/bytes.js +22 -0
- package/dist/esm/core/authService/configValues.js +15 -0
- package/dist/esm/core/authService/emailOtpChallengeOperations.js +126 -0
- package/dist/esm/core/authService/emailOtpChallengeProof.js +214 -0
- package/dist/esm/core/authService/emailOtpChallengeVerification.js +335 -0
- package/dist/esm/core/authService/emailOtpChallenges.js +260 -0
- package/dist/esm/core/authService/emailOtpConfig.js +231 -0
- package/dist/esm/core/authService/emailOtpDelivery.js +169 -0
- package/dist/esm/core/authService/emailOtpEnrollment.js +141 -0
- package/dist/esm/core/authService/emailOtpGrant.js +74 -0
- package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +322 -0
- package/dist/esm/core/authService/emailOtpSeal.js +78 -0
- package/dist/esm/core/authService/emailOtpUnlock.js +264 -0
- package/dist/esm/core/authService/githubOAuth.js +140 -0
- package/dist/esm/core/authService/googleEmailOtpErrors.js +6 -0
- package/dist/esm/core/authService/googleEmailOtpOperations.js +141 -0
- package/dist/esm/core/authService/googleEmailOtpRegistration.js +674 -0
- package/dist/esm/core/authService/identity.js +57 -0
- package/dist/esm/core/authService/identityOperations.js +32 -0
- package/dist/esm/core/authService/nearAccountOperations.js +229 -0
- package/dist/esm/core/authService/nearPrivateKeySigning.js +110 -0
- package/dist/esm/core/authService/nearPublicKeyMetadata.js +127 -0
- package/dist/esm/core/authService/nearTransactions.js +139 -0
- package/dist/esm/core/authService/oidcVerification.js +262 -0
- package/dist/esm/core/authService/portableCrypto.js +19 -0
- package/dist/esm/core/authService/rateLimits.js +117 -0
- package/dist/esm/core/authService/record.js +8 -0
- package/dist/esm/core/authService/registrationThresholdHelpers.js +131 -0
- package/dist/esm/core/authService/runtime.js +45 -0
- package/dist/esm/core/authService/signerWasmUrls.js +20 -0
- package/dist/esm/core/authService/storeRegistry.js +113 -0
- package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +146 -0
- package/dist/esm/core/authService/thresholdRuntimePolicy.js +19 -0
- package/dist/esm/core/authService/thresholdStoreSummary.js +32 -0
- package/dist/esm/core/authService/walletRegistrationPlanning.js +49 -0
- package/dist/esm/core/authService/wasm.js +78 -0
- package/dist/esm/core/authService/webauthn.js +746 -0
- package/dist/esm/core/authService/webauthnAuthority.js +17 -0
- package/dist/esm/core/authService/webauthnOidcHelpers.js +91 -0
- package/dist/esm/core/authService/webauthnWalletBinding.js +157 -0
- package/dist/esm/core/config.js +110 -0
- package/dist/esm/core/d1IdentityStore.js +340 -0
- package/dist/esm/core/d1WalletAuthMethodStore.js +768 -0
- package/dist/esm/core/d1WalletStore.js +724 -0
- package/dist/esm/core/defaultConfigsServer.js +9 -0
- package/dist/esm/core/deviceLinking/index.js +5 -0
- package/dist/esm/core/deviceLinking/linkedDeviceEd25519ExportRoot.js +0 -0
- package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +211 -0
- package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +279 -0
- package/dist/esm/core/deviceLinking/linkedDeviceSession.js +1419 -0
- package/dist/esm/core/deviceLinking/requestProof.js +172 -0
- package/dist/esm/core/errors.js +54 -0
- package/dist/esm/core/hostedAccountIds.js +225 -0
- package/dist/esm/core/keyMaterialBrands.js +58 -0
- package/dist/esm/core/logger.js +39 -0
- package/dist/esm/core/nearKeys.js +20 -0
- package/dist/esm/core/nearRelayerAccountProvisioning.js +713 -0
- package/dist/esm/core/nearSignerWasmRuntime.js +87 -0
- package/dist/esm/core/registrationContracts.js +2 -0
- package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +88 -0
- package/dist/esm/core/routerAbSigning/RouterAbNormalSigningRuntime.js +101 -0
- package/dist/esm/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.js +39 -0
- package/dist/esm/core/routerAbSigning/createRouterAbSigningRuntimes.js +91 -0
- package/dist/esm/core/rpcClients/near/NearClient.js +389 -0
- package/dist/esm/core/sessionValidation.js +0 -0
- package/dist/esm/core/signingLanes/LaneAggregateRevocationApplicationService.js +86 -0
- package/dist/esm/core/signingLanes/LaneEffectJournalStore.js +0 -0
- package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +324 -0
- package/dist/esm/core/signingLanes/LaneEnrollmentRevocation.js +173 -0
- package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +200 -0
- package/dist/esm/core/signingLanes/LaneLifecycleStore.js +24 -0
- package/dist/esm/core/signingLanes/SigningLaneStore.js +0 -0
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +296 -0
- package/dist/esm/core/signingLanes/WalletKeyStore.js +0 -0
- package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +78 -0
- package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +71 -0
- package/dist/esm/core/signingLanes/index.js +8 -0
- package/dist/esm/core/signingLanes/signingWorkerLaneMaterialIdentity.js +0 -0
- package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +305 -0
- package/dist/esm/core/threeRouteRegistrationContracts.js +5 -0
- package/dist/esm/core/thresholdEcdsaChainTarget.js +49 -0
- package/dist/esm/core/types.js +8 -0
- package/dist/esm/core/utils.js +14 -0
- package/dist/esm/delegateAction/index.js +136 -0
- package/dist/esm/hosted-wallet-gateway-worker.js +18 -0
- package/dist/esm/hosted-wallet-gateway.js +701 -0
- package/dist/esm/index.js +53 -0
- package/dist/esm/local-hosted-wallet-gateway-worker.js +23 -0
- package/dist/esm/node_modules/@near-js/types/lib/esm/provider/response.js +17 -0
- package/dist/esm/router/auth/authRequestValidation.js +264 -0
- package/dist/esm/router/auth/commonRouterUtils.js +305 -0
- package/dist/esm/router/auth/routerApiCredentialAuth.js +91 -0
- package/dist/esm/router/auth/routerApiKeyAuth.js +63 -0
- package/dist/esm/router/auth/walletSessionFailure.js +49 -0
- package/dist/esm/router/auth/webAuthnCredentialCodecs.js +107 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.js +84 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +321 -0
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +1581 -0
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +1820 -0
- package/dist/esm/router/cloudflare/d1/authorization/d1VaultProxyStore.js +122 -0
- package/dist/esm/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.js +119 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +1831 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.js +118 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +81 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +539 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.js +92 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +560 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +136 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.js +95 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +91 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionService.js +15 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +732 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js +195 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetAuthenticatorStore.js +100 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +867 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.js +169 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +255 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.js +128 -0
- package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +15 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +311 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +21 -0
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoWalletSigner.js +65 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +216 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +326 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +346 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +495 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.js +157 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +248 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +66 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +76 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +539 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +404 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +200 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +84 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +217 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +485 -0
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +509 -0
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +51 -0
- package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +135 -0
- package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +62 -0
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +272 -0
- package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +132 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.js +628 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +871 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +823 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpAttemptStore.js +38 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +304 -0
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +793 -0
- package/dist/esm/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.js +120 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +317 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +2084 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +309 -0
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +120 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +263 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +3887 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +182 -0
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +399 -0
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +486 -0
- package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +146 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.js +10 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.js +22 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +167 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.js +38 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.js +20 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +1459 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLockStore.js +114 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.js +16 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +170 -0
- package/dist/esm/router/cloudflare/d1/signingLanes/index.js +10 -0
- package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +412 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +1396 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.js +285 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +2018 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +792 -0
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +635 -0
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +538 -0
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +264 -0
- package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +514 -0
- package/dist/esm/router/cloudflare/durableObjects/versionedJsonRecordStore.js +192 -0
- package/dist/esm/router/cloudflare/runtime/cloudflare.types.js +0 -0
- package/dist/esm/router/cloudflare/runtime/cloudflareSignerWasm.js +8 -0
- package/dist/esm/router/cloudflare/runtime/createCloudflareRouter.js +19 -0
- package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +94 -0
- package/dist/esm/router/cloudflare/runtime/ed25519SessionAdapter.js +106 -0
- package/dist/esm/router/cloudflare/runtime/environment.js +25 -0
- package/dist/esm/router/cloudflare/runtime/routerAbPrewarm.js +34 -0
- package/dist/esm/router/cloudflare/runtime/routerAbServiceBindings.js +33 -0
- package/dist/esm/router/cloudflare/runtime/sessionAdapterRuntime.js +104 -0
- package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +168 -0
- package/dist/esm/router/cloudflare/runtime/tenantRootCreationGrant.js +147 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +143 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +227 -0
- package/dist/esm/router/cloudflare/runtime/walletConsoleTenantRootLineage.js +30 -0
- package/dist/esm/router/cloudflare/runtime/walletControlOps.js +107 -0
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +149 -0
- package/dist/esm/router/cloudflare/runtime/walletRuntimeOps.js +322 -0
- package/dist/esm/router/cloudflare/runtime/walletRuntimeOpsHandler.js +48 -0
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +597 -0
- package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +272 -0
- package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +477 -0
- package/dist/esm/router/cloudflare/signingLanes/index.js +4 -0
- package/dist/esm/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.js +32 -0
- package/dist/esm/router/cloudflare-adaptor.js +45 -0
- package/dist/esm/router/cloudflare.js +42794 -0
- package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +738 -0
- package/dist/esm/router/domains/ecdsa/thresholdEcdsaRequestValidation.js +134 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +368 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +624 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +143 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +270 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.js +31 -0
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +162 -0
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +1366 -0
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +465 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +1609 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +540 -0
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +394 -0
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +572 -0
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +555 -0
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +268 -0
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +329 -0
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +423 -0
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +432 -0
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js +58 -0
- package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +0 -0
- package/dist/esm/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.js +0 -0
- package/dist/esm/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.js +275 -0
- package/dist/esm/router/domains/emailOtp/emailOtpExportPolicy.js +70 -0
- package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +34 -0
- package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +218 -0
- package/dist/esm/router/domains/emailOtp/emailOtpSessionRouteHelpers.js +210 -0
- package/dist/esm/router/domains/passkeyCustody/envelopeRevocationAdmission.js +26 -0
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +107 -0
- package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.js +45 -0
- package/dist/esm/router/domains/passkeyCustody/registrationCustodyOutcome.js +47 -0
- package/dist/esm/router/domains/passkeyCustody/verifiedCustodyFactor.js +46 -0
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.js +32 -0
- package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +170 -0
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryAttempt.js +64 -0
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryFinalization.js +652 -0
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryKeyManifest.js +396 -0
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryRotation.js +87 -0
- package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +89 -0
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.js +106 -0
- package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +2669 -0
- package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +228 -0
- package/dist/esm/router/domains/syncAccount/syncAccountRequestValidation.js +78 -0
- package/dist/esm/router/domains/tenantRoot/tenantRootCustodyLineage.js +0 -0
- package/dist/esm/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.js +55 -0
- package/dist/esm/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.js +56 -0
- package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +111 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationInputs.js +0 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +2199 -0
- package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +155 -0
- package/dist/esm/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.js +84 -0
- package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +1142 -0
- package/dist/esm/router/express-adaptor.js +84 -0
- package/dist/esm/router/express.js +26616 -0
- package/dist/esm/router/framework/apiCredentialPorts.js +11 -0
- package/dist/esm/router/framework/applyRouteMetering.js +26 -0
- package/dist/esm/router/framework/authServicePort.js +30 -0
- package/dist/esm/router/framework/enforceRoutePolicy.js +92 -0
- package/dist/esm/router/framework/http.js +87 -0
- package/dist/esm/router/framework/logger.js +7 -0
- package/dist/esm/router/framework/modules.js +34 -0
- package/dist/esm/router/framework/ror/index.js +5 -0
- package/dist/esm/router/framework/ror/normalize.js +57 -0
- package/dist/esm/router/framework/ror/options.js +33 -0
- package/dist/esm/router/framework/ror/provider.js +33 -0
- package/dist/esm/router/framework/ror/staticProvider.js +24 -0
- package/dist/esm/router/framework/routeAuthPolicy.js +16 -0
- package/dist/esm/router/framework/routeDefinitions.js +446 -0
- package/dist/esm/router/framework/routeExecutionContext.js +24 -0
- package/dist/esm/router/framework/routeExtensions.js +50 -0
- package/dist/esm/router/framework/routeMeteringPolicy.js +0 -0
- package/dist/esm/router/framework/routeRequestValidation.js +32 -0
- package/dist/esm/router/framework/routeResponses.js +33 -0
- package/dist/esm/router/framework/routerApi.js +42 -0
- package/dist/esm/router/framework/routerApiRouteSurface.js +54 -0
- package/dist/esm/router/framework/routerApiWebhooks.js +60 -0
- package/dist/esm/router/framework/runtimeSnapshotConsumer.js +145 -0
- package/dist/esm/router/framework/versionedJsonRecordStore.js +0 -0
- package/dist/esm/router/ror-adaptor.js +5 -0
- package/dist/esm/router/ror.js +178 -0
- package/dist/esm/router/transport/fetch/createFetchRouter.js +309 -0
- package/dist/esm/router/transport/fetch/fetchRouter.types.js +0 -0
- package/dist/esm/router/transport/fetch/routes/auth.js +219 -0
- package/dist/esm/router/transport/fetch/routes/deviceLinking.js +1196 -0
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +264 -0
- package/dist/esm/router/transport/fetch/routes/deviceManagement.js +289 -0
- package/dist/esm/router/transport/fetch/routes/health.js +42 -0
- package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +39 -0
- package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +118 -0
- package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +1618 -0
- package/dist/esm/router/transport/fetch/routes/sessions.js +1033 -0
- package/dist/esm/router/transport/fetch/routes/syncAccount.js +187 -0
- package/dist/esm/router/transport/fetch/routes/syncAccountBootstrap.js +214 -0
- package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +1729 -0
- package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +1321 -0
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +228 -0
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +73 -0
- package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +43 -0
- package/dist/esm/router/transport/fetch/routes/wellKnown.js +48 -0
- package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +224 -0
- package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +134 -0
- package/dist/esm/shared-ts/src/authorization/index.js +6 -0
- package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +58 -0
- package/dist/esm/shared-ts/src/authorization/walletAuthority.js +802 -0
- package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +18 -0
- package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +5 -0
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +332 -0
- package/dist/esm/shared-ts/src/device-linking/contracts.js +8 -0
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +132 -0
- package/dist/esm/shared-ts/src/device-linking/digests.js +273 -0
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +158 -0
- package/dist/esm/shared-ts/src/device-linking/index.js +9 -0
- package/dist/esm/shared-ts/src/device-linking/parsers.js +1412 -0
- package/dist/esm/shared-ts/src/device-linking/requestProof.js +114 -0
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +563 -0
- package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +207 -0
- package/dist/esm/shared-ts/src/near/actions.js +75 -0
- package/dist/esm/shared-ts/src/passkey-custody/ceremonyCommitPayload.js +69 -0
- package/dist/esm/shared-ts/src/passkey-custody/credentialActivity.js +81 -0
- package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +272 -0
- package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +175 -0
- package/dist/esm/shared-ts/src/passkey-custody/index.js +5 -0
- package/dist/esm/shared-ts/src/passkey-custody/primitives.js +92 -0
- package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +53 -0
- package/dist/esm/shared-ts/src/signing-lanes/execution.js +14 -0
- package/dist/esm/shared-ts/src/signing-lanes/index.js +11 -0
- package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +1 -0
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +91 -0
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +124 -0
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +262 -0
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +143 -0
- package/dist/esm/shared-ts/src/signing-lanes/rotation.js +8 -0
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +397 -0
- package/dist/esm/shared-ts/src/signing-lanes/rotationLifecycle.js +313 -0
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +1620 -0
- package/dist/esm/shared-ts/src/tenant-root/index.js +2 -0
- package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentity.js +198 -0
- package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +440 -0
- package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +85 -0
- package/dist/esm/shared-ts/src/threshold/participants.js +26 -0
- package/dist/esm/shared-ts/src/threshold/sessionPolicy.js +9 -0
- package/dist/esm/shared-ts/src/threshold/signingRootScope.js +40 -0
- package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +104 -0
- package/dist/esm/shared-ts/src/utils/addWalletAuthMethod.js +36 -0
- package/dist/esm/shared-ts/src/utils/base58.js +28 -0
- package/dist/esm/shared-ts/src/utils/base64.js +70 -0
- package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +27 -0
- package/dist/esm/shared-ts/src/utils/digests.js +33 -0
- package/dist/esm/shared-ts/src/utils/domainIds.js +309 -0
- package/dist/esm/shared-ts/src/utils/ecdsaCapabilityActivation.js +34 -0
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +46 -0
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +38 -0
- package/dist/esm/shared-ts/src/utils/emailOtpRecoveryKey.js +10 -0
- package/dist/esm/shared-ts/src/utils/encoders.js +2 -0
- package/dist/esm/shared-ts/src/utils/errors.js +88 -0
- package/dist/esm/shared-ts/src/utils/evmRpcResults.js +97 -0
- package/dist/esm/shared-ts/src/utils/jsonRpc.js +64 -0
- package/dist/esm/shared-ts/src/utils/keccak.js +150 -0
- package/dist/esm/shared-ts/src/utils/near.js +99 -0
- package/dist/esm/shared-ts/src/utils/nearRpcResults.js +205 -0
- package/dist/esm/shared-ts/src/utils/normalize.js +87 -0
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +201 -0
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +1268 -0
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1655 -0
- package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +984 -0
- package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +118 -0
- package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +138 -0
- package/dist/esm/shared-ts/src/utils/routerAbTraceContext.js +36 -0
- package/dist/esm/shared-ts/src/utils/secureRandomId.js +35 -0
- package/dist/esm/shared-ts/src/utils/signingSessionSeal.js +118 -0
- package/dist/esm/shared-ts/src/utils/thresholdEcdsaKeyHandle.js +28 -0
- package/dist/esm/shared-ts/src/utils/validation.js +23 -0
- package/dist/esm/shared-ts/src/utils/walletAddSignerActivation.js +32 -0
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +207 -0
- package/dist/esm/shared-ts/src/utils/walletSessionFailure.js +15 -0
- package/dist/esm/shared-ts/src/utils/webauthnDeviceInfo.js +207 -0
- package/dist/esm/shared-ts/src/wallet-recovery/backupAcknowledgement.js +66 -0
- package/dist/esm/shared-ts/src/wallet-recovery/index.js +10 -0
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeIssuance.js +1 -0
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +34 -0
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +80 -0
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodes.js +4 -0
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +53 -0
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +108 -0
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +157 -0
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +233 -0
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryRotation.js +3 -0
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryTarget.js +29 -0
- package/dist/esm/storage/d1Sql.js +85 -0
- package/dist/esm/storage/tenantRoute.js +89 -0
- package/dist/esm/tenant-root.js +5 -0
- package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +204 -0
- package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +87 -0
- package/dist/esm/threshold/session/signingSessionSeal/guards/backends.js +192 -0
- package/dist/esm/threshold/session/signingSessionSeal/guards/index.js +121 -0
- package/dist/esm/threshold/session/signingSessionSeal/idempotency.js +38 -0
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +131 -0
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +55 -0
- package/dist/esm/threshold/session/signingSessionSeal/index.js +13 -0
- package/dist/esm/threshold/session/signingSessionSeal/observability/audit.js +38 -0
- package/dist/esm/threshold/session/signingSessionSeal/options.js +54 -0
- package/dist/esm/threshold/session/signingSessionSeal/routesOptions.js +45 -0
- package/dist/esm/threshold/session/signingSessionSeal/service.js +316 -0
- package/dist/esm/threshold/session/signingSessionSeal/signingSessionSeal.types.js +0 -0
- package/dist/esm/threshold/session/signingSessionSeal/transport/express.js +151 -0
- package/dist/esm/threshold/session/signingSessionSeal/transport/fetch.js +106 -0
- package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +159 -0
- package/dist/esm/threshold/statusCodes.js +39 -0
- package/dist/esm/wasm/evm_crypto/pkg/evm_crypto.js +601 -0
- package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +1078 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker.js +503 -0
- package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
- package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime.js +393 -0
- package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime_bg.wasm +0 -0
- package/dist/esm/wasm/signer.js +2 -0
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +147 -0
- package/dist/types/shared-ts/src/authorization/capabilityKinds.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +44 -0
- package/dist/types/shared-ts/src/authorization/index.d.ts +7 -0
- package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +39 -0
- package/dist/types/shared-ts/src/authorization/operationFingerprint.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +168 -0
- package/dist/types/shared-ts/src/authorization/walletAuthority.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/authorization/walletCustodyOperation.d.ts +10 -0
- package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +28 -0
- package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -0
- package/dist/types/shared-ts/src/device-linking/activeWalletSession.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +71 -0
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +843 -0
- package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/device-linking/delegatedActivationPlan.d.ts +37 -0
- package/dist/types/shared-ts/src/device-linking/digests.d.ts +23 -0
- package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +93 -0
- package/dist/types/shared-ts/src/device-linking/index.d.ts +11 -0
- package/dist/types/shared-ts/src/device-linking/parsers.d.ts +124 -0
- package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +26 -0
- package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +182 -0
- package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +84 -0
- package/dist/types/shared-ts/src/index.d.ts +10 -0
- package/dist/types/shared-ts/src/near/actions.d.ts +141 -0
- package/dist/types/shared-ts/src/near/delegate.d.ts +55 -0
- package/dist/types/shared-ts/src/near/index.d.ts +3 -0
- package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +211 -0
- package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +49 -0
- package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +74 -0
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +191 -0
- package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +140 -0
- package/dist/types/shared-ts/src/passkey-custody/envelopeIndex.d.ts +29 -0
- package/dist/types/shared-ts/src/passkey-custody/index.d.ts +9 -0
- package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +34 -0
- package/dist/types/shared-ts/src/passkey-custody/passkeyCustody.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +34 -0
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +27 -0
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +91 -0
- package/dist/types/shared-ts/src/signing-lanes/execution.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +18 -0
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +14 -0
- package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +62 -0
- package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +30 -0
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +48 -0
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +89 -0
- package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +128 -0
- package/dist/types/shared-ts/src/signing-lanes/records.d.ts +160 -0
- package/dist/types/shared-ts/src/signing-lanes/records.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +894 -0
- package/dist/types/shared-ts/src/signing-lanes/rotation.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +32 -0
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +99 -0
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +67 -0
- package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +11 -0
- package/dist/types/shared-ts/src/tenant-root/index.d.ts +3 -0
- package/dist/types/shared-ts/src/tenant-root/tenantRootIdentity.d.ts +72 -0
- package/dist/types/shared-ts/src/tenant-root/tenantRootOperationRecord.d.ts +192 -0
- package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +77 -0
- package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +130 -0
- package/dist/types/shared-ts/src/threshold/index.d.ts +7 -0
- package/dist/types/shared-ts/src/threshold/participants.d.ts +38 -0
- package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +39 -0
- package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +5 -0
- package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +24 -0
- package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +63 -0
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +295 -0
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/authenticatorOptions.d.ts +25 -0
- package/dist/types/shared-ts/src/utils/base58.d.ts +17 -0
- package/dist/types/shared-ts/src/utils/base64.d.ts +53 -0
- package/dist/types/shared-ts/src/utils/bigint.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/digests.d.ts +6 -0
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +140 -0
- package/dist/types/shared-ts/src/utils/domainIds.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/ecdsaCapabilityActivation.d.ts +29 -0
- package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +24 -0
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +30 -0
- package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +31 -0
- package/dist/types/shared-ts/src/utils/encoders.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/errors.d.ts +44 -0
- package/dist/types/shared-ts/src/utils/evmRpcResults.d.ts +31 -0
- package/dist/types/shared-ts/src/utils/generated/routerAbEd25519YaoCore.d.ts +128 -0
- package/dist/types/shared-ts/src/utils/index.d.ts +34 -0
- package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +30 -0
- package/dist/types/shared-ts/src/utils/keccak.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/near.d.ts +81 -0
- package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +101 -0
- package/dist/types/shared-ts/src/utils/normalize.d.ts +57 -0
- package/dist/types/shared-ts/src/utils/paillier.d.ts +37 -0
- package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +85 -0
- package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +621 -0
- package/dist/types/shared-ts/src/utils/registrationIntent.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +715 -0
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivationRefresh.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +339 -0
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/routerAbNormalSigningIdentity.d.ts +71 -0
- package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +51 -0
- package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +16 -0
- package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +6 -0
- package/dist/types/shared-ts/src/utils/signerDomain.d.ts +75 -0
- package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/signerSlot.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +153 -0
- package/dist/types/shared-ts/src/utils/signingSessionSeal.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/theme.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/thresholdEcdsaKeyHandle.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/validation.d.ts +35 -0
- package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +23 -0
- package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +150 -0
- package/dist/types/shared-ts/src/utils/walletAuthAuthority.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +106 -0
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/walletSessionFailure.d.ts +13 -0
- package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +48 -0
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +56 -0
- package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +10 -0
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeAttempt.d.ts +59 -0
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeIssuance.d.ts +37 -0
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +22 -0
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +79 -0
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodes.d.ts +11 -0
- package/dist/types/shared-ts/src/wallet-recovery/recoveryEnvelopes.d.ts +42 -0
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +37 -0
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +58 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecovery.typecheck.d.ts +2 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +110 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +29 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +115 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryRotation.d.ts +18 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.d.ts +12 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/capabilityPolicy.d.ts +45 -0
- package/dist/types/wallet-server/src/authorization/capabilityPolicy.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/domain.d.ts +454 -0
- package/dist/types/wallet-server/src/authorization/domain.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/factorEvidence.d.ts +165 -0
- package/dist/types/wallet-server/src/authorization/factorEvidence.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/authorization/service.d.ts +227 -0
- package/dist/types/wallet-server/src/authorization/vaultProxyUse.d.ts +75 -0
- package/dist/types/wallet-server/src/cloud-host.d.ts +94 -0
- package/dist/types/wallet-server/src/core/AuthService.d.ts +3 -0
- package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +33 -0
- package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +336 -0
- package/dist/types/wallet-server/src/core/IdentityStore.d.ts +57 -0
- package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +58 -0
- package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +551 -0
- package/dist/types/wallet-server/src/core/SessionService.d.ts +70 -0
- package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +23 -0
- package/dist/types/wallet-server/src/core/ThresholdService/ecdsaClientRootProof.d.ts +12 -0
- package/dist/types/wallet-server/src/core/ThresholdService/evmCryptoWasm.d.ts +32 -0
- package/dist/types/wallet-server/src/core/ThresholdService/index.d.ts +4 -0
- package/dist/types/wallet-server/src/core/ThresholdService/kv.d.ts +52 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +45 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillLiveSession.d.ts +93 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +138 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +30 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.d.ts +17 -0
- package/dist/types/wallet-server/src/core/ThresholdService/routerAbNormalSigningPolicy.d.ts +21 -0
- package/dist/types/wallet-server/src/core/ThresholdService/secureRandomId.d.ts +2 -0
- package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +128 -0
- package/dist/types/wallet-server/src/core/ThresholdService/stores/EcdsaSigningStore.d.ts +76 -0
- package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +39 -0
- package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +102 -0
- package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +3 -0
- package/dist/types/wallet-server/src/core/ThresholdService/stores/ThresholdStoreConfig.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +98 -0
- package/dist/types/wallet-server/src/core/ThresholdService/thresholdEd25519AuthorityScope.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +193 -0
- package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +12 -0
- package/dist/types/wallet-server/src/core/WalletStore.d.ts +143 -0
- package/dist/types/wallet-server/src/core/WalletStore.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +62 -0
- package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +116 -0
- package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.typecheck.d.ts +13 -0
- package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +50 -0
- package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +50 -0
- package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +493 -0
- package/dist/types/wallet-server/src/core/authService/bytes.d.ts +4 -0
- package/dist/types/wallet-server/src/core/authService/configValues.d.ts +7 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +108 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +177 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +46 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +110 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +34 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +65 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpEnrollment.d.ts +79 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +42 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +116 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +35 -0
- package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +70 -0
- package/dist/types/wallet-server/src/core/authService/githubOAuth.d.ts +35 -0
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpErrors.d.ts +2 -0
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpOperations.d.ts +126 -0
- package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +172 -0
- package/dist/types/wallet-server/src/core/authService/identity.d.ts +25 -0
- package/dist/types/wallet-server/src/core/authService/identityOperations.d.ts +19 -0
- package/dist/types/wallet-server/src/core/authService/nearAccountOperations.d.ts +55 -0
- package/dist/types/wallet-server/src/core/authService/nearPrivateKeySigning.d.ts +16 -0
- package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +43 -0
- package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +49 -0
- package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +65 -0
- package/dist/types/wallet-server/src/core/authService/portableCrypto.d.ts +3 -0
- package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +30 -0
- package/dist/types/wallet-server/src/core/authService/record.d.ts +2 -0
- package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +37 -0
- package/dist/types/wallet-server/src/core/authService/runtime.d.ts +20 -0
- package/dist/types/wallet-server/src/core/authService/signerWasmUrls.d.ts +3 -0
- package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +58 -0
- package/dist/types/wallet-server/src/core/authService/thresholdEcdsaKeyInventory.d.ts +72 -0
- package/dist/types/wallet-server/src/core/authService/thresholdRuntimePolicy.d.ts +4 -0
- package/dist/types/wallet-server/src/core/authService/thresholdStoreSummary.d.ts +3 -0
- package/dist/types/wallet-server/src/core/authService/walletRegistrationPlanning.d.ts +19 -0
- package/dist/types/wallet-server/src/core/authService/wasm.d.ts +12 -0
- package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +207 -0
- package/dist/types/wallet-server/src/core/authService/webauthnAuthority.d.ts +5 -0
- package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +52 -0
- package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +48 -0
- package/dist/types/wallet-server/src/core/config.d.ts +13 -0
- package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +44 -0
- package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +214 -0
- package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +108 -0
- package/dist/types/wallet-server/src/core/defaultConfigsServer.d.ts +5 -0
- package/dist/types/wallet-server/src/core/deviceLinking/index.d.ts +5 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEd25519ExportRoot.d.ts +36 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEmailOtpGrant.d.ts +87 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceManagement.d.ts +137 -0
- package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +462 -0
- package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +55 -0
- package/dist/types/wallet-server/src/core/errors.d.ts +10 -0
- package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +31 -0
- package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +28 -0
- package/dist/types/wallet-server/src/core/keyMaterialBrands.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/core/logger.d.ts +21 -0
- package/dist/types/wallet-server/src/core/nearKeys.d.ts +3 -0
- package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +78 -0
- package/dist/types/wallet-server/src/core/nearSignerWasmRuntime.d.ts +3 -0
- package/dist/types/wallet-server/src/core/registrationContracts.d.ts +747 -0
- package/dist/types/wallet-server/src/core/registrationRequests.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +53 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +71 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.d.ts +28 -0
- package/dist/types/wallet-server/src/core/routerAbSigning/createRouterAbSigningRuntimes.d.ts +16 -0
- package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +134 -0
- package/dist/types/wallet-server/src/core/sessionValidation.d.ts +9 -0
- package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +35 -0
- package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +63 -0
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentActivation.d.ts +13 -0
- package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentRevocation.d.ts +24 -0
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleApplicationService.d.ts +141 -0
- package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +229 -0
- package/dist/types/wallet-server/src/core/signingLanes/SigningLaneStore.d.ts +15 -0
- package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +59 -0
- package/dist/types/wallet-server/src/core/signingLanes/WalletKeyStore.d.ts +13 -0
- package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +58 -0
- package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +30 -0
- package/dist/types/wallet-server/src/core/signingLanes/index.d.ts +11 -0
- package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +21 -0
- package/dist/types/wallet-server/src/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.d.ts +155 -0
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +442 -0
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +58 -0
- package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +15 -0
- package/dist/types/wallet-server/src/core/types.d.ts +757 -0
- package/dist/types/wallet-server/src/core/utils.d.ts +3 -0
- package/dist/types/wallet-server/src/delegateAction/index.d.ts +88 -0
- package/dist/types/wallet-server/src/hosted-wallet-gateway-worker.d.ts +10 -0
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +126 -0
- package/dist/types/wallet-server/src/index.d.ts +34 -0
- package/dist/types/wallet-server/src/local-hosted-wallet-gateway-worker.d.ts +13 -0
- package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +97 -0
- package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +142 -0
- package/dist/types/wallet-server/src/router/auth/routerApiCredentialAuth.d.ts +26 -0
- package/dist/types/wallet-server/src/router/auth/routerApiKeyAuth.d.ts +16 -0
- package/dist/types/wallet-server/src/router/auth/walletSessionFailure.d.ts +14 -0
- package/dist/types/wallet-server/src/router/auth/webAuthnCredentialCodecs.d.ts +20 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +28 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +192 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +174 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1VaultProxyStore.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.d.ts +24 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +241 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +32 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.d.ts +118 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.d.ts +22 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.d.ts +80 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.d.ts +29 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.d.ts +17 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.d.ts +37 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionService.d.ts +12 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +149 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.d.ts +38 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetAuthenticatorStore.d.ts +19 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +220 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +88 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.d.ts +54 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/index.d.ts +15 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.d.ts +33 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts +6 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoWalletSigner.d.ts +27 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +80 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.d.ts +48 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +64 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +126 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.d.ts +22 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +68 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +15 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +37 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +186 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.d.ts +45 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.d.ts +124 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.d.ts +24 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +51 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +69 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.d.ts +57 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityRecords.d.ts +38 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityService.d.ts +31 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +30 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcBoundary.d.ts +60 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcVerificationService.d.ts +39 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.d.ts +335 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +448 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +256 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpAttemptStore.d.ts +32 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.d.ts +116 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.d.ts +180 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.d.ts +24 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +86 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +121 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +84 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationIntentService.d.ts +31 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +49 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +369 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +106 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +104 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +70 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +26 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +25 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.d.ts +20 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.d.ts +13 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.d.ts +51 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLockStore.d.ts +28 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneRecords.d.ts +107 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/index.d.ts +10 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +118 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +114 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.d.ts +90 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +359 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +143 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.d.ts +42 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +135 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +89 -0
- package/dist/types/wallet-server/src/router/cloudflare/durableObjects/thresholdStore.d.ts +19 -0
- package/dist/types/wallet-server/src/router/cloudflare/durableObjects/versionedJsonRecordStore.d.ts +32 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/cloudflare.types.d.ts +30 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/cloudflareSignerWasm.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/createCloudflareRouter.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.d.ts +23 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/ed25519SessionAdapter.d.ts +16 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/environment.d.ts +5 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/routerAbPrewarm.d.ts +9 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/routerAbServiceBindings.d.ts +11 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/sessionAdapterRuntime.d.ts +28 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/staticWalletConsoleBinding.d.ts +27 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/tenantRootCreationGrant.d.ts +24 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +143 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +20 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleTenantRootLineage.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletControlOps.d.ts +21 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +30 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRuntimeOps.d.ts +64 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRuntimeOpsHandler.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.d.ts +217 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.d.ts +73 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +100 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/index.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.d.ts +6 -0
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +75 -0
- package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +199 -0
- package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +32 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +172 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +156 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +59 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.d.ts +47 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.d.ts +29 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +20 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +271 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.d.ts +12 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +509 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryActivation.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.d.ts +14 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.d.ts +20 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +56 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +200 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +70 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +73 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +9 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +131 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.d.ts +62 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +17 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +178 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.d.ts +19 -0
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpExportPolicy.d.ts +32 -0
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRequestValidation.d.ts +13 -0
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRouteHandlers.d.ts +35 -0
- package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpSessionRouteHelpers.d.ts +134 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/envelopeRevocationAdmission.d.ts +31 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +85 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.d.ts +42 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +38 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/verifiedCustodyFactor.d.ts +35 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +56 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +65 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryAttempt.d.ts +59 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryFinalization.d.ts +81 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +184 -0
- package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryRotation.d.ts +31 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.d.ts +32 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.d.ts +48 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +909 -0
- package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +104 -0
- package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +30 -0
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootCustodyLineage.d.ts +14 -0
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.d.ts +35 -0
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.d.ts +35 -0
- package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootIdentityResolution.d.ts +56 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +78 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +91 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +105 -0
- package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.d.ts +39 -0
- package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRouteHandlers.d.ts +172 -0
- package/dist/types/wallet-server/src/router/express-adaptor.d.ts +22 -0
- package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +82 -0
- package/dist/types/wallet-server/src/router/framework/applyRouteMetering.d.ts +23 -0
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +1392 -0
- package/dist/types/wallet-server/src/router/framework/enforceRoutePolicy.d.ts +48 -0
- package/dist/types/wallet-server/src/router/framework/http.d.ts +12 -0
- package/dist/types/wallet-server/src/router/framework/logger.d.ts +5 -0
- package/dist/types/wallet-server/src/router/framework/modules.d.ts +17 -0
- package/dist/types/wallet-server/src/router/framework/ror/index.d.ts +7 -0
- package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +14 -0
- package/dist/types/wallet-server/src/router/framework/ror/options.d.ts +9 -0
- package/dist/types/wallet-server/src/router/framework/ror/provider.d.ts +17 -0
- package/dist/types/wallet-server/src/router/framework/ror/staticProvider.d.ts +11 -0
- package/dist/types/wallet-server/src/router/framework/routeAuthPolicy.d.ts +34 -0
- package/dist/types/wallet-server/src/router/framework/routeDefinitions.d.ts +27 -0
- package/dist/types/wallet-server/src/router/framework/routeDefinitions.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/router/framework/routeExecutionContext.d.ts +29 -0
- package/dist/types/wallet-server/src/router/framework/routeExtensions.d.ts +27 -0
- package/dist/types/wallet-server/src/router/framework/routeMeteringPolicy.d.ts +17 -0
- package/dist/types/wallet-server/src/router/framework/routeRequestValidation.d.ts +5 -0
- package/dist/types/wallet-server/src/router/framework/routeResponses.d.ts +17 -0
- package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +221 -0
- package/dist/types/wallet-server/src/router/framework/routerApiRouteSurface.d.ts +14 -0
- package/dist/types/wallet-server/src/router/framework/routerApiWebhooks.d.ts +12 -0
- package/dist/types/wallet-server/src/router/framework/runtimeSnapshotConsumer.d.ts +28 -0
- package/dist/types/wallet-server/src/router/framework/versionedJsonRecordStore.d.ts +20 -0
- package/dist/types/wallet-server/src/router/ror-adaptor.d.ts +3 -0
- package/dist/types/wallet-server/src/router/transport/fetch/createFetchRouter.d.ts +8 -0
- package/dist/types/wallet-server/src/router/transport/fetch/fetchRouter.types.d.ts +23 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/auth.d.ts +3 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +202 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +92 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceManagement.d.ts +29 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/health.d.ts +4 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/nearPublicKeys.d.ts +3 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/normalSigningRouterProxy.d.ts +33 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/passkeyCustody.d.ts +66 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/sessions.d.ts +31 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccount.d.ts +3 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +128 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +87 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEd25519.d.ts +47 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/walletExecutionLanePreflight.d.ts +4 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/walletRegistration.d.ts +3 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/webauthnAuthenticators.d.ts +3 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/wellKnown.d.ts +3 -0
- package/dist/types/wallet-server/src/storage/d1Sql.d.ts +14 -0
- package/dist/types/wallet-server/src/storage/tenantRoute.d.ts +136 -0
- package/dist/types/wallet-server/src/storage/tenantRoute.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/tenant-root.d.ts +5 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/cipher.d.ts +45 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +16 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/guards/backends.d.ts +23 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/guards/index.d.ts +46 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotency.d.ts +3 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyBackends.d.ts +24 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +22 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/index.d.ts +23 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/observability/audit.d.ts +9 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/options.d.ts +9 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/routesOptions.d.ts +20 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/service.d.ts +3 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.typecheck.d.ts +2 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.types.d.ts +148 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/express.d.ts +12 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/fetch.d.ts +13 -0
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/shared.d.ts +24 -0
- package/dist/types/wallet-server/src/threshold/statusCodes.d.ts +10 -0
- package/dist/types/wallet-server/src/wasm/signer.d.ts +8 -0
- package/migrations/d1-signer/0001_signer_d1_initial.sql +2486 -0
- package/migrations/d1-signer/0002_signer_post_103_canonical_upgrade.sql +1576 -0
- package/migrations/d1-signer/0003_r107_wallet_authorization.sql +299 -0
- package/migrations/d1-signer/0004_remove_legacy_email_recovery.sql +14 -0
- package/migrations/d1-signer/0005_r103p8_linked_owner_auth_bindings.sql +92 -0
- package/migrations/d1-signer/0006_r103p8_linked_device_custody_transfers.sql +77 -0
- package/migrations/d1-signer/0007_r103p8_wallet_session_auth_method_provenance.sql +18 -0
- package/migrations/d1-signer/0008_r103p8_linked_device_session_cas_guard.sql +35 -0
- package/migrations/d1-signer/0009_linked_device_email_otp.sql +405 -0
- package/migrations/d1-signer/0010_linked_device_session_target_factor.sql +78 -0
- package/migrations/d1-signer/0011_linked_device_ed25519_export_root.sql +9 -0
- package/migrations/d1-signer/0012_versioned_json_cas_guard.sql +3 -0
- package/migrations/d1-signer/0013_linked_device_export_authorization.sql +133 -0
- package/migrations/d1-signer/0014_wallet_recovery_code_locators.sql +19 -0
- package/migrations/d1-signer/0015_r103e_authority_baseline.sql +259 -0
- package/migrations/d1-signer/0016_r103e_wallet_session_authorizations_v2.sql +133 -0
- package/migrations/d1-signer/0017_r103e_link_session_state.sql +83 -0
- package/migrations/d1-signer/0018_r103e_linked_device_authority_installations.sql +34 -0
- package/migrations/d1-signer/0019_r103e_email_otp_device_methods.sql +3 -0
- package/migrations/d1-signer/0020_r103e_wallet_session_operation_credentials.sql +12 -0
- package/migrations/d1-signer/0021_linked_device_source_contribution_transcripts.sql +64 -0
- package/migrations/d1-signer/0022_r109c_multi_auth_email_cardinality.sql +118 -0
- package/migrations/d1-signer/0023_r109d_first_email_linked_device.sql +111 -0
- package/migrations/d1-signer/0024_r103f_v2_authorized_operation_claim.sql +99 -0
- package/migrations/d1-signer/0025_r109d_email_enrollment_wallet_cardinality.sql +57 -0
- package/migrations/d1-signer/0026_r115_wallet_recovery_authority_provenance.sql +253 -0
- package/migrations/d1-signer/0027_r115_email_otp_recovery_bootstrap.sql +90 -0
- package/migrations/d1-signer/0028_r103f_phase1_additive_schema_bridge.sql +1119 -0
- package/migrations/d1-signer/0029_r103f_phase0_registration_replay_tokens.sql +135 -0
- package/migrations/d1-signer/0030_r103f_wallet_session_client_capability.sql +17 -0
- package/migrations/d1-signer/0031_r103f_delete_registration_replay_tokens.sql +4 -0
- package/migrations/d1-signer/0032_r103f_exact_authorized_operation_enforcement.sql +149 -0
- package/migrations/d1-signer/0033_r103f_linked_delivery_recipient.sql +6 -0
- package/migrations/d1-signer/0034_r103f_exact_wallet_session_cutover.sql +743 -0
- package/migrations/d1-signer/0035_r103f_linked_delivery_acknowledgement_cleanup_window.sql +413 -0
- package/package.json +132 -0
- package/scripts/d1-local-migrate-signer.mjs +148 -0
- package/src/README.md +75 -0
- package/wrangler.local-hosted-wallet-gateway.toml +37 -0
|
@@ -0,0 +1,1196 @@
|
|
|
1
|
+
import { parseLinkDeviceSessionId } from "../../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
+
import { base64UrlDecode, base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
|
|
3
|
+
import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
4
|
+
import { sha256Bytes } from "../../../../shared-ts/src/utils/digests.js";
|
|
5
|
+
import { assertNeverLinkSessionStateV1 } from "../../../../shared-ts/src/device-linking/contracts.js";
|
|
6
|
+
import { parseLinkedDeviceEd25519ExportRootRecipientV1, parseLinkedDeviceEd25519ExportRootSubmissionV1 } from "../../../../shared-ts/src/device-linking/ed25519ExportRoot.js";
|
|
7
|
+
import { parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1, sameRouterAbEd25519YaoActivationBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
|
|
8
|
+
import { parseLinkedDeviceEd25519SourcePreservingReservationV1, parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1 } from "../../../../shared-ts/src/device-linking/sourceContribution.js";
|
|
9
|
+
import { parseActiveWalletSessionV1, parseLinkedDeviceApprovalDeliveryV1, parseLinkedDeviceApprovalV1, parseLinkedDeviceEmailOtpBaseFactorRequestV1, parseLinkedDeviceEmailOtpChallengeResendRequestV1, parseLinkedDeviceEmailOtpChallengeResultV1, parseLinkedDeviceEmailOtpChallengeStartRequestV1, parseLinkedDeviceEmailOtpChallengeVerifyRequestV1, parseLinkedDeviceEmailOtpVerificationResultV1, parseLinkedDeviceSessionClaimRequestV1, parseLinkedDeviceSessionTransportRequestV1, parseLinkedDeviceTargetCredentialRegistrationV1, parseLinkedDeviceTargetPreparationRequestV1, parseLinkedDeviceTargetPreparationV1, parseLocalAuthorityActivationFinalAckV1, parseLocalAuthorityInstallationReceiptV1, parseQrLinkedDeviceSessionPayloadV5 } from "../../../../shared-ts/src/device-linking/parsers.js";
|
|
10
|
+
import { LINKED_DEVICE_REQUEST_PROOF_HEADER_V1, computeLinkedDevicePublicKeyDigestV1 } from "../../../../shared-ts/src/device-linking/requestProof.js";
|
|
11
|
+
import { findRouteDefinitionById } from "../../../framework/routeDefinitions.js";
|
|
12
|
+
import { normalizeCorsOrigin } from "../../../../core/SessionService.js";
|
|
13
|
+
import { json, readJson } from "../../../framework/http.js";
|
|
14
|
+
import { extractBearerCredential, extractRouterApiEnvironmentId } from "../../../auth/routerApiKeyAuth.js";
|
|
15
|
+
import { resolvePublishableKeyApiCredentialAuth } from "../../../auth/routerApiCredentialAuth.js";
|
|
16
|
+
import { parseLinkedDeviceRequestProofV1 } from "../../../../core/deviceLinking/requestProof.js";
|
|
17
|
+
//#region src/router/transport/fetch/routes/deviceLinking.ts
|
|
18
|
+
const DEVICE_LINKING_BASE = "/wallet/device-linking/v1/sessions";
|
|
19
|
+
const TARGET_PREPARATION_ROUTE_ID = "linked_device_target_preparation";
|
|
20
|
+
const TARGET_CREDENTIAL_ROUTE_ID = "linked_device_target_credential";
|
|
21
|
+
const DEVICE_LINKING_REQUEST_PROOF_HEADER_V1 = LINKED_DEVICE_REQUEST_PROOF_HEADER_V1;
|
|
22
|
+
async function handleDeviceLinking(ctx) {
|
|
23
|
+
if (!ctx.pathname.startsWith(DEVICE_LINKING_BASE)) return null;
|
|
24
|
+
const service = ctx.service.deviceLinking;
|
|
25
|
+
if (!service) return notSupportedResponse();
|
|
26
|
+
const action = parseRoutePath(ctx.pathname);
|
|
27
|
+
if (!action) return null;
|
|
28
|
+
const nowMs = service.nowV1();
|
|
29
|
+
try {
|
|
30
|
+
switch (action.kind) {
|
|
31
|
+
case "create": return await handleCreate(ctx, service, nowMs);
|
|
32
|
+
case "session": return await handleSession(ctx, service, action.linkSessionId, nowMs);
|
|
33
|
+
case "claim": return await handleClaim(ctx, service, action.linkSessionId, nowMs);
|
|
34
|
+
case "approval": return await handleApproval(ctx, service, action.linkSessionId, nowMs);
|
|
35
|
+
case "target-preparation": return await handleTargetPreparation(ctx, service, action.linkSessionId, nowMs);
|
|
36
|
+
case "credential": return await handleCredential(ctx, service, action.linkSessionId, nowMs);
|
|
37
|
+
case "source-contribution-preparation": return await handleSourceContributionPreparation(ctx, service, action.linkSessionId, nowMs);
|
|
38
|
+
case "source-contribution": return await handleSourceContribution(ctx, service, action.linkSessionId, nowMs);
|
|
39
|
+
case "source-contribution-execute": return await handleSourceContributionExecute(ctx, service, action.linkSessionId, nowMs);
|
|
40
|
+
case "email-otp-challenge": return await handleEmailOtpChallenge(ctx, service, action.linkSessionId, nowMs, false);
|
|
41
|
+
case "email-otp-resend": return await handleEmailOtpChallenge(ctx, service, action.linkSessionId, nowMs, true);
|
|
42
|
+
case "email-otp-verify": return await handleEmailOtpVerify(ctx, service, action.linkSessionId, nowMs);
|
|
43
|
+
case "email-otp-base-factor": return await handleEmailOtpBaseFactor(ctx, service, action.linkSessionId, nowMs);
|
|
44
|
+
case "owner-cancel": return await handleOwnerCancel(ctx, service, action.linkSessionId, nowMs);
|
|
45
|
+
case "ed25519-export-root-recipient": return await handleExportRootRecipient(ctx, service, action.linkSessionId, nowMs);
|
|
46
|
+
case "ed25519-export-root": return await handleExportRootPackage(ctx, service, action.linkSessionId, nowMs);
|
|
47
|
+
case "receipt": return await handleReceipt(ctx, service, action.linkSessionId, nowMs);
|
|
48
|
+
case "cancel": return await handleCancel(ctx, service, action.linkSessionId, nowMs);
|
|
49
|
+
default: return assertNever(action);
|
|
50
|
+
}
|
|
51
|
+
} catch (error) {
|
|
52
|
+
if (error instanceof DeviceLinkingInputError) return invalidInputResponse(error.message);
|
|
53
|
+
return json({
|
|
54
|
+
ok: false,
|
|
55
|
+
code: "internal",
|
|
56
|
+
message: errorMessage(error)
|
|
57
|
+
}, { status: 500 });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function handleCreate(ctx, service, nowMs) {
|
|
61
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
62
|
+
const bodyDigestB64u = await requestBodyDigest(ctx.request);
|
|
63
|
+
const rawBody = await readJsonBody(ctx.request);
|
|
64
|
+
const body = parseBoundary(() => parseCreateRequest(rawBody));
|
|
65
|
+
const keyDigest = await computeDevicePublicKeyDigestB64u(body.payload.devicePublicKeyB64u);
|
|
66
|
+
const proof = parseBoundary(() => parseRequestProofHeader(ctx.request));
|
|
67
|
+
validateRequestProof(proof, ctx.method, ctx.pathname, body.payload.linkSessionId, bodyDigestB64u, keyDigest, nowMs);
|
|
68
|
+
const verified = await service.verifyPublicSessionProofV1({
|
|
69
|
+
payload: body.payload,
|
|
70
|
+
proof,
|
|
71
|
+
method: ctx.method,
|
|
72
|
+
canonicalPath: ctx.pathname,
|
|
73
|
+
bodyDigestB64u,
|
|
74
|
+
devicePublicKeyDigestB64u: keyDigest,
|
|
75
|
+
requestedAtMs: nowMs
|
|
76
|
+
});
|
|
77
|
+
if (verified.kind === "denied") return authDeniedResponse(verified);
|
|
78
|
+
return sessionResultResponse(await service.sessionService.createUnclaimedSessionV1({
|
|
79
|
+
payload: body.payload,
|
|
80
|
+
nowMs
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
async function handleSession(ctx, service, rawLinkSessionId, nowMs) {
|
|
84
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
85
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
86
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
87
|
+
if (ctx.method !== "GET") return methodNotAllowedResponse();
|
|
88
|
+
return sessionProjectionResponse(authenticated.session, "applied");
|
|
89
|
+
}
|
|
90
|
+
async function handleClaim(ctx, service, rawLinkSessionId, nowMs) {
|
|
91
|
+
const bodyDigestB64u = await requestBodyDigest(ctx.request);
|
|
92
|
+
const authentication = await authenticateOwner(service, ctx, bodyDigestB64u, nowMs);
|
|
93
|
+
if (authentication.kind === "denied") return authDeniedResponse(authentication);
|
|
94
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
95
|
+
const request = parseBoundary(() => parseLinkedDeviceSessionClaimRequestV1(authentication.body));
|
|
96
|
+
if (request.payload.linkSessionId !== parseSessionId(rawLinkSessionId)) return invalidInputResponse("link session id does not match route");
|
|
97
|
+
validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
|
|
98
|
+
return claimResultResponse(await service.sessionService.claimSessionV1({
|
|
99
|
+
payload: request.payload,
|
|
100
|
+
nowMs,
|
|
101
|
+
owner: authentication.owner
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
async function handleApproval(ctx, service, rawLinkSessionId, nowMs) {
|
|
105
|
+
if (ctx.method === "GET") {
|
|
106
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
107
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
108
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
109
|
+
if (service.installationReceipt && (authenticated.session.state.state === "provisioning" || authenticated.session.state.state === "authority_pending_local_install" || authenticated.session.state.state === "active")) {
|
|
110
|
+
const committed = await service.installationReceipt.readCommittedAuthorityPackagesV1({
|
|
111
|
+
session: authenticated.session,
|
|
112
|
+
requestedAtMs: nowMs
|
|
113
|
+
});
|
|
114
|
+
if (!committed) return new Response(null, { status: 204 });
|
|
115
|
+
return json(committed, { status: 200 });
|
|
116
|
+
}
|
|
117
|
+
const approval = authenticated.session.approvalTranscript?.value;
|
|
118
|
+
if (!approval) return invalidStateResponse(authenticated.session);
|
|
119
|
+
return json(parseLinkedDeviceApprovalDeliveryV1({
|
|
120
|
+
kind: "linked_device_approval_delivery_v1",
|
|
121
|
+
approval
|
|
122
|
+
}), { status: 200 });
|
|
123
|
+
}
|
|
124
|
+
const bodyDigestB64u = await requestBodyDigest(ctx.request);
|
|
125
|
+
const authentication = await authenticateOwner(service, ctx, bodyDigestB64u, nowMs);
|
|
126
|
+
if (authentication.kind === "denied") return authDeniedResponse(authentication);
|
|
127
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
128
|
+
const approval = parseBoundary(() => parseLinkedDeviceApprovalV1(authentication.body));
|
|
129
|
+
const linkSessionId = parseSessionId(rawLinkSessionId);
|
|
130
|
+
if (approval.linkSessionId !== linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
131
|
+
validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
|
|
132
|
+
const targetFactor = approval.targetFactor;
|
|
133
|
+
if (isExistingEmailOtpTargetFactorV1(targetFactor)) {
|
|
134
|
+
const session = await service.sessionService.getSessionV1({
|
|
135
|
+
linkSessionId,
|
|
136
|
+
nowMs
|
|
137
|
+
});
|
|
138
|
+
if (!session) return notFoundResponse();
|
|
139
|
+
const ownerMismatch = requireOwnerMatchesClaimedWallet(authentication.owner, session);
|
|
140
|
+
if (ownerMismatch) return ownerMismatch;
|
|
141
|
+
if (authentication.owner.walletId !== approval.walletId) return authDeniedResponse({
|
|
142
|
+
kind: "denied",
|
|
143
|
+
code: "unauthorized",
|
|
144
|
+
message: "owner session does not match link wallet"
|
|
145
|
+
});
|
|
146
|
+
if (session.state.state !== "claimed" || !session.claimTranscript) return invalidStateResponse(session);
|
|
147
|
+
const selectionError = await requireSelectedEmailOtpBaseFactorV1(service, session, {
|
|
148
|
+
walletId: approval.walletId,
|
|
149
|
+
baseWalletAuthMethodId: targetFactor.baseWalletAuthMethodId
|
|
150
|
+
});
|
|
151
|
+
if (selectionError) return selectionError;
|
|
152
|
+
}
|
|
153
|
+
return approvalResultResponse(await service.sessionService.recordOwnerApprovalV1({
|
|
154
|
+
approval,
|
|
155
|
+
nowMs,
|
|
156
|
+
owner: authentication.owner
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
function isExistingEmailOtpTargetFactorV1(targetFactor) {
|
|
160
|
+
return targetFactor.kind === "email_otp" && targetFactor.enrollment.kind === "existing_enrollment";
|
|
161
|
+
}
|
|
162
|
+
async function handleTargetPreparation(ctx, service, rawLinkSessionId, nowMs) {
|
|
163
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
164
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
165
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
166
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
167
|
+
const origin = await authenticateTargetPasskeyOriginV1(ctx, TARGET_PREPARATION_ROUTE_ID);
|
|
168
|
+
if (!origin.ok) return origin.response;
|
|
169
|
+
const request = parseBoundary(() => parseLinkedDeviceTargetPreparationRequestV1(authenticated.body));
|
|
170
|
+
if (request.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
171
|
+
const approval = requireApproval(authenticated.session);
|
|
172
|
+
const rawPreparation = await readTargetPreparation(service, authenticated.session, approval, {
|
|
173
|
+
access: "create_or_replay",
|
|
174
|
+
expectedOrigin: origin.expectedOrigin,
|
|
175
|
+
deliveryRecipientPublicKey65B64u: request.deliveryRecipientPublicKey65B64u
|
|
176
|
+
}, nowMs);
|
|
177
|
+
if (rawPreparation.kind === "conflict") return json({
|
|
178
|
+
ok: false,
|
|
179
|
+
code: "conflict",
|
|
180
|
+
message: rawPreparation.message
|
|
181
|
+
}, { status: 409 });
|
|
182
|
+
return json(parseBoundary(() => parseLinkedDeviceTargetPreparationV1(rawPreparation)), { status: 200 });
|
|
183
|
+
}
|
|
184
|
+
async function handleCredential(ctx, service, rawLinkSessionId, nowMs) {
|
|
185
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
186
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
187
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
188
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
189
|
+
const origin = await authenticateTargetPasskeyOriginV1(ctx, TARGET_CREDENTIAL_ROUTE_ID);
|
|
190
|
+
if (!origin.ok) return origin.response;
|
|
191
|
+
const registration = parseBoundary(() => parseLinkedDeviceTargetCredentialRegistrationV1(authenticated.body));
|
|
192
|
+
if (registration.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
193
|
+
const session = authenticated.session;
|
|
194
|
+
const approval = requireApproval(session);
|
|
195
|
+
const rawPreparation = await readTargetPreparation(service, session, approval, { access: "replay_only" }, nowMs);
|
|
196
|
+
const preparation = parseBoundary(() => parseLinkedDeviceTargetPreparationV1(rawPreparation));
|
|
197
|
+
const result = await service.targetCredential.registerTargetCredentialV1({
|
|
198
|
+
registration,
|
|
199
|
+
preparation,
|
|
200
|
+
session,
|
|
201
|
+
approval,
|
|
202
|
+
expectedOrigin: origin.expectedOrigin,
|
|
203
|
+
requestedAtMs: nowMs
|
|
204
|
+
});
|
|
205
|
+
if (result.outcome === "invalid_input") return invalidInputResponse(result.message);
|
|
206
|
+
let sessionOutcome = result.outcome;
|
|
207
|
+
let recordedSession = session;
|
|
208
|
+
if (session.state.state === "awaiting_target_factor") {
|
|
209
|
+
const recorded = await service.sessionService.recordTargetCredentialV1({
|
|
210
|
+
linkSessionId: session.linkSessionId,
|
|
211
|
+
expectedRevision: session.revision,
|
|
212
|
+
sourceContributionPreparation: result.targetCredential.ordinarySignerMaterialPreparations,
|
|
213
|
+
nowMs
|
|
214
|
+
});
|
|
215
|
+
if (recorded.outcome !== "applied" && recorded.outcome !== "replayed") return sessionResultResponse(recorded);
|
|
216
|
+
sessionOutcome = recorded.outcome;
|
|
217
|
+
recordedSession = recorded.record;
|
|
218
|
+
} else if (session.state.state !== "awaiting_source_contribution" && session.state.state !== "provisioning" && session.state.state !== "authority_pending_local_install" && session.state.state !== "active") return invalidStateResponse(session);
|
|
219
|
+
return targetCredentialResultResponse(recordedSession, sessionOutcome, result.targetCredential);
|
|
220
|
+
}
|
|
221
|
+
async function handleSourceContributionPreparation(ctx, service, rawLinkSessionId, nowMs) {
|
|
222
|
+
const owner = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
|
|
223
|
+
if (owner.kind !== "authorized") return ownerSessionResponse(owner);
|
|
224
|
+
if (ctx.method !== "GET") return methodNotAllowedResponse();
|
|
225
|
+
const preparation = owner.session.sourceContributionPreparation;
|
|
226
|
+
if (!preparation) return new Response(null, { status: 204 });
|
|
227
|
+
return json(preparation, { status: 200 });
|
|
228
|
+
}
|
|
229
|
+
async function handleSourceContribution(ctx, service, rawLinkSessionId, nowMs) {
|
|
230
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
231
|
+
const linkSessionId = parseSessionId(rawLinkSessionId);
|
|
232
|
+
const bodyDigestB64u = await requestBodyDigest(ctx.request);
|
|
233
|
+
const authentication = await authenticateOwner(service, ctx, bodyDigestB64u, nowMs);
|
|
234
|
+
if (authentication.kind === "denied") return authDeniedResponse(authentication);
|
|
235
|
+
const approval = parseBoundary(() => parseLinkedDeviceApprovalV1(authentication.body));
|
|
236
|
+
if (approval.linkSessionId !== linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
237
|
+
validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
|
|
238
|
+
const recorded = await service.sessionService.recordSourceContributionV1({
|
|
239
|
+
approval,
|
|
240
|
+
nowMs,
|
|
241
|
+
owner: authentication.owner
|
|
242
|
+
});
|
|
243
|
+
if (recorded.outcome !== "applied" && recorded.outcome !== "replayed") return sessionResultResponse(recorded);
|
|
244
|
+
if (recorded.record.state.state !== "provisioning" && recorded.record.state.state !== "authority_pending_local_install" && recorded.record.state.state !== "active") return sessionResultResponse(recorded);
|
|
245
|
+
if (recorded.record.state.state !== "provisioning") return sessionProjectionResponse(recorded.record, recorded.outcome);
|
|
246
|
+
const installationReceipt = service.installationReceipt;
|
|
247
|
+
if (!installationReceipt) return invalidInputResponse("verified authority installation is not configured");
|
|
248
|
+
const finalApproval = requireSourceContributionApproval(recorded.record);
|
|
249
|
+
const verifiedLinkInput = await service.targetCredential.buildVerifiedLinkInputV1({
|
|
250
|
+
session: recorded.record,
|
|
251
|
+
approval: finalApproval,
|
|
252
|
+
requestedAtMs: nowMs
|
|
253
|
+
});
|
|
254
|
+
const exportRootTransfer = await service.ed25519ExportRoot?.readTransferV1(linkSessionId);
|
|
255
|
+
const ed25519ExportRootPackage = exportRootTransfer?.state === "sealed" ? exportRootTransfer.package : null;
|
|
256
|
+
const requiresEd25519ExportRoot = verifiedLinkInput.signerManifest.keyFamilies[0] === "ed25519";
|
|
257
|
+
if (requiresEd25519ExportRoot !== (ed25519ExportRootPackage !== null)) return invalidInputResponse(requiresEd25519ExportRoot ? "linked-device Ed25519 export-root package is unavailable" : "linked-device export-root package has no Ed25519 signer");
|
|
258
|
+
const committed = await installationReceipt.commitPendingAuthorityV1({
|
|
259
|
+
input: verifiedLinkInput,
|
|
260
|
+
nowMs,
|
|
261
|
+
ed25519ExportRootPackage
|
|
262
|
+
});
|
|
263
|
+
if (committed.kind === "invalid_input") return sessionResultResponse(await service.sessionService.failBeforeCommitV1({
|
|
264
|
+
linkSessionId,
|
|
265
|
+
expectedRevision: recorded.record.revision,
|
|
266
|
+
error: {
|
|
267
|
+
kind: "package_preparation_failed",
|
|
268
|
+
reason: committed.message
|
|
269
|
+
},
|
|
270
|
+
nowMs
|
|
271
|
+
}));
|
|
272
|
+
if (committed.kind === "conflict") return sessionResultResponse(await service.sessionService.failBeforeCommitV1({
|
|
273
|
+
linkSessionId,
|
|
274
|
+
expectedRevision: recorded.record.revision,
|
|
275
|
+
error: {
|
|
276
|
+
kind: "package_preparation_failed",
|
|
277
|
+
reason: committed.message
|
|
278
|
+
},
|
|
279
|
+
nowMs
|
|
280
|
+
}));
|
|
281
|
+
return sessionProjectionResponse(committed.session, committed.kind === "replayed" ? "replayed" : recorded.outcome);
|
|
282
|
+
}
|
|
283
|
+
async function handleSourceContributionExecute(ctx, service, rawLinkSessionId, nowMs) {
|
|
284
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
285
|
+
const owner = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
|
|
286
|
+
if (owner.kind !== "authorized") return ownerSessionResponse(owner);
|
|
287
|
+
const router = service.sourceContributionRouter;
|
|
288
|
+
if (!router) return notSupportedResponse("Ed25519 source-preserving linking is not configured");
|
|
289
|
+
const preparation = requireEd25519SourceContributionPreparation(owner.session);
|
|
290
|
+
const targetRequest = parseBoundary(() => {
|
|
291
|
+
const parsed = parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1(owner.body);
|
|
292
|
+
if (!parsed.ok) throw new Error(parsed.message);
|
|
293
|
+
return parsed.value;
|
|
294
|
+
});
|
|
295
|
+
if (!sameRouterAbEd25519YaoActivationBindingV1(targetRequest.binding, preparation.targetAdmission.binding)) throw new DeviceLinkingInputError("source-preserving target request binding does not match the persisted preparation");
|
|
296
|
+
const rawReservation = await router.executeEd25519SourcePreservingV1({
|
|
297
|
+
sourceBinding: preparation.sourceBinding,
|
|
298
|
+
targetRequest,
|
|
299
|
+
targetAdmission: preparation.targetAdmission,
|
|
300
|
+
applicationBinding: preparation.applicationBinding,
|
|
301
|
+
participantIds: preparation.participantIds
|
|
302
|
+
});
|
|
303
|
+
const reservation = parseBoundary(() => parseLinkedDeviceEd25519SourcePreservingReservationV1(rawReservation));
|
|
304
|
+
if (reservation.participantIds[0] !== preparation.participantIds[0] || reservation.participantIds[1] !== preparation.participantIds[1]) throw new DeviceLinkingInputError("source-preserving reservation participant ids do not match the persisted preparation");
|
|
305
|
+
return json(rawReservation, { status: 200 });
|
|
306
|
+
}
|
|
307
|
+
async function handleEmailOtpChallenge(ctx, service, rawLinkSessionId, nowMs, resend) {
|
|
308
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
309
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
310
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
311
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
312
|
+
const request = parseBoundary(() => parseEmailOtpChallengeRequest(authenticated.body, resend));
|
|
313
|
+
if (request.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
314
|
+
const provider = service.emailOtpTargetFactor;
|
|
315
|
+
if (!provider) return notSupportedResponse("Email OTP linking is not configured");
|
|
316
|
+
const session = authenticated.session;
|
|
317
|
+
const approval = requireApproval(session);
|
|
318
|
+
const rawPreparation = await readTargetPreparation(service, session, approval, { access: "replay_only" }, nowMs);
|
|
319
|
+
const preparation = parseBoundary(() => parseLinkedDeviceTargetPreparationV1(rawPreparation));
|
|
320
|
+
const started = await provider.startChallengeV1({
|
|
321
|
+
session,
|
|
322
|
+
approval,
|
|
323
|
+
preparation,
|
|
324
|
+
resend,
|
|
325
|
+
requestedAtMs: nowMs
|
|
326
|
+
});
|
|
327
|
+
if (started.kind === "refused") return json({
|
|
328
|
+
ok: false,
|
|
329
|
+
code: started.code,
|
|
330
|
+
message: started.message
|
|
331
|
+
}, { status: 403 });
|
|
332
|
+
const workerEphemeralPublicKey65B64u = request.kind === "linked_device_email_otp_challenge_start_request_v1" ? request.workerEphemeralPublicKey65B64u : requireSentEmailOtpChallenge(session).workerEphemeralPublicKey65B64u;
|
|
333
|
+
const recorded = await service.sessionService.recordEmailOtpChallengeStateV1({
|
|
334
|
+
linkSessionId: session.linkSessionId,
|
|
335
|
+
expectedRevision: session.revision,
|
|
336
|
+
challenge: {
|
|
337
|
+
challengeId: started.challengeId,
|
|
338
|
+
workerEphemeralPublicKey65B64u,
|
|
339
|
+
maskedEmailHint: started.maskedEmailHint,
|
|
340
|
+
expiresAtMs: started.expiresAtMs,
|
|
341
|
+
resendAvailableAtMs: started.resendAvailableAtMs
|
|
342
|
+
},
|
|
343
|
+
nowMs
|
|
344
|
+
});
|
|
345
|
+
if (recorded.outcome !== "applied" && recorded.outcome !== "replayed") return sessionResultResponse(recorded);
|
|
346
|
+
return json(parseLinkedDeviceEmailOtpChallengeResultV1({
|
|
347
|
+
kind: "linked_device_email_otp_challenge_result_v1",
|
|
348
|
+
challengeId: started.challengeId,
|
|
349
|
+
maskedEmailHint: started.maskedEmailHint,
|
|
350
|
+
expiresAtMs: started.expiresAtMs,
|
|
351
|
+
resendAvailableAtMs: started.resendAvailableAtMs
|
|
352
|
+
}), { status: 200 });
|
|
353
|
+
}
|
|
354
|
+
async function handleEmailOtpBaseFactor(ctx, service, rawLinkSessionId, nowMs) {
|
|
355
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
356
|
+
const authenticated = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
|
|
357
|
+
if (authenticated.kind !== "authorized") return ownerSessionResponse(authenticated);
|
|
358
|
+
const session = authenticated.session;
|
|
359
|
+
const ownerMismatch = requireOwnerMatchesClaimedWallet(authenticated.owner, session);
|
|
360
|
+
if (ownerMismatch) return ownerMismatch;
|
|
361
|
+
if (session.state.state !== "claimed" || session.qrPayload.targetFactor.kind !== "email_otp" || !session.claimTranscript) return invalidStateResponse(session);
|
|
362
|
+
const walletId = session.claimTranscript.value.walletId;
|
|
363
|
+
const request = parseBoundary(() => parseLinkedDeviceEmailOtpBaseFactorRequestV1(authenticated.body));
|
|
364
|
+
if (request.expectedRevision !== session.revision) return json({
|
|
365
|
+
ok: false,
|
|
366
|
+
outcome: "conflict",
|
|
367
|
+
expectedRevision: request.expectedRevision,
|
|
368
|
+
actualRevision: session.revision
|
|
369
|
+
}, { status: 409 });
|
|
370
|
+
const provider = service.emailOtpTargetFactor;
|
|
371
|
+
if (!provider) return notSupportedResponse("Email OTP linking is not configured");
|
|
372
|
+
const resolution = await provider.resolveBaseFactorSelectionV1({
|
|
373
|
+
walletId,
|
|
374
|
+
request
|
|
375
|
+
});
|
|
376
|
+
return json({
|
|
377
|
+
revision: session.revision,
|
|
378
|
+
resolution
|
|
379
|
+
}, { status: 200 });
|
|
380
|
+
}
|
|
381
|
+
async function handleOwnerCancel(ctx, service, rawLinkSessionId, nowMs) {
|
|
382
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
383
|
+
const linkSessionId = parseSessionId(rawLinkSessionId);
|
|
384
|
+
const authenticated = await authenticateOwnerForSession(ctx, service, linkSessionId, nowMs);
|
|
385
|
+
if (authenticated.kind !== "authorized") return ownerSessionResponse(authenticated);
|
|
386
|
+
parseBoundary(() => parseOwnerCancelRequest(authenticated.body));
|
|
387
|
+
const session = authenticated.session;
|
|
388
|
+
const ownerMismatch = requireOwnerMatchesClaimedWallet(authenticated.owner, session);
|
|
389
|
+
if (ownerMismatch) return ownerMismatch;
|
|
390
|
+
if (session.state.state === "cancelled") return sessionProjectionResponse(session, "replayed");
|
|
391
|
+
return sessionResultResponse(await service.sessionService.cancelSessionV1({
|
|
392
|
+
linkSessionId,
|
|
393
|
+
expectedRevision: session.revision,
|
|
394
|
+
nowMs
|
|
395
|
+
}));
|
|
396
|
+
}
|
|
397
|
+
async function handleEmailOtpVerify(ctx, service, rawLinkSessionId, nowMs) {
|
|
398
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
399
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
400
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
401
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
402
|
+
const request = parseBoundary(() => parseLinkedDeviceEmailOtpChallengeVerifyRequestV1(authenticated.body));
|
|
403
|
+
if (request.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
404
|
+
const provider = service.emailOtpTargetFactor;
|
|
405
|
+
if (!provider) return notSupportedResponse("Email OTP linking is not configured");
|
|
406
|
+
const session = authenticated.session;
|
|
407
|
+
const approval = requireApproval(session);
|
|
408
|
+
const rawPreparation = await readTargetPreparation(service, session, approval, { access: "replay_only" }, nowMs);
|
|
409
|
+
const preparation = parseBoundary(() => parseLinkedDeviceTargetPreparationV1(rawPreparation));
|
|
410
|
+
if (requireSentEmailOtpChallenge(session).challengeId !== request.challengeId) return invalidInputResponse("email OTP challenge does not match this session");
|
|
411
|
+
const verified = await provider.verifyChallengeV1({
|
|
412
|
+
session,
|
|
413
|
+
approval,
|
|
414
|
+
preparation,
|
|
415
|
+
challengeId: request.challengeId,
|
|
416
|
+
otpCode: request.otpCode,
|
|
417
|
+
requestedAtMs: nowMs
|
|
418
|
+
});
|
|
419
|
+
if (verified.kind === "refused") return json({
|
|
420
|
+
ok: false,
|
|
421
|
+
code: verified.code,
|
|
422
|
+
message: verified.message
|
|
423
|
+
}, { status: 403 });
|
|
424
|
+
return json(parseBoundary(() => parseLinkedDeviceEmailOtpVerificationResultV1({
|
|
425
|
+
kind: "linked_device_email_otp_verification_result_v1",
|
|
426
|
+
verificationGrant: verified.grant,
|
|
427
|
+
factorRelease: verified.factorRelease
|
|
428
|
+
})), { status: 200 });
|
|
429
|
+
}
|
|
430
|
+
async function handleExportRootRecipient(ctx, service, rawLinkSessionId, nowMs) {
|
|
431
|
+
const port = service.ed25519ExportRoot;
|
|
432
|
+
if (!port) return notSupportedResponse("Linked-device Ed25519 export-root relay is not configured");
|
|
433
|
+
const sessionId = parseSessionId(rawLinkSessionId);
|
|
434
|
+
if (ctx.method === "GET") {
|
|
435
|
+
const owner = await authenticateOwnerForSession(ctx, service, sessionId, nowMs);
|
|
436
|
+
if (owner.kind !== "authorized") return ownerSessionResponse(owner);
|
|
437
|
+
const transfer = await port.readTransferV1(sessionId);
|
|
438
|
+
return transfer ? json(transfer.recipient, { status: 200 }) : new Response(null, { status: 204 });
|
|
439
|
+
}
|
|
440
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
441
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
442
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
443
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
444
|
+
const recipient = parseBoundary(() => parseLinkedDeviceEd25519ExportRootRecipientV1(authenticated.body));
|
|
445
|
+
if (recipient.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
446
|
+
return exportRootWriteResponse(await port.registerRecipientV1({ recipient }));
|
|
447
|
+
}
|
|
448
|
+
async function handleExportRootPackage(ctx, service, rawLinkSessionId, nowMs) {
|
|
449
|
+
const port = service.ed25519ExportRoot;
|
|
450
|
+
if (!port) return notSupportedResponse("Linked-device Ed25519 export-root relay is not configured");
|
|
451
|
+
const sessionId = parseSessionId(rawLinkSessionId);
|
|
452
|
+
if (ctx.method === "GET") {
|
|
453
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
454
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
455
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
456
|
+
const transfer = await port.readTransferV1(sessionId);
|
|
457
|
+
return transfer?.state === "sealed" ? json(transfer.package, { status: 200 }) : new Response(null, { status: 204 });
|
|
458
|
+
}
|
|
459
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
460
|
+
const owner = await authenticateOwnerForSession(ctx, service, sessionId, nowMs);
|
|
461
|
+
if (owner.kind !== "authorized") return ownerSessionResponse(owner);
|
|
462
|
+
const submission = parseBoundary(() => parseLinkedDeviceEd25519ExportRootSubmissionV1(owner.body));
|
|
463
|
+
if (submission.linkSessionId !== sessionId) return invalidInputResponse("link session id does not match route");
|
|
464
|
+
return exportRootWriteResponse(await port.submitPackageV1({
|
|
465
|
+
linkSessionId: sessionId,
|
|
466
|
+
package: submission.package
|
|
467
|
+
}));
|
|
468
|
+
}
|
|
469
|
+
async function handleReceipt(ctx, service, rawLinkSessionId, nowMs) {
|
|
470
|
+
if (!service.installationReceipt) return notSupportedResponse("Installation receipt is not configured");
|
|
471
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
472
|
+
const linkSessionId = parseSessionId(rawLinkSessionId);
|
|
473
|
+
const rawBody = await readJsonBody(ctx.request.clone());
|
|
474
|
+
if (isFinalActivationAcknowledgement(rawBody)) {
|
|
475
|
+
const acknowledgement = parseBoundary(() => parseLocalAuthorityActivationFinalAckV1(rawBody));
|
|
476
|
+
if (acknowledgement.linkSessionId !== linkSessionId) return invalidInputResponse("activation acknowledgement session does not match the route");
|
|
477
|
+
const bearerToken = extractBearerCredential(ctx.request.headers);
|
|
478
|
+
const hasDeviceProof = ctx.request.headers.has(LINKED_DEVICE_REQUEST_PROOF_HEADER_V1);
|
|
479
|
+
if (bearerToken && !hasDeviceProof) {
|
|
480
|
+
const exact = await authenticateExactWalletSessionForAcknowledgement(ctx, bearerToken, nowMs);
|
|
481
|
+
if (exact.kind === "denied") return authDeniedResponse(exact);
|
|
482
|
+
await service.installationReceipt.acknowledgeLocalAuthorityActivationV1({
|
|
483
|
+
acknowledgement,
|
|
484
|
+
authentication: exact.authentication,
|
|
485
|
+
requestedAtMs: nowMs
|
|
486
|
+
});
|
|
487
|
+
return new Response(null, { status: 204 });
|
|
488
|
+
}
|
|
489
|
+
const liveSession = await service.sessionService.getSessionV1({
|
|
490
|
+
linkSessionId,
|
|
491
|
+
nowMs
|
|
492
|
+
});
|
|
493
|
+
if (liveSession) {
|
|
494
|
+
const authenticated = await authenticateDeviceWithKnownSession(ctx, service, linkSessionId, liveSession, nowMs);
|
|
495
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
496
|
+
const authenticatedAcknowledgement = parseBoundary(() => parseLocalAuthorityActivationFinalAckV1(authenticated.body));
|
|
497
|
+
await service.installationReceipt.acknowledgeLocalAuthorityActivationV1({
|
|
498
|
+
acknowledgement: authenticatedAcknowledgement,
|
|
499
|
+
authentication: {
|
|
500
|
+
kind: "live",
|
|
501
|
+
session: liveSession
|
|
502
|
+
},
|
|
503
|
+
requestedAtMs: nowMs
|
|
504
|
+
});
|
|
505
|
+
return new Response(null, { status: 204 });
|
|
506
|
+
}
|
|
507
|
+
const cleanupReceipt = await service.installationReceipt.readActivationCleanupReceiptV1({
|
|
508
|
+
linkSessionId,
|
|
509
|
+
requestedAtMs: nowMs
|
|
510
|
+
});
|
|
511
|
+
if (!cleanupReceipt) return notFoundResponse();
|
|
512
|
+
const authenticated = await authenticateDeviceWithExpectedKey(ctx, service, linkSessionId, cleanupReceipt.devicePublicKeyB64u, nowMs);
|
|
513
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
514
|
+
const authenticatedAcknowledgement = parseBoundary(() => parseLocalAuthorityActivationFinalAckV1(authenticated.body));
|
|
515
|
+
await service.installationReceipt.acknowledgeLocalAuthorityActivationV1({
|
|
516
|
+
acknowledgement: authenticatedAcknowledgement,
|
|
517
|
+
authentication: {
|
|
518
|
+
kind: "cleanup_receipt",
|
|
519
|
+
receipt: cleanupReceipt
|
|
520
|
+
},
|
|
521
|
+
requestedAtMs: nowMs
|
|
522
|
+
});
|
|
523
|
+
return new Response(null, { status: 204 });
|
|
524
|
+
}
|
|
525
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
526
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
527
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
528
|
+
const receipt = parseBoundary(() => parseLocalAuthorityInstallationReceiptV1(authenticated.body));
|
|
529
|
+
if (receipt.deviceId !== authenticated.session.state.deviceId) return invalidInputResponse("installation receipt device does not match this session");
|
|
530
|
+
return installationResultResponse(await service.installationReceipt.activateInstalledAuthorityV1({
|
|
531
|
+
receipt,
|
|
532
|
+
session: authenticated.session,
|
|
533
|
+
requestedAtMs: nowMs
|
|
534
|
+
}));
|
|
535
|
+
}
|
|
536
|
+
async function authenticateExactWalletSessionForAcknowledgement(ctx, token, nowMs) {
|
|
537
|
+
let context;
|
|
538
|
+
try {
|
|
539
|
+
context = await ctx.service.authorizationSessions.readWalletSessionAuthorizationV2ByOperationCredential({
|
|
540
|
+
tenantId: ctx.service.authorizationSessions.tenantId,
|
|
541
|
+
token,
|
|
542
|
+
nowMs
|
|
543
|
+
});
|
|
544
|
+
} catch {
|
|
545
|
+
return {
|
|
546
|
+
kind: "denied",
|
|
547
|
+
code: "unauthorized",
|
|
548
|
+
message: "Exact Wallet Session is unavailable"
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
if (!context) return {
|
|
552
|
+
kind: "denied",
|
|
553
|
+
code: "unauthorized",
|
|
554
|
+
message: "Exact Wallet Session is invalid"
|
|
555
|
+
};
|
|
556
|
+
const session = context.authorization.session;
|
|
557
|
+
if (context.retiredAtMs !== null || context.authority.state !== "active" || context.authMethod.status !== "active" || session.expiresAtMs <= nowMs) return {
|
|
558
|
+
kind: "denied",
|
|
559
|
+
code: "expired",
|
|
560
|
+
message: "Exact Wallet Session is expired or inactive"
|
|
561
|
+
};
|
|
562
|
+
return {
|
|
563
|
+
kind: "authorized",
|
|
564
|
+
authentication: {
|
|
565
|
+
kind: "exact_wallet_session",
|
|
566
|
+
tenantId: session.tenantId,
|
|
567
|
+
principalId: session.principalId,
|
|
568
|
+
walletId: session.walletId,
|
|
569
|
+
authorityId: session.authorityId,
|
|
570
|
+
walletAuthMethodId: session.walletAuthMethodId,
|
|
571
|
+
authorizationId: session.authorizationId,
|
|
572
|
+
walletSessionId: session.walletSessionId,
|
|
573
|
+
expiresAtMs: session.expiresAtMs
|
|
574
|
+
}
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
function isFinalActivationAcknowledgement(raw) {
|
|
578
|
+
return raw !== null && typeof raw === "object" && !Array.isArray(raw) && "kind" in raw && raw.kind === "local_authority_activation_final_ack_v1";
|
|
579
|
+
}
|
|
580
|
+
function installationResultResponse(result) {
|
|
581
|
+
switch (result.kind) {
|
|
582
|
+
case "active": return json({
|
|
583
|
+
kind: "active",
|
|
584
|
+
authority: result.authority,
|
|
585
|
+
authMethod: result.authMethod,
|
|
586
|
+
walletSession: activeWalletSessionWireV1(result.walletSession),
|
|
587
|
+
deliveryBinding: result.deliveryBinding,
|
|
588
|
+
sealedDelivery: result.sealedDelivery
|
|
589
|
+
}, { status: 200 });
|
|
590
|
+
case "pending_local_install": return json({
|
|
591
|
+
kind: "pending_local_install",
|
|
592
|
+
authorityId: result.authorityId,
|
|
593
|
+
reason: { kind: result.reason }
|
|
594
|
+
}, { status: 202 });
|
|
595
|
+
case "integrity_error": return json({
|
|
596
|
+
kind: "integrity_error",
|
|
597
|
+
reason: {
|
|
598
|
+
kind: "installation_receipt_mismatch",
|
|
599
|
+
field: "installedActivationRefs"
|
|
600
|
+
}
|
|
601
|
+
}, { status: 409 });
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
function activeWalletSessionWireV1(issued) {
|
|
605
|
+
const session = issued.session;
|
|
606
|
+
const capabilitySubjects = session.capabilitySubjects.map((subject) => {
|
|
607
|
+
switch (subject.kind) {
|
|
608
|
+
case "sign":
|
|
609
|
+
case "export_keys": return {
|
|
610
|
+
kind: subject.kind,
|
|
611
|
+
keyFamily: subject.keyFamily,
|
|
612
|
+
materialActivation: subject.materialActivation
|
|
613
|
+
};
|
|
614
|
+
case "link_devices":
|
|
615
|
+
case "revoke_devices": return { kind: subject.kind };
|
|
616
|
+
default: return assertNever(subject);
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
const first = capabilitySubjects[0];
|
|
620
|
+
if (!first) throw new Error("issued Wallet Session has no capability subjects");
|
|
621
|
+
return parseActiveWalletSessionV1({
|
|
622
|
+
kind: "active_wallet_session_v1",
|
|
623
|
+
walletId: session.walletId,
|
|
624
|
+
authorityId: session.authorityId,
|
|
625
|
+
authMethodId: session.walletAuthMethodId,
|
|
626
|
+
authorizationId: session.authorizationId,
|
|
627
|
+
quotaId: issued.quota.quotaId,
|
|
628
|
+
authorityDigestB64u: session.authorityDigestB64u,
|
|
629
|
+
authorityRevocationEpoch: session.authorityRevocationEpoch,
|
|
630
|
+
capabilitySubjects: [first, ...capabilitySubjects.slice(1)],
|
|
631
|
+
issuedAtMs: session.createdAtMs,
|
|
632
|
+
expiresAtMs: session.expiresAtMs
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
async function handleCancel(ctx, service, rawLinkSessionId, nowMs) {
|
|
636
|
+
const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
|
|
637
|
+
if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
|
|
638
|
+
if (authenticated.kind === "not_found") return notFoundResponse();
|
|
639
|
+
if (ctx.method !== "POST") return methodNotAllowedResponse();
|
|
640
|
+
const request = parseBoundary(() => parseLinkedDeviceSessionTransportRequestV1(authenticated.body));
|
|
641
|
+
if (request.kind !== "linked_device_session_cancel_unclaimed_request_v1" && request.kind !== "linked_device_session_cancel_claimed_request_v1") return invalidInputResponse("cancel request kind is invalid");
|
|
642
|
+
if (request.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
|
|
643
|
+
return sessionResultResponse(await service.sessionService.cancelSessionV1({
|
|
644
|
+
linkSessionId: authenticated.linkSessionId,
|
|
645
|
+
expectedRevision: authenticated.session.revision,
|
|
646
|
+
nowMs
|
|
647
|
+
}));
|
|
648
|
+
}
|
|
649
|
+
async function authenticateOwnerForSession(ctx, service, linkSessionId, nowMs) {
|
|
650
|
+
const bodyDigestB64u = await requestBodyDigest(ctx.request);
|
|
651
|
+
const authentication = await authenticateOwner(service, ctx, bodyDigestB64u, nowMs);
|
|
652
|
+
if (authentication.kind === "denied") return authentication;
|
|
653
|
+
const session = await service.sessionService.getSessionV1({
|
|
654
|
+
linkSessionId,
|
|
655
|
+
nowMs
|
|
656
|
+
});
|
|
657
|
+
if (!session) return { kind: "not_found" };
|
|
658
|
+
validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
|
|
659
|
+
return {
|
|
660
|
+
kind: "authorized",
|
|
661
|
+
body: authentication.body,
|
|
662
|
+
owner: authentication.owner,
|
|
663
|
+
linkSessionId,
|
|
664
|
+
session
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
async function authenticateOwner(service, ctx, bodyDigestB64u, nowMs) {
|
|
668
|
+
return service.authenticateOwnerRequestV1({
|
|
669
|
+
request: ctx.request,
|
|
670
|
+
method: ctx.method,
|
|
671
|
+
pathname: ctx.pathname,
|
|
672
|
+
bodyDigestB64u,
|
|
673
|
+
requestedAtMs: nowMs
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
async function authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs) {
|
|
677
|
+
const linkSessionId = parseSessionId(rawLinkSessionId);
|
|
678
|
+
const rawSession = await service.sessionService.getSessionV1(linkSessionId);
|
|
679
|
+
if (!rawSession) return { kind: "not_found" };
|
|
680
|
+
const bodyDigestB64u = await requestBodyDigest(ctx.request);
|
|
681
|
+
const expectedKey = rawSession.qrPayload.devicePublicKeyB64u;
|
|
682
|
+
const keyDigest = await computeDevicePublicKeyDigestB64u(expectedKey);
|
|
683
|
+
const proof = parseBoundary(() => parseRequestProofHeader(ctx.request));
|
|
684
|
+
validateRequestProof(proof, ctx.method, ctx.pathname, linkSessionId, bodyDigestB64u, keyDigest, nowMs);
|
|
685
|
+
const authentication = await service.authenticateDeviceRequestV1({
|
|
686
|
+
request: ctx.request,
|
|
687
|
+
method: ctx.method,
|
|
688
|
+
pathname: ctx.pathname,
|
|
689
|
+
linkSessionId: String(linkSessionId),
|
|
690
|
+
bodyDigestB64u,
|
|
691
|
+
expectedDevicePublicKeyB64u: expectedKey,
|
|
692
|
+
expectedDevicePublicKeyDigestB64u: keyDigest,
|
|
693
|
+
proof,
|
|
694
|
+
requestedAtMs: nowMs
|
|
695
|
+
});
|
|
696
|
+
if (authentication.kind === "denied") return authentication;
|
|
697
|
+
const session = await service.sessionService.getSessionV1({
|
|
698
|
+
linkSessionId,
|
|
699
|
+
nowMs
|
|
700
|
+
});
|
|
701
|
+
if (!session) return { kind: "not_found" };
|
|
702
|
+
return {
|
|
703
|
+
kind: "authorized",
|
|
704
|
+
body: authentication.body,
|
|
705
|
+
proof: authentication.proof,
|
|
706
|
+
linkSessionId,
|
|
707
|
+
session
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
async function authenticateDeviceWithKnownSession(ctx, service, linkSessionId, session, nowMs) {
|
|
711
|
+
return await authenticateDeviceWithExpectedKey(ctx, service, linkSessionId, session.qrPayload.devicePublicKeyB64u, nowMs);
|
|
712
|
+
}
|
|
713
|
+
async function authenticateDeviceWithExpectedKey(ctx, service, linkSessionId, expectedDevicePublicKeyB64u, nowMs) {
|
|
714
|
+
const bodyDigestB64u = await requestBodyDigest(ctx.request);
|
|
715
|
+
const expectedDevicePublicKeyDigestB64u = await computeDevicePublicKeyDigestB64u(expectedDevicePublicKeyB64u);
|
|
716
|
+
const proof = parseBoundary(() => parseRequestProofHeader(ctx.request));
|
|
717
|
+
validateRequestProof(proof, ctx.method, ctx.pathname, linkSessionId, bodyDigestB64u, expectedDevicePublicKeyDigestB64u, nowMs);
|
|
718
|
+
return await service.authenticateDeviceRequestV1({
|
|
719
|
+
request: ctx.request,
|
|
720
|
+
method: ctx.method,
|
|
721
|
+
pathname: ctx.pathname,
|
|
722
|
+
linkSessionId: String(linkSessionId),
|
|
723
|
+
bodyDigestB64u,
|
|
724
|
+
expectedDevicePublicKeyB64u,
|
|
725
|
+
expectedDevicePublicKeyDigestB64u,
|
|
726
|
+
proof,
|
|
727
|
+
requestedAtMs: nowMs
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
function parseRoutePath(pathname) {
|
|
731
|
+
if (pathname === DEVICE_LINKING_BASE) return { kind: "create" };
|
|
732
|
+
if (!pathname.startsWith(`${DEVICE_LINKING_BASE}/`)) return null;
|
|
733
|
+
const parts = pathname.slice(35).split("/");
|
|
734
|
+
const linkSessionId = parts[0];
|
|
735
|
+
if (!linkSessionId) return null;
|
|
736
|
+
if (parts.length === 1) return {
|
|
737
|
+
kind: "session",
|
|
738
|
+
linkSessionId
|
|
739
|
+
};
|
|
740
|
+
if (parts.length === 3 && parts[1] === "email-otp" && parts[2] === "challenge") return {
|
|
741
|
+
kind: "email-otp-challenge",
|
|
742
|
+
linkSessionId
|
|
743
|
+
};
|
|
744
|
+
if (parts.length === 4 && parts[1] === "email-otp" && parts[2] === "challenge" && parts[3] === "resend") return {
|
|
745
|
+
kind: "email-otp-resend",
|
|
746
|
+
linkSessionId
|
|
747
|
+
};
|
|
748
|
+
if (parts.length === 4 && parts[1] === "email-otp" && parts[2] === "challenge" && parts[3] === "verify") return {
|
|
749
|
+
kind: "email-otp-verify",
|
|
750
|
+
linkSessionId
|
|
751
|
+
};
|
|
752
|
+
if (parts.length === 2 && parts[1] === "email-otp-base-factor") return {
|
|
753
|
+
kind: "email-otp-base-factor",
|
|
754
|
+
linkSessionId
|
|
755
|
+
};
|
|
756
|
+
if (parts.length === 2 && parts[1] === "owner-cancel") return {
|
|
757
|
+
kind: "owner-cancel",
|
|
758
|
+
linkSessionId
|
|
759
|
+
};
|
|
760
|
+
if (parts.length === 3 && parts[1] === "source-contribution" && parts[2] === "execute") return {
|
|
761
|
+
kind: "source-contribution-execute",
|
|
762
|
+
linkSessionId
|
|
763
|
+
};
|
|
764
|
+
if (parts.length !== 2 || !parts[1]) return null;
|
|
765
|
+
switch (parts[1]) {
|
|
766
|
+
case "claim":
|
|
767
|
+
case "approval":
|
|
768
|
+
case "target-preparation":
|
|
769
|
+
case "credential":
|
|
770
|
+
case "source-contribution-preparation":
|
|
771
|
+
case "source-contribution":
|
|
772
|
+
case "ed25519-export-root":
|
|
773
|
+
case "ed25519-export-root-recipient":
|
|
774
|
+
case "receipt":
|
|
775
|
+
case "cancel": return {
|
|
776
|
+
kind: parts[1],
|
|
777
|
+
linkSessionId
|
|
778
|
+
};
|
|
779
|
+
default: return null;
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
function requireApproval(session) {
|
|
783
|
+
const approval = session.approvalTranscript?.value;
|
|
784
|
+
if (!approval) throw new DeviceLinkingInputError("link session has no owner approval");
|
|
785
|
+
return approval;
|
|
786
|
+
}
|
|
787
|
+
function requireSourceContributionApproval(session) {
|
|
788
|
+
const approval = session.sourceContributionTranscript?.value;
|
|
789
|
+
if (!approval?.sourceContribution) throw new DeviceLinkingInputError("link session has no source contribution approval");
|
|
790
|
+
return approval;
|
|
791
|
+
}
|
|
792
|
+
function requireEd25519SourceContributionPreparation(session) {
|
|
793
|
+
if (!session.sourceContributionPreparation) throw new DeviceLinkingInputError("link session has no source contribution preparation");
|
|
794
|
+
const preparations = parseBoundary(() => parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1(session.sourceContributionPreparation));
|
|
795
|
+
const ed25519 = preparations.find((preparation) => "kind" in preparation);
|
|
796
|
+
if (!ed25519) throw new DeviceLinkingInputError("link session has no Ed25519 source contribution preparation");
|
|
797
|
+
if (preparations.filter((preparation) => "kind" in preparation).length !== 1 || ed25519.linkSessionId !== session.linkSessionId) throw new DeviceLinkingInputError("Ed25519 source contribution preparation does not match the link session");
|
|
798
|
+
return ed25519;
|
|
799
|
+
}
|
|
800
|
+
function requireSentEmailOtpChallenge(session) {
|
|
801
|
+
const challenge = session.emailOtpChallenge;
|
|
802
|
+
if (!challenge || challenge.state !== "sent") throw new DeviceLinkingInputError("email OTP challenge has not been sent");
|
|
803
|
+
return challenge;
|
|
804
|
+
}
|
|
805
|
+
function parseEmailOtpChallengeRequest(raw, resend) {
|
|
806
|
+
return resend ? parseLinkedDeviceEmailOtpChallengeResendRequestV1(raw) : parseLinkedDeviceEmailOtpChallengeStartRequestV1(raw);
|
|
807
|
+
}
|
|
808
|
+
function readTargetPreparation(service, session, approval, access, nowMs) {
|
|
809
|
+
return service.targetCredential.getTargetPreparationV1({
|
|
810
|
+
session,
|
|
811
|
+
approval,
|
|
812
|
+
...access,
|
|
813
|
+
requestedAtMs: nowMs
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
async function authenticateTargetPasskeyOriginV1(ctx, routeId) {
|
|
817
|
+
const route = findRouteDefinitionById(ctx.routeDefinitions, routeId);
|
|
818
|
+
if (!route) throw new Error(`Missing route definition for ${routeId}`);
|
|
819
|
+
const publishableKeyAuth = ctx.opts.publishableKeyAuth;
|
|
820
|
+
if (!publishableKeyAuth) return {
|
|
821
|
+
ok: false,
|
|
822
|
+
response: json({
|
|
823
|
+
ok: false,
|
|
824
|
+
code: "service_not_configured",
|
|
825
|
+
message: "Publishable-key auth is not configured"
|
|
826
|
+
}, { status: 501 })
|
|
827
|
+
};
|
|
828
|
+
const rawOrigin = String(ctx.request.headers.get("origin") || "").trim();
|
|
829
|
+
const expectedOrigin = normalizeCorsOrigin(rawOrigin);
|
|
830
|
+
if (!expectedOrigin || expectedOrigin !== rawOrigin) return {
|
|
831
|
+
ok: false,
|
|
832
|
+
response: json({
|
|
833
|
+
ok: false,
|
|
834
|
+
code: "forbidden",
|
|
835
|
+
message: "Origin header is required and must be a valid exact origin"
|
|
836
|
+
}, { status: 403 })
|
|
837
|
+
};
|
|
838
|
+
const headers = Object.fromEntries(ctx.request.headers.entries());
|
|
839
|
+
const auth = await resolvePublishableKeyApiCredentialAuth({
|
|
840
|
+
environmentId: extractRouterApiEnvironmentId(headers),
|
|
841
|
+
headers,
|
|
842
|
+
missingEnvironmentMessage: "Environment header is required for linked-device Passkey setup",
|
|
843
|
+
missingOriginMessage: "Origin header is required and must be a valid exact origin",
|
|
844
|
+
missingPublishableKeyMessage: "Missing publishable key",
|
|
845
|
+
origin: expectedOrigin,
|
|
846
|
+
publishableKeyAuth,
|
|
847
|
+
route,
|
|
848
|
+
routeAuthNotConfiguredMessage: "Linked-device Passkey route auth is not configured"
|
|
849
|
+
});
|
|
850
|
+
if (!auth.ok) return {
|
|
851
|
+
ok: false,
|
|
852
|
+
response: json({
|
|
853
|
+
ok: false,
|
|
854
|
+
code: auth.code,
|
|
855
|
+
message: auth.message
|
|
856
|
+
}, { status: auth.status })
|
|
857
|
+
};
|
|
858
|
+
return {
|
|
859
|
+
ok: true,
|
|
860
|
+
expectedOrigin
|
|
861
|
+
};
|
|
862
|
+
}
|
|
863
|
+
function projectLinkSessionStateV1(state) {
|
|
864
|
+
switch (state.state) {
|
|
865
|
+
case "displaying_qr": return { state: "displaying_qr" };
|
|
866
|
+
case "claimed":
|
|
867
|
+
case "awaiting_target_factor":
|
|
868
|
+
case "awaiting_source_contribution":
|
|
869
|
+
case "provisioning": return {
|
|
870
|
+
state: state.state,
|
|
871
|
+
deviceId: state.deviceId
|
|
872
|
+
};
|
|
873
|
+
case "authority_pending_local_install": return {
|
|
874
|
+
state: "authority_pending_local_install",
|
|
875
|
+
deviceId: state.deviceId,
|
|
876
|
+
authorityId: state.authorityId,
|
|
877
|
+
packageSetDigestB64u: state.packageSetDigestB64u
|
|
878
|
+
};
|
|
879
|
+
case "active": return {
|
|
880
|
+
state: "active",
|
|
881
|
+
deviceId: state.deviceId,
|
|
882
|
+
authorityId: state.authorityId,
|
|
883
|
+
activatedAtMs: state.activatedAtMs
|
|
884
|
+
};
|
|
885
|
+
case "failed_before_commit": return {
|
|
886
|
+
state: "failed_before_commit",
|
|
887
|
+
error: state.error
|
|
888
|
+
};
|
|
889
|
+
case "cancelled": return {
|
|
890
|
+
state: "cancelled",
|
|
891
|
+
cancelledAtMs: state.cancelledAtMs
|
|
892
|
+
};
|
|
893
|
+
case "expired": return {
|
|
894
|
+
state: "expired",
|
|
895
|
+
expiredAtMs: state.expiredAtMs
|
|
896
|
+
};
|
|
897
|
+
default: return assertNeverLinkSessionStateV1(state);
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
function projectSession(record) {
|
|
901
|
+
return {
|
|
902
|
+
kind: "linked_device_session_projection_v1",
|
|
903
|
+
linkSessionId: record.linkSessionId,
|
|
904
|
+
qrPayload: record.qrPayload,
|
|
905
|
+
revision: record.revision,
|
|
906
|
+
createdAtMs: record.createdAtMs,
|
|
907
|
+
updatedAtMs: record.updatedAtMs,
|
|
908
|
+
state: projectLinkSessionStateV1(record.state)
|
|
909
|
+
};
|
|
910
|
+
}
|
|
911
|
+
function sessionProjectionResponse(record, outcome) {
|
|
912
|
+
return json({
|
|
913
|
+
ok: true,
|
|
914
|
+
outcome,
|
|
915
|
+
session: projectSession(record)
|
|
916
|
+
}, { status: 200 });
|
|
917
|
+
}
|
|
918
|
+
function targetCredentialResultResponse(record, outcome, targetCredential) {
|
|
919
|
+
return json({
|
|
920
|
+
ok: true,
|
|
921
|
+
outcome,
|
|
922
|
+
targetCredential,
|
|
923
|
+
session: projectSession(record)
|
|
924
|
+
}, { status: 200 });
|
|
925
|
+
}
|
|
926
|
+
function claimResultResponse(result) {
|
|
927
|
+
if (result.outcome !== "applied" && result.outcome !== "replayed") return sessionResultResponse(result);
|
|
928
|
+
const claim = result.record.claimTranscript?.value;
|
|
929
|
+
return claim ? json(claim, { status: 200 }) : invalidStateResponse(result.record);
|
|
930
|
+
}
|
|
931
|
+
function approvalResultResponse(result) {
|
|
932
|
+
if (result.outcome !== "applied" && result.outcome !== "replayed") return sessionResultResponse(result);
|
|
933
|
+
const record = result.record;
|
|
934
|
+
if (record.state.state === "active") return json({
|
|
935
|
+
ok: true,
|
|
936
|
+
outcome: result.outcome,
|
|
937
|
+
state: record.state,
|
|
938
|
+
authorityId: record.authorityId
|
|
939
|
+
}, { status: 200 });
|
|
940
|
+
if (record.state.state === "awaiting_target_factor" || record.state.state === "awaiting_source_contribution" || record.state.state === "provisioning" || record.state.state === "authority_pending_local_install") return result.outcome === "replayed" ? json({
|
|
941
|
+
outcome: "replayed",
|
|
942
|
+
replay: {
|
|
943
|
+
state: "pending",
|
|
944
|
+
session: record.state
|
|
945
|
+
}
|
|
946
|
+
}, { status: 200 }) : json({
|
|
947
|
+
outcome: "pending",
|
|
948
|
+
state: record.state
|
|
949
|
+
}, { status: 200 });
|
|
950
|
+
return invalidStateResponse(record);
|
|
951
|
+
}
|
|
952
|
+
function sessionResultResponse(result) {
|
|
953
|
+
switch (result.outcome) {
|
|
954
|
+
case "applied":
|
|
955
|
+
case "replayed": return sessionProjectionResponse(result.record, result.outcome);
|
|
956
|
+
case "conflict": return json({
|
|
957
|
+
ok: false,
|
|
958
|
+
outcome: result.outcome,
|
|
959
|
+
expectedRevision: result.expectedRevision,
|
|
960
|
+
actualRevision: result.actualRevision,
|
|
961
|
+
session: result.record ? projectSession(result.record) : null
|
|
962
|
+
}, { status: 409 });
|
|
963
|
+
case "expired": return json({
|
|
964
|
+
ok: false,
|
|
965
|
+
outcome: result.outcome,
|
|
966
|
+
session: projectSession(result.record)
|
|
967
|
+
}, { status: 410 });
|
|
968
|
+
case "invalid_state": return json({
|
|
969
|
+
ok: false,
|
|
970
|
+
outcome: result.outcome,
|
|
971
|
+
state: result.state,
|
|
972
|
+
session: projectSession(result.record)
|
|
973
|
+
}, { status: 409 });
|
|
974
|
+
case "integrity_error": return json({
|
|
975
|
+
ok: false,
|
|
976
|
+
outcome: result.outcome,
|
|
977
|
+
reason: result.reason,
|
|
978
|
+
session: projectSession(result.record)
|
|
979
|
+
}, { status: 500 });
|
|
980
|
+
case "unauthorized": return json({
|
|
981
|
+
ok: false,
|
|
982
|
+
outcome: result.outcome,
|
|
983
|
+
code: result.code,
|
|
984
|
+
message: result.message
|
|
985
|
+
}, { status: 401 });
|
|
986
|
+
case "invalid_input": return invalidInputResponse(result.message);
|
|
987
|
+
case "deleted": return json({
|
|
988
|
+
ok: true,
|
|
989
|
+
outcome: result.outcome
|
|
990
|
+
}, { status: 200 });
|
|
991
|
+
default: return assertNever(result);
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
function invalidStateResponse(record) {
|
|
995
|
+
return json({
|
|
996
|
+
ok: false,
|
|
997
|
+
outcome: "invalid_state",
|
|
998
|
+
state: record.state.state,
|
|
999
|
+
session: projectSession(record)
|
|
1000
|
+
}, { status: 409 });
|
|
1001
|
+
}
|
|
1002
|
+
function exportRootWriteResponse(result) {
|
|
1003
|
+
return result.outcome === "conflict" ? json({
|
|
1004
|
+
ok: false,
|
|
1005
|
+
code: result.reason ?? "conflict",
|
|
1006
|
+
message: "export-root relay conflict"
|
|
1007
|
+
}, { status: 409 }) : json({
|
|
1008
|
+
ok: true,
|
|
1009
|
+
outcome: result.outcome
|
|
1010
|
+
}, { status: 200 });
|
|
1011
|
+
}
|
|
1012
|
+
function ownerSessionResponse(context) {
|
|
1013
|
+
return context.kind === "denied" ? authDeniedResponse(context) : notFoundResponse();
|
|
1014
|
+
}
|
|
1015
|
+
/**
|
|
1016
|
+
* The one owner-to-session binding, shared by every owner route on a claimed
|
|
1017
|
+
* session. It runs before any state is disclosed: an authenticated owner of a
|
|
1018
|
+
* DIFFERENT wallet must get the same denial for every state, not a projection
|
|
1019
|
+
* or an invalid-state body. An unclaimed session has no wallet to bind to yet,
|
|
1020
|
+
* so the caller's state checks answer instead.
|
|
1021
|
+
*/
|
|
1022
|
+
function requireOwnerMatchesClaimedWallet(owner, session) {
|
|
1023
|
+
const claimWalletId = session.claimTranscript?.value.walletId;
|
|
1024
|
+
if (claimWalletId === void 0) return null;
|
|
1025
|
+
if (owner.walletId === claimWalletId) return null;
|
|
1026
|
+
return authDeniedResponse({
|
|
1027
|
+
kind: "denied",
|
|
1028
|
+
code: "unauthorized",
|
|
1029
|
+
message: "owner session does not match link wallet"
|
|
1030
|
+
});
|
|
1031
|
+
}
|
|
1032
|
+
/**
|
|
1033
|
+
* Approval-time revalidation of the selected Email OTP base method. The same
|
|
1034
|
+
* eligibility question the dedicated base-factor route answers, asked once
|
|
1035
|
+
* more with the id the approval names, so the two paths cannot drift.
|
|
1036
|
+
*/
|
|
1037
|
+
async function requireSelectedEmailOtpBaseFactorV1(service, session, input) {
|
|
1038
|
+
const provider = service.emailOtpTargetFactor;
|
|
1039
|
+
if (!provider) return notSupportedResponse("Email OTP linking is not configured");
|
|
1040
|
+
const selection = await provider.resolveBaseFactorSelectionV1({
|
|
1041
|
+
walletId: input.walletId,
|
|
1042
|
+
request: {
|
|
1043
|
+
kind: "select",
|
|
1044
|
+
expectedRevision: session.revision,
|
|
1045
|
+
baseWalletAuthMethodId: input.baseWalletAuthMethodId
|
|
1046
|
+
}
|
|
1047
|
+
});
|
|
1048
|
+
if (selection.kind !== "selected" || selection.choice.baseWalletAuthMethodId !== input.baseWalletAuthMethodId) return authDeniedResponse({
|
|
1049
|
+
kind: "denied",
|
|
1050
|
+
code: "unauthorized",
|
|
1051
|
+
message: "Email OTP base method is unavailable"
|
|
1052
|
+
});
|
|
1053
|
+
return null;
|
|
1054
|
+
}
|
|
1055
|
+
function authDeniedResponse(result) {
|
|
1056
|
+
return json({
|
|
1057
|
+
ok: false,
|
|
1058
|
+
outcome: "unauthorized",
|
|
1059
|
+
code: result.code,
|
|
1060
|
+
message: result.message
|
|
1061
|
+
}, { status: result.code === "expired" ? 410 : 401 });
|
|
1062
|
+
}
|
|
1063
|
+
function invalidInputResponse(message) {
|
|
1064
|
+
return json({
|
|
1065
|
+
ok: false,
|
|
1066
|
+
outcome: "invalid_input",
|
|
1067
|
+
code: "invalid_input",
|
|
1068
|
+
message
|
|
1069
|
+
}, { status: 400 });
|
|
1070
|
+
}
|
|
1071
|
+
function notSupportedResponse(message = "Device linking is not configured") {
|
|
1072
|
+
return json({
|
|
1073
|
+
ok: false,
|
|
1074
|
+
code: "not_supported",
|
|
1075
|
+
message
|
|
1076
|
+
}, { status: 501 });
|
|
1077
|
+
}
|
|
1078
|
+
function notFoundResponse() {
|
|
1079
|
+
return json({
|
|
1080
|
+
ok: false,
|
|
1081
|
+
code: "not_found",
|
|
1082
|
+
message: "Linked-device session not found"
|
|
1083
|
+
}, { status: 404 });
|
|
1084
|
+
}
|
|
1085
|
+
function methodNotAllowedResponse() {
|
|
1086
|
+
return json({
|
|
1087
|
+
ok: false,
|
|
1088
|
+
code: "method_not_allowed",
|
|
1089
|
+
message: "Method is not allowed"
|
|
1090
|
+
}, { status: 405 });
|
|
1091
|
+
}
|
|
1092
|
+
function parseCreateRequest(raw) {
|
|
1093
|
+
const record = requireRecord(raw, "device-linking create request");
|
|
1094
|
+
requireExactKeys(record, ["kind", "payload"]);
|
|
1095
|
+
if (record.kind !== "linked_device_session_create_request_v1") throw new Error("device-linking create request kind is invalid");
|
|
1096
|
+
return {
|
|
1097
|
+
kind: "linked_device_session_create_request_v1",
|
|
1098
|
+
payload: parseQrLinkedDeviceSessionPayloadV5(record.payload)
|
|
1099
|
+
};
|
|
1100
|
+
}
|
|
1101
|
+
function parseSessionId(raw) {
|
|
1102
|
+
let decoded = raw;
|
|
1103
|
+
try {
|
|
1104
|
+
decoded = decodeURIComponent(raw);
|
|
1105
|
+
} catch {
|
|
1106
|
+
throw new Error("link session id is invalid");
|
|
1107
|
+
}
|
|
1108
|
+
const parsed = parseLinkDeviceSessionId(decoded);
|
|
1109
|
+
if (!parsed.ok) throw new Error(parsed.error.message);
|
|
1110
|
+
return parsed.value;
|
|
1111
|
+
}
|
|
1112
|
+
function parseRequestProofHeader(request) {
|
|
1113
|
+
const encoded = request.headers.get(DEVICE_LINKING_REQUEST_PROOF_HEADER_V1);
|
|
1114
|
+
if (!encoded) throw new Error(`missing ${DEVICE_LINKING_REQUEST_PROOF_HEADER_V1} header`);
|
|
1115
|
+
const bytes = parseB64uBytes(encoded, DEVICE_LINKING_REQUEST_PROOF_HEADER_V1);
|
|
1116
|
+
let raw;
|
|
1117
|
+
try {
|
|
1118
|
+
raw = JSON.parse(new TextDecoder().decode(bytes));
|
|
1119
|
+
} catch {
|
|
1120
|
+
throw new Error("device-linking request proof is not valid JSON");
|
|
1121
|
+
}
|
|
1122
|
+
return parseLinkedDeviceRequestProofV1(raw);
|
|
1123
|
+
}
|
|
1124
|
+
function validateRequestProof(proof, method, pathname, linkSessionId, bodyDigestB64u, devicePublicKeyDigestB64u, nowMs) {
|
|
1125
|
+
if (proof.method !== method || proof.canonicalPath !== pathname || proof.linkSessionId !== linkSessionId) throw new DeviceLinkingInputError("request proof does not match method, path, or session");
|
|
1126
|
+
if (proof.bodyDigestB64u !== bodyDigestB64u) throw new DeviceLinkingInputError("request body digest does not match authenticated bytes");
|
|
1127
|
+
if (proof.devicePublicKeyDigestB64u !== devicePublicKeyDigestB64u) throw new DeviceLinkingInputError("request proof device identity does not match QR session");
|
|
1128
|
+
if (proof.expiresAtMs <= nowMs || proof.issuedAtMs > nowMs || proof.expiresAtMs <= proof.issuedAtMs) throw new DeviceLinkingInputError("request proof is expired");
|
|
1129
|
+
if (proof.expiresAtMs - proof.issuedAtMs > 6e4) throw new DeviceLinkingInputError("request proof lifetime exceeds the maximum");
|
|
1130
|
+
}
|
|
1131
|
+
function validateOwnerRequestBinding(binding, ctx, bodyDigestB64u, nowMs) {
|
|
1132
|
+
if (binding.kind !== "linked_device_owner_request_binding_v1" || binding.method !== ctx.method || binding.pathname !== ctx.pathname) throw new DeviceLinkingInputError("owner request binding does not match method or path");
|
|
1133
|
+
if (binding.bodyDigestB64u !== bodyDigestB64u || binding.expiresAtMs <= nowMs) throw new DeviceLinkingInputError("owner request proof is expired or does not match the request");
|
|
1134
|
+
}
|
|
1135
|
+
async function requestBodyDigest(request) {
|
|
1136
|
+
return parseDigestB64u(base64UrlEncode(await sha256Bytes(new Uint8Array(await request.clone().arrayBuffer()))));
|
|
1137
|
+
}
|
|
1138
|
+
async function computeDevicePublicKeyDigestB64u(publicKeyB64u) {
|
|
1139
|
+
try {
|
|
1140
|
+
return await computeLinkedDevicePublicKeyDigestV1(publicKeyB64u);
|
|
1141
|
+
} catch (error) {
|
|
1142
|
+
throw new DeviceLinkingInputError(errorMessage(error));
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
function parseB64uBytes(raw, field) {
|
|
1146
|
+
if (typeof raw !== "string" || !/^[A-Za-z0-9_-]+$/.test(raw)) throw new Error(`${field} is invalid`);
|
|
1147
|
+
let bytes;
|
|
1148
|
+
try {
|
|
1149
|
+
bytes = base64UrlDecode(raw);
|
|
1150
|
+
} catch {
|
|
1151
|
+
throw new Error(`${field} is invalid`);
|
|
1152
|
+
}
|
|
1153
|
+
if (bytes.length === 0 || base64UrlEncode(bytes) !== raw) throw new Error(`${field} is not canonical base64url`);
|
|
1154
|
+
return bytes;
|
|
1155
|
+
}
|
|
1156
|
+
async function readJsonBody(request) {
|
|
1157
|
+
return await readJson(request);
|
|
1158
|
+
}
|
|
1159
|
+
function parseBoundary(parse) {
|
|
1160
|
+
try {
|
|
1161
|
+
return parse();
|
|
1162
|
+
} catch (error) {
|
|
1163
|
+
throw new DeviceLinkingInputError(errorMessage(error));
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
function requireRecord(raw, field) {
|
|
1167
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) throw new Error(`${field} must be an object`);
|
|
1168
|
+
return raw;
|
|
1169
|
+
}
|
|
1170
|
+
function requireExactKeys(record, keys) {
|
|
1171
|
+
const actual = Object.keys(record).sort();
|
|
1172
|
+
const expected = [...keys].sort();
|
|
1173
|
+
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) throw new Error("record contains invalid fields");
|
|
1174
|
+
}
|
|
1175
|
+
function parseOwnerCancelRequest(raw) {
|
|
1176
|
+
const record = requireRecord(raw, "owner cancel request");
|
|
1177
|
+
requireExactKeys(record, ["expectedRevision"]);
|
|
1178
|
+
if (!Number.isSafeInteger(record.expectedRevision) || Number(record.expectedRevision) < 0) throw new Error("owner cancel expectedRevision is invalid");
|
|
1179
|
+
return { expectedRevision: Number(record.expectedRevision) };
|
|
1180
|
+
}
|
|
1181
|
+
function errorMessage(error) {
|
|
1182
|
+
return error instanceof Error ? error.message : String(error || "invalid device-linking request");
|
|
1183
|
+
}
|
|
1184
|
+
function assertNever(value) {
|
|
1185
|
+
throw new Error(`unsupported device-linking value: ${String(value)}`);
|
|
1186
|
+
}
|
|
1187
|
+
var DeviceLinkingInputError = class extends Error {
|
|
1188
|
+
constructor(message) {
|
|
1189
|
+
super(message);
|
|
1190
|
+
this.name = "DeviceLinkingInputError";
|
|
1191
|
+
}
|
|
1192
|
+
};
|
|
1193
|
+
//#endregion
|
|
1194
|
+
export { DEVICE_LINKING_REQUEST_PROOF_HEADER_V1, handleDeviceLinking, targetCredentialResultResponse };
|
|
1195
|
+
|
|
1196
|
+
//# sourceMappingURL=deviceLinking.js.map
|