@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,2199 @@
|
|
|
1
|
+
import { parseWalletAuthMethodId, parseWalletId, parseWebAuthnRpId } from "../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
+
import { EVM_ECDSA_MPC_OPERATION_KINDS, NEAR_ED25519_MPC_OPERATION_KINDS, parseWalletSessionId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
|
|
3
|
+
import { base64UrlDecode } from "../../../shared-ts/src/utils/base64.js";
|
|
4
|
+
import { parseDigestB64u } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
5
|
+
import { base58Encode } from "../../../shared-ts/src/utils/base58.js";
|
|
6
|
+
import "../../../shared-ts/src/utils/encoders.js";
|
|
7
|
+
import { deriveImplicitNearAccountIdFromEd25519PublicKey, parseImplicitNearAccountId } from "../../../shared-ts/src/utils/near.js";
|
|
8
|
+
import { addAuthMethodIntentGrantFromString, addSignerIntentGrantFromString, computeAddAuthMethodIntentDigestB64u, computeAddSignerIntentDigestB64u, normalizeAddAuthMethodInput, normalizeAddAuthMethodIntentCaller, normalizeEmailOtpRegistrationProof, normalizeRegistrationAuthMethodInput, normalizeRegistrationSignerPlan, registrationSignerSetSelectionFromPlan, walletIdFromString } from "../../../shared-ts/src/utils/registrationIntent.js";
|
|
9
|
+
import { ecdsaClientRootPublicKey33B64uFromString } from "../../../shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js";
|
|
10
|
+
import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
|
|
11
|
+
import { normalizeRuntimePolicyScope } from "../../../shared-ts/src/threshold/signingRootScope.js";
|
|
12
|
+
import { parseRouterAbEcdsaRegistrationActivationRequestV1, parseRouterAbEcdsaRegistrationRequestV1 } from "../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
|
|
13
|
+
import { parseHostedWalletSessionOperationCredentialToken, parsePrimaryWalletSessionOperationCredentialToken, parseSessionOrigin } from "../../../authorization/domain.js";
|
|
14
|
+
import { normalizeCorsOrigin } from "../../../core/SessionService.js";
|
|
15
|
+
import { thresholdEcdsaChainTargetFromValue } from "../../../core/thresholdEcdsaChainTarget.js";
|
|
16
|
+
import { parseRouterAbTraceContextV1 } from "../../../shared-ts/src/utils/routerAbTraceContext.js";
|
|
17
|
+
import { extractBearerCredential, extractRouterApiEnvironmentId } from "../../auth/routerApiKeyAuth.js";
|
|
18
|
+
import { resolvePublishableKeyApiCredentialAuth } from "../../auth/routerApiCredentialAuth.js";
|
|
19
|
+
import { resolveActiveRuntimePolicyScopeForEnvironment, resolveWalletSessionAdministrationAdmission, resolveWalletSessionOperationCredentialAdmission, resolveWalletSessionOperationCredentialAdmissionFromContext } from "../../auth/commonRouterUtils.js";
|
|
20
|
+
import { enforceRoutePolicy } from "../../framework/enforceRoutePolicy.js";
|
|
21
|
+
import { routeError, routeJson } from "../../framework/routeResponses.js";
|
|
22
|
+
import { parsePasskeyCustodyEnvelopeRecord } from "../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
|
|
23
|
+
import "../../../shared-ts/src/passkey-custody/index.js";
|
|
24
|
+
import { verifyWalletRegistrationSetupClaims } from "./walletRegistrationSetupPayload.js";
|
|
25
|
+
import { computeWalletEcdsaKeyFactsInventoryChallengeDigestB64u } from "../../../shared-ts/src/utils/ecdsaKeyFactsInventory.js";
|
|
26
|
+
//#region src/router/domains/walletRegistration/walletRegistrationRoutes.ts
|
|
27
|
+
function parseRegistrationTraceContext(headers) {
|
|
28
|
+
const parsed = parseRouterAbTraceContextV1(headers["x-seams-trace-id"] ?? headers["X-Seams-Trace-Id"]);
|
|
29
|
+
if (parsed.ok) return {
|
|
30
|
+
ok: true,
|
|
31
|
+
value: parsed.value
|
|
32
|
+
};
|
|
33
|
+
if (parsed.reason === "missing") return {
|
|
34
|
+
ok: true,
|
|
35
|
+
value: null
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
message: parsed.message
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** User-Agent of the registering request; feeds authenticator device labels. */
|
|
43
|
+
function registrationUserAgentFromHeaders(headers) {
|
|
44
|
+
const raw = headers["user-agent"] ?? headers["User-Agent"];
|
|
45
|
+
const value = Array.isArray(raw) ? raw[0] : raw;
|
|
46
|
+
const trimmed = String(value || "").trim();
|
|
47
|
+
return trimmed ? trimmed : void 0;
|
|
48
|
+
}
|
|
49
|
+
function assertNeverWalletEcdsaInventoryAuth(value) {
|
|
50
|
+
throw new Error(`Unsupported wallet ECDSA inventory auth: ${String(value)}`);
|
|
51
|
+
}
|
|
52
|
+
function isEmailOtpWalletRegistrationActivateSuccessV2(result) {
|
|
53
|
+
return result.authMethod.kind === "email_otp";
|
|
54
|
+
}
|
|
55
|
+
function isPasskeyWalletRegistrationActivateSuccessV2(result) {
|
|
56
|
+
return result.authMethod.kind === "passkey";
|
|
57
|
+
}
|
|
58
|
+
function walletRegistrationRoutePolicyServices(input) {
|
|
59
|
+
const service = input.services.walletRegistration;
|
|
60
|
+
return {
|
|
61
|
+
walletRegistration: service,
|
|
62
|
+
walletAuthMethods: service,
|
|
63
|
+
thresholdRuntime: service,
|
|
64
|
+
webAuthn: service,
|
|
65
|
+
nearFunding: service
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function parseFundImplicitNearAccountBody(body, walletId) {
|
|
69
|
+
if (!isPlainObject(body)) return {
|
|
70
|
+
ok: false,
|
|
71
|
+
code: "invalid_body",
|
|
72
|
+
message: "JSON body required"
|
|
73
|
+
};
|
|
74
|
+
const nearAccountId = String(body.nearAccountId || "").trim();
|
|
75
|
+
const nearPublicKeyStr = String(body.nearPublicKeyStr || "").trim();
|
|
76
|
+
if (!walletId) return {
|
|
77
|
+
ok: false,
|
|
78
|
+
code: "invalid_body",
|
|
79
|
+
message: "walletId is required"
|
|
80
|
+
};
|
|
81
|
+
if (!nearAccountId) return {
|
|
82
|
+
ok: false,
|
|
83
|
+
code: "invalid_body",
|
|
84
|
+
message: "nearAccountId is required"
|
|
85
|
+
};
|
|
86
|
+
if (!nearPublicKeyStr) return {
|
|
87
|
+
ok: false,
|
|
88
|
+
code: "invalid_body",
|
|
89
|
+
message: "nearPublicKeyStr is required"
|
|
90
|
+
};
|
|
91
|
+
const parsedNearAccountId = parseImplicitNearAccountId(nearAccountId);
|
|
92
|
+
if (!parsedNearAccountId.ok) return {
|
|
93
|
+
ok: false,
|
|
94
|
+
code: "invalid_body",
|
|
95
|
+
message: parsedNearAccountId.message
|
|
96
|
+
};
|
|
97
|
+
try {
|
|
98
|
+
if (deriveImplicitNearAccountIdFromEd25519PublicKey(nearPublicKeyStr) !== parsedNearAccountId.value) return {
|
|
99
|
+
ok: false,
|
|
100
|
+
code: "invalid_body",
|
|
101
|
+
message: "nearAccountId does not match nearPublicKeyStr implicit account ID"
|
|
102
|
+
};
|
|
103
|
+
} catch (error) {
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
code: "invalid_body",
|
|
107
|
+
message: error && typeof error === "object" && "message" in error ? String(error.message || "Invalid nearPublicKeyStr") : "Invalid nearPublicKeyStr"
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
ok: true,
|
|
112
|
+
value: {
|
|
113
|
+
walletId,
|
|
114
|
+
nearAccountId: parsedNearAccountId.value,
|
|
115
|
+
nearPublicKeyStr
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function requireWebAuthnExpectedOrigin(input) {
|
|
120
|
+
const expectedOrigin = normalizeCorsOrigin(input.origin);
|
|
121
|
+
if (expectedOrigin) return {
|
|
122
|
+
ok: true,
|
|
123
|
+
expectedOrigin
|
|
124
|
+
};
|
|
125
|
+
return {
|
|
126
|
+
ok: false,
|
|
127
|
+
response: routeError(403, "forbidden", "Origin header is required and must be a valid exact origin")
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function requireWebAuthnRpId(raw) {
|
|
131
|
+
const parsed = parseWebAuthnRpId(raw);
|
|
132
|
+
if (parsed.ok) return {
|
|
133
|
+
ok: true,
|
|
134
|
+
rpId: parsed.value
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
ok: false,
|
|
138
|
+
response: routeError(400, "invalid_body", parsed.error.message)
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const WALLET_REGISTRATION_ED25519_FINALIZE_FIELDS = ["activationReference"];
|
|
142
|
+
const WALLET_REGISTRATION_YAO_ACTIVATION_REFERENCE_FIELDS = [
|
|
143
|
+
"kind",
|
|
144
|
+
"lifecycle_id",
|
|
145
|
+
"session_id"
|
|
146
|
+
];
|
|
147
|
+
const WALLET_REGISTRATION_ECDSA_FINALIZE_FIELDS = ["expectedKeyHandles"];
|
|
148
|
+
function trimRequiredString(raw, field, message) {
|
|
149
|
+
const value = typeof raw[field] === "string" ? raw[field].trim() : "";
|
|
150
|
+
if (!value) return {
|
|
151
|
+
ok: false,
|
|
152
|
+
code: "invalid_body",
|
|
153
|
+
message
|
|
154
|
+
};
|
|
155
|
+
return {
|
|
156
|
+
ok: true,
|
|
157
|
+
value
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function findUnknownField(raw, allowed) {
|
|
161
|
+
return Object.keys(raw).find((field) => !allowed.includes(field));
|
|
162
|
+
}
|
|
163
|
+
function parseChainTargets(raw) {
|
|
164
|
+
if (!Array.isArray(raw) || raw.length === 0) return {
|
|
165
|
+
ok: false,
|
|
166
|
+
code: "invalid_body",
|
|
167
|
+
message: "auth.policy.chainTargets must contain at least one chain target"
|
|
168
|
+
};
|
|
169
|
+
const targets = [];
|
|
170
|
+
for (const value of raw) {
|
|
171
|
+
const target = thresholdEcdsaChainTargetFromValue(value);
|
|
172
|
+
if (!target) return {
|
|
173
|
+
ok: false,
|
|
174
|
+
code: "invalid_body",
|
|
175
|
+
message: "auth.policy.chainTargets contains an invalid chain target"
|
|
176
|
+
};
|
|
177
|
+
targets.push(target);
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
ok: true,
|
|
181
|
+
value: targets
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function parseParticipantIds(raw, field) {
|
|
185
|
+
if (!Array.isArray(raw) || raw.length === 0) return {
|
|
186
|
+
ok: false,
|
|
187
|
+
code: "invalid_body",
|
|
188
|
+
message: `${field} must contain participant ids`
|
|
189
|
+
};
|
|
190
|
+
const participantIds = raw.map((value) => Math.floor(Number(value)));
|
|
191
|
+
if (participantIds.some((value) => !Number.isFinite(value) || value < 1)) return {
|
|
192
|
+
ok: false,
|
|
193
|
+
code: "invalid_body",
|
|
194
|
+
message: `${field} contains an invalid participant id`
|
|
195
|
+
};
|
|
196
|
+
return {
|
|
197
|
+
ok: true,
|
|
198
|
+
value: Array.from(new Set(participantIds)).sort((a, b) => a - b)
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function parseAddSignerSelection(raw) {
|
|
202
|
+
if (!isPlainObject(raw)) return {
|
|
203
|
+
ok: false,
|
|
204
|
+
code: "invalid_body",
|
|
205
|
+
message: "add-signer signerSelection is required"
|
|
206
|
+
};
|
|
207
|
+
if (raw.mode === "ecdsa") {
|
|
208
|
+
const ecdsa = isPlainObject(raw.ecdsa) ? raw.ecdsa : null;
|
|
209
|
+
if (!ecdsa) return {
|
|
210
|
+
ok: false,
|
|
211
|
+
code: "invalid_body",
|
|
212
|
+
message: "add-signer ECDSA spec is required"
|
|
213
|
+
};
|
|
214
|
+
const chainTargets = parseChainTargets(ecdsa.chainTargets);
|
|
215
|
+
if (!chainTargets.ok) return {
|
|
216
|
+
ok: false,
|
|
217
|
+
code: "invalid_body",
|
|
218
|
+
message: "add-signer ECDSA chainTargets are invalid"
|
|
219
|
+
};
|
|
220
|
+
const participantIds = parseParticipantIds(ecdsa.participantIds, "add-signer ECDSA participantIds");
|
|
221
|
+
if (!participantIds.ok) return participantIds;
|
|
222
|
+
return {
|
|
223
|
+
ok: true,
|
|
224
|
+
value: {
|
|
225
|
+
mode: "ecdsa",
|
|
226
|
+
ecdsa: {
|
|
227
|
+
chainTargets: chainTargets.value,
|
|
228
|
+
participantIds: participantIds.value
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
if (raw.mode === "ed25519") {
|
|
234
|
+
const ed25519 = isPlainObject(raw.ed25519) ? raw.ed25519 : null;
|
|
235
|
+
if (!ed25519) return {
|
|
236
|
+
ok: false,
|
|
237
|
+
code: "invalid_body",
|
|
238
|
+
message: "add-signer Ed25519 spec is required"
|
|
239
|
+
};
|
|
240
|
+
const mode = typeof ed25519.mode === "string" ? ed25519.mode.trim() : "";
|
|
241
|
+
const signerSlot = Math.floor(Number(ed25519.signerSlot));
|
|
242
|
+
const keyPurpose = typeof ed25519.keyPurpose === "string" ? ed25519.keyPurpose.trim() : "";
|
|
243
|
+
const keyVersion = typeof ed25519.keyVersion === "string" ? ed25519.keyVersion.trim() : "";
|
|
244
|
+
const derivationVersion = Math.floor(Number(ed25519.derivationVersion));
|
|
245
|
+
const participantIds = parseParticipantIds(ed25519.participantIds, "add-signer Ed25519 participantIds");
|
|
246
|
+
if (!participantIds.ok) return participantIds;
|
|
247
|
+
if (!Number.isFinite(signerSlot) || signerSlot < 1 || !keyPurpose || !keyVersion || !Number.isFinite(derivationVersion) || derivationVersion < 1) return {
|
|
248
|
+
ok: false,
|
|
249
|
+
code: "invalid_body",
|
|
250
|
+
message: "add-signer Ed25519 spec is invalid"
|
|
251
|
+
};
|
|
252
|
+
if (mode === "create_implicit_near_account") return {
|
|
253
|
+
ok: true,
|
|
254
|
+
value: {
|
|
255
|
+
mode: "ed25519",
|
|
256
|
+
ed25519: {
|
|
257
|
+
mode: "create_implicit_near_account",
|
|
258
|
+
signerSlot,
|
|
259
|
+
participantIds: participantIds.value,
|
|
260
|
+
keyPurpose,
|
|
261
|
+
keyVersion,
|
|
262
|
+
derivationVersion
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
ok: false,
|
|
269
|
+
code: "invalid_body",
|
|
270
|
+
message: "add-signer signerSelection mode is unsupported"
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function parseRegistrationSignerSet(raw) {
|
|
274
|
+
const signerPlan = normalizeRegistrationSignerPlan(raw);
|
|
275
|
+
if (!signerPlan.ok) return {
|
|
276
|
+
ok: false,
|
|
277
|
+
code: "invalid_body",
|
|
278
|
+
message: signerPlan.message
|
|
279
|
+
};
|
|
280
|
+
const signerSelection = registrationSignerSetSelectionFromPlan(signerPlan.value, { normalizeEcdsaChainTarget: thresholdEcdsaChainTargetFromValue });
|
|
281
|
+
if (!signerSelection.ok) return {
|
|
282
|
+
ok: false,
|
|
283
|
+
code: "invalid_body",
|
|
284
|
+
message: signerSelection.message
|
|
285
|
+
};
|
|
286
|
+
return {
|
|
287
|
+
ok: true,
|
|
288
|
+
value: {
|
|
289
|
+
selection: signerSelection.value,
|
|
290
|
+
plan: signerPlan.value
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function parseWalletRegistrationSetupWallet(raw) {
|
|
295
|
+
if (!isPlainObject(raw)) return {
|
|
296
|
+
ok: true,
|
|
297
|
+
value: void 0
|
|
298
|
+
};
|
|
299
|
+
if (raw.kind === "server_allocated") return {
|
|
300
|
+
ok: true,
|
|
301
|
+
value: { kind: "server_allocated" }
|
|
302
|
+
};
|
|
303
|
+
if (raw.kind !== "provided") return {
|
|
304
|
+
ok: false,
|
|
305
|
+
code: "invalid_body",
|
|
306
|
+
message: "wallet.kind is unsupported"
|
|
307
|
+
};
|
|
308
|
+
const walletId = parseWalletId(raw.walletId);
|
|
309
|
+
if (!walletId.ok) return {
|
|
310
|
+
ok: false,
|
|
311
|
+
code: "invalid_body",
|
|
312
|
+
message: "walletId is required"
|
|
313
|
+
};
|
|
314
|
+
return {
|
|
315
|
+
ok: true,
|
|
316
|
+
value: {
|
|
317
|
+
kind: "provided",
|
|
318
|
+
walletId: walletId.value
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
function parseWalletRegistrationSetupRequest(body) {
|
|
323
|
+
const signerSelection = parseRegistrationSignerSet(body.signerSelection);
|
|
324
|
+
if (!signerSelection.ok) return signerSelection;
|
|
325
|
+
const authMethod = normalizeRegistrationAuthMethodInput(body.authMethod);
|
|
326
|
+
if (!authMethod) return {
|
|
327
|
+
ok: false,
|
|
328
|
+
code: "invalid_body",
|
|
329
|
+
message: "authMethod is required"
|
|
330
|
+
};
|
|
331
|
+
const wallet = parseWalletRegistrationSetupWallet(body.wallet);
|
|
332
|
+
if (!wallet.ok) return wallet;
|
|
333
|
+
return {
|
|
334
|
+
ok: true,
|
|
335
|
+
value: {
|
|
336
|
+
...wallet.value ? { wallet: wallet.value } : {},
|
|
337
|
+
signerSelection: signerSelection.value.selection,
|
|
338
|
+
authMethod
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
function parseCreateAddSignerIntentRequest(body, walletId) {
|
|
343
|
+
const signerSelection = parseAddSignerSelection(body.signerSelection);
|
|
344
|
+
if (!signerSelection.ok) return signerSelection;
|
|
345
|
+
return {
|
|
346
|
+
ok: true,
|
|
347
|
+
value: {
|
|
348
|
+
walletId: walletIdFromString(walletId),
|
|
349
|
+
signerSelection: signerSelection.value
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
function parseCreateAddAuthMethodIntentRequest(body, walletId) {
|
|
354
|
+
const authMethod = normalizeAddAuthMethodInput(body.authMethod);
|
|
355
|
+
if (!authMethod) return {
|
|
356
|
+
ok: false,
|
|
357
|
+
code: "invalid_body",
|
|
358
|
+
message: "authMethod is invalid"
|
|
359
|
+
};
|
|
360
|
+
const caller = normalizeAddAuthMethodIntentCaller(body);
|
|
361
|
+
if (!caller) return {
|
|
362
|
+
ok: false,
|
|
363
|
+
code: "invalid_body",
|
|
364
|
+
message: "add-auth-method caller is invalid"
|
|
365
|
+
};
|
|
366
|
+
return {
|
|
367
|
+
ok: true,
|
|
368
|
+
value: {
|
|
369
|
+
walletId: walletIdFromString(walletId),
|
|
370
|
+
authMethod,
|
|
371
|
+
caller
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
function parseInventoryKeyTargets(raw) {
|
|
376
|
+
if (!Array.isArray(raw) || raw.length === 0) return {
|
|
377
|
+
ok: false,
|
|
378
|
+
code: "invalid_body",
|
|
379
|
+
message: "keyTargets is required"
|
|
380
|
+
};
|
|
381
|
+
const targets = [];
|
|
382
|
+
for (const rawTarget of raw) {
|
|
383
|
+
if (!isPlainObject(rawTarget)) return {
|
|
384
|
+
ok: false,
|
|
385
|
+
code: "invalid_body",
|
|
386
|
+
message: "keyTargets contains an invalid target"
|
|
387
|
+
};
|
|
388
|
+
const keyHandle = typeof rawTarget.keyHandle === "string" ? rawTarget.keyHandle.trim() : "";
|
|
389
|
+
const chainTarget = thresholdEcdsaChainTargetFromValue(rawTarget.chainTarget);
|
|
390
|
+
if (!keyHandle || !chainTarget) return {
|
|
391
|
+
ok: false,
|
|
392
|
+
code: "invalid_body",
|
|
393
|
+
message: "keyTargets contains an invalid target"
|
|
394
|
+
};
|
|
395
|
+
targets.push({
|
|
396
|
+
keyHandle,
|
|
397
|
+
chainTarget
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
return {
|
|
401
|
+
ok: true,
|
|
402
|
+
value: targets
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
function parseWebAuthnAuthenticationCredential(raw) {
|
|
406
|
+
if (!isPlainObject(raw)) return {
|
|
407
|
+
ok: false,
|
|
408
|
+
code: "invalid_body",
|
|
409
|
+
message: "auth.credential is required"
|
|
410
|
+
};
|
|
411
|
+
const response = isPlainObject(raw.response) ? raw.response : null;
|
|
412
|
+
if (typeof raw.id !== "string" || typeof raw.rawId !== "string" || typeof raw.type !== "string" || !response || typeof response.clientDataJSON !== "string" || typeof response.authenticatorData !== "string" || typeof response.signature !== "string") return {
|
|
413
|
+
ok: false,
|
|
414
|
+
code: "invalid_body",
|
|
415
|
+
message: "auth.credential is invalid"
|
|
416
|
+
};
|
|
417
|
+
return {
|
|
418
|
+
ok: true,
|
|
419
|
+
value: {
|
|
420
|
+
id: raw.id,
|
|
421
|
+
rawId: raw.rawId,
|
|
422
|
+
type: raw.type,
|
|
423
|
+
authenticatorAttachment: typeof raw.authenticatorAttachment === "string" ? raw.authenticatorAttachment : null,
|
|
424
|
+
response: {
|
|
425
|
+
clientDataJSON: response.clientDataJSON,
|
|
426
|
+
authenticatorData: response.authenticatorData,
|
|
427
|
+
signature: response.signature,
|
|
428
|
+
userHandle: typeof response.userHandle === "string" ? response.userHandle : null
|
|
429
|
+
},
|
|
430
|
+
clientExtensionResults: isPlainObject(raw.clientExtensionResults) ? raw.clientExtensionResults : null
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
function parseOptionalRuntimePolicyScope(raw) {
|
|
435
|
+
if (raw === void 0) return {
|
|
436
|
+
ok: true,
|
|
437
|
+
value: void 0
|
|
438
|
+
};
|
|
439
|
+
try {
|
|
440
|
+
return {
|
|
441
|
+
ok: true,
|
|
442
|
+
value: normalizeRuntimePolicyScope(raw)
|
|
443
|
+
};
|
|
444
|
+
} catch {
|
|
445
|
+
return {
|
|
446
|
+
ok: false,
|
|
447
|
+
code: "invalid_body",
|
|
448
|
+
message: "auth.runtimePolicyScope is invalid"
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
function parseWalletSessionCredentialReference(raw) {
|
|
453
|
+
if (Object.keys(raw).length !== 2 || raw.kind !== "opaque_wallet_session_operation_credential_v1" && raw.kind !== "opaque_hosted_wallet_session_operation_credential_v1") return {
|
|
454
|
+
ok: false,
|
|
455
|
+
code: "invalid_body",
|
|
456
|
+
message: "auth operation credential reference is invalid"
|
|
457
|
+
};
|
|
458
|
+
const walletSessionId = parseWalletSessionId(raw.walletSessionId);
|
|
459
|
+
if (!walletSessionId.ok) return {
|
|
460
|
+
ok: false,
|
|
461
|
+
code: "invalid_body",
|
|
462
|
+
message: "auth operation credential walletSessionId is invalid"
|
|
463
|
+
};
|
|
464
|
+
return {
|
|
465
|
+
ok: true,
|
|
466
|
+
value: {
|
|
467
|
+
kind: raw.kind,
|
|
468
|
+
walletSessionId: walletSessionId.value
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
async function parseWalletEcdsaInventoryBody(body, walletId) {
|
|
473
|
+
const rpId = trimRequiredString(body, "rpId", "rpId is required");
|
|
474
|
+
if (!rpId.ok) return rpId;
|
|
475
|
+
const keyTargets = parseInventoryKeyTargets(body.keyTargets);
|
|
476
|
+
if (!keyTargets.ok) return keyTargets;
|
|
477
|
+
const auth = isPlainObject(body.auth) ? body.auth : null;
|
|
478
|
+
if (!auth) return {
|
|
479
|
+
ok: false,
|
|
480
|
+
code: "invalid_body",
|
|
481
|
+
message: "auth is required"
|
|
482
|
+
};
|
|
483
|
+
if (auth.kind === "webauthn_assertion") {
|
|
484
|
+
const credential = parseWebAuthnAuthenticationCredential(auth.credential);
|
|
485
|
+
if (!credential.ok) return credential;
|
|
486
|
+
const expectedChallengeDigestB64u = typeof auth.expectedChallengeDigestB64u === "string" ? auth.expectedChallengeDigestB64u.trim() : "";
|
|
487
|
+
const serverNonceB64u = typeof auth.serverNonceB64u === "string" ? auth.serverNonceB64u.trim() : "";
|
|
488
|
+
if (!expectedChallengeDigestB64u || !serverNonceB64u) return {
|
|
489
|
+
ok: false,
|
|
490
|
+
code: "invalid_body",
|
|
491
|
+
message: "auth.expectedChallengeDigestB64u and auth.serverNonceB64u are required"
|
|
492
|
+
};
|
|
493
|
+
const runtimePolicyScope = parseOptionalRuntimePolicyScope(auth.runtimePolicyScope);
|
|
494
|
+
if (!runtimePolicyScope.ok) return runtimePolicyScope;
|
|
495
|
+
if (expectedChallengeDigestB64u !== await computeWalletEcdsaKeyFactsInventoryChallengeDigestB64u({
|
|
496
|
+
walletId,
|
|
497
|
+
rpId: rpId.value,
|
|
498
|
+
keyTargets: keyTargets.value,
|
|
499
|
+
...runtimePolicyScope.value ? { runtimePolicyScope: runtimePolicyScope.value } : {},
|
|
500
|
+
serverNonceB64u
|
|
501
|
+
})) return {
|
|
502
|
+
ok: false,
|
|
503
|
+
code: "invalid_body",
|
|
504
|
+
message: "auth.expectedChallengeDigestB64u mismatch"
|
|
505
|
+
};
|
|
506
|
+
return {
|
|
507
|
+
ok: true,
|
|
508
|
+
value: {
|
|
509
|
+
rpId: rpId.value,
|
|
510
|
+
auth: {
|
|
511
|
+
kind: "webauthn_assertion",
|
|
512
|
+
credential: credential.value,
|
|
513
|
+
expectedChallengeDigestB64u,
|
|
514
|
+
serverNonceB64u,
|
|
515
|
+
...runtimePolicyScope.value ? { runtimePolicyScope: runtimePolicyScope.value } : {}
|
|
516
|
+
},
|
|
517
|
+
keyTargets: keyTargets.value
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
if (auth.kind === "opaque_wallet_session_operation_credential_v1" || auth.kind === "opaque_hosted_wallet_session_operation_credential_v1") {
|
|
522
|
+
const operationCredential = parseWalletSessionCredentialReference(auth);
|
|
523
|
+
if (!operationCredential.ok) return operationCredential;
|
|
524
|
+
return {
|
|
525
|
+
ok: true,
|
|
526
|
+
value: {
|
|
527
|
+
rpId: rpId.value,
|
|
528
|
+
auth: operationCredential.value,
|
|
529
|
+
keyTargets: keyTargets.value
|
|
530
|
+
}
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
return {
|
|
534
|
+
ok: false,
|
|
535
|
+
code: "invalid_body",
|
|
536
|
+
message: "auth.kind is unsupported"
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
async function resolveRouteExactWalletSessionAdministration(input, walletId) {
|
|
540
|
+
const token = extractBearerCredential(input.headers);
|
|
541
|
+
if (!token) return null;
|
|
542
|
+
let primaryToken;
|
|
543
|
+
try {
|
|
544
|
+
primaryToken = parsePrimaryWalletSessionOperationCredentialToken(token);
|
|
545
|
+
} catch {
|
|
546
|
+
return null;
|
|
547
|
+
}
|
|
548
|
+
try {
|
|
549
|
+
const resolution = await resolveWalletSessionAdministrationAdmission({
|
|
550
|
+
authorizationSessions: input.services.authorizationSessions,
|
|
551
|
+
token: primaryToken,
|
|
552
|
+
nowMs: Date.now(),
|
|
553
|
+
operation: {
|
|
554
|
+
kind: "link_devices",
|
|
555
|
+
walletId
|
|
556
|
+
}
|
|
557
|
+
});
|
|
558
|
+
if (resolution.kind !== "admitted") return null;
|
|
559
|
+
return resolution.admission;
|
|
560
|
+
} catch {
|
|
561
|
+
return null;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
const ECDSA_INVENTORY_SESSION_OPERATION = {
|
|
565
|
+
keyFamily: "ecdsa_secp256k1",
|
|
566
|
+
operationKind: EVM_ECDSA_MPC_OPERATION_KINDS.signTransaction
|
|
567
|
+
};
|
|
568
|
+
function hostedInventoryRequestOrigin(input) {
|
|
569
|
+
let requestOrigin;
|
|
570
|
+
try {
|
|
571
|
+
requestOrigin = parseSessionOrigin(input.origin);
|
|
572
|
+
} catch {
|
|
573
|
+
return null;
|
|
574
|
+
}
|
|
575
|
+
for (const candidate of input.hostedWalletOrigins) try {
|
|
576
|
+
if (parseSessionOrigin(candidate) === requestOrigin) return requestOrigin;
|
|
577
|
+
} catch {
|
|
578
|
+
continue;
|
|
579
|
+
}
|
|
580
|
+
return null;
|
|
581
|
+
}
|
|
582
|
+
function admittedEcdsaInventorySession(resolution) {
|
|
583
|
+
if (resolution.kind !== "admitted" || resolution.admission.curve !== "ecdsa") return null;
|
|
584
|
+
return resolution.admission;
|
|
585
|
+
}
|
|
586
|
+
async function resolveRouteEcdsaInventorySession(input, credentialReference) {
|
|
587
|
+
const token = extractBearerCredential(input.headers);
|
|
588
|
+
if (!token) return { kind: "unavailable" };
|
|
589
|
+
const nowMs = Date.now();
|
|
590
|
+
if (credentialReference.kind === "opaque_wallet_session_operation_credential_v1") {
|
|
591
|
+
let primaryToken;
|
|
592
|
+
try {
|
|
593
|
+
primaryToken = parsePrimaryWalletSessionOperationCredentialToken(token);
|
|
594
|
+
} catch {
|
|
595
|
+
return { kind: "unavailable" };
|
|
596
|
+
}
|
|
597
|
+
const resolution = await resolveWalletSessionOperationCredentialAdmission({
|
|
598
|
+
authorizationSessions: input.services.authorizationSessions,
|
|
599
|
+
token: primaryToken,
|
|
600
|
+
nowMs,
|
|
601
|
+
operation: ECDSA_INVENTORY_SESSION_OPERATION
|
|
602
|
+
});
|
|
603
|
+
if (resolution.kind !== "admitted" || resolution.admission.curve !== "ecdsa") return { kind: "unavailable" };
|
|
604
|
+
if (resolution.admission.context.authorization.session.walletSessionId !== credentialReference.walletSessionId) return { kind: "credential_mismatch" };
|
|
605
|
+
return {
|
|
606
|
+
kind: "admitted",
|
|
607
|
+
admission: resolution.admission
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
let hostedToken;
|
|
611
|
+
try {
|
|
612
|
+
hostedToken = parseHostedWalletSessionOperationCredentialToken(token);
|
|
613
|
+
} catch {
|
|
614
|
+
return { kind: "unavailable" };
|
|
615
|
+
}
|
|
616
|
+
const requestOrigin = hostedInventoryRequestOrigin(input);
|
|
617
|
+
if (!requestOrigin) return { kind: "hosted_origin_rejected" };
|
|
618
|
+
const context = await input.services.authorizationSessions.readHostedWalletSessionOperationCredentialV2({
|
|
619
|
+
tenantId: input.services.authorizationSessions.tenantId,
|
|
620
|
+
token: hostedToken,
|
|
621
|
+
requestOrigin,
|
|
622
|
+
nowMs
|
|
623
|
+
});
|
|
624
|
+
if (!context) return { kind: "unavailable" };
|
|
625
|
+
const admission = admittedEcdsaInventorySession(resolveWalletSessionOperationCredentialAdmissionFromContext({
|
|
626
|
+
context,
|
|
627
|
+
nowMs,
|
|
628
|
+
operation: ECDSA_INVENTORY_SESSION_OPERATION
|
|
629
|
+
}));
|
|
630
|
+
if (admission) {
|
|
631
|
+
if (admission.context.authorization.session.walletSessionId !== credentialReference.walletSessionId) return { kind: "credential_mismatch" };
|
|
632
|
+
return {
|
|
633
|
+
kind: "admitted",
|
|
634
|
+
admission
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
return { kind: "unavailable" };
|
|
638
|
+
}
|
|
639
|
+
async function resolveRouteNearFundingWalletSession(input) {
|
|
640
|
+
const token = extractBearerCredential(input.headers);
|
|
641
|
+
if (!token) return null;
|
|
642
|
+
const v2 = await resolveWalletSessionOperationCredentialAdmission({
|
|
643
|
+
authorizationSessions: input.services.authorizationSessions,
|
|
644
|
+
token,
|
|
645
|
+
nowMs: Date.now(),
|
|
646
|
+
operation: {
|
|
647
|
+
keyFamily: "ed25519",
|
|
648
|
+
operationKind: NEAR_ED25519_MPC_OPERATION_KINDS.signTransaction
|
|
649
|
+
}
|
|
650
|
+
});
|
|
651
|
+
if (v2.kind === "admitted" && v2.admission.curve === "ed25519") {
|
|
652
|
+
const signer = v2.admission.admission.signer;
|
|
653
|
+
const nearAccountId = deriveImplicitNearAccountIdFromEd25519PublicKey(`ed25519:${base58Encode(base64UrlDecode(signer.registeredPublicKeyB64u))}`);
|
|
654
|
+
return {
|
|
655
|
+
kind: "owner",
|
|
656
|
+
walletId: String(v2.admission.context.authorization.session.walletId),
|
|
657
|
+
nearAccountId
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
return null;
|
|
661
|
+
}
|
|
662
|
+
async function parseWalletAddSignerStartBody(body, walletId) {
|
|
663
|
+
const intent = isPlainObject(body.intent) ? body.intent : null;
|
|
664
|
+
if (!intent || intent.version !== "add_signer_intent_v1") return {
|
|
665
|
+
ok: false,
|
|
666
|
+
code: "invalid_body",
|
|
667
|
+
message: "add-signer intent is required"
|
|
668
|
+
};
|
|
669
|
+
const rawAddSignerIntentGrant = typeof body.addSignerIntentGrant === "string" ? body.addSignerIntentGrant.trim() : "";
|
|
670
|
+
if (!rawAddSignerIntentGrant) return {
|
|
671
|
+
ok: false,
|
|
672
|
+
code: "invalid_body",
|
|
673
|
+
message: "add-signer intent grant is required"
|
|
674
|
+
};
|
|
675
|
+
const addSignerIntentGrant = addSignerIntentGrantFromString(rawAddSignerIntentGrant);
|
|
676
|
+
if (String(intent.walletId || "").trim() !== walletId) return {
|
|
677
|
+
ok: false,
|
|
678
|
+
code: "invalid_body",
|
|
679
|
+
message: "add-signer walletId mismatch"
|
|
680
|
+
};
|
|
681
|
+
const signerSelection = parseAddSignerSelection(intent.signerSelection);
|
|
682
|
+
if (!signerSelection.ok) return signerSelection;
|
|
683
|
+
const nonceB64u = typeof intent.nonceB64u === "string" ? intent.nonceB64u.trim() : "";
|
|
684
|
+
if (!nonceB64u) return {
|
|
685
|
+
ok: false,
|
|
686
|
+
code: "invalid_body",
|
|
687
|
+
message: "add-signer intent is incomplete"
|
|
688
|
+
};
|
|
689
|
+
const runtimePolicyScope = parseOptionalRuntimePolicyScope(intent.runtimePolicyScope);
|
|
690
|
+
if (!runtimePolicyScope.ok) return runtimePolicyScope;
|
|
691
|
+
const normalizedIntent = {
|
|
692
|
+
version: "add_signer_intent_v1",
|
|
693
|
+
walletId: walletIdFromString(walletId),
|
|
694
|
+
signerSelection: signerSelection.value,
|
|
695
|
+
...runtimePolicyScope.value ? { runtimePolicyScope: runtimePolicyScope.value } : {},
|
|
696
|
+
nonceB64u
|
|
697
|
+
};
|
|
698
|
+
const expectedDigest = typeof body.addSignerIntentDigestB64u === "string" ? body.addSignerIntentDigestB64u.trim() : "";
|
|
699
|
+
const computedDigest = await computeAddSignerIntentDigestB64u(normalizedIntent);
|
|
700
|
+
if (!expectedDigest || expectedDigest !== computedDigest) return {
|
|
701
|
+
ok: false,
|
|
702
|
+
code: "invalid_body",
|
|
703
|
+
message: "add-signer intent digest mismatch"
|
|
704
|
+
};
|
|
705
|
+
const auth = isPlainObject(body.auth) ? body.auth : null;
|
|
706
|
+
if (!auth) return {
|
|
707
|
+
ok: false,
|
|
708
|
+
code: "invalid_body",
|
|
709
|
+
message: "add-signer auth is required"
|
|
710
|
+
};
|
|
711
|
+
if (auth.kind === "webauthn_assertion") {
|
|
712
|
+
const authRpId = parseWebAuthnRpId(auth.rpId);
|
|
713
|
+
if (!authRpId.ok) return {
|
|
714
|
+
ok: false,
|
|
715
|
+
code: "invalid_body",
|
|
716
|
+
message: authRpId.error.message
|
|
717
|
+
};
|
|
718
|
+
const credential = parseWebAuthnAuthenticationCredential(auth.credential);
|
|
719
|
+
if (!credential.ok) return credential;
|
|
720
|
+
const expectedChallengeDigestB64u = typeof auth.expectedChallengeDigestB64u === "string" ? auth.expectedChallengeDigestB64u.trim() : "";
|
|
721
|
+
if (expectedChallengeDigestB64u !== expectedDigest) return {
|
|
722
|
+
ok: false,
|
|
723
|
+
code: "invalid_body",
|
|
724
|
+
message: "auth.expectedChallengeDigestB64u must match add-signer intent digest"
|
|
725
|
+
};
|
|
726
|
+
return {
|
|
727
|
+
ok: true,
|
|
728
|
+
value: {
|
|
729
|
+
walletId: walletIdFromString(walletId),
|
|
730
|
+
addSignerIntentGrant,
|
|
731
|
+
addSignerIntentDigestB64u: expectedDigest,
|
|
732
|
+
intent: normalizedIntent,
|
|
733
|
+
auth: {
|
|
734
|
+
kind: "webauthn_assertion",
|
|
735
|
+
rpId: authRpId.value,
|
|
736
|
+
credential: credential.value,
|
|
737
|
+
expectedChallengeDigestB64u
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
return {
|
|
743
|
+
ok: false,
|
|
744
|
+
code: "invalid_body",
|
|
745
|
+
message: "add-signer auth.kind is unsupported"
|
|
746
|
+
};
|
|
747
|
+
}
|
|
748
|
+
async function parseWalletAddAuthMethodStartBody(body, walletId) {
|
|
749
|
+
const intent = isPlainObject(body.intent) ? body.intent : null;
|
|
750
|
+
if (!intent || intent.version !== "add_auth_method_intent_v1") return {
|
|
751
|
+
ok: false,
|
|
752
|
+
code: "invalid_body",
|
|
753
|
+
message: "add-auth-method intent is required"
|
|
754
|
+
};
|
|
755
|
+
const rawGrant = typeof body.addAuthMethodIntentGrant === "string" ? body.addAuthMethodIntentGrant.trim() : "";
|
|
756
|
+
if (!rawGrant) return {
|
|
757
|
+
ok: false,
|
|
758
|
+
code: "invalid_body",
|
|
759
|
+
message: "add-auth-method intent grant is required"
|
|
760
|
+
};
|
|
761
|
+
if (String(intent.walletId || "").trim() !== walletId) return {
|
|
762
|
+
ok: false,
|
|
763
|
+
code: "invalid_body",
|
|
764
|
+
message: "add-auth-method walletId mismatch"
|
|
765
|
+
};
|
|
766
|
+
const authMethod = normalizeAddAuthMethodInput(intent.authMethod);
|
|
767
|
+
if (!authMethod) return {
|
|
768
|
+
ok: false,
|
|
769
|
+
code: "invalid_body",
|
|
770
|
+
message: "add-auth-method authMethod is invalid"
|
|
771
|
+
};
|
|
772
|
+
const nonceB64u = typeof intent.nonceB64u === "string" ? intent.nonceB64u.trim() : "";
|
|
773
|
+
if (!nonceB64u) return {
|
|
774
|
+
ok: false,
|
|
775
|
+
code: "invalid_body",
|
|
776
|
+
message: "add-auth-method intent is incomplete"
|
|
777
|
+
};
|
|
778
|
+
const runtimePolicyScope = parseOptionalRuntimePolicyScope(intent.runtimePolicyScope);
|
|
779
|
+
if (!runtimePolicyScope.ok) return runtimePolicyScope;
|
|
780
|
+
const targetWalletAuthMethodId = parseWalletAuthMethodId(intent.targetWalletAuthMethodId);
|
|
781
|
+
if (!targetWalletAuthMethodId.ok) return {
|
|
782
|
+
ok: false,
|
|
783
|
+
code: "invalid_body",
|
|
784
|
+
message: "add-auth-method intent target method id is invalid"
|
|
785
|
+
};
|
|
786
|
+
const intentCaller = normalizeAddAuthMethodIntentCaller(intent);
|
|
787
|
+
if (!intentCaller) return {
|
|
788
|
+
ok: false,
|
|
789
|
+
code: "invalid_body",
|
|
790
|
+
message: "add-auth-method caller is invalid"
|
|
791
|
+
};
|
|
792
|
+
const intentCommon = {
|
|
793
|
+
version: "add_auth_method_intent_v1",
|
|
794
|
+
walletId: walletIdFromString(walletId),
|
|
795
|
+
authMethod,
|
|
796
|
+
targetWalletAuthMethodId: targetWalletAuthMethodId.value,
|
|
797
|
+
...runtimePolicyScope.value ? { runtimePolicyScope: runtimePolicyScope.value } : {},
|
|
798
|
+
nonceB64u
|
|
799
|
+
};
|
|
800
|
+
const normalizedIntent = intentCaller.caller === "same_device_addition" ? {
|
|
801
|
+
...intentCommon,
|
|
802
|
+
caller: "same_device_addition",
|
|
803
|
+
source: intentCaller.source
|
|
804
|
+
} : {
|
|
805
|
+
...intentCommon,
|
|
806
|
+
caller: "linked_device_ceremony"
|
|
807
|
+
};
|
|
808
|
+
const expectedDigest = typeof body.addAuthMethodIntentDigestB64u === "string" ? body.addAuthMethodIntentDigestB64u.trim() : "";
|
|
809
|
+
const computedDigest = await computeAddAuthMethodIntentDigestB64u(normalizedIntent);
|
|
810
|
+
if (!expectedDigest || expectedDigest !== computedDigest) return {
|
|
811
|
+
ok: false,
|
|
812
|
+
code: "invalid_body",
|
|
813
|
+
message: "add-auth-method intent digest mismatch"
|
|
814
|
+
};
|
|
815
|
+
const auth = isPlainObject(body.auth) ? body.auth : null;
|
|
816
|
+
if (!auth) return {
|
|
817
|
+
ok: false,
|
|
818
|
+
code: "invalid_body",
|
|
819
|
+
message: "add-auth-method auth is required"
|
|
820
|
+
};
|
|
821
|
+
let existingAuth;
|
|
822
|
+
if (auth.kind === "webauthn_assertion") {
|
|
823
|
+
const authRpId = parseWebAuthnRpId(auth.rpId);
|
|
824
|
+
if (!authRpId.ok) return {
|
|
825
|
+
ok: false,
|
|
826
|
+
code: "invalid_body",
|
|
827
|
+
message: authRpId.error.message
|
|
828
|
+
};
|
|
829
|
+
const credential = parseWebAuthnAuthenticationCredential(auth.credential);
|
|
830
|
+
if (!credential.ok) return credential;
|
|
831
|
+
const expectedChallengeDigestB64u = typeof auth.expectedChallengeDigestB64u === "string" ? auth.expectedChallengeDigestB64u.trim() : "";
|
|
832
|
+
if (expectedChallengeDigestB64u !== expectedDigest) return {
|
|
833
|
+
ok: false,
|
|
834
|
+
code: "invalid_body",
|
|
835
|
+
message: "auth.expectedChallengeDigestB64u must match add-auth-method intent digest"
|
|
836
|
+
};
|
|
837
|
+
existingAuth = {
|
|
838
|
+
kind: "webauthn_assertion",
|
|
839
|
+
rpId: authRpId.value,
|
|
840
|
+
credential: credential.value,
|
|
841
|
+
expectedChallengeDigestB64u
|
|
842
|
+
};
|
|
843
|
+
} else if (auth.kind === "email_otp") {
|
|
844
|
+
const emailChallengeId = typeof auth.challengeId === "string" ? auth.challengeId.trim() : "";
|
|
845
|
+
const emailOtpCode = typeof auth.otpCode === "string" ? auth.otpCode.trim() : "";
|
|
846
|
+
const emailExpectedDigest = typeof auth.expectedChallengeDigestB64u === "string" ? auth.expectedChallengeDigestB64u.trim() : "";
|
|
847
|
+
if (!emailChallengeId || !emailOtpCode) return {
|
|
848
|
+
ok: false,
|
|
849
|
+
code: "invalid_body",
|
|
850
|
+
message: "email_otp auth requires a challenge and a one-time code"
|
|
851
|
+
};
|
|
852
|
+
if (emailExpectedDigest !== expectedDigest) return {
|
|
853
|
+
ok: false,
|
|
854
|
+
code: "invalid_body",
|
|
855
|
+
message: "auth.expectedChallengeDigestB64u must match add-auth-method intent digest"
|
|
856
|
+
};
|
|
857
|
+
existingAuth = {
|
|
858
|
+
kind: "email_otp_source_proof",
|
|
859
|
+
challengeId: emailChallengeId,
|
|
860
|
+
otpCode: emailOtpCode,
|
|
861
|
+
expectedChallengeDigestB64u: emailExpectedDigest
|
|
862
|
+
};
|
|
863
|
+
} else if (auth.kind === "wallet_session") {
|
|
864
|
+
if (Object.keys(auth).length !== 1) return {
|
|
865
|
+
ok: false,
|
|
866
|
+
code: "invalid_body",
|
|
867
|
+
message: "wallet_session auth carries no body facts"
|
|
868
|
+
};
|
|
869
|
+
existingAuth = { kind: "wallet_session" };
|
|
870
|
+
} else return {
|
|
871
|
+
ok: false,
|
|
872
|
+
code: "invalid_body",
|
|
873
|
+
message: "add-auth-method auth.kind is unsupported"
|
|
874
|
+
};
|
|
875
|
+
let authority;
|
|
876
|
+
if (normalizedIntent.authMethod.kind === "passkey") {
|
|
877
|
+
if (Object.prototype.hasOwnProperty.call(body, "webauthnRegistration")) return {
|
|
878
|
+
ok: false,
|
|
879
|
+
code: "invalid_body",
|
|
880
|
+
message: "webauthnRegistration belongs on add-auth-method finalize"
|
|
881
|
+
};
|
|
882
|
+
authority = { kind: "passkey" };
|
|
883
|
+
} else if (Object.prototype.hasOwnProperty.call(body, "emailOtpRegistrationProof")) {
|
|
884
|
+
const proof = normalizeEmailOtpRegistrationProof(body.emailOtpRegistrationProof);
|
|
885
|
+
if (!proof) return {
|
|
886
|
+
ok: false,
|
|
887
|
+
code: "invalid_body",
|
|
888
|
+
message: "emailOtpRegistrationProof is invalid"
|
|
889
|
+
};
|
|
890
|
+
authority = {
|
|
891
|
+
kind: "email_otp",
|
|
892
|
+
emailOtpRegistrationProof: proof
|
|
893
|
+
};
|
|
894
|
+
} else return {
|
|
895
|
+
ok: false,
|
|
896
|
+
code: "invalid_body",
|
|
897
|
+
message: "new auth-method authority is required"
|
|
898
|
+
};
|
|
899
|
+
if (authority.kind !== normalizedIntent.authMethod.kind) return {
|
|
900
|
+
ok: false,
|
|
901
|
+
code: "invalid_body",
|
|
902
|
+
message: "new auth-method authority kind must match the requested auth-method kind"
|
|
903
|
+
};
|
|
904
|
+
return {
|
|
905
|
+
ok: true,
|
|
906
|
+
value: {
|
|
907
|
+
walletId: walletIdFromString(walletId),
|
|
908
|
+
addAuthMethodIntentGrant: addAuthMethodIntentGrantFromString(rawGrant),
|
|
909
|
+
addAuthMethodIntentDigestB64u: expectedDigest,
|
|
910
|
+
intent: normalizedIntent,
|
|
911
|
+
auth: existingAuth,
|
|
912
|
+
authority
|
|
913
|
+
}
|
|
914
|
+
};
|
|
915
|
+
}
|
|
916
|
+
function parseActivationRequestDigest(value) {
|
|
917
|
+
if (!isPlainObject(value) || !Array.isArray(value.bytes) || value.bytes.length !== 32) return null;
|
|
918
|
+
const bytes = [];
|
|
919
|
+
for (const entry of value.bytes) {
|
|
920
|
+
if (!Number.isInteger(entry) || Number(entry) < 0 || Number(entry) > 255) return null;
|
|
921
|
+
bytes.push(Number(entry));
|
|
922
|
+
}
|
|
923
|
+
return { bytes };
|
|
924
|
+
}
|
|
925
|
+
function parseYaoSessionId(value) {
|
|
926
|
+
if (!Array.isArray(value) || value.length !== 32) return {
|
|
927
|
+
ok: false,
|
|
928
|
+
code: "invalid_body",
|
|
929
|
+
message: "ed25519.activationReference.session_id must contain 32 bytes"
|
|
930
|
+
};
|
|
931
|
+
const sessionId = [];
|
|
932
|
+
let nonzero = false;
|
|
933
|
+
for (const valueByte of value) {
|
|
934
|
+
if (typeof valueByte !== "number" || !Number.isInteger(valueByte) || valueByte < 0 || valueByte > 255) return {
|
|
935
|
+
ok: false,
|
|
936
|
+
code: "invalid_body",
|
|
937
|
+
message: "ed25519.activationReference.session_id contains an invalid byte"
|
|
938
|
+
};
|
|
939
|
+
if (valueByte !== 0) nonzero = true;
|
|
940
|
+
sessionId.push(valueByte);
|
|
941
|
+
}
|
|
942
|
+
if (!nonzero) return {
|
|
943
|
+
ok: false,
|
|
944
|
+
code: "invalid_body",
|
|
945
|
+
message: "ed25519.activationReference.session_id must be nonzero"
|
|
946
|
+
};
|
|
947
|
+
return {
|
|
948
|
+
ok: true,
|
|
949
|
+
value: sessionId
|
|
950
|
+
};
|
|
951
|
+
}
|
|
952
|
+
function parseYaoVisibleIdentifier(value, field) {
|
|
953
|
+
if (typeof value !== "string" || value.length === 0) return {
|
|
954
|
+
ok: false,
|
|
955
|
+
code: "invalid_body",
|
|
956
|
+
message: `${field} is required`
|
|
957
|
+
};
|
|
958
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
959
|
+
const code = value.charCodeAt(index);
|
|
960
|
+
if (code < 33 || code > 126) return {
|
|
961
|
+
ok: false,
|
|
962
|
+
code: "invalid_body",
|
|
963
|
+
message: `${field} must contain visible ASCII bytes`
|
|
964
|
+
};
|
|
965
|
+
}
|
|
966
|
+
return {
|
|
967
|
+
ok: true,
|
|
968
|
+
value
|
|
969
|
+
};
|
|
970
|
+
}
|
|
971
|
+
function parseWalletRegistrationEd25519YaoActivationReference(raw) {
|
|
972
|
+
const activationReference = isPlainObject(raw) ? raw : null;
|
|
973
|
+
if (!activationReference) return {
|
|
974
|
+
ok: false,
|
|
975
|
+
code: "invalid_body",
|
|
976
|
+
message: "ed25519.activationReference is required"
|
|
977
|
+
};
|
|
978
|
+
const unknownField = findUnknownField(activationReference, WALLET_REGISTRATION_YAO_ACTIVATION_REFERENCE_FIELDS);
|
|
979
|
+
if (unknownField) return {
|
|
980
|
+
ok: false,
|
|
981
|
+
code: "invalid_body",
|
|
982
|
+
message: `ed25519.activationReference.${unknownField} is not supported`
|
|
983
|
+
};
|
|
984
|
+
if (activationReference.kind !== "router_ab_ed25519_yao_activation_reference_v1") return {
|
|
985
|
+
ok: false,
|
|
986
|
+
code: "invalid_body",
|
|
987
|
+
message: "ed25519.activationReference.kind must be router_ab_ed25519_yao_activation_reference_v1"
|
|
988
|
+
};
|
|
989
|
+
const lifecycleId = parseYaoVisibleIdentifier(activationReference.lifecycle_id, "ed25519.activationReference.lifecycle_id");
|
|
990
|
+
if (!lifecycleId.ok) return lifecycleId;
|
|
991
|
+
const sessionId = parseYaoSessionId(activationReference.session_id);
|
|
992
|
+
if (!sessionId.ok) return sessionId;
|
|
993
|
+
return {
|
|
994
|
+
ok: true,
|
|
995
|
+
value: {
|
|
996
|
+
kind: "router_ab_ed25519_yao_activation_reference_v1",
|
|
997
|
+
lifecycle_id: lifecycleId.value,
|
|
998
|
+
session_id: sessionId.value
|
|
999
|
+
}
|
|
1000
|
+
};
|
|
1001
|
+
}
|
|
1002
|
+
function parseWalletRegistrationEd25519Finalize(raw) {
|
|
1003
|
+
const ed25519 = isPlainObject(raw) ? raw : null;
|
|
1004
|
+
if (!ed25519) return {
|
|
1005
|
+
ok: false,
|
|
1006
|
+
code: "invalid_body",
|
|
1007
|
+
message: "ed25519 is required"
|
|
1008
|
+
};
|
|
1009
|
+
const unknownField = findUnknownField(ed25519, WALLET_REGISTRATION_ED25519_FINALIZE_FIELDS);
|
|
1010
|
+
if (unknownField) return {
|
|
1011
|
+
ok: false,
|
|
1012
|
+
code: "invalid_body",
|
|
1013
|
+
message: `ed25519.${unknownField} is not supported`
|
|
1014
|
+
};
|
|
1015
|
+
const activationReference = parseWalletRegistrationEd25519YaoActivationReference(ed25519.activationReference);
|
|
1016
|
+
if (!activationReference.ok) return activationReference;
|
|
1017
|
+
return {
|
|
1018
|
+
ok: true,
|
|
1019
|
+
value: { activationReference: activationReference.value }
|
|
1020
|
+
};
|
|
1021
|
+
}
|
|
1022
|
+
function parseWalletRegistrationEcdsaFinalize(raw) {
|
|
1023
|
+
const ecdsa = isPlainObject(raw) ? raw : null;
|
|
1024
|
+
if (!ecdsa) return {
|
|
1025
|
+
ok: false,
|
|
1026
|
+
code: "invalid_body",
|
|
1027
|
+
message: "ecdsa is required"
|
|
1028
|
+
};
|
|
1029
|
+
const unknownField = findUnknownField(ecdsa, WALLET_REGISTRATION_ECDSA_FINALIZE_FIELDS);
|
|
1030
|
+
if (unknownField) return {
|
|
1031
|
+
ok: false,
|
|
1032
|
+
code: "invalid_body",
|
|
1033
|
+
message: `ecdsa.${unknownField} is not supported`
|
|
1034
|
+
};
|
|
1035
|
+
if (!Array.isArray(ecdsa.expectedKeyHandles) || ecdsa.expectedKeyHandles.length !== 1) return {
|
|
1036
|
+
ok: false,
|
|
1037
|
+
code: "invalid_body",
|
|
1038
|
+
message: "ecdsa.expectedKeyHandles must contain one family key handle"
|
|
1039
|
+
};
|
|
1040
|
+
const expectedKeyHandle = typeof ecdsa.expectedKeyHandles[0] === "string" ? ecdsa.expectedKeyHandles[0].trim() : "";
|
|
1041
|
+
if (!expectedKeyHandle) return {
|
|
1042
|
+
ok: false,
|
|
1043
|
+
code: "invalid_body",
|
|
1044
|
+
message: "ecdsa.expectedKeyHandles contains an invalid family key handle"
|
|
1045
|
+
};
|
|
1046
|
+
return {
|
|
1047
|
+
ok: true,
|
|
1048
|
+
value: { expectedKeyHandles: [expectedKeyHandle] }
|
|
1049
|
+
};
|
|
1050
|
+
}
|
|
1051
|
+
function parseWalletAddSignerCustodyKeySet(raw, kind) {
|
|
1052
|
+
const custodyKeySet = isPlainObject(raw) ? raw : null;
|
|
1053
|
+
if (!custodyKeySet) return {
|
|
1054
|
+
ok: false,
|
|
1055
|
+
code: "invalid_body",
|
|
1056
|
+
message: "custodyKeySet is required"
|
|
1057
|
+
};
|
|
1058
|
+
const expectedKind = kind === "near_ed25519" ? "near_ed25519_v1" : "evm_family_ecdsa_v1";
|
|
1059
|
+
if (custodyKeySet.kind !== expectedKind) return {
|
|
1060
|
+
ok: false,
|
|
1061
|
+
code: "invalid_body",
|
|
1062
|
+
message: `custodyKeySet.kind must be ${expectedKind}`
|
|
1063
|
+
};
|
|
1064
|
+
let keyManifestDigestB64u;
|
|
1065
|
+
try {
|
|
1066
|
+
keyManifestDigestB64u = parseDigestB64u(custodyKeySet.keyManifestDigestB64u);
|
|
1067
|
+
} catch {
|
|
1068
|
+
return {
|
|
1069
|
+
ok: false,
|
|
1070
|
+
code: "invalid_body",
|
|
1071
|
+
message: "custodyKeySet.keyManifestDigestB64u is invalid"
|
|
1072
|
+
};
|
|
1073
|
+
}
|
|
1074
|
+
if (kind === "near_ed25519") {
|
|
1075
|
+
const registeredPublicKeyB64u = trimRequiredString(custodyKeySet, "registeredPublicKeyB64u", "custodyKeySet.registeredPublicKeyB64u is required");
|
|
1076
|
+
if (!registeredPublicKeyB64u.ok) return registeredPublicKeyB64u;
|
|
1077
|
+
return {
|
|
1078
|
+
ok: true,
|
|
1079
|
+
value: {
|
|
1080
|
+
kind: "near_ed25519_v1",
|
|
1081
|
+
keyManifestDigestB64u,
|
|
1082
|
+
registeredPublicKeyB64u: registeredPublicKeyB64u.value
|
|
1083
|
+
}
|
|
1084
|
+
};
|
|
1085
|
+
}
|
|
1086
|
+
const clientRootPublicKeyRaw = trimRequiredString(custodyKeySet, "clientRootPublicKey33B64u", "custodyKeySet.clientRootPublicKey33B64u is required");
|
|
1087
|
+
if (!clientRootPublicKeyRaw.ok) return clientRootPublicKeyRaw;
|
|
1088
|
+
try {
|
|
1089
|
+
return {
|
|
1090
|
+
ok: true,
|
|
1091
|
+
value: {
|
|
1092
|
+
kind: "evm_family_ecdsa_v1",
|
|
1093
|
+
keyManifestDigestB64u,
|
|
1094
|
+
clientRootPublicKey33B64u: ecdsaClientRootPublicKey33B64uFromString(clientRootPublicKeyRaw.value)
|
|
1095
|
+
}
|
|
1096
|
+
};
|
|
1097
|
+
} catch {
|
|
1098
|
+
return {
|
|
1099
|
+
ok: false,
|
|
1100
|
+
code: "invalid_body",
|
|
1101
|
+
message: "custodyKeySet.clientRootPublicKey33B64u is invalid"
|
|
1102
|
+
};
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
function parseWalletAddSignerEcdsaDerivationRespondRequest(body) {
|
|
1106
|
+
const unknownBodyField = findUnknownField(body, ["addSignerCeremonyId", "ecdsa"]);
|
|
1107
|
+
if (unknownBodyField) return {
|
|
1108
|
+
ok: false,
|
|
1109
|
+
code: "invalid_body",
|
|
1110
|
+
message: `add-signer ECDSA request field ${unknownBodyField} is unsupported`
|
|
1111
|
+
};
|
|
1112
|
+
const addSignerCeremonyId = trimRequiredString(body, "addSignerCeremonyId", "addSignerCeremonyId is required");
|
|
1113
|
+
if (!addSignerCeremonyId.ok) return addSignerCeremonyId;
|
|
1114
|
+
const ecdsa = isPlainObject(body.ecdsa) ? body.ecdsa : null;
|
|
1115
|
+
if (!ecdsa || ecdsa.kind !== "router_ab_ecdsa_registration_v1") return {
|
|
1116
|
+
ok: false,
|
|
1117
|
+
code: "invalid_body",
|
|
1118
|
+
message: "strict Router A/B ECDSA add-signer request is required"
|
|
1119
|
+
};
|
|
1120
|
+
const unknownEcdsaField = findUnknownField(ecdsa, [
|
|
1121
|
+
"kind",
|
|
1122
|
+
"strictRegistration",
|
|
1123
|
+
"requestDigestB64u"
|
|
1124
|
+
]);
|
|
1125
|
+
if (unknownEcdsaField) return {
|
|
1126
|
+
ok: false,
|
|
1127
|
+
code: "invalid_body",
|
|
1128
|
+
message: `add-signer ECDSA field ${unknownEcdsaField} is unsupported`
|
|
1129
|
+
};
|
|
1130
|
+
let strictRegistration;
|
|
1131
|
+
try {
|
|
1132
|
+
strictRegistration = parseRouterAbEcdsaRegistrationRequestV1(ecdsa.strictRegistration);
|
|
1133
|
+
} catch {
|
|
1134
|
+
return {
|
|
1135
|
+
ok: false,
|
|
1136
|
+
code: "invalid_body",
|
|
1137
|
+
message: "strict Router A/B ECDSA add-signer request is invalid"
|
|
1138
|
+
};
|
|
1139
|
+
}
|
|
1140
|
+
const requestDigestB64u = parseRegistrationRequestDigestB64u(ecdsa.requestDigestB64u);
|
|
1141
|
+
if (!requestDigestB64u) return {
|
|
1142
|
+
ok: false,
|
|
1143
|
+
code: "invalid_body",
|
|
1144
|
+
message: "ECDSA add-signer requestDigestB64u must contain 32 base64url bytes"
|
|
1145
|
+
};
|
|
1146
|
+
return {
|
|
1147
|
+
ok: true,
|
|
1148
|
+
value: {
|
|
1149
|
+
addSignerCeremonyId: addSignerCeremonyId.value,
|
|
1150
|
+
ecdsa: {
|
|
1151
|
+
kind: "router_ab_ecdsa_registration_v1",
|
|
1152
|
+
strictRegistration,
|
|
1153
|
+
requestDigestB64u
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
};
|
|
1157
|
+
}
|
|
1158
|
+
function parseWalletAddSignerEcdsaActivationRequest(body) {
|
|
1159
|
+
const unknownBodyField = findUnknownField(body, ["addSignerCeremonyId", "ecdsa"]);
|
|
1160
|
+
if (unknownBodyField) return {
|
|
1161
|
+
ok: false,
|
|
1162
|
+
code: "invalid_body",
|
|
1163
|
+
message: `add-signer ECDSA activation field ${unknownBodyField} is unsupported`
|
|
1164
|
+
};
|
|
1165
|
+
const addSignerCeremonyId = trimRequiredString(body, "addSignerCeremonyId", "addSignerCeremonyId is required");
|
|
1166
|
+
if (!addSignerCeremonyId.ok) return addSignerCeremonyId;
|
|
1167
|
+
const ecdsa = isPlainObject(body.ecdsa) ? body.ecdsa : null;
|
|
1168
|
+
if (!ecdsa || ecdsa.kind !== "router_ab_ecdsa_registration_activation_v1") return {
|
|
1169
|
+
ok: false,
|
|
1170
|
+
code: "invalid_body",
|
|
1171
|
+
message: "strict Router A/B ECDSA add-signer activation is required"
|
|
1172
|
+
};
|
|
1173
|
+
const unknownEcdsaField = findUnknownField(ecdsa, [
|
|
1174
|
+
"kind",
|
|
1175
|
+
"activationCorrelationId",
|
|
1176
|
+
"publicFacts",
|
|
1177
|
+
"expectedActivationRequestDigest"
|
|
1178
|
+
]);
|
|
1179
|
+
if (unknownEcdsaField) return {
|
|
1180
|
+
ok: false,
|
|
1181
|
+
code: "invalid_body",
|
|
1182
|
+
message: `add-signer ECDSA activation field ${unknownEcdsaField} is unsupported`
|
|
1183
|
+
};
|
|
1184
|
+
try {
|
|
1185
|
+
const parsed = parseRouterAbEcdsaRegistrationActivationRequestV1({
|
|
1186
|
+
registrationCeremonyId: addSignerCeremonyId.value,
|
|
1187
|
+
ecdsa: {
|
|
1188
|
+
kind: ecdsa.kind,
|
|
1189
|
+
activationCorrelationId: ecdsa.activationCorrelationId,
|
|
1190
|
+
publicFacts: ecdsa.publicFacts
|
|
1191
|
+
}
|
|
1192
|
+
});
|
|
1193
|
+
const expectedActivationRequestDigest = parseActivationRequestDigest(ecdsa.expectedActivationRequestDigest);
|
|
1194
|
+
if (!expectedActivationRequestDigest) return {
|
|
1195
|
+
ok: false,
|
|
1196
|
+
code: "invalid_body",
|
|
1197
|
+
message: "ECDSA activation request digest is invalid"
|
|
1198
|
+
};
|
|
1199
|
+
return {
|
|
1200
|
+
ok: true,
|
|
1201
|
+
value: {
|
|
1202
|
+
addSignerCeremonyId: addSignerCeremonyId.value,
|
|
1203
|
+
ecdsa: {
|
|
1204
|
+
kind: "router_ab_ecdsa_registration_activation_v1",
|
|
1205
|
+
activationCorrelationId: parsed.ecdsa.activationCorrelationId,
|
|
1206
|
+
publicFacts: parsed.ecdsa.publicFacts,
|
|
1207
|
+
expectedActivationRequestDigest
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
};
|
|
1211
|
+
} catch {
|
|
1212
|
+
return {
|
|
1213
|
+
ok: false,
|
|
1214
|
+
code: "invalid_body",
|
|
1215
|
+
message: "strict Router A/B ECDSA add-signer activation facts are invalid"
|
|
1216
|
+
};
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
function parseWalletAddSignerFinalizeRequest(body) {
|
|
1220
|
+
const addSignerCeremonyId = trimRequiredString(body, "addSignerCeremonyId", "addSignerCeremonyId is required");
|
|
1221
|
+
if (!addSignerCeremonyId.ok) return addSignerCeremonyId;
|
|
1222
|
+
const idempotencyKey = trimRequiredString(body, "idempotencyKey", "idempotencyKey is required");
|
|
1223
|
+
if (!idempotencyKey.ok) return idempotencyKey;
|
|
1224
|
+
if (body.kind === "near_ed25519") {
|
|
1225
|
+
if (Object.prototype.hasOwnProperty.call(body, "ecdsa")) return {
|
|
1226
|
+
ok: false,
|
|
1227
|
+
code: "invalid_body",
|
|
1228
|
+
message: "Ed25519 finalize cannot carry ECDSA"
|
|
1229
|
+
};
|
|
1230
|
+
const ed25519 = parseWalletRegistrationEd25519Finalize(body.ed25519);
|
|
1231
|
+
if (!ed25519.ok) return ed25519;
|
|
1232
|
+
const custodyKeySet = parseWalletAddSignerCustodyKeySet(body.custodyKeySet, "near_ed25519");
|
|
1233
|
+
if (!custodyKeySet.ok) return custodyKeySet;
|
|
1234
|
+
return {
|
|
1235
|
+
ok: true,
|
|
1236
|
+
value: {
|
|
1237
|
+
addSignerCeremonyId: addSignerCeremonyId.value,
|
|
1238
|
+
idempotencyKey: idempotencyKey.value,
|
|
1239
|
+
kind: "near_ed25519",
|
|
1240
|
+
ed25519: ed25519.value,
|
|
1241
|
+
custodyKeySet: custodyKeySet.value
|
|
1242
|
+
}
|
|
1243
|
+
};
|
|
1244
|
+
}
|
|
1245
|
+
if (body.kind === "evm_family_ecdsa") {
|
|
1246
|
+
if (Object.prototype.hasOwnProperty.call(body, "ed25519")) return {
|
|
1247
|
+
ok: false,
|
|
1248
|
+
code: "invalid_body",
|
|
1249
|
+
message: "ECDSA finalize cannot carry Ed25519"
|
|
1250
|
+
};
|
|
1251
|
+
const ecdsa = parseWalletRegistrationEcdsaFinalize(body.ecdsa);
|
|
1252
|
+
if (!ecdsa.ok) return ecdsa;
|
|
1253
|
+
const custodyKeySet = parseWalletAddSignerCustodyKeySet(body.custodyKeySet, "evm_family_ecdsa");
|
|
1254
|
+
if (!custodyKeySet.ok) return custodyKeySet;
|
|
1255
|
+
return {
|
|
1256
|
+
ok: true,
|
|
1257
|
+
value: {
|
|
1258
|
+
addSignerCeremonyId: addSignerCeremonyId.value,
|
|
1259
|
+
idempotencyKey: idempotencyKey.value,
|
|
1260
|
+
kind: "evm_family_ecdsa",
|
|
1261
|
+
ecdsa: ecdsa.value,
|
|
1262
|
+
custodyKeySet: custodyKeySet.value
|
|
1263
|
+
}
|
|
1264
|
+
};
|
|
1265
|
+
}
|
|
1266
|
+
return {
|
|
1267
|
+
ok: false,
|
|
1268
|
+
code: "invalid_body",
|
|
1269
|
+
message: "add-signer finalize kind is invalid"
|
|
1270
|
+
};
|
|
1271
|
+
}
|
|
1272
|
+
/**
|
|
1273
|
+
* The caller's statement about the wallet's shared Email OTP enrollment.
|
|
1274
|
+
*
|
|
1275
|
+
* Required on this branch rather than optional. The two cases carry different
|
|
1276
|
+
* material and land on different persistence, and a body that simply omitted
|
|
1277
|
+
* the field would read as "reuse whatever is there" — which on a wallet with no
|
|
1278
|
+
* enrollment is not a reusable state, and on a wallet with one is a claim the
|
|
1279
|
+
* caller never made.
|
|
1280
|
+
*/
|
|
1281
|
+
function parseWalletAddAuthMethodEmailOtpTarget(raw) {
|
|
1282
|
+
if (!isPlainObject(raw)) return {
|
|
1283
|
+
ok: false,
|
|
1284
|
+
code: "invalid_body",
|
|
1285
|
+
message: "emailOtpTarget is required for an Email OTP add-auth-method finalize"
|
|
1286
|
+
};
|
|
1287
|
+
if (raw.kind === "existing_enrollment") {
|
|
1288
|
+
if (raw.enrollment !== void 0) return {
|
|
1289
|
+
ok: false,
|
|
1290
|
+
code: "invalid_body",
|
|
1291
|
+
message: "emailOtpTarget.enrollment belongs to the new_enrollment branch"
|
|
1292
|
+
};
|
|
1293
|
+
return {
|
|
1294
|
+
ok: true,
|
|
1295
|
+
value: { kind: "existing_enrollment" }
|
|
1296
|
+
};
|
|
1297
|
+
}
|
|
1298
|
+
if (raw.kind !== "new_enrollment") return {
|
|
1299
|
+
ok: false,
|
|
1300
|
+
code: "invalid_body",
|
|
1301
|
+
message: "emailOtpTarget.kind must be existing_enrollment or new_enrollment"
|
|
1302
|
+
};
|
|
1303
|
+
const enrollment = raw.enrollment;
|
|
1304
|
+
if (!isPlainObject(enrollment)) return {
|
|
1305
|
+
ok: false,
|
|
1306
|
+
code: "invalid_body",
|
|
1307
|
+
message: "emailOtpTarget.enrollment is required to create an enrollment"
|
|
1308
|
+
};
|
|
1309
|
+
const material = {
|
|
1310
|
+
enrollmentSealKeyVersion: "",
|
|
1311
|
+
clientUnlockPublicKeyB64u: "",
|
|
1312
|
+
unlockKeyVersion: "",
|
|
1313
|
+
serverSealedFactorCiphertextB64u: ""
|
|
1314
|
+
};
|
|
1315
|
+
for (const field of Object.keys(material)) {
|
|
1316
|
+
const value = enrollment[field];
|
|
1317
|
+
if (typeof value !== "string" || !value.trim()) return {
|
|
1318
|
+
ok: false,
|
|
1319
|
+
code: "invalid_body",
|
|
1320
|
+
message: `emailOtpTarget.enrollment.${field} is required`
|
|
1321
|
+
};
|
|
1322
|
+
material[field] = value.trim();
|
|
1323
|
+
}
|
|
1324
|
+
return {
|
|
1325
|
+
ok: true,
|
|
1326
|
+
value: {
|
|
1327
|
+
kind: "new_enrollment",
|
|
1328
|
+
enrollment: material
|
|
1329
|
+
}
|
|
1330
|
+
};
|
|
1331
|
+
}
|
|
1332
|
+
function parseWalletAddAuthMethodFinalizeRequest(body) {
|
|
1333
|
+
const addAuthMethodCeremonyId = trimRequiredString(body, "addAuthMethodCeremonyId", "addAuthMethodCeremonyId is required");
|
|
1334
|
+
if (!addAuthMethodCeremonyId.ok) return addAuthMethodCeremonyId;
|
|
1335
|
+
const hasRegistration = Object.prototype.hasOwnProperty.call(body, "webauthnRegistration");
|
|
1336
|
+
const hasEnvelope = Object.prototype.hasOwnProperty.call(body, "custodyEnvelope");
|
|
1337
|
+
if (hasRegistration && !hasEnvelope) return {
|
|
1338
|
+
ok: false,
|
|
1339
|
+
code: "invalid_body",
|
|
1340
|
+
message: "a WebAuthn registration must be finalized with its custody envelope"
|
|
1341
|
+
};
|
|
1342
|
+
if (!hasRegistration && hasEnvelope) {
|
|
1343
|
+
const emailOtpTarget = parseWalletAddAuthMethodEmailOtpTarget(body.emailOtpTarget);
|
|
1344
|
+
if (!emailOtpTarget.ok) return emailOtpTarget;
|
|
1345
|
+
try {
|
|
1346
|
+
return {
|
|
1347
|
+
ok: true,
|
|
1348
|
+
value: {
|
|
1349
|
+
addAuthMethodCeremonyId: addAuthMethodCeremonyId.value,
|
|
1350
|
+
custodyEnvelope: parsePasskeyCustodyEnvelopeRecord(body.custodyEnvelope),
|
|
1351
|
+
emailOtpTarget: emailOtpTarget.value
|
|
1352
|
+
}
|
|
1353
|
+
};
|
|
1354
|
+
} catch {
|
|
1355
|
+
return {
|
|
1356
|
+
ok: false,
|
|
1357
|
+
code: "invalid_body",
|
|
1358
|
+
message: "custodyEnvelope is invalid"
|
|
1359
|
+
};
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
if (hasRegistration) try {
|
|
1363
|
+
return {
|
|
1364
|
+
ok: true,
|
|
1365
|
+
value: {
|
|
1366
|
+
addAuthMethodCeremonyId: addAuthMethodCeremonyId.value,
|
|
1367
|
+
webauthnRegistration: body.webauthnRegistration,
|
|
1368
|
+
custodyEnvelope: parsePasskeyCustodyEnvelopeRecord(body.custodyEnvelope)
|
|
1369
|
+
}
|
|
1370
|
+
};
|
|
1371
|
+
} catch {
|
|
1372
|
+
return {
|
|
1373
|
+
ok: false,
|
|
1374
|
+
code: "invalid_body",
|
|
1375
|
+
message: "custodyEnvelope is invalid"
|
|
1376
|
+
};
|
|
1377
|
+
}
|
|
1378
|
+
return {
|
|
1379
|
+
ok: true,
|
|
1380
|
+
value: { addAuthMethodCeremonyId: addAuthMethodCeremonyId.value }
|
|
1381
|
+
};
|
|
1382
|
+
}
|
|
1383
|
+
async function parseWalletRevokeAuthMethodRequest(body, walletId) {
|
|
1384
|
+
const keys = Object.keys(body).sort();
|
|
1385
|
+
if (keys.length !== 4 || keys[0] !== "requestedAtMs" || keys[1] !== "sourceProof" || keys[2] !== "walletAuthMethodId" || keys[3] !== "walletId") return {
|
|
1386
|
+
ok: false,
|
|
1387
|
+
code: "invalid_body",
|
|
1388
|
+
message: "auth-method revoke body fields are invalid"
|
|
1389
|
+
};
|
|
1390
|
+
const requestedAtMs = Number(body.requestedAtMs);
|
|
1391
|
+
if (!Number.isSafeInteger(requestedAtMs) || requestedAtMs < 0) return {
|
|
1392
|
+
ok: false,
|
|
1393
|
+
code: "invalid_body",
|
|
1394
|
+
message: "requestedAtMs is invalid"
|
|
1395
|
+
};
|
|
1396
|
+
const bodyWalletId = typeof body.walletId === "string" ? body.walletId.trim() : "";
|
|
1397
|
+
if (!bodyWalletId || bodyWalletId !== walletId) return {
|
|
1398
|
+
ok: false,
|
|
1399
|
+
code: "invalid_body",
|
|
1400
|
+
message: "walletId path and body values must agree"
|
|
1401
|
+
};
|
|
1402
|
+
const walletAuthMethodId = parseWalletAuthMethodId(body.walletAuthMethodId);
|
|
1403
|
+
if (!walletAuthMethodId.ok) return {
|
|
1404
|
+
ok: false,
|
|
1405
|
+
code: "invalid_body",
|
|
1406
|
+
message: "walletAuthMethodId is invalid"
|
|
1407
|
+
};
|
|
1408
|
+
const sourceProof = parseWalletRevokeAuthMethodSourceProof(body.sourceProof);
|
|
1409
|
+
if (!sourceProof.ok) return sourceProof;
|
|
1410
|
+
return {
|
|
1411
|
+
ok: true,
|
|
1412
|
+
value: {
|
|
1413
|
+
walletId: walletIdFromString(walletId),
|
|
1414
|
+
walletAuthMethodId: walletAuthMethodId.value,
|
|
1415
|
+
requestedAtMs,
|
|
1416
|
+
sourceProof: sourceProof.value
|
|
1417
|
+
}
|
|
1418
|
+
};
|
|
1419
|
+
}
|
|
1420
|
+
function parseWalletRevokeAuthMethodSourceProof(raw) {
|
|
1421
|
+
if (!isPlainObject(raw)) return {
|
|
1422
|
+
ok: false,
|
|
1423
|
+
code: "invalid_body",
|
|
1424
|
+
message: "sourceProof is required"
|
|
1425
|
+
};
|
|
1426
|
+
if (raw.kind === "webauthn_assertion") {
|
|
1427
|
+
const rpId = parseWebAuthnRpId(raw.rpId);
|
|
1428
|
+
if (!rpId.ok) return {
|
|
1429
|
+
ok: false,
|
|
1430
|
+
code: "invalid_body",
|
|
1431
|
+
message: rpId.error.message
|
|
1432
|
+
};
|
|
1433
|
+
const credential = parseWebAuthnAuthenticationCredential(raw.credential);
|
|
1434
|
+
if (!credential.ok) return credential;
|
|
1435
|
+
const expectedChallengeDigestB64u = typeof raw.expectedChallengeDigestB64u === "string" ? raw.expectedChallengeDigestB64u.trim() : "";
|
|
1436
|
+
if (!expectedChallengeDigestB64u) return {
|
|
1437
|
+
ok: false,
|
|
1438
|
+
code: "invalid_body",
|
|
1439
|
+
message: "sourceProof.expectedChallengeDigestB64u is required"
|
|
1440
|
+
};
|
|
1441
|
+
if (!hasExactObjectKeys(raw, [
|
|
1442
|
+
"credential",
|
|
1443
|
+
"expectedChallengeDigestB64u",
|
|
1444
|
+
"kind",
|
|
1445
|
+
"rpId"
|
|
1446
|
+
])) return {
|
|
1447
|
+
ok: false,
|
|
1448
|
+
code: "invalid_body",
|
|
1449
|
+
message: "sourceProof fields are invalid"
|
|
1450
|
+
};
|
|
1451
|
+
return {
|
|
1452
|
+
ok: true,
|
|
1453
|
+
value: {
|
|
1454
|
+
kind: "webauthn_assertion",
|
|
1455
|
+
rpId: rpId.value,
|
|
1456
|
+
credential: credential.value,
|
|
1457
|
+
expectedChallengeDigestB64u
|
|
1458
|
+
}
|
|
1459
|
+
};
|
|
1460
|
+
}
|
|
1461
|
+
if (raw.kind === "email_otp") {
|
|
1462
|
+
if (!hasExactObjectKeys(raw, [
|
|
1463
|
+
"challengeId",
|
|
1464
|
+
"kind",
|
|
1465
|
+
"otpCode",
|
|
1466
|
+
"ownerProofBindingDigest"
|
|
1467
|
+
]) || typeof raw.challengeId !== "string" || typeof raw.otpCode !== "string" || typeof raw.ownerProofBindingDigest !== "string" || !raw.challengeId.trim() || !raw.otpCode.trim() || !raw.ownerProofBindingDigest.trim()) return {
|
|
1468
|
+
ok: false,
|
|
1469
|
+
code: "invalid_body",
|
|
1470
|
+
message: "sourceProof fields are invalid"
|
|
1471
|
+
};
|
|
1472
|
+
return {
|
|
1473
|
+
ok: true,
|
|
1474
|
+
value: {
|
|
1475
|
+
kind: "email_otp",
|
|
1476
|
+
challengeId: raw.challengeId.trim(),
|
|
1477
|
+
otpCode: raw.otpCode.trim(),
|
|
1478
|
+
ownerProofBindingDigest: raw.ownerProofBindingDigest.trim()
|
|
1479
|
+
}
|
|
1480
|
+
};
|
|
1481
|
+
}
|
|
1482
|
+
return {
|
|
1483
|
+
ok: false,
|
|
1484
|
+
code: "invalid_body",
|
|
1485
|
+
message: "sourceProof.kind is unsupported"
|
|
1486
|
+
};
|
|
1487
|
+
}
|
|
1488
|
+
function hasExactObjectKeys(input, expected) {
|
|
1489
|
+
const actual = Object.keys(input).sort();
|
|
1490
|
+
const keys = [...expected].sort();
|
|
1491
|
+
return actual.length === keys.length && actual.every((key, index) => key === keys[index]);
|
|
1492
|
+
}
|
|
1493
|
+
async function handleRouterApiWalletAddSignerIntent(input) {
|
|
1494
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1495
|
+
const walletId = String(input.pathParams?.walletId || "").trim();
|
|
1496
|
+
if (!walletId) return routeError(400, "invalid_body", "walletId path parameter is required");
|
|
1497
|
+
const request = parseCreateAddSignerIntentRequest(input.body, walletId);
|
|
1498
|
+
if (!request.ok) return routeError(400, request.code, request.message);
|
|
1499
|
+
const origin = normalizeCorsOrigin(input.origin);
|
|
1500
|
+
if (!origin) return routeError(403, "forbidden", "Origin header is required and must be a valid exact origin");
|
|
1501
|
+
const publishableKeyAuth = input.services.publishableKeyAuth;
|
|
1502
|
+
if (!publishableKeyAuth) return routeError(500, "route_auth_not_configured", "wallet add-signer intent requires publishable key auth on this server");
|
|
1503
|
+
const resolved = await enforceRoutePolicy({
|
|
1504
|
+
headers: input.headers,
|
|
1505
|
+
logger: input.logger,
|
|
1506
|
+
request: {
|
|
1507
|
+
body: input.body,
|
|
1508
|
+
headers: input.headers
|
|
1509
|
+
},
|
|
1510
|
+
route: input.route,
|
|
1511
|
+
services: walletRegistrationRoutePolicyServices(input),
|
|
1512
|
+
sourceIp: input.sourceIp,
|
|
1513
|
+
resolvers: { apiCredentials: async () => await resolvePublishableKeyApiCredentialAuth({
|
|
1514
|
+
environmentId: extractRouterApiEnvironmentId(input.headers) || void 0,
|
|
1515
|
+
headers: input.headers,
|
|
1516
|
+
missingEnvironmentMessage: "Environment header is required for add-signer intent",
|
|
1517
|
+
missingOriginMessage: "Origin header is required and must be a valid exact origin",
|
|
1518
|
+
missingPublishableKeyMessage: "Missing publishable key",
|
|
1519
|
+
origin,
|
|
1520
|
+
publishableKeyAuth,
|
|
1521
|
+
route: input.route,
|
|
1522
|
+
routeAuthNotConfiguredMessage: "Add-signer intent requires API credential auth policy"
|
|
1523
|
+
}) }
|
|
1524
|
+
});
|
|
1525
|
+
if (!resolved.ok) return routeJson(resolved.status, resolved.body);
|
|
1526
|
+
if (resolved.context.principal.kind !== "api_credentials") return routeError(500, "internal", "wallet add-signer intent requires API credentials");
|
|
1527
|
+
const principal = resolved.context.principal.principal;
|
|
1528
|
+
const runtimePolicyScope = await resolveActiveRuntimePolicyScopeForEnvironment({
|
|
1529
|
+
orgProjectEnv: input.services.orgProjectEnv || null,
|
|
1530
|
+
orgId: principal.orgId,
|
|
1531
|
+
environmentId: principal.environmentId,
|
|
1532
|
+
projectId: principal.projectId,
|
|
1533
|
+
envId: principal.envId
|
|
1534
|
+
});
|
|
1535
|
+
const result = await input.services.walletRegistration.createAddSignerIntent({
|
|
1536
|
+
command: {
|
|
1537
|
+
subject: {
|
|
1538
|
+
kind: "wallet_signer_management",
|
|
1539
|
+
walletId: request.value.walletId
|
|
1540
|
+
},
|
|
1541
|
+
signerSelection: request.value.signerSelection
|
|
1542
|
+
},
|
|
1543
|
+
orgId: principal.orgId,
|
|
1544
|
+
...runtimePolicyScope ? { runtimePolicyScope } : {},
|
|
1545
|
+
...runtimePolicyScope ? {
|
|
1546
|
+
signingRootId: `${runtimePolicyScope.projectId}:${runtimePolicyScope.envId}`,
|
|
1547
|
+
signingRootVersion: runtimePolicyScope.signingRootVersion
|
|
1548
|
+
} : {},
|
|
1549
|
+
expectedOrigin: origin
|
|
1550
|
+
});
|
|
1551
|
+
return routeJson(result.ok ? 200 : 400, result);
|
|
1552
|
+
}
|
|
1553
|
+
/**
|
|
1554
|
+
* Refactor 94C. `POST /wallets/register/setup` — the single admitted entry
|
|
1555
|
+
* point that replaces the bootstrap grant, the intent, and start.
|
|
1556
|
+
*
|
|
1557
|
+
* Authentication is the same API-credential plane the intent route used, so
|
|
1558
|
+
* origin and environment binding are unchanged; what is gone is the stored
|
|
1559
|
+
* grant that used to sit between the check and its only reader.
|
|
1560
|
+
*/
|
|
1561
|
+
async function handleRouterApiWalletRegistrationSetup(input) {
|
|
1562
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1563
|
+
const origin = normalizeCorsOrigin(input.origin);
|
|
1564
|
+
if (!origin) return routeError(403, "forbidden", "Origin header is required and must be a valid exact origin");
|
|
1565
|
+
const publishableKeyAuth = input.services.publishableKeyAuth;
|
|
1566
|
+
if (!publishableKeyAuth) return routeError(500, "route_auth_not_configured", "wallet registration setup requires publishable key auth on this server");
|
|
1567
|
+
const resolved = await enforceRoutePolicy({
|
|
1568
|
+
headers: input.headers,
|
|
1569
|
+
logger: input.logger,
|
|
1570
|
+
request: {
|
|
1571
|
+
body: input.body,
|
|
1572
|
+
headers: input.headers
|
|
1573
|
+
},
|
|
1574
|
+
route: input.route,
|
|
1575
|
+
services: walletRegistrationRoutePolicyServices(input),
|
|
1576
|
+
sourceIp: input.sourceIp,
|
|
1577
|
+
resolvers: { apiCredentials: async () => await resolvePublishableKeyApiCredentialAuth({
|
|
1578
|
+
environmentId: extractRouterApiEnvironmentId(input.headers) || void 0,
|
|
1579
|
+
headers: input.headers,
|
|
1580
|
+
missingEnvironmentMessage: "Environment header is required for wallet registration setup",
|
|
1581
|
+
missingOriginMessage: "Origin header is required and must be a valid exact origin",
|
|
1582
|
+
missingPublishableKeyMessage: "Missing publishable key",
|
|
1583
|
+
origin,
|
|
1584
|
+
publishableKeyAuth,
|
|
1585
|
+
route: input.route,
|
|
1586
|
+
routeAuthNotConfiguredMessage: "Wallet registration setup requires API credential auth policy"
|
|
1587
|
+
}) }
|
|
1588
|
+
});
|
|
1589
|
+
if (!resolved.ok) return routeJson(resolved.status, resolved.body);
|
|
1590
|
+
if (resolved.context.principal.kind !== "api_credentials") return routeError(500, "internal", "wallet registration setup requires API credentials");
|
|
1591
|
+
const principal = resolved.context.principal.principal;
|
|
1592
|
+
const runtimePolicyScope = await resolveActiveRuntimePolicyScopeForEnvironment({
|
|
1593
|
+
orgProjectEnv: input.services.orgProjectEnv || null,
|
|
1594
|
+
orgId: principal.orgId,
|
|
1595
|
+
environmentId: principal.environmentId,
|
|
1596
|
+
projectId: principal.projectId,
|
|
1597
|
+
envId: principal.envId
|
|
1598
|
+
});
|
|
1599
|
+
const session = input.services.session;
|
|
1600
|
+
if (!session) return routeError(500, "internal", "wallet registration setup requires session signing");
|
|
1601
|
+
const request = parseWalletRegistrationSetupRequest(input.body);
|
|
1602
|
+
if (!request.ok) return routeError(400, request.code, request.message);
|
|
1603
|
+
const result = await input.services.walletRegistration.setupWalletRegistration({
|
|
1604
|
+
request: request.value,
|
|
1605
|
+
orgId: principal.orgId,
|
|
1606
|
+
expectedOrigin: origin,
|
|
1607
|
+
signer: session,
|
|
1608
|
+
...runtimePolicyScope ? { runtimePolicyScope } : {},
|
|
1609
|
+
...runtimePolicyScope ? {
|
|
1610
|
+
signingRootId: `${runtimePolicyScope.projectId}:${runtimePolicyScope.envId}`,
|
|
1611
|
+
signingRootVersion: runtimePolicyScope.signingRootVersion
|
|
1612
|
+
} : {}
|
|
1613
|
+
});
|
|
1614
|
+
return routeJson(result.ok ? 200 : 400, result);
|
|
1615
|
+
}
|
|
1616
|
+
/**
|
|
1617
|
+
* Refactor 94C. `POST /wallets/register/respond` — the authenticated leg.
|
|
1618
|
+
*
|
|
1619
|
+
* Bearing the proof, so it is a public-plane route authorized by the signed
|
|
1620
|
+
* setup payload plus the WebAuthn or Email OTP proof, exactly as the
|
|
1621
|
+
* derivation respond leg it replaces was.
|
|
1622
|
+
*/
|
|
1623
|
+
async function handleRouterApiWalletRegistrationRespond(input) {
|
|
1624
|
+
const traceContext = parseRegistrationTraceContext(input.headers);
|
|
1625
|
+
if (!traceContext.ok) return routeError(400, "invalid_trace_id", traceContext.message);
|
|
1626
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1627
|
+
const session = input.services.session;
|
|
1628
|
+
if (!session) return routeError(500, "internal", "wallet registration respond requires session signing");
|
|
1629
|
+
const parsed = parseWalletRegistrationRespondRequest(input.body);
|
|
1630
|
+
if (!parsed.ok) return routeError(400, parsed.code, parsed.message);
|
|
1631
|
+
const result = await input.services.walletRegistration.respondWalletRegistration({
|
|
1632
|
+
...parsed.value,
|
|
1633
|
+
verifier: session,
|
|
1634
|
+
...registrationUserAgentFromHeaders(input.headers) ? { userAgent: registrationUserAgentFromHeaders(input.headers) } : {}
|
|
1635
|
+
}, traceContext.value ?? void 0);
|
|
1636
|
+
return routeJson(result.ok ? 200 : 400, result);
|
|
1637
|
+
}
|
|
1638
|
+
/**
|
|
1639
|
+
* Parses respond's public body. `signedSetup` stays an opaque string here —
|
|
1640
|
+
* the service verifies it; parsing its contents at the boundary would invite
|
|
1641
|
+
* trusting them before verification.
|
|
1642
|
+
*/
|
|
1643
|
+
function parseWalletRegistrationRespondRequest(body) {
|
|
1644
|
+
if (!isPlainObject(body)) return {
|
|
1645
|
+
ok: false,
|
|
1646
|
+
code: "invalid_body",
|
|
1647
|
+
message: "JSON body required"
|
|
1648
|
+
};
|
|
1649
|
+
const registrationCeremonyId = String(body.registrationCeremonyId || "").trim();
|
|
1650
|
+
if (!registrationCeremonyId) return {
|
|
1651
|
+
ok: false,
|
|
1652
|
+
code: "invalid_body",
|
|
1653
|
+
message: "registrationCeremonyId is required"
|
|
1654
|
+
};
|
|
1655
|
+
const signedSetup = String(body.signedSetup || "").trim();
|
|
1656
|
+
if (!signedSetup) return {
|
|
1657
|
+
ok: false,
|
|
1658
|
+
code: "invalid_body",
|
|
1659
|
+
message: "signedSetup is required"
|
|
1660
|
+
};
|
|
1661
|
+
const planKind = String(body.kind || "").trim();
|
|
1662
|
+
if (planKind !== "evm_family_ecdsa" && planKind !== "near_ed25519_and_evm_family_ecdsa" && planKind !== "near_ed25519") return {
|
|
1663
|
+
ok: false,
|
|
1664
|
+
code: "invalid_body",
|
|
1665
|
+
message: "kind must name the signer plan"
|
|
1666
|
+
};
|
|
1667
|
+
if (planKind === "near_ed25519" && body.ecdsa !== void 0) return {
|
|
1668
|
+
ok: false,
|
|
1669
|
+
code: "invalid_body",
|
|
1670
|
+
message: "an Ed25519-only respond carries no ECDSA registration"
|
|
1671
|
+
};
|
|
1672
|
+
const hasWebAuthn = Object.prototype.hasOwnProperty.call(body, "webauthn_registration");
|
|
1673
|
+
if (hasWebAuthn === Object.prototype.hasOwnProperty.call(body, "emailOtpRegistrationProof")) return {
|
|
1674
|
+
ok: false,
|
|
1675
|
+
code: "invalid_body",
|
|
1676
|
+
message: "exactly one registration authority proof is required"
|
|
1677
|
+
};
|
|
1678
|
+
let authority;
|
|
1679
|
+
if (hasWebAuthn) authority = {
|
|
1680
|
+
kind: "passkey",
|
|
1681
|
+
webauthnRegistration: body.webauthn_registration
|
|
1682
|
+
};
|
|
1683
|
+
else {
|
|
1684
|
+
const proof = normalizeEmailOtpRegistrationProof(body.emailOtpRegistrationProof);
|
|
1685
|
+
if (!proof) return {
|
|
1686
|
+
ok: false,
|
|
1687
|
+
code: "invalid_body",
|
|
1688
|
+
message: "emailOtpRegistrationProof is invalid"
|
|
1689
|
+
};
|
|
1690
|
+
authority = {
|
|
1691
|
+
kind: "email_otp",
|
|
1692
|
+
emailOtpRegistrationProof: proof
|
|
1693
|
+
};
|
|
1694
|
+
}
|
|
1695
|
+
if (planKind === "near_ed25519") return {
|
|
1696
|
+
ok: true,
|
|
1697
|
+
value: {
|
|
1698
|
+
registrationCeremonyId,
|
|
1699
|
+
signedSetup,
|
|
1700
|
+
authority,
|
|
1701
|
+
planKind
|
|
1702
|
+
}
|
|
1703
|
+
};
|
|
1704
|
+
const ecdsa = isPlainObject(body.ecdsa) ? body.ecdsa : null;
|
|
1705
|
+
if (!ecdsa || ecdsa.kind !== "router_ab_ecdsa_registration_v1") return {
|
|
1706
|
+
ok: false,
|
|
1707
|
+
code: "invalid_body",
|
|
1708
|
+
message: "strict Router A/B ECDSA registration request is required"
|
|
1709
|
+
};
|
|
1710
|
+
let strictRegistration;
|
|
1711
|
+
try {
|
|
1712
|
+
strictRegistration = parseRouterAbEcdsaRegistrationRequestV1(ecdsa.strictRegistration);
|
|
1713
|
+
} catch {
|
|
1714
|
+
return {
|
|
1715
|
+
ok: false,
|
|
1716
|
+
code: "invalid_body",
|
|
1717
|
+
message: "strict Router A/B ECDSA registration request is invalid"
|
|
1718
|
+
};
|
|
1719
|
+
}
|
|
1720
|
+
const requestDigestB64u = parseRegistrationRequestDigestB64u(ecdsa.requestDigestB64u);
|
|
1721
|
+
if (!requestDigestB64u) return {
|
|
1722
|
+
ok: false,
|
|
1723
|
+
code: "invalid_body",
|
|
1724
|
+
message: "ECDSA registration requestDigestB64u must contain 32 base64url bytes"
|
|
1725
|
+
};
|
|
1726
|
+
return {
|
|
1727
|
+
ok: true,
|
|
1728
|
+
value: {
|
|
1729
|
+
registrationCeremonyId,
|
|
1730
|
+
signedSetup,
|
|
1731
|
+
authority,
|
|
1732
|
+
planKind,
|
|
1733
|
+
ecdsa: {
|
|
1734
|
+
kind: "router_ab_ecdsa_registration_v1",
|
|
1735
|
+
strictRegistration,
|
|
1736
|
+
requestDigestB64u
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1739
|
+
};
|
|
1740
|
+
}
|
|
1741
|
+
function parseRegistrationRequestDigestB64u(raw) {
|
|
1742
|
+
const value = typeof raw === "string" ? raw.trim() : "";
|
|
1743
|
+
if (!value || !/^[A-Za-z0-9_-]+$/u.test(value)) return null;
|
|
1744
|
+
try {
|
|
1745
|
+
return base64UrlDecode(value).byteLength === 32 ? value : null;
|
|
1746
|
+
} catch {
|
|
1747
|
+
return null;
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
async function projectActivatedWallet(input) {
|
|
1751
|
+
const walletProjection = input.services.walletProjection || null;
|
|
1752
|
+
if (!walletProjection) return null;
|
|
1753
|
+
const verifier = input.services.session;
|
|
1754
|
+
if (!verifier) return "wallet projection requires setup verification";
|
|
1755
|
+
const verified = await verifyWalletRegistrationSetupClaims(verifier, input.signedSetup, {
|
|
1756
|
+
registrationCeremonyId: input.registrationCeremonyId,
|
|
1757
|
+
nowMs: Date.now()
|
|
1758
|
+
});
|
|
1759
|
+
if (!verified.ok) return verified.message;
|
|
1760
|
+
if (verified.claims.policy.kind !== "runtime_policy_scope") return "wallet projection requires an exact runtime policy scope";
|
|
1761
|
+
if (verified.claims.policy.scope.orgId !== verified.claims.orgId) return "wallet projection scope does not match its organization";
|
|
1762
|
+
try {
|
|
1763
|
+
await walletProjection.recordCreatedWallet({
|
|
1764
|
+
orgId: verified.claims.orgId,
|
|
1765
|
+
runtimePolicyScope: verified.claims.policy.scope,
|
|
1766
|
+
walletId: verified.claims.walletId,
|
|
1767
|
+
occurredAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1768
|
+
});
|
|
1769
|
+
return null;
|
|
1770
|
+
} catch (error) {
|
|
1771
|
+
return error instanceof Error ? error.message : String(error);
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
/**
|
|
1775
|
+
* Refactor 94C. `POST /wallets/register/activate` — activation and
|
|
1776
|
+
* finalization behind one Gateway operation row.
|
|
1777
|
+
*/
|
|
1778
|
+
async function handleRouterApiWalletRegistrationActivate(input) {
|
|
1779
|
+
const traceContext = parseRegistrationTraceContext(input.headers);
|
|
1780
|
+
if (!traceContext.ok) return routeError(400, "invalid_trace_id", traceContext.message);
|
|
1781
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1782
|
+
const session = input.services.session;
|
|
1783
|
+
if (!session) return routeError(500, "internal", "wallet registration activate requires setup verification");
|
|
1784
|
+
const body = input.body;
|
|
1785
|
+
const registrationCeremonyId = String(body.registrationCeremonyId || "").trim();
|
|
1786
|
+
if (!registrationCeremonyId) return routeError(400, "invalid_body", "registrationCeremonyId is required");
|
|
1787
|
+
const signedSetup = String(body.signedSetup || "").trim();
|
|
1788
|
+
if (!signedSetup) return routeError(400, "invalid_body", "signedSetup is required");
|
|
1789
|
+
const idempotencyKey = String(body.idempotencyKey || "").trim();
|
|
1790
|
+
if (!idempotencyKey) return routeError(400, "invalid_body", "idempotencyKey is required");
|
|
1791
|
+
const planKind = String(body.kind || "").trim();
|
|
1792
|
+
if (planKind !== "evm_family_ecdsa" && planKind !== "near_ed25519_and_evm_family_ecdsa" && planKind !== "near_ed25519") return routeError(400, "invalid_body", "kind must name the signer plan");
|
|
1793
|
+
const ed25519Only = planKind === "near_ed25519";
|
|
1794
|
+
if (ed25519Only && body.ecdsa !== void 0) return routeError(400, "invalid_body", "an Ed25519-only activate carries no ECDSA activation");
|
|
1795
|
+
const ecdsa = isPlainObject(body.ecdsa) ? body.ecdsa : null;
|
|
1796
|
+
const unknownEcdsaField = ecdsa ? findUnknownField(ecdsa, [
|
|
1797
|
+
"activationCorrelationId",
|
|
1798
|
+
"activationRequestDigestB64u",
|
|
1799
|
+
"clientActivation"
|
|
1800
|
+
]) : null;
|
|
1801
|
+
if (unknownEcdsaField) return routeError(400, "invalid_body", `wallet registration ECDSA activation field ${unknownEcdsaField} is unsupported`);
|
|
1802
|
+
if (!ed25519Only && (!ecdsa || typeof ecdsa.activationCorrelationId !== "string" || typeof ecdsa.activationRequestDigestB64u !== "string" || !isPlainObject(ecdsa.clientActivation))) return routeError(400, "invalid_body", "browser-verified clientActivation is required");
|
|
1803
|
+
let parsedActivation;
|
|
1804
|
+
if (ecdsa) try {
|
|
1805
|
+
const parsed = parseRouterAbEcdsaRegistrationActivationRequestV1({
|
|
1806
|
+
registrationCeremonyId,
|
|
1807
|
+
ecdsa: {
|
|
1808
|
+
kind: "router_ab_ecdsa_registration_activation_v1",
|
|
1809
|
+
activationCorrelationId: ecdsa.activationCorrelationId,
|
|
1810
|
+
publicFacts: ecdsa.clientActivation
|
|
1811
|
+
}
|
|
1812
|
+
});
|
|
1813
|
+
parsedActivation = {
|
|
1814
|
+
activationCorrelationId: parsed.ecdsa.activationCorrelationId,
|
|
1815
|
+
activationRequestDigestB64u: parseDigestB64u(ecdsa.activationRequestDigestB64u),
|
|
1816
|
+
clientActivation: parsed.ecdsa.publicFacts
|
|
1817
|
+
};
|
|
1818
|
+
} catch {
|
|
1819
|
+
return routeError(400, "invalid_body", "ECDSA activation facts are invalid");
|
|
1820
|
+
}
|
|
1821
|
+
const result = await input.services.walletRegistration.activateWalletRegistration({
|
|
1822
|
+
registrationCeremonyId,
|
|
1823
|
+
signedSetup,
|
|
1824
|
+
idempotencyKey,
|
|
1825
|
+
planKind,
|
|
1826
|
+
...parsedActivation ? { ecdsa: parsedActivation } : {},
|
|
1827
|
+
...body.emailOtpEnrollment ? { emailOtpEnrollment: body.emailOtpEnrollment } : {},
|
|
1828
|
+
...body.walletCustodyCommit !== void 0 ? { walletCustodyCommit: body.walletCustodyCommit } : {},
|
|
1829
|
+
verifier: session
|
|
1830
|
+
}, traceContext.value ?? void 0);
|
|
1831
|
+
if (!result.ok) return routeJson(400, result);
|
|
1832
|
+
if (!isEmailOtpWalletRegistrationActivateSuccessV2(result) && !isPasskeyWalletRegistrationActivateSuccessV2(result)) return routeError(500, "internal", "Wallet registration activation returned an invalid authority");
|
|
1833
|
+
const projectionError = await projectActivatedWallet({
|
|
1834
|
+
registrationCeremonyId,
|
|
1835
|
+
services: input.services,
|
|
1836
|
+
signedSetup
|
|
1837
|
+
});
|
|
1838
|
+
if (projectionError) return routeError(500, "internal", `Wallet was created but its Console projection failed: ${projectionError}`);
|
|
1839
|
+
return routeJson(200, result);
|
|
1840
|
+
}
|
|
1841
|
+
/**
|
|
1842
|
+
* Refactor 94C. `POST /wallets/register/near-provisioning` — the non-blocking
|
|
1843
|
+
* completion the client calls after activate, once its already-running Yao
|
|
1844
|
+
* computation produces an activation.
|
|
1845
|
+
*/
|
|
1846
|
+
async function handleRouterApiWalletRegistrationNearProvisioning(input) {
|
|
1847
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1848
|
+
const session = input.services.session;
|
|
1849
|
+
if (!session) return routeError(500, "internal", "NEAR provisioning requires setup verification");
|
|
1850
|
+
const body = input.body;
|
|
1851
|
+
const registrationCeremonyId = String(body.registrationCeremonyId || "").trim();
|
|
1852
|
+
const signedSetup = String(body.signedSetup || "").trim();
|
|
1853
|
+
const idempotencyKey = String(body.idempotencyKey || "").trim();
|
|
1854
|
+
if (!registrationCeremonyId || !signedSetup || !idempotencyKey) return routeError(400, "invalid_body", "registrationCeremonyId, signedSetup and idempotencyKey are required");
|
|
1855
|
+
const ed25519 = parseWalletRegistrationEd25519Finalize(body.ed25519);
|
|
1856
|
+
if (!ed25519.ok) return routeError(400, ed25519.code, ed25519.message);
|
|
1857
|
+
const result = await input.services.walletRegistration.completeWalletRegistrationNearProvisioning({
|
|
1858
|
+
registrationCeremonyId,
|
|
1859
|
+
signedSetup,
|
|
1860
|
+
idempotencyKey,
|
|
1861
|
+
ed25519: ed25519.value,
|
|
1862
|
+
emailOtpEnrollment: body.emailOtpEnrollment,
|
|
1863
|
+
...body.walletCustodyCommit !== void 0 ? { walletCustodyCommit: body.walletCustodyCommit } : {},
|
|
1864
|
+
verifier: session
|
|
1865
|
+
});
|
|
1866
|
+
if (!result.ok) return routeJson(400, result);
|
|
1867
|
+
return routeJson(200, result);
|
|
1868
|
+
}
|
|
1869
|
+
async function handleRouterApiWalletAddSignerStart(input) {
|
|
1870
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1871
|
+
const walletId = String(input.pathParams?.walletId || "").trim();
|
|
1872
|
+
if (!walletId) return routeError(400, "invalid_body", "walletId is required");
|
|
1873
|
+
const parsedBody = await parseWalletAddSignerStartBody(input.body, walletId);
|
|
1874
|
+
if (!parsedBody.ok) return routeError(400, parsedBody.code, parsedBody.message);
|
|
1875
|
+
if (parsedBody.value.auth.kind === "webauthn_assertion") {
|
|
1876
|
+
const origin = requireWebAuthnExpectedOrigin(input);
|
|
1877
|
+
if (!origin.ok) return origin.response;
|
|
1878
|
+
const parsedRpId = requireWebAuthnRpId(parsedBody.value.auth.rpId);
|
|
1879
|
+
if (!parsedRpId.ok) return parsedRpId.response;
|
|
1880
|
+
const verified = await input.services.walletRegistration.verifyWebAuthnAuthenticationLite({
|
|
1881
|
+
userId: walletId,
|
|
1882
|
+
rpId: parsedRpId.rpId,
|
|
1883
|
+
expectedChallenge: parsedBody.value.auth.expectedChallengeDigestB64u,
|
|
1884
|
+
expected_origin: origin.expectedOrigin,
|
|
1885
|
+
webauthn_authentication: parsedBody.value.auth.credential
|
|
1886
|
+
});
|
|
1887
|
+
if (!verified.success || !verified.verified) return routeError(401, "unauthorized", verified.message || "Invalid add-signer WebAuthn authorization");
|
|
1888
|
+
}
|
|
1889
|
+
const result = await input.services.walletRegistration.startWalletAddSigner(parsedBody.value);
|
|
1890
|
+
return routeJson(result.ok ? 200 : 400, result);
|
|
1891
|
+
}
|
|
1892
|
+
async function handleRouterApiWalletAddSignerEcdsaDerivationRespond(input) {
|
|
1893
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1894
|
+
const request = parseWalletAddSignerEcdsaDerivationRespondRequest(input.body);
|
|
1895
|
+
if (!request.ok) return routeError(400, request.code, request.message);
|
|
1896
|
+
const result = await input.services.walletRegistration.respondWalletAddSignerEcdsaDerivation(request.value);
|
|
1897
|
+
return routeJson(result.ok ? 200 : 400, result);
|
|
1898
|
+
}
|
|
1899
|
+
async function handleRouterApiWalletAddSignerEcdsaActivation(input) {
|
|
1900
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1901
|
+
const request = parseWalletAddSignerEcdsaActivationRequest(input.body);
|
|
1902
|
+
if (!request.ok) return routeError(400, request.code, request.message);
|
|
1903
|
+
const result = await input.services.walletRegistration.activateWalletAddSignerEcdsa(request.value);
|
|
1904
|
+
if (!result.ok) return routeJson(400, result);
|
|
1905
|
+
return routeJson(200, result);
|
|
1906
|
+
}
|
|
1907
|
+
async function handleRouterApiWalletAddSignerFinalize(input) {
|
|
1908
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1909
|
+
const request = parseWalletAddSignerFinalizeRequest(input.body);
|
|
1910
|
+
if (!request.ok) return routeError(400, request.code, request.message);
|
|
1911
|
+
const result = await input.services.walletRegistration.finalizeWalletAddSigner(request.value);
|
|
1912
|
+
return routeJson(result.ok ? 200 : 400, result, { usage: result.ok ? { walletId: result.walletId } : void 0 });
|
|
1913
|
+
}
|
|
1914
|
+
async function handleRouterApiWalletAddAuthMethodIntent(input) {
|
|
1915
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1916
|
+
const walletId = String(input.pathParams?.walletId || "").trim();
|
|
1917
|
+
if (!walletId) return routeError(400, "invalid_body", "walletId path parameter is required");
|
|
1918
|
+
const request = parseCreateAddAuthMethodIntentRequest(input.body, walletId);
|
|
1919
|
+
if (!request.ok) return routeError(400, request.code, request.message);
|
|
1920
|
+
const origin = normalizeCorsOrigin(input.origin);
|
|
1921
|
+
if (!origin) return routeError(403, "forbidden", "Origin header is required and must be a valid exact origin");
|
|
1922
|
+
const publishableKeyAuth = input.services.publishableKeyAuth;
|
|
1923
|
+
if (!publishableKeyAuth) return routeError(500, "route_auth_not_configured", "wallet add-auth-method intent requires publishable key auth on this server");
|
|
1924
|
+
const resolved = await enforceRoutePolicy({
|
|
1925
|
+
headers: input.headers,
|
|
1926
|
+
logger: input.logger,
|
|
1927
|
+
request: {
|
|
1928
|
+
body: input.body,
|
|
1929
|
+
headers: input.headers
|
|
1930
|
+
},
|
|
1931
|
+
route: input.route,
|
|
1932
|
+
services: walletRegistrationRoutePolicyServices(input),
|
|
1933
|
+
sourceIp: input.sourceIp,
|
|
1934
|
+
resolvers: { apiCredentials: async () => await resolvePublishableKeyApiCredentialAuth({
|
|
1935
|
+
environmentId: extractRouterApiEnvironmentId(input.headers) || void 0,
|
|
1936
|
+
headers: input.headers,
|
|
1937
|
+
missingEnvironmentMessage: "Environment header is required for add-auth-method intent",
|
|
1938
|
+
missingOriginMessage: "Origin header is required and must be a valid exact origin",
|
|
1939
|
+
missingPublishableKeyMessage: "Missing publishable key",
|
|
1940
|
+
origin,
|
|
1941
|
+
publishableKeyAuth,
|
|
1942
|
+
route: input.route,
|
|
1943
|
+
routeAuthNotConfiguredMessage: "Add-auth-method intent requires API credential auth policy"
|
|
1944
|
+
}) }
|
|
1945
|
+
});
|
|
1946
|
+
if (!resolved.ok) return routeJson(resolved.status, resolved.body);
|
|
1947
|
+
if (resolved.context.principal.kind !== "api_credentials") return routeError(500, "internal", "wallet add-auth-method intent requires API credentials");
|
|
1948
|
+
const principal = resolved.context.principal.principal;
|
|
1949
|
+
const runtimePolicyScope = await resolveActiveRuntimePolicyScopeForEnvironment({
|
|
1950
|
+
orgProjectEnv: input.services.orgProjectEnv || null,
|
|
1951
|
+
orgId: principal.orgId,
|
|
1952
|
+
environmentId: principal.environmentId,
|
|
1953
|
+
projectId: principal.projectId,
|
|
1954
|
+
envId: principal.envId
|
|
1955
|
+
});
|
|
1956
|
+
const result = await input.services.walletRegistration.createAddAuthMethodIntent({
|
|
1957
|
+
command: {
|
|
1958
|
+
subject: {
|
|
1959
|
+
kind: "wallet_auth_method_management",
|
|
1960
|
+
walletId: request.value.walletId
|
|
1961
|
+
},
|
|
1962
|
+
authMethod: request.value.authMethod,
|
|
1963
|
+
caller: request.value.caller
|
|
1964
|
+
},
|
|
1965
|
+
orgId: principal.orgId,
|
|
1966
|
+
...runtimePolicyScope ? { runtimePolicyScope } : {},
|
|
1967
|
+
...runtimePolicyScope ? {
|
|
1968
|
+
signingRootId: `${runtimePolicyScope.projectId}:${runtimePolicyScope.envId}`,
|
|
1969
|
+
signingRootVersion: runtimePolicyScope.signingRootVersion
|
|
1970
|
+
} : {},
|
|
1971
|
+
expectedOrigin: origin
|
|
1972
|
+
});
|
|
1973
|
+
return routeJson(result.ok ? 200 : 400, result);
|
|
1974
|
+
}
|
|
1975
|
+
/**
|
|
1976
|
+
* Sends the enrollment code for an Email OTP addition.
|
|
1977
|
+
*
|
|
1978
|
+
* The intent grant is the whole gate. The address is read from the intent the
|
|
1979
|
+
* grant names rather than taken from the body: a caller able to name the
|
|
1980
|
+
* recipient could send any wallet's enrollment code anywhere, and the grant is
|
|
1981
|
+
* the only evidence this addition was authorized at all.
|
|
1982
|
+
*/
|
|
1983
|
+
async function handleRouterApiWalletAddAuthMethodEmailOtpChallenge(input) {
|
|
1984
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
1985
|
+
const walletId = parseWalletId(String(input.pathParams?.walletId || "").trim());
|
|
1986
|
+
if (!walletId.ok) return routeError(400, "invalid_body", "walletId is required");
|
|
1987
|
+
const grant = addAuthMethodIntentGrantFromString(String(input.body.addAuthMethodIntentGrant || "").trim());
|
|
1988
|
+
const digestB64u = String(input.body.addAuthMethodIntentDigestB64u || "").trim();
|
|
1989
|
+
if (!grant || !digestB64u) return routeError(400, "invalid_body", "addAuthMethodIntentGrant and addAuthMethodIntentDigestB64u are required");
|
|
1990
|
+
const result = await input.services.walletRegistration.createAddAuthMethodEmailOtpChallenge({
|
|
1991
|
+
walletId: walletId.value,
|
|
1992
|
+
addAuthMethodIntentGrant: grant,
|
|
1993
|
+
addAuthMethodIntentDigestB64u: digestB64u
|
|
1994
|
+
});
|
|
1995
|
+
if (!result.ok) {
|
|
1996
|
+
if (result.code === "unauthorized") return routeError(401, "unauthorized", result.message);
|
|
1997
|
+
if (result.code === "internal") return routeError(500, "internal", result.message);
|
|
1998
|
+
return routeJson(400, {
|
|
1999
|
+
ok: false,
|
|
2000
|
+
code: result.code,
|
|
2001
|
+
message: result.message
|
|
2002
|
+
});
|
|
2003
|
+
}
|
|
2004
|
+
return routeJson(200, result);
|
|
2005
|
+
}
|
|
2006
|
+
async function handleRouterApiWalletAddAuthMethodStart(input) {
|
|
2007
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
2008
|
+
const walletId = String(input.pathParams?.walletId || "").trim();
|
|
2009
|
+
if (!walletId) return routeError(400, "invalid_body", "walletId is required");
|
|
2010
|
+
const parsedBody = await parseWalletAddAuthMethodStartBody(input.body, walletId);
|
|
2011
|
+
if (!parsedBody.ok) return routeError(400, parsedBody.code, parsedBody.message);
|
|
2012
|
+
const parsedRequest = parsedBody.value;
|
|
2013
|
+
let request;
|
|
2014
|
+
if (parsedRequest.auth.kind === "webauthn_assertion") {
|
|
2015
|
+
if (parsedRequest.intent.caller !== "same_device_addition") return routeError(401, "unauthorized", "Linked-device add-auth-method start requires the owner Wallet Session handoff");
|
|
2016
|
+
const origin = requireWebAuthnExpectedOrigin(input);
|
|
2017
|
+
if (!origin.ok) return origin.response;
|
|
2018
|
+
const parsedRpId = requireWebAuthnRpId(parsedRequest.auth.rpId);
|
|
2019
|
+
if (!parsedRpId.ok) return parsedRpId.response;
|
|
2020
|
+
const verified = await input.services.walletRegistration.verifyWebAuthnAuthenticationLite({
|
|
2021
|
+
userId: walletId,
|
|
2022
|
+
rpId: parsedRpId.rpId,
|
|
2023
|
+
expectedChallenge: parsedRequest.auth.expectedChallengeDigestB64u,
|
|
2024
|
+
expected_origin: origin.expectedOrigin,
|
|
2025
|
+
webauthn_authentication: parsedRequest.auth.credential
|
|
2026
|
+
});
|
|
2027
|
+
if (!verified.success || !verified.verified) return routeError(401, "unauthorized", verified.message || "Invalid add-auth-method WebAuthn authorization");
|
|
2028
|
+
const auth = parsedRequest.auth;
|
|
2029
|
+
request = {
|
|
2030
|
+
...parsedRequest,
|
|
2031
|
+
auth: {
|
|
2032
|
+
kind: auth.kind,
|
|
2033
|
+
rpId: auth.rpId,
|
|
2034
|
+
credential: auth.credential,
|
|
2035
|
+
expectedChallengeDigestB64u: auth.expectedChallengeDigestB64u
|
|
2036
|
+
}
|
|
2037
|
+
};
|
|
2038
|
+
} else if (parsedRequest.auth.kind === "email_otp_source_proof") {
|
|
2039
|
+
if (parsedRequest.intent.caller !== "same_device_addition") return routeError(401, "unauthorized", "Linked-device add-auth-method start requires the owner Wallet Session handoff");
|
|
2040
|
+
const sourceProof = parsedRequest.auth;
|
|
2041
|
+
const verified = await input.services.walletRegistration.verifyAddAuthMethodEmailOtpSourceProof({
|
|
2042
|
+
walletId: walletIdFromString(walletId),
|
|
2043
|
+
walletAuthMethodId: parsedRequest.intent.source.walletAuthMethodId,
|
|
2044
|
+
challengeId: sourceProof.challengeId,
|
|
2045
|
+
otpCode: sourceProof.otpCode,
|
|
2046
|
+
expectedDigestB64u: sourceProof.expectedChallengeDigestB64u
|
|
2047
|
+
});
|
|
2048
|
+
if (!verified.ok) return routeError(verified.code === "invalid_state" ? 400 : 401, verified.code === "invalid_state" ? "invalid_body" : "unauthorized", verified.message);
|
|
2049
|
+
request = {
|
|
2050
|
+
...parsedRequest,
|
|
2051
|
+
auth: verified.auth
|
|
2052
|
+
};
|
|
2053
|
+
} else if (parsedRequest.auth.kind === "wallet_session") {
|
|
2054
|
+
if (parsedRequest.intent.caller !== "linked_device_ceremony") return routeError(401, "unauthorized", "Same-device add-auth-method requires a fresh source proof, not a Wallet Session");
|
|
2055
|
+
const admission = await resolveRouteExactWalletSessionAdministration(input, parsedRequest.walletId);
|
|
2056
|
+
if (!admission) return routeError(401, "unauthorized", "Add-auth-method requires an active owner Wallet Session");
|
|
2057
|
+
const { authorization, authMethod } = admission.context;
|
|
2058
|
+
const session = authorization.session;
|
|
2059
|
+
if (String(session.walletId) !== walletId) return routeError(401, "unauthorized", "Owner Wallet Session names another wallet");
|
|
2060
|
+
if (authMethod.kind !== "passkey") return routeError(401, "unauthorized", "Add-auth-method requires a passkey-owned owner Wallet Session");
|
|
2061
|
+
request = {
|
|
2062
|
+
...parsedRequest,
|
|
2063
|
+
auth: {
|
|
2064
|
+
kind: "wallet_session",
|
|
2065
|
+
walletSessionId: session.walletSessionId,
|
|
2066
|
+
authorizationId: session.authorizationId,
|
|
2067
|
+
rpId: authMethod.rpId,
|
|
2068
|
+
credentialIdB64u: authMethod.credentialIdB64u
|
|
2069
|
+
}
|
|
2070
|
+
};
|
|
2071
|
+
} else return routeError(400, "invalid_body", "add-auth-method auth.kind is unsupported");
|
|
2072
|
+
const result = await input.services.walletRegistration.startWalletAddAuthMethod({
|
|
2073
|
+
...request,
|
|
2074
|
+
subject: {
|
|
2075
|
+
kind: "wallet_auth_method_management",
|
|
2076
|
+
walletId: walletIdFromString(walletId)
|
|
2077
|
+
}
|
|
2078
|
+
}, { userAgent: registrationUserAgentFromHeaders(input.headers) });
|
|
2079
|
+
return routeJson(result.ok ? 200 : 400, result);
|
|
2080
|
+
}
|
|
2081
|
+
async function handleRouterApiWalletAddAuthMethodFinalize(input) {
|
|
2082
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
2083
|
+
const request = parseWalletAddAuthMethodFinalizeRequest(input.body);
|
|
2084
|
+
if (!request.ok) return routeError(400, request.code, request.message);
|
|
2085
|
+
const walletId = String(input.pathParams?.walletId || "").trim();
|
|
2086
|
+
if (!walletId) return routeError(400, "invalid_body", "walletId is required");
|
|
2087
|
+
const result = await input.services.walletRegistration.finalizeWalletAddAuthMethod({
|
|
2088
|
+
...request.value,
|
|
2089
|
+
subject: {
|
|
2090
|
+
kind: "wallet_auth_method_management",
|
|
2091
|
+
walletId: walletIdFromString(walletId)
|
|
2092
|
+
},
|
|
2093
|
+
authorization: { kind: "owner" }
|
|
2094
|
+
});
|
|
2095
|
+
return routeJson(result.ok ? 200 : 400, result, { usage: result.ok ? { walletId: result.walletId } : void 0 });
|
|
2096
|
+
}
|
|
2097
|
+
async function handleRouterApiWalletRevokeAuthMethod(input) {
|
|
2098
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
2099
|
+
const walletId = String(input.pathParams?.walletId || "").trim();
|
|
2100
|
+
if (!walletId) return routeError(400, "invalid_body", "walletId is required");
|
|
2101
|
+
const parsedPathWalletAuthMethodId = parseWalletAuthMethodId(String(input.pathParams?.walletAuthMethodId || "").trim());
|
|
2102
|
+
if (!parsedPathWalletAuthMethodId.ok) return routeError(400, "invalid_body", "walletAuthMethodId path parameter is invalid");
|
|
2103
|
+
const parsedBody = await parseWalletRevokeAuthMethodRequest(input.body, walletId);
|
|
2104
|
+
if (!parsedBody.ok) return routeError(400, parsedBody.code, parsedBody.message);
|
|
2105
|
+
if (parsedPathWalletAuthMethodId.value !== parsedBody.value.walletAuthMethodId) return routeError(400, "invalid_body", "walletAuthMethodId path and body values must agree");
|
|
2106
|
+
const origin = requireWebAuthnExpectedOrigin(input);
|
|
2107
|
+
if (!origin.ok) return origin.response;
|
|
2108
|
+
const verified = await input.services.walletRegistration.verifyWalletAuthMethodRevokeProof({
|
|
2109
|
+
walletId: parsedBody.value.walletId,
|
|
2110
|
+
targetWalletAuthMethodId: parsedBody.value.walletAuthMethodId,
|
|
2111
|
+
requestedAtMs: parsedBody.value.requestedAtMs,
|
|
2112
|
+
sourceProof: parsedBody.value.sourceProof,
|
|
2113
|
+
expectedOrigin: origin.expectedOrigin
|
|
2114
|
+
});
|
|
2115
|
+
if (verified.kind === "denied") return routeError(401, "unauthorized", verified.message);
|
|
2116
|
+
const result = await input.services.walletRegistration.revokeWalletAuthMethod({
|
|
2117
|
+
...parsedBody.value,
|
|
2118
|
+
subject: {
|
|
2119
|
+
kind: "wallet_auth_method_management",
|
|
2120
|
+
walletId: walletIdFromString(walletId)
|
|
2121
|
+
},
|
|
2122
|
+
verifiedSource: {
|
|
2123
|
+
walletAuthMethodId: verified.walletAuthMethodId,
|
|
2124
|
+
verifiedAtMs: verified.verifiedAtMs
|
|
2125
|
+
}
|
|
2126
|
+
});
|
|
2127
|
+
return routeJson(result.ok ? 200 : 400, result, { usage: result.ok ? { walletId: result.walletId } : void 0 });
|
|
2128
|
+
}
|
|
2129
|
+
async function handleRouterApiWalletEcdsaKeyFactsInventory(input) {
|
|
2130
|
+
if (!isPlainObject(input.body)) return routeError(400, "invalid_body", "JSON body required");
|
|
2131
|
+
const walletId = String(input.pathParams?.walletId || "").trim();
|
|
2132
|
+
if (!walletId) return routeError(400, "invalid_body", "walletId is required");
|
|
2133
|
+
const parsedBody = await parseWalletEcdsaInventoryBody(input.body, walletId);
|
|
2134
|
+
if (!parsedBody.ok) return routeError(400, parsedBody.code, parsedBody.message);
|
|
2135
|
+
let inventoryWalletId = walletId;
|
|
2136
|
+
switch (parsedBody.value.auth.kind) {
|
|
2137
|
+
case "webauthn_assertion": {
|
|
2138
|
+
const origin = requireWebAuthnExpectedOrigin(input);
|
|
2139
|
+
if (!origin.ok) return origin.response;
|
|
2140
|
+
const parsedRpId = requireWebAuthnRpId(parsedBody.value.rpId);
|
|
2141
|
+
if (!parsedRpId.ok) return parsedRpId.response;
|
|
2142
|
+
const verified = await input.services.walletRegistration.verifyWebAuthnAuthenticationLite({
|
|
2143
|
+
userId: walletId,
|
|
2144
|
+
rpId: parsedRpId.rpId,
|
|
2145
|
+
expectedChallenge: parsedBody.value.auth.expectedChallengeDigestB64u,
|
|
2146
|
+
expected_origin: origin.expectedOrigin,
|
|
2147
|
+
webauthn_authentication: parsedBody.value.auth.credential
|
|
2148
|
+
});
|
|
2149
|
+
if (!verified.success || !verified.verified) return routeError(401, "unauthorized", verified.message || "Invalid ECDSA key-facts inventory WebAuthn authorization");
|
|
2150
|
+
break;
|
|
2151
|
+
}
|
|
2152
|
+
case "opaque_wallet_session_operation_credential_v1":
|
|
2153
|
+
case "opaque_hosted_wallet_session_operation_credential_v1": {
|
|
2154
|
+
let resolution;
|
|
2155
|
+
try {
|
|
2156
|
+
resolution = await resolveRouteEcdsaInventorySession(input, parsedBody.value.auth);
|
|
2157
|
+
} catch {
|
|
2158
|
+
return routeError(503, "internal", "ECDSA Wallet Session is unavailable");
|
|
2159
|
+
}
|
|
2160
|
+
if (resolution.kind === "hosted_origin_rejected") return routeError(403, "forbidden", "Hosted Wallet Session origin is unavailable");
|
|
2161
|
+
if (resolution.kind === "credential_mismatch") return routeError(403, "forbidden", "Wallet session credential does not match its bearer");
|
|
2162
|
+
if (resolution.kind !== "admitted") return routeError(401, "unauthorized", "ECDSA Wallet Session is unavailable");
|
|
2163
|
+
const admittedWalletId = resolution.admission.context.authorization.session.walletId;
|
|
2164
|
+
if (admittedWalletId !== walletId) return routeError(403, "forbidden", "Wallet session does not match walletId");
|
|
2165
|
+
inventoryWalletId = admittedWalletId;
|
|
2166
|
+
break;
|
|
2167
|
+
}
|
|
2168
|
+
default: return assertNeverWalletEcdsaInventoryAuth(parsedBody.value.auth);
|
|
2169
|
+
}
|
|
2170
|
+
const keyInventory = await input.services.walletRegistration.listWalletEcdsaKeyFactsInventory({
|
|
2171
|
+
walletId: inventoryWalletId,
|
|
2172
|
+
rpId: parsedBody.value.rpId,
|
|
2173
|
+
keyTargets: parsedBody.value.keyTargets
|
|
2174
|
+
});
|
|
2175
|
+
input.logger.info("[wallet][ecdsa-key-facts-inventory][diagnostic]", {
|
|
2176
|
+
walletId: inventoryWalletId,
|
|
2177
|
+
...keyInventory.diagnostics
|
|
2178
|
+
});
|
|
2179
|
+
return routeJson(200, {
|
|
2180
|
+
ok: true,
|
|
2181
|
+
ecdsaKeyIdentityTargets: keyInventory.records,
|
|
2182
|
+
diagnostics: keyInventory.diagnostics
|
|
2183
|
+
});
|
|
2184
|
+
}
|
|
2185
|
+
async function handleRouterApiWalletNearImplicitAccountFund(input) {
|
|
2186
|
+
const walletId = String(input.pathParams?.walletId || "").trim();
|
|
2187
|
+
const parsedBody = parseFundImplicitNearAccountBody(input.body, walletId);
|
|
2188
|
+
if (!parsedBody.ok) return routeError(400, parsedBody.code, parsedBody.message);
|
|
2189
|
+
const admission = await resolveRouteNearFundingWalletSession(input);
|
|
2190
|
+
if (!admission) return routeError(401, "unauthorized", "Ed25519 Wallet Session is unavailable");
|
|
2191
|
+
if (admission.walletId !== parsedBody.value.walletId) return routeError(403, "forbidden", "Wallet session does not match walletId");
|
|
2192
|
+
if (admission.nearAccountId !== parsedBody.value.nearAccountId) return routeError(403, "forbidden", "Wallet session does not match nearAccountId");
|
|
2193
|
+
const result = await input.services.walletRegistration.fundImplicitNearAccount(parsedBody.value);
|
|
2194
|
+
return routeJson(result.ok ? 200 : 400, result, { usage: result.ok ? { walletId: result.walletId } : void 0 });
|
|
2195
|
+
}
|
|
2196
|
+
//#endregion
|
|
2197
|
+
export { handleRouterApiWalletAddAuthMethodEmailOtpChallenge, handleRouterApiWalletAddAuthMethodFinalize, handleRouterApiWalletAddAuthMethodIntent, handleRouterApiWalletAddAuthMethodStart, handleRouterApiWalletAddSignerEcdsaActivation, handleRouterApiWalletAddSignerEcdsaDerivationRespond, handleRouterApiWalletAddSignerFinalize, handleRouterApiWalletAddSignerIntent, handleRouterApiWalletAddSignerStart, handleRouterApiWalletEcdsaKeyFactsInventory, handleRouterApiWalletNearImplicitAccountFund, handleRouterApiWalletRegistrationActivate, handleRouterApiWalletRegistrationNearProvisioning, handleRouterApiWalletRegistrationRespond, handleRouterApiWalletRegistrationSetup, handleRouterApiWalletRevokeAuthMethod };
|
|
2198
|
+
|
|
2199
|
+
//# sourceMappingURL=walletRegistrationRoutes.js.map
|