@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.
Files changed (1075) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +8 -0
  3. package/artifact-manifest.json +464 -0
  4. package/cloudflare-router-ab/build/deriver-a/index.js +2 -0
  5. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  6. package/cloudflare-router-ab/build/deriver-a/package.json +16 -0
  7. package/cloudflare-router-ab/build/deriver-a/worker/shim.mjs +4 -0
  8. package/cloudflare-router-ab/build/deriver-b/index.js +2 -0
  9. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  10. package/cloudflare-router-ab/build/deriver-b/package.json +16 -0
  11. package/cloudflare-router-ab/build/deriver-b/worker/shim.mjs +4 -0
  12. package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
  13. package/cloudflare-router-ab/build/router/index.js +2 -0
  14. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  15. package/cloudflare-router-ab/build/router/package.json +16 -0
  16. package/cloudflare-router-ab/build/router/worker/shim.mjs +4 -0
  17. package/cloudflare-router-ab/build/signing-worker/index.js +2 -0
  18. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  19. package/cloudflare-router-ab/build/signing-worker/package.json +16 -0
  20. package/cloudflare-router-ab/build/signing-worker/worker/shim.mjs +4 -0
  21. package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -0
  22. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  23. package/cloudflare-router-ab/build/tenant-root-control-plane/package.json +16 -0
  24. package/cloudflare-router-ab/build/tenant-root-control-plane/worker/shim.mjs +4 -0
  25. package/cloudflare-router-ab/env/tenant-root-control-plane.local.example +6 -0
  26. package/cloudflare-router-ab/migrations/deriver-a/0001_role_private_storage.sql +14 -0
  27. package/cloudflare-router-ab/migrations/deriver-a/0002_tenant_root_role_shares.sql +32 -0
  28. package/cloudflare-router-ab/migrations/deriver-a/0003_tenant_root_command_replays.sql +76 -0
  29. package/cloudflare-router-ab/migrations/deriver-a/0004_tenant_root_creation_admission.sql +7 -0
  30. package/cloudflare-router-ab/migrations/deriver-a/0005_tenant_root_refresh_state.sql +15 -0
  31. package/cloudflare-router-ab/migrations/deriver-a/0006_tenant_root_restore_import_keys.sql +119 -0
  32. package/cloudflare-router-ab/migrations/deriver-a/0007_tenant_root_restore_refresh_attempts.sql +103 -0
  33. package/cloudflare-router-ab/migrations/deriver-a/0008_tenant_root_restore_promotion.sql +40 -0
  34. package/cloudflare-router-ab/migrations/deriver-a/0009_tenant_root_restore_preactivation_cleanup.sql +8 -0
  35. package/cloudflare-router-ab/migrations/deriver-a/0010_tenant_root_recovery_attempts.sql +26 -0
  36. package/cloudflare-router-ab/migrations/deriver-a/0011_tenant_root_source_retirement.sql +100 -0
  37. package/cloudflare-router-ab/migrations/deriver-b/0001_role_private_storage.sql +14 -0
  38. package/cloudflare-router-ab/migrations/deriver-b/0002_tenant_root_role_shares.sql +32 -0
  39. package/cloudflare-router-ab/migrations/deriver-b/0003_tenant_root_command_replays.sql +76 -0
  40. package/cloudflare-router-ab/migrations/deriver-b/0004_tenant_root_creation_admission.sql +7 -0
  41. package/cloudflare-router-ab/migrations/deriver-b/0005_tenant_root_refresh_state.sql +15 -0
  42. package/cloudflare-router-ab/migrations/deriver-b/0006_tenant_root_restore_import_keys.sql +119 -0
  43. package/cloudflare-router-ab/migrations/deriver-b/0007_tenant_root_restore_refresh_attempts.sql +103 -0
  44. package/cloudflare-router-ab/migrations/deriver-b/0008_tenant_root_restore_promotion.sql +40 -0
  45. package/cloudflare-router-ab/migrations/deriver-b/0009_tenant_root_restore_preactivation_cleanup.sql +8 -0
  46. package/cloudflare-router-ab/migrations/deriver-b/0010_tenant_root_recovery_attempts.sql +26 -0
  47. package/cloudflare-router-ab/migrations/deriver-b/0011_tenant_root_source_retirement.sql +100 -0
  48. package/cloudflare-router-ab/migrations/signing-worker/0001_private_storage.sql +67 -0
  49. package/cloudflare-router-ab/migrations/signing-worker/0002_activation_revocation_fences.sql +3 -0
  50. package/cloudflare-router-ab/scripts/bootstrap-local-tenant-root.mjs +182 -0
  51. package/cloudflare-router-ab/scripts/initialize-local-wallet.mjs +17 -0
  52. package/cloudflare-router-ab/scripts/local-key-material.mjs +29 -0
  53. package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +1110 -0
  54. package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +333 -0
  55. package/cloudflare-router-ab/scripts/start-local-wallet-system.mjs +427 -0
  56. package/cloudflare-router-ab/wrangler.deriver-a.toml +123 -0
  57. package/cloudflare-router-ab/wrangler.deriver-b.toml +123 -0
  58. package/cloudflare-router-ab/wrangler.router.toml +126 -0
  59. package/cloudflare-router-ab/wrangler.signing-worker.toml +86 -0
  60. package/cloudflare-router-ab/wrangler.tenant-root-control-plane.toml +56 -0
  61. package/dist/esm/authorization/capabilityPolicy.js +96 -0
  62. package/dist/esm/authorization/domain.js +434 -0
  63. package/dist/esm/authorization/factorEvidence.js +405 -0
  64. package/dist/esm/authorization/service.js +319 -0
  65. package/dist/esm/authorization/vaultProxyUse.js +295 -0
  66. package/dist/esm/cloud-host.js +126 -0
  67. package/dist/esm/core/AuthService.js +2 -0
  68. package/dist/esm/core/EmailOtpRecords.js +361 -0
  69. package/dist/esm/core/EmailOtpStores.js +1460 -0
  70. package/dist/esm/core/IdentityStore.js +617 -0
  71. package/dist/esm/core/NearPublicKeyStore.js +242 -0
  72. package/dist/esm/core/RegistrationCeremonyStore.js +2101 -0
  73. package/dist/esm/core/SessionService.js +255 -0
  74. package/dist/esm/core/ThresholdService/config.js +111 -0
  75. package/dist/esm/core/ThresholdService/ecdsaClientRootProof.js +27 -0
  76. package/dist/esm/core/ThresholdService/evmCryptoWasm.js +167 -0
  77. package/dist/esm/core/ThresholdService/index.js +4 -0
  78. package/dist/esm/core/ThresholdService/kv.js +368 -0
  79. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +360 -0
  80. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillLiveSession.js +282 -0
  81. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +272 -0
  82. package/dist/esm/core/ThresholdService/routerAb/internalServiceHttp.js +57 -0
  83. package/dist/esm/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.js +115 -0
  84. package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +31 -0
  85. package/dist/esm/core/ThresholdService/secureRandomId.js +9 -0
  86. package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +603 -0
  87. package/dist/esm/core/ThresholdService/stores/EcdsaSigningStore.js +422 -0
  88. package/dist/esm/core/ThresholdService/stores/KeyStore.js +140 -0
  89. package/dist/esm/core/ThresholdService/stores/SessionStore.js +437 -0
  90. package/dist/esm/core/ThresholdService/stores/StoreConfig.js +13 -0
  91. package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +722 -0
  92. package/dist/esm/core/ThresholdService/validation.js +718 -0
  93. package/dist/esm/core/WalletAuthMethodStore.js +180 -0
  94. package/dist/esm/core/WalletStore.js +495 -0
  95. package/dist/esm/core/WebAuthnAuthenticatorStore.js +485 -0
  96. package/dist/esm/core/WebAuthnCredentialBindingStore.js +594 -0
  97. package/dist/esm/core/WebAuthnLoginChallengeStore.js +432 -0
  98. package/dist/esm/core/WebAuthnSyncChallengeStore.js +434 -0
  99. package/dist/esm/core/authService/AuthService.js +611 -0
  100. package/dist/esm/core/authService/bytes.js +22 -0
  101. package/dist/esm/core/authService/configValues.js +15 -0
  102. package/dist/esm/core/authService/emailOtpChallengeOperations.js +126 -0
  103. package/dist/esm/core/authService/emailOtpChallengeProof.js +214 -0
  104. package/dist/esm/core/authService/emailOtpChallengeVerification.js +335 -0
  105. package/dist/esm/core/authService/emailOtpChallenges.js +260 -0
  106. package/dist/esm/core/authService/emailOtpConfig.js +231 -0
  107. package/dist/esm/core/authService/emailOtpDelivery.js +169 -0
  108. package/dist/esm/core/authService/emailOtpEnrollment.js +141 -0
  109. package/dist/esm/core/authService/emailOtpGrant.js +74 -0
  110. package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +322 -0
  111. package/dist/esm/core/authService/emailOtpSeal.js +78 -0
  112. package/dist/esm/core/authService/emailOtpUnlock.js +264 -0
  113. package/dist/esm/core/authService/githubOAuth.js +140 -0
  114. package/dist/esm/core/authService/googleEmailOtpErrors.js +6 -0
  115. package/dist/esm/core/authService/googleEmailOtpOperations.js +141 -0
  116. package/dist/esm/core/authService/googleEmailOtpRegistration.js +674 -0
  117. package/dist/esm/core/authService/identity.js +57 -0
  118. package/dist/esm/core/authService/identityOperations.js +32 -0
  119. package/dist/esm/core/authService/nearAccountOperations.js +229 -0
  120. package/dist/esm/core/authService/nearPrivateKeySigning.js +110 -0
  121. package/dist/esm/core/authService/nearPublicKeyMetadata.js +127 -0
  122. package/dist/esm/core/authService/nearTransactions.js +139 -0
  123. package/dist/esm/core/authService/oidcVerification.js +262 -0
  124. package/dist/esm/core/authService/portableCrypto.js +19 -0
  125. package/dist/esm/core/authService/rateLimits.js +117 -0
  126. package/dist/esm/core/authService/record.js +8 -0
  127. package/dist/esm/core/authService/registrationThresholdHelpers.js +131 -0
  128. package/dist/esm/core/authService/runtime.js +45 -0
  129. package/dist/esm/core/authService/signerWasmUrls.js +20 -0
  130. package/dist/esm/core/authService/storeRegistry.js +113 -0
  131. package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +146 -0
  132. package/dist/esm/core/authService/thresholdRuntimePolicy.js +19 -0
  133. package/dist/esm/core/authService/thresholdStoreSummary.js +32 -0
  134. package/dist/esm/core/authService/walletRegistrationPlanning.js +49 -0
  135. package/dist/esm/core/authService/wasm.js +78 -0
  136. package/dist/esm/core/authService/webauthn.js +746 -0
  137. package/dist/esm/core/authService/webauthnAuthority.js +17 -0
  138. package/dist/esm/core/authService/webauthnOidcHelpers.js +91 -0
  139. package/dist/esm/core/authService/webauthnWalletBinding.js +157 -0
  140. package/dist/esm/core/config.js +110 -0
  141. package/dist/esm/core/d1IdentityStore.js +340 -0
  142. package/dist/esm/core/d1WalletAuthMethodStore.js +768 -0
  143. package/dist/esm/core/d1WalletStore.js +724 -0
  144. package/dist/esm/core/defaultConfigsServer.js +9 -0
  145. package/dist/esm/core/deviceLinking/index.js +5 -0
  146. package/dist/esm/core/deviceLinking/linkedDeviceEd25519ExportRoot.js +0 -0
  147. package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +211 -0
  148. package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +279 -0
  149. package/dist/esm/core/deviceLinking/linkedDeviceSession.js +1419 -0
  150. package/dist/esm/core/deviceLinking/requestProof.js +172 -0
  151. package/dist/esm/core/errors.js +54 -0
  152. package/dist/esm/core/hostedAccountIds.js +225 -0
  153. package/dist/esm/core/keyMaterialBrands.js +58 -0
  154. package/dist/esm/core/logger.js +39 -0
  155. package/dist/esm/core/nearKeys.js +20 -0
  156. package/dist/esm/core/nearRelayerAccountProvisioning.js +713 -0
  157. package/dist/esm/core/nearSignerWasmRuntime.js +87 -0
  158. package/dist/esm/core/registrationContracts.js +2 -0
  159. package/dist/esm/core/routerAbSigning/RouterAbEcdsaPresignRuntime.js +88 -0
  160. package/dist/esm/core/routerAbSigning/RouterAbNormalSigningRuntime.js +101 -0
  161. package/dist/esm/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.js +39 -0
  162. package/dist/esm/core/routerAbSigning/createRouterAbSigningRuntimes.js +91 -0
  163. package/dist/esm/core/rpcClients/near/NearClient.js +389 -0
  164. package/dist/esm/core/sessionValidation.js +0 -0
  165. package/dist/esm/core/signingLanes/LaneAggregateRevocationApplicationService.js +86 -0
  166. package/dist/esm/core/signingLanes/LaneEffectJournalStore.js +0 -0
  167. package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +324 -0
  168. package/dist/esm/core/signingLanes/LaneEnrollmentRevocation.js +173 -0
  169. package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +200 -0
  170. package/dist/esm/core/signingLanes/LaneLifecycleStore.js +24 -0
  171. package/dist/esm/core/signingLanes/SigningLaneStore.js +0 -0
  172. package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +296 -0
  173. package/dist/esm/core/signingLanes/WalletKeyStore.js +0 -0
  174. package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +78 -0
  175. package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +71 -0
  176. package/dist/esm/core/signingLanes/index.js +8 -0
  177. package/dist/esm/core/signingLanes/signingWorkerLaneMaterialIdentity.js +0 -0
  178. package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +305 -0
  179. package/dist/esm/core/threeRouteRegistrationContracts.js +5 -0
  180. package/dist/esm/core/thresholdEcdsaChainTarget.js +49 -0
  181. package/dist/esm/core/types.js +8 -0
  182. package/dist/esm/core/utils.js +14 -0
  183. package/dist/esm/delegateAction/index.js +136 -0
  184. package/dist/esm/hosted-wallet-gateway-worker.js +18 -0
  185. package/dist/esm/hosted-wallet-gateway.js +701 -0
  186. package/dist/esm/index.js +53 -0
  187. package/dist/esm/local-hosted-wallet-gateway-worker.js +23 -0
  188. package/dist/esm/node_modules/@near-js/types/lib/esm/provider/response.js +17 -0
  189. package/dist/esm/router/auth/authRequestValidation.js +264 -0
  190. package/dist/esm/router/auth/commonRouterUtils.js +305 -0
  191. package/dist/esm/router/auth/routerApiCredentialAuth.js +91 -0
  192. package/dist/esm/router/auth/routerApiKeyAuth.js +63 -0
  193. package/dist/esm/router/auth/walletSessionFailure.js +49 -0
  194. package/dist/esm/router/auth/webAuthnCredentialCodecs.js +107 -0
  195. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.js +84 -0
  196. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthConfig.js +321 -0
  197. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +1581 -0
  198. package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +1820 -0
  199. package/dist/esm/router/cloudflare/d1/authorization/d1VaultProxyStore.js +122 -0
  200. package/dist/esm/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.js +119 -0
  201. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +1831 -0
  202. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.js +118 -0
  203. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +81 -0
  204. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +539 -0
  205. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.js +92 -0
  206. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +560 -0
  207. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +136 -0
  208. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.js +95 -0
  209. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +91 -0
  210. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionService.js +15 -0
  211. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +732 -0
  212. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js +195 -0
  213. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetAuthenticatorStore.js +100 -0
  214. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +867 -0
  215. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.js +169 -0
  216. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +255 -0
  217. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.js +128 -0
  218. package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +15 -0
  219. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +311 -0
  220. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +21 -0
  221. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoWalletSigner.js +65 -0
  222. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +216 -0
  223. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +326 -0
  224. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +346 -0
  225. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +495 -0
  226. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.js +157 -0
  227. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +248 -0
  228. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +66 -0
  229. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.js +76 -0
  230. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +539 -0
  231. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +404 -0
  232. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +200 -0
  233. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +84 -0
  234. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +217 -0
  235. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +485 -0
  236. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +509 -0
  237. package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +51 -0
  238. package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +135 -0
  239. package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +62 -0
  240. package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +272 -0
  241. package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +132 -0
  242. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.js +628 -0
  243. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +871 -0
  244. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +823 -0
  245. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpAttemptStore.js +38 -0
  246. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +304 -0
  247. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +793 -0
  248. package/dist/esm/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.js +120 -0
  249. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +317 -0
  250. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +2084 -0
  251. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +309 -0
  252. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +120 -0
  253. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +263 -0
  254. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +3887 -0
  255. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +182 -0
  256. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +399 -0
  257. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +486 -0
  258. package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +146 -0
  259. package/dist/esm/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.js +10 -0
  260. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.js +22 -0
  261. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +167 -0
  262. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.js +38 -0
  263. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.js +20 -0
  264. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +1459 -0
  265. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLockStore.js +114 -0
  266. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.js +16 -0
  267. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +170 -0
  268. package/dist/esm/router/cloudflare/d1/signingLanes/index.js +10 -0
  269. package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +412 -0
  270. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +1396 -0
  271. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.js +285 -0
  272. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +2018 -0
  273. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +792 -0
  274. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +635 -0
  275. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +538 -0
  276. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +264 -0
  277. package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +514 -0
  278. package/dist/esm/router/cloudflare/durableObjects/versionedJsonRecordStore.js +192 -0
  279. package/dist/esm/router/cloudflare/runtime/cloudflare.types.js +0 -0
  280. package/dist/esm/router/cloudflare/runtime/cloudflareSignerWasm.js +8 -0
  281. package/dist/esm/router/cloudflare/runtime/createCloudflareRouter.js +19 -0
  282. package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +94 -0
  283. package/dist/esm/router/cloudflare/runtime/ed25519SessionAdapter.js +106 -0
  284. package/dist/esm/router/cloudflare/runtime/environment.js +25 -0
  285. package/dist/esm/router/cloudflare/runtime/routerAbPrewarm.js +34 -0
  286. package/dist/esm/router/cloudflare/runtime/routerAbServiceBindings.js +33 -0
  287. package/dist/esm/router/cloudflare/runtime/sessionAdapterRuntime.js +104 -0
  288. package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +168 -0
  289. package/dist/esm/router/cloudflare/runtime/tenantRootCreationGrant.js +147 -0
  290. package/dist/esm/router/cloudflare/runtime/walletConsoleOps.js +143 -0
  291. package/dist/esm/router/cloudflare/runtime/walletConsoleOpsClient.js +227 -0
  292. package/dist/esm/router/cloudflare/runtime/walletConsoleTenantRootLineage.js +30 -0
  293. package/dist/esm/router/cloudflare/runtime/walletControlOps.js +107 -0
  294. package/dist/esm/router/cloudflare/runtime/walletGateway.js +149 -0
  295. package/dist/esm/router/cloudflare/runtime/walletRuntimeOps.js +322 -0
  296. package/dist/esm/router/cloudflare/runtime/walletRuntimeOpsHandler.js +48 -0
  297. package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +597 -0
  298. package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +272 -0
  299. package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +477 -0
  300. package/dist/esm/router/cloudflare/signingLanes/index.js +4 -0
  301. package/dist/esm/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.js +32 -0
  302. package/dist/esm/router/cloudflare-adaptor.js +45 -0
  303. package/dist/esm/router/cloudflare.js +42794 -0
  304. package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +738 -0
  305. package/dist/esm/router/domains/ecdsa/thresholdEcdsaRequestValidation.js +134 -0
  306. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +368 -0
  307. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +624 -0
  308. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +143 -0
  309. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +270 -0
  310. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.js +31 -0
  311. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +162 -0
  312. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +1366 -0
  313. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +465 -0
  314. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +1609 -0
  315. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +540 -0
  316. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +394 -0
  317. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +572 -0
  318. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +555 -0
  319. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +268 -0
  320. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +329 -0
  321. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +423 -0
  322. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +432 -0
  323. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js +58 -0
  324. package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +0 -0
  325. package/dist/esm/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.js +0 -0
  326. package/dist/esm/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.js +275 -0
  327. package/dist/esm/router/domains/emailOtp/emailOtpExportPolicy.js +70 -0
  328. package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +34 -0
  329. package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +218 -0
  330. package/dist/esm/router/domains/emailOtp/emailOtpSessionRouteHelpers.js +210 -0
  331. package/dist/esm/router/domains/passkeyCustody/envelopeRevocationAdmission.js +26 -0
  332. package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.js +107 -0
  333. package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.js +45 -0
  334. package/dist/esm/router/domains/passkeyCustody/registrationCustodyOutcome.js +47 -0
  335. package/dist/esm/router/domains/passkeyCustody/verifiedCustodyFactor.js +46 -0
  336. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.js +32 -0
  337. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +170 -0
  338. package/dist/esm/router/domains/passkeyCustody/walletRecoveryAttempt.js +64 -0
  339. package/dist/esm/router/domains/passkeyCustody/walletRecoveryFinalization.js +652 -0
  340. package/dist/esm/router/domains/passkeyCustody/walletRecoveryKeyManifest.js +396 -0
  341. package/dist/esm/router/domains/passkeyCustody/walletRecoveryRotation.js +87 -0
  342. package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +89 -0
  343. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.js +106 -0
  344. package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +2669 -0
  345. package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +228 -0
  346. package/dist/esm/router/domains/syncAccount/syncAccountRequestValidation.js +78 -0
  347. package/dist/esm/router/domains/tenantRoot/tenantRootCustodyLineage.js +0 -0
  348. package/dist/esm/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.js +55 -0
  349. package/dist/esm/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.js +56 -0
  350. package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +111 -0
  351. package/dist/esm/router/domains/walletRegistration/walletRegistrationInputs.js +0 -0
  352. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +2199 -0
  353. package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +155 -0
  354. package/dist/esm/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.js +84 -0
  355. package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +1142 -0
  356. package/dist/esm/router/express-adaptor.js +84 -0
  357. package/dist/esm/router/express.js +26616 -0
  358. package/dist/esm/router/framework/apiCredentialPorts.js +11 -0
  359. package/dist/esm/router/framework/applyRouteMetering.js +26 -0
  360. package/dist/esm/router/framework/authServicePort.js +30 -0
  361. package/dist/esm/router/framework/enforceRoutePolicy.js +92 -0
  362. package/dist/esm/router/framework/http.js +87 -0
  363. package/dist/esm/router/framework/logger.js +7 -0
  364. package/dist/esm/router/framework/modules.js +34 -0
  365. package/dist/esm/router/framework/ror/index.js +5 -0
  366. package/dist/esm/router/framework/ror/normalize.js +57 -0
  367. package/dist/esm/router/framework/ror/options.js +33 -0
  368. package/dist/esm/router/framework/ror/provider.js +33 -0
  369. package/dist/esm/router/framework/ror/staticProvider.js +24 -0
  370. package/dist/esm/router/framework/routeAuthPolicy.js +16 -0
  371. package/dist/esm/router/framework/routeDefinitions.js +446 -0
  372. package/dist/esm/router/framework/routeExecutionContext.js +24 -0
  373. package/dist/esm/router/framework/routeExtensions.js +50 -0
  374. package/dist/esm/router/framework/routeMeteringPolicy.js +0 -0
  375. package/dist/esm/router/framework/routeRequestValidation.js +32 -0
  376. package/dist/esm/router/framework/routeResponses.js +33 -0
  377. package/dist/esm/router/framework/routerApi.js +42 -0
  378. package/dist/esm/router/framework/routerApiRouteSurface.js +54 -0
  379. package/dist/esm/router/framework/routerApiWebhooks.js +60 -0
  380. package/dist/esm/router/framework/runtimeSnapshotConsumer.js +145 -0
  381. package/dist/esm/router/framework/versionedJsonRecordStore.js +0 -0
  382. package/dist/esm/router/ror-adaptor.js +5 -0
  383. package/dist/esm/router/ror.js +178 -0
  384. package/dist/esm/router/transport/fetch/createFetchRouter.js +309 -0
  385. package/dist/esm/router/transport/fetch/fetchRouter.types.js +0 -0
  386. package/dist/esm/router/transport/fetch/routes/auth.js +219 -0
  387. package/dist/esm/router/transport/fetch/routes/deviceLinking.js +1196 -0
  388. package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +264 -0
  389. package/dist/esm/router/transport/fetch/routes/deviceManagement.js +289 -0
  390. package/dist/esm/router/transport/fetch/routes/health.js +42 -0
  391. package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +39 -0
  392. package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +118 -0
  393. package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +1618 -0
  394. package/dist/esm/router/transport/fetch/routes/sessions.js +1033 -0
  395. package/dist/esm/router/transport/fetch/routes/syncAccount.js +187 -0
  396. package/dist/esm/router/transport/fetch/routes/syncAccountBootstrap.js +214 -0
  397. package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +1729 -0
  398. package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +1321 -0
  399. package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +228 -0
  400. package/dist/esm/router/transport/fetch/routes/walletRegistration.js +73 -0
  401. package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +43 -0
  402. package/dist/esm/router/transport/fetch/routes/wellKnown.js +48 -0
  403. package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +224 -0
  404. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +134 -0
  405. package/dist/esm/shared-ts/src/authorization/index.js +6 -0
  406. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +58 -0
  407. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +802 -0
  408. package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +18 -0
  409. package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +5 -0
  410. package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +332 -0
  411. package/dist/esm/shared-ts/src/device-linking/contracts.js +8 -0
  412. package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +132 -0
  413. package/dist/esm/shared-ts/src/device-linking/digests.js +273 -0
  414. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +158 -0
  415. package/dist/esm/shared-ts/src/device-linking/index.js +9 -0
  416. package/dist/esm/shared-ts/src/device-linking/parsers.js +1412 -0
  417. package/dist/esm/shared-ts/src/device-linking/requestProof.js +114 -0
  418. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +563 -0
  419. package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +207 -0
  420. package/dist/esm/shared-ts/src/near/actions.js +75 -0
  421. package/dist/esm/shared-ts/src/passkey-custody/ceremonyCommitPayload.js +69 -0
  422. package/dist/esm/shared-ts/src/passkey-custody/credentialActivity.js +81 -0
  423. package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +272 -0
  424. package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +175 -0
  425. package/dist/esm/shared-ts/src/passkey-custody/index.js +5 -0
  426. package/dist/esm/shared-ts/src/passkey-custody/primitives.js +92 -0
  427. package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +53 -0
  428. package/dist/esm/shared-ts/src/signing-lanes/execution.js +14 -0
  429. package/dist/esm/shared-ts/src/signing-lanes/index.js +11 -0
  430. package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +1 -0
  431. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +91 -0
  432. package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +124 -0
  433. package/dist/esm/shared-ts/src/signing-lanes/participants.js +262 -0
  434. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +143 -0
  435. package/dist/esm/shared-ts/src/signing-lanes/rotation.js +8 -0
  436. package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +397 -0
  437. package/dist/esm/shared-ts/src/signing-lanes/rotationLifecycle.js +313 -0
  438. package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +1620 -0
  439. package/dist/esm/shared-ts/src/tenant-root/index.js +2 -0
  440. package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentity.js +198 -0
  441. package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +440 -0
  442. package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +85 -0
  443. package/dist/esm/shared-ts/src/threshold/participants.js +26 -0
  444. package/dist/esm/shared-ts/src/threshold/sessionPolicy.js +9 -0
  445. package/dist/esm/shared-ts/src/threshold/signingRootScope.js +40 -0
  446. package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +104 -0
  447. package/dist/esm/shared-ts/src/utils/addWalletAuthMethod.js +36 -0
  448. package/dist/esm/shared-ts/src/utils/base58.js +28 -0
  449. package/dist/esm/shared-ts/src/utils/base64.js +70 -0
  450. package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +27 -0
  451. package/dist/esm/shared-ts/src/utils/digests.js +33 -0
  452. package/dist/esm/shared-ts/src/utils/domainIds.js +309 -0
  453. package/dist/esm/shared-ts/src/utils/ecdsaCapabilityActivation.js +34 -0
  454. package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +46 -0
  455. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +38 -0
  456. package/dist/esm/shared-ts/src/utils/emailOtpRecoveryKey.js +10 -0
  457. package/dist/esm/shared-ts/src/utils/encoders.js +2 -0
  458. package/dist/esm/shared-ts/src/utils/errors.js +88 -0
  459. package/dist/esm/shared-ts/src/utils/evmRpcResults.js +97 -0
  460. package/dist/esm/shared-ts/src/utils/jsonRpc.js +64 -0
  461. package/dist/esm/shared-ts/src/utils/keccak.js +150 -0
  462. package/dist/esm/shared-ts/src/utils/near.js +99 -0
  463. package/dist/esm/shared-ts/src/utils/nearRpcResults.js +205 -0
  464. package/dist/esm/shared-ts/src/utils/normalize.js +87 -0
  465. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +201 -0
  466. package/dist/esm/shared-ts/src/utils/registrationIntent.js +1268 -0
  467. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1655 -0
  468. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +984 -0
  469. package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +118 -0
  470. package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +138 -0
  471. package/dist/esm/shared-ts/src/utils/routerAbTraceContext.js +36 -0
  472. package/dist/esm/shared-ts/src/utils/secureRandomId.js +35 -0
  473. package/dist/esm/shared-ts/src/utils/signingSessionSeal.js +118 -0
  474. package/dist/esm/shared-ts/src/utils/thresholdEcdsaKeyHandle.js +28 -0
  475. package/dist/esm/shared-ts/src/utils/validation.js +23 -0
  476. package/dist/esm/shared-ts/src/utils/walletAddSignerActivation.js +32 -0
  477. package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +207 -0
  478. package/dist/esm/shared-ts/src/utils/walletSessionFailure.js +15 -0
  479. package/dist/esm/shared-ts/src/utils/webauthnDeviceInfo.js +207 -0
  480. package/dist/esm/shared-ts/src/wallet-recovery/backupAcknowledgement.js +66 -0
  481. package/dist/esm/shared-ts/src/wallet-recovery/index.js +10 -0
  482. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeIssuance.js +1 -0
  483. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +34 -0
  484. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +80 -0
  485. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodes.js +4 -0
  486. package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +53 -0
  487. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +108 -0
  488. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +157 -0
  489. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +233 -0
  490. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryRotation.js +3 -0
  491. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryTarget.js +29 -0
  492. package/dist/esm/storage/d1Sql.js +85 -0
  493. package/dist/esm/storage/tenantRoute.js +89 -0
  494. package/dist/esm/tenant-root.js +5 -0
  495. package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +204 -0
  496. package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +87 -0
  497. package/dist/esm/threshold/session/signingSessionSeal/guards/backends.js +192 -0
  498. package/dist/esm/threshold/session/signingSessionSeal/guards/index.js +121 -0
  499. package/dist/esm/threshold/session/signingSessionSeal/idempotency.js +38 -0
  500. package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +131 -0
  501. package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +55 -0
  502. package/dist/esm/threshold/session/signingSessionSeal/index.js +13 -0
  503. package/dist/esm/threshold/session/signingSessionSeal/observability/audit.js +38 -0
  504. package/dist/esm/threshold/session/signingSessionSeal/options.js +54 -0
  505. package/dist/esm/threshold/session/signingSessionSeal/routesOptions.js +45 -0
  506. package/dist/esm/threshold/session/signingSessionSeal/service.js +316 -0
  507. package/dist/esm/threshold/session/signingSessionSeal/signingSessionSeal.types.js +0 -0
  508. package/dist/esm/threshold/session/signingSessionSeal/transport/express.js +151 -0
  509. package/dist/esm/threshold/session/signingSessionSeal/transport/fetch.js +106 -0
  510. package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +159 -0
  511. package/dist/esm/threshold/statusCodes.js +39 -0
  512. package/dist/esm/wasm/evm_crypto/pkg/evm_crypto.js +601 -0
  513. package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
  514. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +1078 -0
  515. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  516. package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker.js +503 -0
  517. package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
  518. package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime.js +393 -0
  519. package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime_bg.wasm +0 -0
  520. package/dist/esm/wasm/signer.js +2 -0
  521. package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +147 -0
  522. package/dist/types/shared-ts/src/authorization/capabilityKinds.typecheck.d.ts +2 -0
  523. package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +44 -0
  524. package/dist/types/shared-ts/src/authorization/index.d.ts +7 -0
  525. package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +39 -0
  526. package/dist/types/shared-ts/src/authorization/operationFingerprint.typecheck.d.ts +2 -0
  527. package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +168 -0
  528. package/dist/types/shared-ts/src/authorization/walletAuthority.typecheck.d.ts +2 -0
  529. package/dist/types/shared-ts/src/authorization/walletCustodyOperation.d.ts +10 -0
  530. package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +28 -0
  531. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -0
  532. package/dist/types/shared-ts/src/device-linking/activeWalletSession.typecheck.d.ts +2 -0
  533. package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +71 -0
  534. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +843 -0
  535. package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -0
  536. package/dist/types/shared-ts/src/device-linking/delegatedActivationPlan.d.ts +37 -0
  537. package/dist/types/shared-ts/src/device-linking/digests.d.ts +23 -0
  538. package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +93 -0
  539. package/dist/types/shared-ts/src/device-linking/index.d.ts +11 -0
  540. package/dist/types/shared-ts/src/device-linking/parsers.d.ts +124 -0
  541. package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +26 -0
  542. package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +182 -0
  543. package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +84 -0
  544. package/dist/types/shared-ts/src/index.d.ts +10 -0
  545. package/dist/types/shared-ts/src/near/actions.d.ts +141 -0
  546. package/dist/types/shared-ts/src/near/delegate.d.ts +55 -0
  547. package/dist/types/shared-ts/src/near/index.d.ts +3 -0
  548. package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +211 -0
  549. package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +49 -0
  550. package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +74 -0
  551. package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +191 -0
  552. package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +140 -0
  553. package/dist/types/shared-ts/src/passkey-custody/envelopeIndex.d.ts +29 -0
  554. package/dist/types/shared-ts/src/passkey-custody/index.d.ts +9 -0
  555. package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +34 -0
  556. package/dist/types/shared-ts/src/passkey-custody/passkeyCustody.typecheck.d.ts +2 -0
  557. package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +34 -0
  558. package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +27 -0
  559. package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +91 -0
  560. package/dist/types/shared-ts/src/signing-lanes/execution.typecheck.d.ts +2 -0
  561. package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +18 -0
  562. package/dist/types/shared-ts/src/signing-lanes/index.d.ts +14 -0
  563. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +62 -0
  564. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +2 -0
  565. package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +30 -0
  566. package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.typecheck.d.ts +2 -0
  567. package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +48 -0
  568. package/dist/types/shared-ts/src/signing-lanes/participantDigest.typecheck.d.ts +2 -0
  569. package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +89 -0
  570. package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +128 -0
  571. package/dist/types/shared-ts/src/signing-lanes/records.d.ts +160 -0
  572. package/dist/types/shared-ts/src/signing-lanes/records.typecheck.d.ts +2 -0
  573. package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +894 -0
  574. package/dist/types/shared-ts/src/signing-lanes/rotation.typecheck.d.ts +2 -0
  575. package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +32 -0
  576. package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +99 -0
  577. package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +67 -0
  578. package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +11 -0
  579. package/dist/types/shared-ts/src/tenant-root/index.d.ts +3 -0
  580. package/dist/types/shared-ts/src/tenant-root/tenantRootIdentity.d.ts +72 -0
  581. package/dist/types/shared-ts/src/tenant-root/tenantRootOperationRecord.d.ts +192 -0
  582. package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +77 -0
  583. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +130 -0
  584. package/dist/types/shared-ts/src/threshold/index.d.ts +7 -0
  585. package/dist/types/shared-ts/src/threshold/participants.d.ts +38 -0
  586. package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +39 -0
  587. package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +5 -0
  588. package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +24 -0
  589. package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +63 -0
  590. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +295 -0
  591. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +11 -0
  592. package/dist/types/shared-ts/src/utils/authenticatorOptions.d.ts +25 -0
  593. package/dist/types/shared-ts/src/utils/base58.d.ts +17 -0
  594. package/dist/types/shared-ts/src/utils/base64.d.ts +53 -0
  595. package/dist/types/shared-ts/src/utils/bigint.d.ts +3 -0
  596. package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +12 -0
  597. package/dist/types/shared-ts/src/utils/digests.d.ts +6 -0
  598. package/dist/types/shared-ts/src/utils/domainIds.d.ts +140 -0
  599. package/dist/types/shared-ts/src/utils/domainIds.typecheck.d.ts +2 -0
  600. package/dist/types/shared-ts/src/utils/ecdsaCapabilityActivation.d.ts +29 -0
  601. package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +24 -0
  602. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +30 -0
  603. package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +31 -0
  604. package/dist/types/shared-ts/src/utils/encoders.d.ts +3 -0
  605. package/dist/types/shared-ts/src/utils/errors.d.ts +44 -0
  606. package/dist/types/shared-ts/src/utils/evmRpcResults.d.ts +31 -0
  607. package/dist/types/shared-ts/src/utils/generated/routerAbEd25519YaoCore.d.ts +128 -0
  608. package/dist/types/shared-ts/src/utils/index.d.ts +34 -0
  609. package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +30 -0
  610. package/dist/types/shared-ts/src/utils/keccak.d.ts +2 -0
  611. package/dist/types/shared-ts/src/utils/near.d.ts +81 -0
  612. package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +101 -0
  613. package/dist/types/shared-ts/src/utils/normalize.d.ts +57 -0
  614. package/dist/types/shared-ts/src/utils/paillier.d.ts +37 -0
  615. package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +12 -0
  616. package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +85 -0
  617. package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +621 -0
  618. package/dist/types/shared-ts/src/utils/registrationIntent.typecheck.d.ts +2 -0
  619. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +715 -0
  620. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.typecheck.d.ts +2 -0
  621. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivationRefresh.typecheck.d.ts +2 -0
  622. package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +339 -0
  623. package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.typecheck.d.ts +2 -0
  624. package/dist/types/shared-ts/src/utils/routerAbNormalSigningIdentity.d.ts +71 -0
  625. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +51 -0
  626. package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +16 -0
  627. package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +6 -0
  628. package/dist/types/shared-ts/src/utils/signerDomain.d.ts +75 -0
  629. package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +2 -0
  630. package/dist/types/shared-ts/src/utils/signerSlot.d.ts +11 -0
  631. package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +153 -0
  632. package/dist/types/shared-ts/src/utils/signingSessionSeal.typecheck.d.ts +2 -0
  633. package/dist/types/shared-ts/src/utils/theme.d.ts +2 -0
  634. package/dist/types/shared-ts/src/utils/thresholdEcdsaKeyHandle.d.ts +11 -0
  635. package/dist/types/shared-ts/src/utils/validation.d.ts +35 -0
  636. package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +23 -0
  637. package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +150 -0
  638. package/dist/types/shared-ts/src/utils/walletAuthAuthority.typecheck.d.ts +2 -0
  639. package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +106 -0
  640. package/dist/types/shared-ts/src/utils/walletCapabilityBindings.typecheck.d.ts +2 -0
  641. package/dist/types/shared-ts/src/utils/walletSessionFailure.d.ts +13 -0
  642. package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +48 -0
  643. package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +56 -0
  644. package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +10 -0
  645. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeAttempt.d.ts +59 -0
  646. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeIssuance.d.ts +37 -0
  647. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +22 -0
  648. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +79 -0
  649. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodes.d.ts +11 -0
  650. package/dist/types/shared-ts/src/wallet-recovery/recoveryEnvelopes.d.ts +42 -0
  651. package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +37 -0
  652. package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +58 -0
  653. package/dist/types/shared-ts/src/wallet-recovery/walletRecovery.typecheck.d.ts +2 -0
  654. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +110 -0
  655. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +29 -0
  656. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +115 -0
  657. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryRotation.d.ts +18 -0
  658. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.d.ts +12 -0
  659. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.typecheck.d.ts +2 -0
  660. package/dist/types/wallet-server/src/authorization/capabilityPolicy.d.ts +45 -0
  661. package/dist/types/wallet-server/src/authorization/capabilityPolicy.typecheck.d.ts +2 -0
  662. package/dist/types/wallet-server/src/authorization/domain.d.ts +454 -0
  663. package/dist/types/wallet-server/src/authorization/domain.typecheck.d.ts +2 -0
  664. package/dist/types/wallet-server/src/authorization/factorEvidence.d.ts +165 -0
  665. package/dist/types/wallet-server/src/authorization/factorEvidence.typecheck.d.ts +2 -0
  666. package/dist/types/wallet-server/src/authorization/service.d.ts +227 -0
  667. package/dist/types/wallet-server/src/authorization/vaultProxyUse.d.ts +75 -0
  668. package/dist/types/wallet-server/src/cloud-host.d.ts +94 -0
  669. package/dist/types/wallet-server/src/core/AuthService.d.ts +3 -0
  670. package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +33 -0
  671. package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +336 -0
  672. package/dist/types/wallet-server/src/core/IdentityStore.d.ts +57 -0
  673. package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +58 -0
  674. package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +551 -0
  675. package/dist/types/wallet-server/src/core/SessionService.d.ts +70 -0
  676. package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +23 -0
  677. package/dist/types/wallet-server/src/core/ThresholdService/ecdsaClientRootProof.d.ts +12 -0
  678. package/dist/types/wallet-server/src/core/ThresholdService/evmCryptoWasm.d.ts +32 -0
  679. package/dist/types/wallet-server/src/core/ThresholdService/index.d.ts +4 -0
  680. package/dist/types/wallet-server/src/core/ThresholdService/kv.d.ts +52 -0
  681. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +45 -0
  682. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillLiveSession.d.ts +93 -0
  683. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +138 -0
  684. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +30 -0
  685. package/dist/types/wallet-server/src/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.d.ts +17 -0
  686. package/dist/types/wallet-server/src/core/ThresholdService/routerAbNormalSigningPolicy.d.ts +21 -0
  687. package/dist/types/wallet-server/src/core/ThresholdService/secureRandomId.d.ts +2 -0
  688. package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +128 -0
  689. package/dist/types/wallet-server/src/core/ThresholdService/stores/EcdsaSigningStore.d.ts +76 -0
  690. package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +39 -0
  691. package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +102 -0
  692. package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +3 -0
  693. package/dist/types/wallet-server/src/core/ThresholdService/stores/ThresholdStoreConfig.typecheck.d.ts +2 -0
  694. package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +98 -0
  695. package/dist/types/wallet-server/src/core/ThresholdService/thresholdEd25519AuthorityScope.typecheck.d.ts +2 -0
  696. package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +193 -0
  697. package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +12 -0
  698. package/dist/types/wallet-server/src/core/WalletStore.d.ts +143 -0
  699. package/dist/types/wallet-server/src/core/WalletStore.typecheck.d.ts +2 -0
  700. package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +62 -0
  701. package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +116 -0
  702. package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.typecheck.d.ts +13 -0
  703. package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +50 -0
  704. package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +50 -0
  705. package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +493 -0
  706. package/dist/types/wallet-server/src/core/authService/bytes.d.ts +4 -0
  707. package/dist/types/wallet-server/src/core/authService/configValues.d.ts +7 -0
  708. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +108 -0
  709. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +177 -0
  710. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +46 -0
  711. package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +110 -0
  712. package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +34 -0
  713. package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +65 -0
  714. package/dist/types/wallet-server/src/core/authService/emailOtpEnrollment.d.ts +79 -0
  715. package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +42 -0
  716. package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +116 -0
  717. package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +35 -0
  718. package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +70 -0
  719. package/dist/types/wallet-server/src/core/authService/githubOAuth.d.ts +35 -0
  720. package/dist/types/wallet-server/src/core/authService/googleEmailOtpErrors.d.ts +2 -0
  721. package/dist/types/wallet-server/src/core/authService/googleEmailOtpOperations.d.ts +126 -0
  722. package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +172 -0
  723. package/dist/types/wallet-server/src/core/authService/identity.d.ts +25 -0
  724. package/dist/types/wallet-server/src/core/authService/identityOperations.d.ts +19 -0
  725. package/dist/types/wallet-server/src/core/authService/nearAccountOperations.d.ts +55 -0
  726. package/dist/types/wallet-server/src/core/authService/nearPrivateKeySigning.d.ts +16 -0
  727. package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +43 -0
  728. package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +49 -0
  729. package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +65 -0
  730. package/dist/types/wallet-server/src/core/authService/portableCrypto.d.ts +3 -0
  731. package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +30 -0
  732. package/dist/types/wallet-server/src/core/authService/record.d.ts +2 -0
  733. package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +37 -0
  734. package/dist/types/wallet-server/src/core/authService/runtime.d.ts +20 -0
  735. package/dist/types/wallet-server/src/core/authService/signerWasmUrls.d.ts +3 -0
  736. package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +58 -0
  737. package/dist/types/wallet-server/src/core/authService/thresholdEcdsaKeyInventory.d.ts +72 -0
  738. package/dist/types/wallet-server/src/core/authService/thresholdRuntimePolicy.d.ts +4 -0
  739. package/dist/types/wallet-server/src/core/authService/thresholdStoreSummary.d.ts +3 -0
  740. package/dist/types/wallet-server/src/core/authService/walletRegistrationPlanning.d.ts +19 -0
  741. package/dist/types/wallet-server/src/core/authService/wasm.d.ts +12 -0
  742. package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +207 -0
  743. package/dist/types/wallet-server/src/core/authService/webauthnAuthority.d.ts +5 -0
  744. package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +52 -0
  745. package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +48 -0
  746. package/dist/types/wallet-server/src/core/config.d.ts +13 -0
  747. package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +44 -0
  748. package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +214 -0
  749. package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +108 -0
  750. package/dist/types/wallet-server/src/core/defaultConfigsServer.d.ts +5 -0
  751. package/dist/types/wallet-server/src/core/deviceLinking/index.d.ts +5 -0
  752. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEd25519ExportRoot.d.ts +36 -0
  753. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEmailOtpGrant.d.ts +87 -0
  754. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceManagement.d.ts +137 -0
  755. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +462 -0
  756. package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +55 -0
  757. package/dist/types/wallet-server/src/core/errors.d.ts +10 -0
  758. package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +31 -0
  759. package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +28 -0
  760. package/dist/types/wallet-server/src/core/keyMaterialBrands.typecheck.d.ts +2 -0
  761. package/dist/types/wallet-server/src/core/logger.d.ts +21 -0
  762. package/dist/types/wallet-server/src/core/nearKeys.d.ts +3 -0
  763. package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +78 -0
  764. package/dist/types/wallet-server/src/core/nearSignerWasmRuntime.d.ts +3 -0
  765. package/dist/types/wallet-server/src/core/registrationContracts.d.ts +747 -0
  766. package/dist/types/wallet-server/src/core/registrationRequests.typecheck.d.ts +2 -0
  767. package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbEcdsaPresignRuntime.d.ts +53 -0
  768. package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +71 -0
  769. package/dist/types/wallet-server/src/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.d.ts +28 -0
  770. package/dist/types/wallet-server/src/core/routerAbSigning/createRouterAbSigningRuntimes.d.ts +16 -0
  771. package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +134 -0
  772. package/dist/types/wallet-server/src/core/sessionValidation.d.ts +9 -0
  773. package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +35 -0
  774. package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +63 -0
  775. package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentActivation.d.ts +13 -0
  776. package/dist/types/wallet-server/src/core/signingLanes/LaneEnrollmentRevocation.d.ts +24 -0
  777. package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleApplicationService.d.ts +141 -0
  778. package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +229 -0
  779. package/dist/types/wallet-server/src/core/signingLanes/SigningLaneStore.d.ts +15 -0
  780. package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +59 -0
  781. package/dist/types/wallet-server/src/core/signingLanes/WalletKeyStore.d.ts +13 -0
  782. package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +58 -0
  783. package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +30 -0
  784. package/dist/types/wallet-server/src/core/signingLanes/index.d.ts +11 -0
  785. package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +21 -0
  786. package/dist/types/wallet-server/src/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.d.ts +155 -0
  787. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +442 -0
  788. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +58 -0
  789. package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +15 -0
  790. package/dist/types/wallet-server/src/core/types.d.ts +757 -0
  791. package/dist/types/wallet-server/src/core/utils.d.ts +3 -0
  792. package/dist/types/wallet-server/src/delegateAction/index.d.ts +88 -0
  793. package/dist/types/wallet-server/src/hosted-wallet-gateway-worker.d.ts +10 -0
  794. package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +126 -0
  795. package/dist/types/wallet-server/src/index.d.ts +34 -0
  796. package/dist/types/wallet-server/src/local-hosted-wallet-gateway-worker.d.ts +13 -0
  797. package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +97 -0
  798. package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +142 -0
  799. package/dist/types/wallet-server/src/router/auth/routerApiCredentialAuth.d.ts +26 -0
  800. package/dist/types/wallet-server/src/router/auth/routerApiKeyAuth.d.ts +16 -0
  801. package/dist/types/wallet-server/src/router/auth/walletSessionFailure.d.ts +14 -0
  802. package/dist/types/wallet-server/src/router/auth/webAuthnCredentialCodecs.d.ts +20 -0
  803. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +28 -0
  804. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +192 -0
  805. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +13 -0
  806. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +174 -0
  807. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1VaultProxyStore.d.ts +13 -0
  808. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.d.ts +24 -0
  809. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +241 -0
  810. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEd25519ExportRootStore.d.ts +23 -0
  811. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +32 -0
  812. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.d.ts +118 -0
  813. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.d.ts +22 -0
  814. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.d.ts +80 -0
  815. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.d.ts +29 -0
  816. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRouteService.d.ts +17 -0
  817. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.d.ts +37 -0
  818. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionService.d.ts +12 -0
  819. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +149 -0
  820. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.d.ts +38 -0
  821. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetAuthenticatorStore.d.ts +19 -0
  822. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +220 -0
  823. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +88 -0
  824. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.d.ts +54 -0
  825. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.d.ts +23 -0
  826. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/index.d.ts +15 -0
  827. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.d.ts +33 -0
  828. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts +6 -0
  829. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoWalletSigner.d.ts +27 -0
  830. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +80 -0
  831. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.d.ts +48 -0
  832. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +64 -0
  833. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +126 -0
  834. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.d.ts +22 -0
  835. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +68 -0
  836. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +15 -0
  837. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +37 -0
  838. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +186 -0
  839. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.d.ts +45 -0
  840. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.d.ts +124 -0
  841. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.d.ts +24 -0
  842. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +51 -0
  843. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +69 -0
  844. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.d.ts +57 -0
  845. package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityRecords.d.ts +38 -0
  846. package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityService.d.ts +31 -0
  847. package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +30 -0
  848. package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcBoundary.d.ts +60 -0
  849. package/dist/types/wallet-server/src/router/cloudflare/d1/oidc/d1OidcVerificationService.d.ts +39 -0
  850. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.d.ts +335 -0
  851. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +448 -0
  852. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +256 -0
  853. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpAttemptStore.d.ts +32 -0
  854. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.d.ts +116 -0
  855. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.d.ts +180 -0
  856. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.d.ts +24 -0
  857. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +86 -0
  858. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +121 -0
  859. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +84 -0
  860. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationIntentService.d.ts +31 -0
  861. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +49 -0
  862. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +369 -0
  863. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +106 -0
  864. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +104 -0
  865. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +70 -0
  866. package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +26 -0
  867. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1EcdsaLanePrivateBindingResolver.d.ts +4 -0
  868. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneAggregateRevocationApplicationService.d.ts +4 -0
  869. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +25 -0
  870. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEnrollmentGateway.d.ts +20 -0
  871. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleApplicationService.d.ts +13 -0
  872. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.d.ts +51 -0
  873. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneLockStore.d.ts +28 -0
  874. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneProtocolCommitter.d.ts +5 -0
  875. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneRecords.d.ts +107 -0
  876. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/index.d.ts +10 -0
  877. package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +118 -0
  878. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +114 -0
  879. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.typecheck.d.ts +2 -0
  880. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.d.ts +90 -0
  881. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +359 -0
  882. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +143 -0
  883. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.d.ts +42 -0
  884. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +135 -0
  885. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +89 -0
  886. package/dist/types/wallet-server/src/router/cloudflare/durableObjects/thresholdStore.d.ts +19 -0
  887. package/dist/types/wallet-server/src/router/cloudflare/durableObjects/versionedJsonRecordStore.d.ts +32 -0
  888. package/dist/types/wallet-server/src/router/cloudflare/runtime/cloudflare.types.d.ts +30 -0
  889. package/dist/types/wallet-server/src/router/cloudflare/runtime/cloudflareSignerWasm.d.ts +2 -0
  890. package/dist/types/wallet-server/src/router/cloudflare/runtime/createCloudflareRouter.d.ts +5 -0
  891. package/dist/types/wallet-server/src/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.d.ts +23 -0
  892. package/dist/types/wallet-server/src/router/cloudflare/runtime/ed25519SessionAdapter.d.ts +16 -0
  893. package/dist/types/wallet-server/src/router/cloudflare/runtime/environment.d.ts +5 -0
  894. package/dist/types/wallet-server/src/router/cloudflare/runtime/routerAbPrewarm.d.ts +9 -0
  895. package/dist/types/wallet-server/src/router/cloudflare/runtime/routerAbServiceBindings.d.ts +11 -0
  896. package/dist/types/wallet-server/src/router/cloudflare/runtime/sessionAdapterRuntime.d.ts +28 -0
  897. package/dist/types/wallet-server/src/router/cloudflare/runtime/staticWalletConsoleBinding.d.ts +27 -0
  898. package/dist/types/wallet-server/src/router/cloudflare/runtime/tenantRootCreationGrant.d.ts +24 -0
  899. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +143 -0
  900. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOpsClient.d.ts +20 -0
  901. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleTenantRootLineage.d.ts +7 -0
  902. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletControlOps.d.ts +21 -0
  903. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +30 -0
  904. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRuntimeOps.d.ts +64 -0
  905. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletRuntimeOpsHandler.d.ts +3 -0
  906. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.d.ts +217 -0
  907. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.d.ts +73 -0
  908. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +100 -0
  909. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/index.d.ts +4 -0
  910. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/linkedDeviceEd25519CeremonyBinding.d.ts +6 -0
  911. package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +75 -0
  912. package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +199 -0
  913. package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +32 -0
  914. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +172 -0
  915. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.typecheck.d.ts +2 -0
  916. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +156 -0
  917. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +59 -0
  918. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.d.ts +47 -0
  919. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.d.ts +29 -0
  920. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +20 -0
  921. package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +271 -0
  922. package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.d.ts +12 -0
  923. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +509 -0
  924. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryActivation.typecheck.d.ts +2 -0
  925. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.d.ts +14 -0
  926. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.d.ts +20 -0
  927. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +56 -0
  928. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +200 -0
  929. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +70 -0
  930. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +73 -0
  931. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +9 -0
  932. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +131 -0
  933. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.typecheck.d.ts +2 -0
  934. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.d.ts +62 -0
  935. package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +17 -0
  936. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +178 -0
  937. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.typecheck.d.ts +2 -0
  938. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.d.ts +19 -0
  939. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpExportPolicy.d.ts +32 -0
  940. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRequestValidation.d.ts +13 -0
  941. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRouteHandlers.d.ts +35 -0
  942. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpSessionRouteHelpers.d.ts +134 -0
  943. package/dist/types/wallet-server/src/router/domains/passkeyCustody/envelopeRevocationAdmission.d.ts +31 -0
  944. package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +85 -0
  945. package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.d.ts +42 -0
  946. package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +38 -0
  947. package/dist/types/wallet-server/src/router/domains/passkeyCustody/verifiedCustodyFactor.d.ts +35 -0
  948. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +56 -0
  949. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +65 -0
  950. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryAttempt.d.ts +59 -0
  951. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryFinalization.d.ts +81 -0
  952. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +184 -0
  953. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryRotation.d.ts +31 -0
  954. package/dist/types/wallet-server/src/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.d.ts +32 -0
  955. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.d.ts +48 -0
  956. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +909 -0
  957. package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +104 -0
  958. package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +30 -0
  959. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootCustodyLineage.d.ts +14 -0
  960. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.d.ts +35 -0
  961. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.d.ts +35 -0
  962. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootIdentityResolution.d.ts +56 -0
  963. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +78 -0
  964. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +91 -0
  965. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +105 -0
  966. package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.d.ts +39 -0
  967. package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRouteHandlers.d.ts +172 -0
  968. package/dist/types/wallet-server/src/router/express-adaptor.d.ts +22 -0
  969. package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +82 -0
  970. package/dist/types/wallet-server/src/router/framework/applyRouteMetering.d.ts +23 -0
  971. package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +1392 -0
  972. package/dist/types/wallet-server/src/router/framework/enforceRoutePolicy.d.ts +48 -0
  973. package/dist/types/wallet-server/src/router/framework/http.d.ts +12 -0
  974. package/dist/types/wallet-server/src/router/framework/logger.d.ts +5 -0
  975. package/dist/types/wallet-server/src/router/framework/modules.d.ts +17 -0
  976. package/dist/types/wallet-server/src/router/framework/ror/index.d.ts +7 -0
  977. package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +14 -0
  978. package/dist/types/wallet-server/src/router/framework/ror/options.d.ts +9 -0
  979. package/dist/types/wallet-server/src/router/framework/ror/provider.d.ts +17 -0
  980. package/dist/types/wallet-server/src/router/framework/ror/staticProvider.d.ts +11 -0
  981. package/dist/types/wallet-server/src/router/framework/routeAuthPolicy.d.ts +34 -0
  982. package/dist/types/wallet-server/src/router/framework/routeDefinitions.d.ts +27 -0
  983. package/dist/types/wallet-server/src/router/framework/routeDefinitions.typecheck.d.ts +2 -0
  984. package/dist/types/wallet-server/src/router/framework/routeExecutionContext.d.ts +29 -0
  985. package/dist/types/wallet-server/src/router/framework/routeExtensions.d.ts +27 -0
  986. package/dist/types/wallet-server/src/router/framework/routeMeteringPolicy.d.ts +17 -0
  987. package/dist/types/wallet-server/src/router/framework/routeRequestValidation.d.ts +5 -0
  988. package/dist/types/wallet-server/src/router/framework/routeResponses.d.ts +17 -0
  989. package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +221 -0
  990. package/dist/types/wallet-server/src/router/framework/routerApiRouteSurface.d.ts +14 -0
  991. package/dist/types/wallet-server/src/router/framework/routerApiWebhooks.d.ts +12 -0
  992. package/dist/types/wallet-server/src/router/framework/runtimeSnapshotConsumer.d.ts +28 -0
  993. package/dist/types/wallet-server/src/router/framework/versionedJsonRecordStore.d.ts +20 -0
  994. package/dist/types/wallet-server/src/router/ror-adaptor.d.ts +3 -0
  995. package/dist/types/wallet-server/src/router/transport/fetch/createFetchRouter.d.ts +8 -0
  996. package/dist/types/wallet-server/src/router/transport/fetch/fetchRouter.types.d.ts +23 -0
  997. package/dist/types/wallet-server/src/router/transport/fetch/routes/auth.d.ts +3 -0
  998. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +202 -0
  999. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +92 -0
  1000. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceManagement.d.ts +29 -0
  1001. package/dist/types/wallet-server/src/router/transport/fetch/routes/health.d.ts +4 -0
  1002. package/dist/types/wallet-server/src/router/transport/fetch/routes/nearPublicKeys.d.ts +3 -0
  1003. package/dist/types/wallet-server/src/router/transport/fetch/routes/normalSigningRouterProxy.d.ts +33 -0
  1004. package/dist/types/wallet-server/src/router/transport/fetch/routes/passkeyCustody.d.ts +66 -0
  1005. package/dist/types/wallet-server/src/router/transport/fetch/routes/sessions.d.ts +31 -0
  1006. package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccount.d.ts +3 -0
  1007. package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +128 -0
  1008. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +87 -0
  1009. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEd25519.d.ts +47 -0
  1010. package/dist/types/wallet-server/src/router/transport/fetch/routes/walletExecutionLanePreflight.d.ts +4 -0
  1011. package/dist/types/wallet-server/src/router/transport/fetch/routes/walletRegistration.d.ts +3 -0
  1012. package/dist/types/wallet-server/src/router/transport/fetch/routes/webauthnAuthenticators.d.ts +3 -0
  1013. package/dist/types/wallet-server/src/router/transport/fetch/routes/wellKnown.d.ts +3 -0
  1014. package/dist/types/wallet-server/src/storage/d1Sql.d.ts +14 -0
  1015. package/dist/types/wallet-server/src/storage/tenantRoute.d.ts +136 -0
  1016. package/dist/types/wallet-server/src/storage/tenantRoute.typecheck.d.ts +2 -0
  1017. package/dist/types/wallet-server/src/tenant-root.d.ts +5 -0
  1018. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/cipher.d.ts +45 -0
  1019. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +16 -0
  1020. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/guards/backends.d.ts +23 -0
  1021. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/guards/index.d.ts +46 -0
  1022. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotency.d.ts +3 -0
  1023. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyBackends.d.ts +24 -0
  1024. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +22 -0
  1025. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/index.d.ts +23 -0
  1026. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/observability/audit.d.ts +9 -0
  1027. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/options.d.ts +9 -0
  1028. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/routesOptions.d.ts +20 -0
  1029. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/service.d.ts +3 -0
  1030. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.typecheck.d.ts +2 -0
  1031. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.types.d.ts +148 -0
  1032. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/express.d.ts +12 -0
  1033. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/fetch.d.ts +13 -0
  1034. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/shared.d.ts +24 -0
  1035. package/dist/types/wallet-server/src/threshold/statusCodes.d.ts +10 -0
  1036. package/dist/types/wallet-server/src/wasm/signer.d.ts +8 -0
  1037. package/migrations/d1-signer/0001_signer_d1_initial.sql +2486 -0
  1038. package/migrations/d1-signer/0002_signer_post_103_canonical_upgrade.sql +1576 -0
  1039. package/migrations/d1-signer/0003_r107_wallet_authorization.sql +299 -0
  1040. package/migrations/d1-signer/0004_remove_legacy_email_recovery.sql +14 -0
  1041. package/migrations/d1-signer/0005_r103p8_linked_owner_auth_bindings.sql +92 -0
  1042. package/migrations/d1-signer/0006_r103p8_linked_device_custody_transfers.sql +77 -0
  1043. package/migrations/d1-signer/0007_r103p8_wallet_session_auth_method_provenance.sql +18 -0
  1044. package/migrations/d1-signer/0008_r103p8_linked_device_session_cas_guard.sql +35 -0
  1045. package/migrations/d1-signer/0009_linked_device_email_otp.sql +405 -0
  1046. package/migrations/d1-signer/0010_linked_device_session_target_factor.sql +78 -0
  1047. package/migrations/d1-signer/0011_linked_device_ed25519_export_root.sql +9 -0
  1048. package/migrations/d1-signer/0012_versioned_json_cas_guard.sql +3 -0
  1049. package/migrations/d1-signer/0013_linked_device_export_authorization.sql +133 -0
  1050. package/migrations/d1-signer/0014_wallet_recovery_code_locators.sql +19 -0
  1051. package/migrations/d1-signer/0015_r103e_authority_baseline.sql +259 -0
  1052. package/migrations/d1-signer/0016_r103e_wallet_session_authorizations_v2.sql +133 -0
  1053. package/migrations/d1-signer/0017_r103e_link_session_state.sql +83 -0
  1054. package/migrations/d1-signer/0018_r103e_linked_device_authority_installations.sql +34 -0
  1055. package/migrations/d1-signer/0019_r103e_email_otp_device_methods.sql +3 -0
  1056. package/migrations/d1-signer/0020_r103e_wallet_session_operation_credentials.sql +12 -0
  1057. package/migrations/d1-signer/0021_linked_device_source_contribution_transcripts.sql +64 -0
  1058. package/migrations/d1-signer/0022_r109c_multi_auth_email_cardinality.sql +118 -0
  1059. package/migrations/d1-signer/0023_r109d_first_email_linked_device.sql +111 -0
  1060. package/migrations/d1-signer/0024_r103f_v2_authorized_operation_claim.sql +99 -0
  1061. package/migrations/d1-signer/0025_r109d_email_enrollment_wallet_cardinality.sql +57 -0
  1062. package/migrations/d1-signer/0026_r115_wallet_recovery_authority_provenance.sql +253 -0
  1063. package/migrations/d1-signer/0027_r115_email_otp_recovery_bootstrap.sql +90 -0
  1064. package/migrations/d1-signer/0028_r103f_phase1_additive_schema_bridge.sql +1119 -0
  1065. package/migrations/d1-signer/0029_r103f_phase0_registration_replay_tokens.sql +135 -0
  1066. package/migrations/d1-signer/0030_r103f_wallet_session_client_capability.sql +17 -0
  1067. package/migrations/d1-signer/0031_r103f_delete_registration_replay_tokens.sql +4 -0
  1068. package/migrations/d1-signer/0032_r103f_exact_authorized_operation_enforcement.sql +149 -0
  1069. package/migrations/d1-signer/0033_r103f_linked_delivery_recipient.sql +6 -0
  1070. package/migrations/d1-signer/0034_r103f_exact_wallet_session_cutover.sql +743 -0
  1071. package/migrations/d1-signer/0035_r103f_linked_delivery_acknowledgement_cleanup_window.sql +413 -0
  1072. package/package.json +132 -0
  1073. package/scripts/d1-local-migrate-signer.mjs +148 -0
  1074. package/src/README.md +75 -0
  1075. package/wrangler.local-hosted-wallet-gateway.toml +37 -0
@@ -0,0 +1,1618 @@
1
+ import { parseEmailOtpChallengeId, parseOrgId, parseProviderSubject, parseWalletAuthMethodId, parseWalletAuthorityId, parseWalletId, parseWalletRecoveryOperationId, parseWebAuthnCredentialIdB64u, parseWebAuthnRpId } from "../../../../shared-ts/src/utils/domainIds.js";
2
+ import { buildVaultOperationRef, parseAuthFactorId, parseAuthorizationAuditEventId, parseAuthorizationEvidenceId, parseAuthorizationEvidenceSetId, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId, parseDeviceId, parsePrincipalId, parseTenantId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
3
+ import { base64UrlDecode, base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
4
+ import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
5
+ import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
6
+ import { buildCapabilityOperationEnvelope, computeCapabilityOperationFingerprintDigest } from "../../../../shared-ts/src/authorization/operationFingerprint.js";
7
+ import "../../../../shared-ts/src/utils/encoders.js";
8
+ import { buildPasskeyWalletAuthAuthority, walletAuthAuthorityRef } from "../../../../shared-ts/src/utils/walletAuthAuthority.js";
9
+ import { parseSessionOrigin, parseVerifiedOwnerProofId } from "../../../../authorization/domain.js";
10
+ import { buildVerifiedWalletOperationEmailOtpFactorResult, buildVerifiedWalletOperationPasskeyFactorResult } from "../../../../authorization/factorEvidence.js";
11
+ import { findRouteDefinitionById, matchesRouteDefinitionRequest } from "../../../framework/routeDefinitions.js";
12
+ import { readJson } from "../../../framework/http.js";
13
+ import { extractBearerCredential, resolveSourceIpFromFetchHeaders } from "../../../auth/routerApiKeyAuth.js";
14
+ import { toFetchRouteResponse } from "../../../framework/routeResponses.js";
15
+ import { parsePasskeyCustodyEnvelopeRecord } from "../../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
16
+ import "../../../../shared-ts/src/passkey-custody/index.js";
17
+ import { isHostWithinRpId, originHostnameOrEmpty } from "../../../../core/authService/webauthnOidcHelpers.js";
18
+ import { parseRecoveryCodeReservationId } from "../../../../shared-ts/src/wallet-recovery/recoveryCodeReservation.js";
19
+ import { computeWalletCustodyAdminChallengeDigest } from "../../../../shared-ts/src/authorization/walletCustodyOperation.js";
20
+ import { parseWalletRecoveryTargetV1 } from "../../../../shared-ts/src/wallet-recovery/walletRecoveryTarget.js";
21
+ import { parseWebAuthnAuthenticationCredential } from "../../../auth/webAuthnCredentialCodecs.js";
22
+ import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
23
+ import { emailOtpStatusCode, hashEmailOtpOperationBinding } from "../../../domains/emailOtp/emailOtpSessionRouteHelpers.js";
24
+ import { parseDerivedWalletRecoveryKeyId } from "../../../../shared-ts/src/wallet-recovery/recoveryKeyId.js";
25
+ import { parseWalletRecoverySetRotationWireV1 } from "../../../../shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js";
26
+ import { parseRecoveryCodeLocatorV1 } from "../../../../shared-ts/src/wallet-recovery/recoveryCodeLocator.js";
27
+ import { parseWalletRecoveryEcdsaPossessionProofV1 } from "../../../../shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js";
28
+ //#region src/router/transport/fetch/routes/passkeyCustody.ts
29
+ /**
30
+ * The transport for custody envelope retrieval.
31
+ *
32
+ * Thin on purpose: it parses a body, hands it to the port, and returns what
33
+ * the port decided. Every gate — assertion verification, credential match,
34
+ * lifecycle, digest — lives below, and the status each failure earns is fixed
35
+ * in one wire mapping. A transport that re-decided any of that would be a
36
+ * second opinion on whether a wallet opens.
37
+ */
38
+ const ROUTE_ID = "passkey_custody_envelope_retrieve";
39
+ const CREDENTIALS_LIST_ROUTE_ID = "wallet_custody_credentials_list";
40
+ const CREDENTIAL_LABEL_ROUTE_ID = "wallet_custody_credential_label";
41
+ const RECOVERY_PREPARE_ROUTE_ID = "wallet_recovery_prepare";
42
+ const RECOVERY_GOOGLE_VERIFY_ROUTE_ID = "wallet_recovery_google_verify";
43
+ const RECOVERY_EMAIL_OTP_VERIFY_ROUTE_ID = "wallet_recovery_email_otp_verify";
44
+ const RECOVERY_EMAIL_OTP_RELEASE_ROUTE_ID = "wallet_recovery_email_otp_release";
45
+ const RECOVERY_GOOGLE_EMAIL_OTP_FINALIZE_ROUTE_ID = "wallet_recovery_google_email_otp_finalize";
46
+ const RECOVERY_FINALIZE_ROUTE_ID = "wallet_recovery_finalize";
47
+ const RECOVERY_ACK_ROUTE_ID = "wallet_recovery_backup_acknowledge";
48
+ const RECOVERY_ROTATE_ROUTE_ID = "wallet_recovery_codes_rotate";
49
+ const RECOVERY_READ_ROUTE_ID = "wallet_recovery_codes_read";
50
+ const RECOVERY_STATUS_ROUTE_ID = "wallet_recovery_status";
51
+ const EMAIL_OTP_CHALLENGE_ROUTE_ID = "wallet_custody_email_otp_challenge";
52
+ const ENVELOPE_OWNERSHIP_UPGRADE_ROUTE_ID = "wallet_custody_envelope_ownership_upgrade";
53
+ const CUSTODY_OPERATION_CAPABILITY_ID = "wallet-custody-admin";
54
+ const CUSTODY_PROOF_TTL_MS = 6e4;
55
+ function parseRequiredString(value, field) {
56
+ if (typeof value !== "string" || !value.trim()) throw new Error(`${field} is required`);
57
+ return value.trim();
58
+ }
59
+ function requireExactObjectFields(value, fields, label) {
60
+ const keys = Object.keys(value).sort();
61
+ const expected = [...fields].sort();
62
+ if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index])) throw new Error(`${label} contains unsupported fields`);
63
+ }
64
+ function parseCustodyOwnerProof(value) {
65
+ if (!isObject(value)) throw new Error("factorProof is required");
66
+ const kind = trimmed(value.kind);
67
+ if (kind === "passkey") {
68
+ requireExactObjectFields(value, [
69
+ "kind",
70
+ "walletId",
71
+ "rpId",
72
+ "credentialIdB64u",
73
+ "challenge_digest",
74
+ "webauthn_authentication"
75
+ ], "factorProof");
76
+ const webauthnAuthentication = parseWebAuthnAuthenticationCredential(value.webauthn_authentication);
77
+ if (!webauthnAuthentication) throw new Error("factorProof.webauthn_authentication is invalid");
78
+ return {
79
+ kind,
80
+ walletId: parseRequiredString(value.walletId, "factorProof.walletId"),
81
+ rpId: parseRequiredString(value.rpId, "factorProof.rpId"),
82
+ credentialIdB64u: parseRequiredString(value.credentialIdB64u, "factorProof.credentialIdB64u"),
83
+ challenge_digest: parseRequiredString(value.challenge_digest, "factorProof.challenge_digest"),
84
+ webauthn_authentication: webauthnAuthentication
85
+ };
86
+ }
87
+ if (kind === "email_otp") {
88
+ requireExactObjectFields(value, [
89
+ "kind",
90
+ "provider_subject_id",
91
+ "challenge_id",
92
+ "otp_code",
93
+ "challenge_digest"
94
+ ], "factorProof");
95
+ return {
96
+ kind,
97
+ provider_subject_id: parseRequiredString(value.provider_subject_id, "factorProof.provider_subject_id"),
98
+ challenge_id: parseRequiredString(value.challenge_id, "factorProof.challenge_id"),
99
+ otp_code: parseRequiredString(value.otp_code, "factorProof.otp_code"),
100
+ challenge_digest: parseRequiredString(value.challenge_digest, "factorProof.challenge_digest")
101
+ };
102
+ }
103
+ throw new Error("factorProof.kind must be passkey or email_otp");
104
+ }
105
+ function parseRequiredAuthorizationValue(parsed) {
106
+ if (!parsed.ok) throw new Error(parsed.error.message);
107
+ return parsed.value;
108
+ }
109
+ async function custodyDigest(domain, value) {
110
+ return parseDigestB64u(base64UrlEncode(await sha256BytesUtf8(`${domain}|${alphabetizeStringify(value)}`)));
111
+ }
112
+ async function buildWalletCustodyOperation(input) {
113
+ const tenantId = parseRequiredAuthorizationValue(parseTenantId(input.tenantId));
114
+ const principalId = parseRequiredAuthorizationValue(parsePrincipalId(input.principalId));
115
+ const capabilityId = parseRequiredAuthorizationValue(parseCapabilityId(CUSTODY_OPERATION_CAPABILITY_ID));
116
+ const operationRef = buildVaultOperationRef("vault.reveal");
117
+ const laneDigest = await custodyDigest("seams:wallet-custody:lane:v1", {
118
+ capabilityId,
119
+ operation: input.operation,
120
+ operationRef
121
+ });
122
+ const challengeDigest = await computeWalletCustodyAdminChallengeDigest({
123
+ walletId: input.walletId,
124
+ operation: input.operation,
125
+ payload: input.payload,
126
+ requestOrigin: input.requestOrigin
127
+ });
128
+ const intentDigest = challengeDigest;
129
+ const displayDigest = await custodyDigest("seams:wallet-custody:display:v1", {
130
+ walletId: input.walletId,
131
+ operation: input.operation
132
+ });
133
+ return {
134
+ operation: buildCapabilityOperationEnvelope({
135
+ tenantId,
136
+ principalId,
137
+ capabilityId,
138
+ operationId: parseRequiredAuthorizationValue(parseCapabilityOperationId(`wallet-custody:${input.operation}:${intentDigest}`)),
139
+ operation: operationRef,
140
+ digests: {
141
+ laneDigest,
142
+ intentDigest,
143
+ displayDigest
144
+ }
145
+ }),
146
+ challengeDigest
147
+ };
148
+ }
149
+ async function authorizeWalletCustodyOperation(input) {
150
+ const requestOrigin = trimmed(input.ctx.request.headers.get("origin"));
151
+ if (!requestOrigin) return toCustodyAuthorizationFailure(400, "invalid_origin", "request Origin is required");
152
+ let origin;
153
+ let proof;
154
+ let walletId;
155
+ try {
156
+ origin = parseSessionOrigin(requestOrigin);
157
+ walletId = parseRequiredAuthorizationValue(parseWalletId(input.walletId));
158
+ proof = parseCustodyOwnerProof(input.factorProof);
159
+ } catch (error) {
160
+ return toCustodyAuthorizationFailure(400, "invalid_owner_proof", error instanceof Error ? error.message : "owner proof is invalid");
161
+ }
162
+ if (proof.kind === "passkey" && proof.walletId !== input.walletId) return toCustodyAuthorizationFailure(403, "scope_mismatch", "owner proof wallet differs");
163
+ let principalId;
164
+ let factor;
165
+ let operation;
166
+ let challengeDigest;
167
+ try {
168
+ principalId = proof.kind === "passkey" ? input.walletId : proof.provider_subject_id;
169
+ const built = await buildWalletCustodyOperation({
170
+ tenantId: input.ctx.service.authorizedOperations.tenantId,
171
+ principalId,
172
+ walletId: input.walletId,
173
+ operation: input.operation,
174
+ payload: input.payload,
175
+ requestOrigin
176
+ });
177
+ operation = built.operation;
178
+ challengeDigest = built.challengeDigest;
179
+ } catch (error) {
180
+ return toCustodyAuthorizationFailure(400, "invalid_owner_proof", error instanceof Error ? error.message : "owner proof binding is invalid");
181
+ }
182
+ const operationFingerprintDigest = await computeCapabilityOperationFingerprintDigest(operation);
183
+ const nowMs = Date.now();
184
+ if (proof.challenge_digest !== String(challengeDigest)) return toCustodyAuthorizationFailure(403, "scope_mismatch", "factor proof challenge does not match the requested operation");
185
+ if (proof.kind === "passkey") {
186
+ let authority;
187
+ try {
188
+ authority = buildPasskeyWalletAuthAuthority({
189
+ walletId,
190
+ rpId: proof.rpId,
191
+ credentialIdB64u: proof.credentialIdB64u
192
+ });
193
+ } catch (error) {
194
+ return toCustodyAuthorizationFailure(400, "invalid_owner_proof", error instanceof Error ? error.message : "passkey authority is invalid");
195
+ }
196
+ const active = await input.ctx.service.walletAuthMethods.verifyActivePasskeyAuthority(authority);
197
+ if (!active.ok) return toCustodyAuthorizationFailure(403, active.code, active.message);
198
+ const credential = parseWebAuthnAuthenticationCredential(proof.webauthn_authentication);
199
+ if (!credential) return toCustodyAuthorizationFailure(400, "invalid_owner_proof", "passkey assertion is invalid");
200
+ if (String(credential.rawId || credential.id).trim() !== authority.factor.credentialIdB64u) return toCustodyAuthorizationFailure(401, "unauthorized", "passkey credential changed");
201
+ const verified = await input.ctx.service.webAuthn.verifyWebAuthnAuthenticationLite({
202
+ userId: input.walletId,
203
+ rpId: authority.verifier.rpId,
204
+ expectedChallenge: challengeDigest,
205
+ expected_origin: requestOrigin,
206
+ webauthn_authentication: credential
207
+ });
208
+ if (!verified.success || !verified.verified) return toCustodyAuthorizationFailure(401, verified.code || "not_verified", verified.message || "WebAuthn authentication verification failed");
209
+ factor = buildVerifiedWalletOperationPasskeyFactorResult({
210
+ tenantId: operation.tenantId,
211
+ principalId: operation.principalId,
212
+ walletId,
213
+ authorityRef: await walletAuthAuthorityRef({ authority }),
214
+ requestOrigin: origin,
215
+ audience: origin,
216
+ factorId: parseRequiredAuthorizationValue(parseAuthFactorId(`passkey:${authority.factor.credentialIdB64u}`)),
217
+ credentialIdB64u: parseRequiredAuthorizationValue(parseWebAuthnCredentialIdB64u(authority.factor.credentialIdB64u)),
218
+ assertionDigest: await custodyDigest("seams:wallet-custody:assertion:v1", { credential }),
219
+ operation,
220
+ verifiedAtMs: nowMs,
221
+ expiresAtMs: nowMs + CUSTODY_PROOF_TTL_MS
222
+ });
223
+ } else {
224
+ const providerSubject = parseRequiredAuthorizationValue(parseProviderSubject(proof.provider_subject_id));
225
+ const orgId = parseRequiredAuthorizationValue(parseOrgId(input.ctx.service.authorizedOperations.tenantId));
226
+ const active = await input.ctx.service.walletAuthMethods.resolveActiveEmailOtpAuthorityForVerifiedSubject({
227
+ walletId: input.walletId,
228
+ providerUserId: proof.provider_subject_id
229
+ });
230
+ if (!active.ok) return toCustodyAuthorizationFailure(403, active.code, active.message);
231
+ const activeAuthorityRef = await walletAuthAuthorityRef({ authority: active.authority });
232
+ const ownerProofBindingDigest = await hashEmailOtpOperationBinding({
233
+ walletId: input.walletId,
234
+ providerUserId: proof.provider_subject_id,
235
+ orgId,
236
+ operation: `wallet_custody:${input.operation}`,
237
+ requestOrigin,
238
+ audience: requestOrigin,
239
+ authorityRef: activeAuthorityRef,
240
+ operationFingerprintDigest: challengeDigest
241
+ });
242
+ const verified = await input.ctx.service.emailOtp.verifyEmailOtpChallenge({
243
+ userId: proof.provider_subject_id,
244
+ walletId: input.walletId,
245
+ orgId,
246
+ challengeId: proof.challenge_id,
247
+ otpCode: proof.otp_code,
248
+ otpChannel: EMAIL_OTP_CHANNEL,
249
+ ownerProofBindingDigest,
250
+ operation: WALLET_EMAIL_OTP_UNLOCK_OPERATION
251
+ });
252
+ if (!verified.ok) return toCustodyAuthorizationFailure(verified.code === "invalid_body" ? 400 : 401, verified.code, verified.message);
253
+ const consumed = await input.ctx.service.emailOtp.consumeEmailOtpGrant({
254
+ subject: {
255
+ kind: "provider_identity",
256
+ orgId,
257
+ providerSubject,
258
+ walletId
259
+ },
260
+ loginGrant: verified.loginGrant,
261
+ otpChannel: EMAIL_OTP_CHANNEL
262
+ });
263
+ if (!consumed.ok) return toCustodyAuthorizationFailure(emailOtpStatusCode(consumed.code), consumed.code, consumed.message);
264
+ factor = buildVerifiedWalletOperationEmailOtpFactorResult({
265
+ tenantId: operation.tenantId,
266
+ principalId: operation.principalId,
267
+ walletId,
268
+ authorityRef: activeAuthorityRef,
269
+ requestOrigin: origin,
270
+ audience: origin,
271
+ factorId: parseRequiredAuthorizationValue(parseAuthFactorId(`email_otp:${active.authority.factor.provider}:${proof.provider_subject_id}`)),
272
+ operation,
273
+ challengeId: parseRequiredAuthorizationValue(parseEmailOtpChallengeId(consumed.challengeId)),
274
+ verificationReceiptDigest: await custodyDigest("seams:wallet-custody:otp-receipt:v1", {
275
+ challengeId: consumed.challengeId,
276
+ operationFingerprintDigest
277
+ }),
278
+ verifiedAtMs: nowMs,
279
+ expiresAtMs: Math.min(nowMs + CUSTODY_PROOF_TTL_MS, verified.grantExpiresAtMs)
280
+ });
281
+ }
282
+ const ownerProof = await input.ctx.service.authorizedOperations.buildVerifiedOwnerProof({
283
+ purpose: "operation",
284
+ proofId: parseVerifiedOwnerProofId(`wallet-custody:${operation.operationId}`),
285
+ factor
286
+ });
287
+ if (ownerProof.purpose !== "operation" || ownerProof.operation.operationFingerprintDigest !== operationFingerprintDigest) return toCustodyAuthorizationFailure(403, "owner_proof_rejected", "owner proof binding is invalid");
288
+ const evidenceSet = await input.ctx.service.authorizedOperations.recordVerifiedWalletOperationFactorEvidenceSet({
289
+ operation,
290
+ evidenceId: parseRequiredAuthorizationValue(parseAuthorizationEvidenceId(`wallet-custody:evidence:${operation.operationId}`)),
291
+ evidenceSetId: parseRequiredAuthorizationValue(parseAuthorizationEvidenceSetId(`wallet-custody:evidence-set:${operation.operationId}`)),
292
+ factor
293
+ });
294
+ const admission = await input.ctx.service.authorizedOperations.admitAuthorizedOperation({ operation: {
295
+ tenantId: operation.tenantId,
296
+ authorizedOperationId: parseRequiredAuthorizationValue(parseAuthorizedOperationId(`wallet-custody:authorized:${operation.operationId}`)),
297
+ auditEventId: parseRequiredAuthorizationValue(parseAuthorizationAuditEventId(`wallet-custody:audit:${operation.operationId}`)),
298
+ operation,
299
+ authorization: {
300
+ kind: "verified_step_up",
301
+ evidenceSetDigest: evidenceSet.evidenceSetDigest
302
+ },
303
+ quota: { kind: "quota_neutral" },
304
+ claimedAtMs: nowMs
305
+ } });
306
+ switch (admission.kind) {
307
+ case "claimed": return {
308
+ ok: true,
309
+ operation: admission.operation
310
+ };
311
+ case "replayed":
312
+ case "operation_in_progress": return {
313
+ ok: false,
314
+ response: authorizedOperationReplay(admission.operation)
315
+ };
316
+ case "authorization_grant_rejected":
317
+ case "verified_step_up_rejected":
318
+ case "wallet_session_quota_exhausted":
319
+ case "material_mismatch": return toCustodyAuthorizationFailure(403, "owner_proof_rejected", "owner proof was rejected");
320
+ }
321
+ }
322
+ function toCustodyAuthorizationFailure(status, code, message) {
323
+ return {
324
+ ok: false,
325
+ response: toFetchRouteResponse({
326
+ status,
327
+ body: {
328
+ ok: false,
329
+ code,
330
+ message
331
+ }
332
+ })
333
+ };
334
+ }
335
+ async function completeWalletCustodyOperation(ctx, operation, status, body, result = "succeeded") {
336
+ const bodyText = JSON.stringify(body);
337
+ await ctx.service.authorizedOperations.completeAuthorizedOperation({
338
+ operation,
339
+ result,
340
+ response: {
341
+ status,
342
+ contentType: "application/json",
343
+ bodyText
344
+ },
345
+ completedAtMs: Date.now()
346
+ });
347
+ return toFetchRouteResponse({
348
+ status,
349
+ body
350
+ });
351
+ }
352
+ async function handlePasskeyCustody(ctx) {
353
+ const route = findRouteDefinitionById(ctx.routeDefinitions, ROUTE_ID);
354
+ if (!route) throw new Error(`Missing route definition for ${ROUTE_ID}`);
355
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
356
+ const request = parseWireRequest(await readJsonObject(ctx.request), ctx.request.headers.get("origin"));
357
+ if (!request) return toFetchRouteResponse({
358
+ status: 400,
359
+ body: {
360
+ ok: false,
361
+ code: "invalid_request",
362
+ message: "custody retrieval needs a locator, a challenge id, and an assertion"
363
+ }
364
+ });
365
+ return toFetchRouteResponse(await ctx.service.passkeyCustody.retrieveEnvelope(request));
366
+ }
367
+ function parseWalletCustodyEmailOtpChallengeRequest(value, actualOrigin) {
368
+ if (!isObject(value)) throw new Error("Email OTP custody challenge body must be an object");
369
+ const keys = Object.keys(value).sort();
370
+ const expected = [
371
+ "operation",
372
+ "payload",
373
+ "providerSubjectId",
374
+ "requestOrigin",
375
+ "walletId"
376
+ ];
377
+ const required = [
378
+ "operation",
379
+ "payload",
380
+ "providerSubjectId",
381
+ "walletId"
382
+ ];
383
+ const withoutOptional = keys.filter((key) => key !== "requestOrigin");
384
+ if (withoutOptional.length !== required.length || withoutOptional.some((key, index) => key !== required.slice().sort()[index]) || keys.includes("requestOrigin") && keys.length !== expected.length) throw new Error("Email OTP custody challenge body contains unsupported fields");
385
+ const walletId = parseRequiredAuthorizationValue(parseWalletId(value.walletId));
386
+ const providerSubjectId = parseRequiredAuthorizationValue(parseProviderSubject(value.providerSubjectId));
387
+ const operation = value.operation;
388
+ if (operation !== "credentials_list" && operation !== "credential_label" && operation !== "recovery_rotate" && operation !== "recovery_read") throw new Error("Email OTP custody challenge operation is invalid");
389
+ if (!isObject(value.payload)) throw new Error("Email OTP custody challenge payload is invalid");
390
+ if (value.requestOrigin !== void 0 && value.requestOrigin !== actualOrigin) throw new Error("Email OTP custody challenge requestOrigin does not match Origin");
391
+ return {
392
+ walletId,
393
+ providerSubjectId,
394
+ operation,
395
+ payload: value.payload,
396
+ requestOrigin: actualOrigin
397
+ };
398
+ }
399
+ /** Issues one operation-bound Email OTP challenge without exposing authority metadata. */
400
+ async function handleWalletCustodyEmailOtpChallenge(ctx) {
401
+ const route = findRouteDefinitionById(ctx.routeDefinitions, EMAIL_OTP_CHALLENGE_ROUTE_ID);
402
+ if (!route) throw new Error(`Missing route definition for ${EMAIL_OTP_CHALLENGE_ROUTE_ID}`);
403
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
404
+ const originHeader = trimmed(ctx.request.headers.get("origin"));
405
+ let request;
406
+ try {
407
+ const origin = parseSessionOrigin(originHeader);
408
+ request = parseWalletCustodyEmailOtpChallengeRequest(await readJson(ctx.request), origin);
409
+ } catch (error) {
410
+ return toFetchRouteResponse({
411
+ status: 400,
412
+ body: {
413
+ ok: false,
414
+ code: "invalid_request",
415
+ message: error instanceof Error ? error.message : "Email OTP custody challenge is invalid"
416
+ }
417
+ });
418
+ }
419
+ const active = await ctx.service.walletAuthMethods.resolveActiveEmailOtpAuthorityForVerifiedSubject({
420
+ walletId: request.walletId,
421
+ providerUserId: request.providerSubjectId
422
+ });
423
+ if (!active.ok) return toFetchRouteResponse({
424
+ status: 403,
425
+ body: {
426
+ ok: false,
427
+ code: active.code,
428
+ message: active.message
429
+ }
430
+ });
431
+ const authoritativeOrgId = parseRequiredAuthorizationValue(parseOrgId(ctx.service.authorizedOperations.tenantId));
432
+ const challengeDigest = await computeWalletCustodyAdminChallengeDigest(request);
433
+ const ownerProofBindingDigest = await hashEmailOtpOperationBinding({
434
+ walletId: request.walletId,
435
+ providerUserId: request.providerSubjectId,
436
+ orgId: authoritativeOrgId,
437
+ operation: `wallet_custody:${request.operation}`,
438
+ requestOrigin: request.requestOrigin,
439
+ audience: request.requestOrigin,
440
+ authorityRef: await walletAuthAuthorityRef({ authority: active.authority }),
441
+ operationFingerprintDigest: challengeDigest
442
+ });
443
+ const result = await ctx.service.emailOtp.createEmailOtpChallenge({
444
+ userId: request.providerSubjectId,
445
+ walletId: request.walletId,
446
+ orgId: authoritativeOrgId,
447
+ otpChannel: EMAIL_OTP_CHANNEL,
448
+ ownerProofBindingDigest,
449
+ reuseActiveChallenge: true,
450
+ requestOrigin: request.requestOrigin,
451
+ operation: WALLET_EMAIL_OTP_UNLOCK_OPERATION
452
+ });
453
+ if (!result.ok) return toFetchRouteResponse({
454
+ status: emailOtpStatusCode(result.code),
455
+ body: {
456
+ ok: false,
457
+ code: result.code,
458
+ message: result.message,
459
+ ...result.retryAfterMs ? { retryAfterMs: result.retryAfterMs } : {}
460
+ }
461
+ });
462
+ return toFetchRouteResponse({
463
+ status: 200,
464
+ body: {
465
+ ok: true,
466
+ challengeId: result.challenge.challengeId,
467
+ challenge_digest: challengeDigest,
468
+ expiresAtMs: result.challenge.expiresAtMs,
469
+ otpChannel: result.challenge.otpChannel
470
+ }
471
+ });
472
+ }
473
+ /** Lists public passkey envelope identities with their sibling activity rows. */
474
+ async function handleWalletCustodyCredentialsList(ctx) {
475
+ const route = findRouteDefinitionById(ctx.routeDefinitions, CREDENTIALS_LIST_ROUTE_ID);
476
+ if (!route) throw new Error(`Missing route definition for ${CREDENTIALS_LIST_ROUTE_ID}`);
477
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
478
+ const walletId = walletIdFromPath(route.path, ctx.pathname);
479
+ if (!walletId) return toFetchRouteResponse({
480
+ status: 400,
481
+ body: {
482
+ ok: false,
483
+ code: "invalid_request",
484
+ message: "credential list needs a wallet"
485
+ }
486
+ });
487
+ const body = await readJsonObject(ctx.request);
488
+ const authorized = await authorizeWalletCustodyOperation({
489
+ ctx,
490
+ walletId,
491
+ operation: "credentials_list",
492
+ payload: { walletId },
493
+ factorProof: body?.factorProof
494
+ });
495
+ if (!authorized.ok) return authorized.response;
496
+ const parsedWalletId = parseWalletId(walletId);
497
+ if (!parsedWalletId.ok) return toFetchRouteResponse({
498
+ status: 400,
499
+ body: {
500
+ ok: false,
501
+ code: "invalid_request",
502
+ message: "wallet id is invalid"
503
+ }
504
+ });
505
+ const result = await ctx.service.passkeyCustody.listWalletCredentials({ walletId: parsedWalletId.value });
506
+ return await completeWalletCustodyOperation(ctx, authorized.operation, 200, {
507
+ ok: true,
508
+ credentials: result
509
+ });
510
+ }
511
+ /**
512
+ * Refactor 109C: binds a pre-109C custody envelope to the method that opened it.
513
+ *
514
+ * The exact operation credential names the auth method that opened the
515
+ * envelope. Unlock already proved that method, so finishing the ownership
516
+ * upgrade requires no second user assertion.
517
+ */
518
+ async function handleWalletCustodyEnvelopeOwnershipUpgrade(ctx) {
519
+ const route = findRouteDefinitionById(ctx.routeDefinitions, ENVELOPE_OWNERSHIP_UPGRADE_ROUTE_ID);
520
+ if (!route) throw new Error(`Missing route definition for ${ENVELOPE_OWNERSHIP_UPGRADE_ROUTE_ID}`);
521
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
522
+ const parsedWalletId = parseWalletId(walletIdFromPath(route.path, ctx.pathname));
523
+ if (!parsedWalletId.ok) return toFetchRouteResponse({
524
+ status: 400,
525
+ body: {
526
+ ok: false,
527
+ code: "invalid_request",
528
+ message: "wallet id is invalid"
529
+ }
530
+ });
531
+ const token = extractBearerCredential(ctx.request.headers);
532
+ if (!token) return toFetchRouteResponse({
533
+ status: 401,
534
+ body: {
535
+ ok: false,
536
+ code: "unauthorized",
537
+ message: "No valid Wallet Session"
538
+ }
539
+ });
540
+ const exact = await ctx.service.authorizationSessions.readWalletSessionAuthorizationV2ByOperationCredential({
541
+ tenantId: ctx.service.authorizationSessions.tenantId,
542
+ token,
543
+ nowMs: Date.now()
544
+ });
545
+ if (!exact || String(exact.authorization.session.walletId) !== String(parsedWalletId.value)) return toFetchRouteResponse({
546
+ status: 401,
547
+ body: {
548
+ ok: false,
549
+ code: "unauthorized",
550
+ message: "No valid Wallet Session"
551
+ }
552
+ });
553
+ const walletAuthMethodId = exact.authMethod.walletAuthMethodId;
554
+ const body = await readJsonObject(ctx.request);
555
+ let envelope;
556
+ try {
557
+ envelope = parsePasskeyCustodyEnvelopeRecord(body?.envelope);
558
+ } catch (error) {
559
+ return toFetchRouteResponse({
560
+ status: 400,
561
+ body: {
562
+ ok: false,
563
+ code: "invalid_request",
564
+ message: error instanceof Error ? error.message : "custody envelope is invalid"
565
+ }
566
+ });
567
+ }
568
+ const result = await ctx.service.passkeyCustody.upgradeEnvelopeOwnership({
569
+ walletId: parsedWalletId.value,
570
+ walletAuthMethodId,
571
+ envelope
572
+ });
573
+ switch (result.kind) {
574
+ case "upgraded": return toFetchRouteResponse({
575
+ status: 200,
576
+ body: {
577
+ ok: true,
578
+ upgraded: true,
579
+ envelopeRevision: result.envelopeRevision
580
+ }
581
+ });
582
+ case "already_owned": return toFetchRouteResponse({
583
+ status: 200,
584
+ body: {
585
+ ok: true,
586
+ upgraded: false
587
+ }
588
+ });
589
+ case "not_found": return toFetchRouteResponse({
590
+ status: 404,
591
+ body: {
592
+ ok: false,
593
+ code: "not_found",
594
+ message: "no custody envelope to upgrade"
595
+ }
596
+ });
597
+ case "conflict": return toFetchRouteResponse({
598
+ status: 409,
599
+ body: {
600
+ ok: false,
601
+ code: "conflict",
602
+ message: result.reason
603
+ }
604
+ });
605
+ case "refused": return toFetchRouteResponse({
606
+ status: 403,
607
+ body: {
608
+ ok: false,
609
+ code: "forbidden",
610
+ message: result.reason
611
+ }
612
+ });
613
+ }
614
+ }
615
+ /** Renames one passkey credential; the label is metadata and never AAD. */
616
+ async function handleWalletCustodyCredentialLabel(ctx) {
617
+ const route = findRouteDefinitionById(ctx.routeDefinitions, CREDENTIAL_LABEL_ROUTE_ID);
618
+ if (!route) throw new Error(`Missing route definition for ${CREDENTIAL_LABEL_ROUTE_ID}`);
619
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
620
+ const walletId = walletIdFromPath(route.path, ctx.pathname);
621
+ const body = await readJsonObject(ctx.request);
622
+ const envelopeId = trimmed(body?.envelopeId);
623
+ const label = body?.label;
624
+ if (!walletId || !envelopeId || label !== void 0 && typeof label !== "string") return toFetchRouteResponse({
625
+ status: 400,
626
+ body: {
627
+ ok: false,
628
+ code: "invalid_request",
629
+ message: "credential rename needs a wallet, envelope, and optional label"
630
+ }
631
+ });
632
+ const authorized = await authorizeWalletCustodyOperation({
633
+ ctx,
634
+ walletId,
635
+ operation: "credential_label",
636
+ payload: {
637
+ walletId,
638
+ envelopeId,
639
+ ...label === void 0 ? {} : { label }
640
+ },
641
+ factorProof: body?.factorProof
642
+ });
643
+ if (!authorized.ok) return authorized.response;
644
+ const parsedWalletId = parseWalletId(walletId);
645
+ if (!parsedWalletId.ok) return toFetchRouteResponse({
646
+ status: 400,
647
+ body: {
648
+ ok: false,
649
+ code: "invalid_request",
650
+ message: "wallet id is invalid"
651
+ }
652
+ });
653
+ const result = await ctx.service.passkeyCustody.renameWalletCredential({
654
+ walletId: parsedWalletId.value,
655
+ envelopeId,
656
+ ...label === void 0 ? {} : { label }
657
+ });
658
+ switch (result.kind) {
659
+ case "updated": return await completeWalletCustodyOperation(ctx, authorized.operation, 200, {
660
+ ok: true,
661
+ credential: result.projection
662
+ });
663
+ case "missing": return await completeWalletCustodyOperation(ctx, authorized.operation, 404, {
664
+ ok: false,
665
+ code: "credential_not_found",
666
+ message: "credential not found"
667
+ }, "failed_before_side_effect");
668
+ case "conflict": return await completeWalletCustodyOperation(ctx, authorized.operation, 409, {
669
+ ok: false,
670
+ code: "credential_activity_conflict",
671
+ message: "credential changed; retry"
672
+ }, "failed_before_side_effect");
673
+ case "invalid_envelope_id": return await completeWalletCustodyOperation(ctx, authorized.operation, 400, {
674
+ ok: false,
675
+ code: "invalid_envelope_id",
676
+ message: "credential envelope id is invalid"
677
+ }, "failed_before_side_effect");
678
+ case "invalid_label": return await completeWalletCustodyOperation(ctx, authorized.operation, 400, {
679
+ ok: false,
680
+ code: "invalid_label",
681
+ message: result.reason
682
+ }, "failed_before_side_effect");
683
+ }
684
+ }
685
+ /**
686
+ * Spending a recovery code.
687
+ *
688
+ * The refusal is one shape for every cause — unknown wallet, unknown code,
689
+ * spent code. The domain deliberately makes them indistinguishable so the
690
+ * route cannot be used to count how many of a user's ten codes remain, and
691
+ * this must not helpfully re-separate them on the way out.
692
+ */
693
+ async function handleWalletRecoveryPrepare(ctx) {
694
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_PREPARE_ROUTE_ID);
695
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_PREPARE_ROUTE_ID}`);
696
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
697
+ const body = await readJsonObject(ctx.request);
698
+ let parsed;
699
+ try {
700
+ if (!body) throw new Error("wallet recovery preparation body is required");
701
+ requireExactObjectFields(body, [
702
+ "target",
703
+ "recoveryCodeB64u",
704
+ "reservationId"
705
+ ], "wallet recovery preparation");
706
+ const target = parseWalletRecoveryTargetV1(body.target);
707
+ const recoveryCodeB64u = parseRequiredString(body.recoveryCodeB64u, "recoveryCodeB64u");
708
+ if (!/^[A-Za-z0-9_-]+$/.test(recoveryCodeB64u)) throw new Error("wallet recovery preparation is invalid");
709
+ parsed = {
710
+ target,
711
+ recoveryCodeB64u,
712
+ reservationId: parseRecoveryCodeReservationId(body.reservationId)
713
+ };
714
+ } catch {
715
+ return toFetchRouteResponse({
716
+ status: 400,
717
+ body: {
718
+ ok: false,
719
+ code: "invalid_request",
720
+ message: "wallet recovery preparation is invalid"
721
+ }
722
+ });
723
+ }
724
+ const origin = trimmed(ctx.request.headers.get("origin"));
725
+ if (!origin || parsed.target.kind === "passkey" && !isHostWithinRpId(originHostnameOrEmpty(origin), parsed.target.rpId)) return toFetchRouteResponse({
726
+ status: 400,
727
+ body: {
728
+ ok: false,
729
+ code: "invalid_origin",
730
+ message: "wallet recovery origin does not match the relying party"
731
+ }
732
+ });
733
+ let recoveryCodeBytes;
734
+ try {
735
+ recoveryCodeBytes = base64UrlDecode(parsed.recoveryCodeB64u);
736
+ if (recoveryCodeBytes.length === 0) throw new Error("recovery code is empty");
737
+ } catch {
738
+ return toFetchRouteResponse(refusedSpend());
739
+ }
740
+ try {
741
+ const result = await ctx.service.passkeyCustody.prepareRecovery({
742
+ target: parsed.target,
743
+ origin,
744
+ recoveryCodeBytes,
745
+ reservationId: parsed.reservationId
746
+ });
747
+ switch (result.kind) {
748
+ case "prepared": return toFetchRouteResponse({
749
+ status: 200,
750
+ body: {
751
+ ok: true,
752
+ walletId: result.walletId,
753
+ wrap: result.wrap,
754
+ entries: result.entries,
755
+ keyManifest: result.keyManifest,
756
+ target: result.target,
757
+ recoveryOperationId: result.recoveryOperationId,
758
+ targetDeviceId: result.targetDeviceId,
759
+ targetAuthorityId: result.targetAuthorityId,
760
+ targetWalletAuthMethodId: result.targetWalletAuthMethodId,
761
+ ...result.target.kind === "passkey" ? { registration: result.registration } : {},
762
+ reservationId: result.reservationId,
763
+ reservationExpiresAtMs: result.reservationExpiresAtMs,
764
+ storeVersion: result.storeVersion
765
+ }
766
+ });
767
+ case "conflict": return toFetchRouteResponse({
768
+ status: 409,
769
+ body: {
770
+ ok: false,
771
+ code: "recovery_set_conflict",
772
+ message: "the recovery set changed during this attempt"
773
+ }
774
+ });
775
+ case "refused": return toFetchRouteResponse(refusedSpend());
776
+ case "reserved":
777
+ case "consumed": return toFetchRouteResponse({
778
+ status: 401,
779
+ body: {
780
+ ok: false,
781
+ code: "recovery_code_used",
782
+ message: "that recovery code has already been used"
783
+ }
784
+ });
785
+ case "manifest_unavailable":
786
+ case "registration_unavailable": return toFetchRouteResponse({
787
+ status: 409,
788
+ body: {
789
+ ok: false,
790
+ code: "recovery_preparation_conflict",
791
+ message: "wallet recovery could not be prepared"
792
+ }
793
+ });
794
+ }
795
+ } finally {
796
+ recoveryCodeBytes.fill(0);
797
+ }
798
+ }
799
+ async function handleWalletRecoveryGoogleVerify(ctx) {
800
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_GOOGLE_VERIFY_ROUTE_ID);
801
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_GOOGLE_VERIFY_ROUTE_ID}`);
802
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
803
+ let request;
804
+ try {
805
+ request = parseWalletRecoveryGoogleVerifyRequest(await readJsonObject(ctx.request));
806
+ } catch {
807
+ return walletRecoveryRequestError();
808
+ }
809
+ const requestOrigin = trimmed(ctx.request.headers.get("origin"));
810
+ if (!requestOrigin) return toFetchRouteResponse({
811
+ status: 400,
812
+ body: {
813
+ ok: false,
814
+ code: "invalid_origin",
815
+ message: "wallet recovery origin is required"
816
+ }
817
+ });
818
+ try {
819
+ const result = await ctx.service.passkeyCustody.verifyGoogleRecovery({
820
+ recoveryOperationId: request.recoveryOperationId,
821
+ reservationId: String(request.reservationId),
822
+ idToken: request.idToken,
823
+ requestOrigin,
824
+ clientIp: resolveSourceIpFromFetchHeaders(ctx.request.headers) || void 0
825
+ });
826
+ if (!result.ok) return walletRecoveryGoogleFailureResponse(result);
827
+ return toFetchRouteResponse({
828
+ status: 200,
829
+ body: {
830
+ ok: true,
831
+ recoveryOperationId: result.recoveryOperationId,
832
+ reservationId: result.reservationId,
833
+ challengeId: result.challengeId,
834
+ delivery: result.delivery,
835
+ expiresAtMs: result.expiresAtMs
836
+ }
837
+ });
838
+ } catch {
839
+ return walletRecoveryInternalError();
840
+ }
841
+ }
842
+ async function handleWalletRecoveryEmailOtpVerify(ctx) {
843
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_EMAIL_OTP_VERIFY_ROUTE_ID);
844
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_EMAIL_OTP_VERIFY_ROUTE_ID}`);
845
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
846
+ let request;
847
+ try {
848
+ request = parseWalletRecoveryEmailOtpVerifyRequest(await readJsonObject(ctx.request));
849
+ } catch {
850
+ return walletRecoveryRequestError();
851
+ }
852
+ try {
853
+ const result = await ctx.service.passkeyCustody.verifyRecoveryEmailOtp({
854
+ recoveryOperationId: request.recoveryOperationId,
855
+ reservationId: String(request.reservationId),
856
+ challengeId: String(request.challengeId),
857
+ otpCode: request.otpCode,
858
+ clientIp: resolveSourceIpFromFetchHeaders(ctx.request.headers) || void 0
859
+ });
860
+ if (!result.ok) return walletRecoveryGoogleFailureResponse(result);
861
+ return toFetchRouteResponse({
862
+ status: 200,
863
+ body: {
864
+ ok: true,
865
+ recoveryOperationId: String(result.recovery.recoveryOperationId),
866
+ reservationId: String(result.recovery.reservationId),
867
+ challengeId: String(result.recovery.challengeId)
868
+ }
869
+ });
870
+ } catch {
871
+ return walletRecoveryInternalError();
872
+ }
873
+ }
874
+ async function handleWalletRecoveryEmailOtpRelease(ctx) {
875
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_EMAIL_OTP_RELEASE_ROUTE_ID);
876
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_EMAIL_OTP_RELEASE_ROUTE_ID}`);
877
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
878
+ let request;
879
+ try {
880
+ request = parseWalletRecoveryEmailOtpReleaseRequest(await readJsonObject(ctx.request));
881
+ } catch {
882
+ return walletRecoveryRequestError();
883
+ }
884
+ try {
885
+ const result = await ctx.service.passkeyCustody.releaseRecoveryEmailOtpFactor({
886
+ recoveryOperationId: request.recoveryOperationId,
887
+ reservationId: String(request.reservationId),
888
+ workerEphemeralPublicKey65B64u: request.workerEphemeralPublicKey65B64u
889
+ });
890
+ if (!result.ok) return walletRecoveryGoogleFailureResponse(result);
891
+ switch (result.kind) {
892
+ case "email_otp_factor_release_v1": return toFetchRouteResponse({
893
+ status: 200,
894
+ body: {
895
+ ok: true,
896
+ kind: result.kind,
897
+ recoveryOperationId: String(result.recovery.recoveryOperationId),
898
+ reservationId: String(result.recovery.reservationId),
899
+ challengeId: String(result.recovery.challengeId),
900
+ providerSubject: result.recovery.providerSubject,
901
+ verifiedEmail: result.recovery.verifiedEmail,
902
+ enrollmentId: result.enrollment.enrollmentId,
903
+ enrollmentSealKeyVersion: result.enrollment.enrollmentSealKeyVersion,
904
+ serverEphemeralPublicKey65B64u: result.serverEphemeralPublicKey65B64u,
905
+ nonce12B64u: result.nonce12B64u,
906
+ ciphertextB64u: result.ciphertextB64u
907
+ }
908
+ });
909
+ case "wallet_recovery_google_email_otp_new_enrollment_v1": return toFetchRouteResponse({
910
+ status: 200,
911
+ body: {
912
+ ok: true,
913
+ kind: result.kind,
914
+ recoveryOperationId: String(result.recovery.recoveryOperationId),
915
+ reservationId: String(result.recovery.reservationId),
916
+ enrollment: {
917
+ kind: "create",
918
+ providerSubject: result.enrollment.providerSubject,
919
+ verifiedEmail: result.enrollment.verifiedEmail
920
+ }
921
+ }
922
+ });
923
+ }
924
+ } catch {
925
+ return walletRecoveryInternalError();
926
+ }
927
+ }
928
+ /**
929
+ * Installs the Google/Email OTP recovery target selected by the persisted
930
+ * `otp_verified` attempt. Recovery identity and enrollment identifiers stay
931
+ * server-side; the body can add only a new-enrollment material bundle.
932
+ */
933
+ async function handleWalletRecoveryGoogleEmailOtpFinalize(ctx) {
934
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_GOOGLE_EMAIL_OTP_FINALIZE_ROUTE_ID);
935
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_GOOGLE_EMAIL_OTP_FINALIZE_ROUTE_ID}`);
936
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
937
+ let request;
938
+ try {
939
+ request = parseWalletRecoveryGoogleEmailOtpFinalizeRequest(await readJson(ctx.request));
940
+ } catch {
941
+ return walletRecoveryRequestError();
942
+ }
943
+ const finalizer = ctx.service.passkeyCustody.finalizeGoogleEmailOtpRecovery;
944
+ if (!finalizer) return toFetchRouteResponse({
945
+ status: 503,
946
+ body: {
947
+ ok: false,
948
+ code: "not_configured",
949
+ message: "Google Email OTP recovery is not configured"
950
+ }
951
+ });
952
+ try {
953
+ const result = await finalizer(request);
954
+ switch (result.kind) {
955
+ case "promoted": return toFetchRouteResponse({
956
+ status: 200,
957
+ body: {
958
+ ok: true,
959
+ projection: result.projection
960
+ }
961
+ });
962
+ case "conflict": return toFetchRouteResponse({
963
+ status: 409,
964
+ body: {
965
+ ok: false,
966
+ code: "recovery_conflict",
967
+ message: "wallet recovery conflicted"
968
+ }
969
+ });
970
+ case "refused":
971
+ case "envelope_rejected":
972
+ case "enrollment_rejected": return toFetchRouteResponse({
973
+ status: 400,
974
+ body: {
975
+ ok: false,
976
+ code: "recovery_rejected",
977
+ message: "wallet recovery was rejected"
978
+ }
979
+ });
980
+ }
981
+ } catch {
982
+ return walletRecoveryInternalError();
983
+ }
984
+ }
985
+ function parseWalletRecoveryOperationRequest(body, fields, label) {
986
+ if (!body) throw new Error(`${label} body is required`);
987
+ requireExactObjectFields(body, fields, label);
988
+ return {
989
+ recoveryOperationId: parseRequiredAuthorizationValue(parseWalletRecoveryOperationId(body.recoveryOperationId)),
990
+ reservationId: parseRecoveryCodeReservationId(body.reservationId)
991
+ };
992
+ }
993
+ function parseWalletRecoveryGoogleVerifyRequest(body) {
994
+ return {
995
+ ...parseWalletRecoveryOperationRequest(body, [
996
+ "recoveryOperationId",
997
+ "reservationId",
998
+ "idToken"
999
+ ], "wallet recovery Google verification"),
1000
+ idToken: parseRequiredString(body?.idToken, "idToken")
1001
+ };
1002
+ }
1003
+ function parseWalletRecoveryEmailOtpVerifyRequest(body) {
1004
+ return {
1005
+ ...parseWalletRecoveryOperationRequest(body, [
1006
+ "recoveryOperationId",
1007
+ "reservationId",
1008
+ "challengeId",
1009
+ "otpCode"
1010
+ ], "wallet recovery Email OTP verification"),
1011
+ challengeId: parseRequiredAuthorizationValue(parseEmailOtpChallengeId(body?.challengeId)),
1012
+ otpCode: parseRequiredString(body?.otpCode, "otpCode")
1013
+ };
1014
+ }
1015
+ function parseWalletRecoveryEmailOtpReleaseRequest(body) {
1016
+ return {
1017
+ ...parseWalletRecoveryOperationRequest(body, [
1018
+ "recoveryOperationId",
1019
+ "reservationId",
1020
+ "workerEphemeralPublicKey65B64u"
1021
+ ], "wallet recovery Email OTP factor release"),
1022
+ workerEphemeralPublicKey65B64u: parseRequiredString(body?.workerEphemeralPublicKey65B64u, "workerEphemeralPublicKey65B64u")
1023
+ };
1024
+ }
1025
+ function parseWalletRecoveryGoogleEmailOtpFinalizeRequest(value) {
1026
+ if (!isObject(value)) throw new Error("wallet recovery Google Email OTP finalization body must be an object");
1027
+ const recoveryOperationId = parseWalletRecoveryOperationId(value.recoveryOperationId);
1028
+ if (!recoveryOperationId.ok) throw new Error("wallet recovery Google Email OTP finalization operation is invalid");
1029
+ const reservationId = parseRecoveryCodeReservationId(value.reservationId);
1030
+ const replacementEnvelope = parsePasskeyCustodyEnvelopeRecord(value.replacementEnvelope, "walletRecoveryGoogleEmailOtpFinalize.replacementEnvelope");
1031
+ if (value.kind === "replay") {
1032
+ requireExactObjectFields(value, [
1033
+ "kind",
1034
+ "recoveryOperationId",
1035
+ "reservationId",
1036
+ "replacementEnvelope"
1037
+ ], "wallet recovery Google Email OTP replay");
1038
+ return {
1039
+ kind: "replay",
1040
+ recoveryOperationId: recoveryOperationId.value,
1041
+ reservationId,
1042
+ replacementEnvelope
1043
+ };
1044
+ }
1045
+ if (value.kind !== "finalize") throw new Error("wallet recovery Google Email OTP finalization kind is invalid");
1046
+ requireExactObjectFields(value, [
1047
+ "kind",
1048
+ "recoveryOperationId",
1049
+ "reservationId",
1050
+ "replacementEnvelope",
1051
+ "ecdsaMaterialPossessionProofs",
1052
+ ...value.emailOtpEnrollment === void 0 ? [] : ["emailOtpEnrollment"]
1053
+ ], "wallet recovery Google Email OTP finalization");
1054
+ const emailOtpEnrollment = value.emailOtpEnrollment === void 0 ? null : parseWalletRecoveryGoogleEmailOtpCreateEnrollment(value.emailOtpEnrollment);
1055
+ return {
1056
+ kind: "finalize",
1057
+ recoveryOperationId: recoveryOperationId.value,
1058
+ reservationId,
1059
+ replacementEnvelope,
1060
+ ecdsaMaterialPossessionProofs: parseEcdsaMaterialPossessionProofs(value.ecdsaMaterialPossessionProofs),
1061
+ emailOtpEnrollment
1062
+ };
1063
+ }
1064
+ function parseWalletRecoveryGoogleEmailOtpCreateEnrollment(value) {
1065
+ if (!isObject(value)) throw new Error("new recovery Email enrollment is invalid");
1066
+ requireExactObjectFields(value, ["kind", "material"], "new recovery Email enrollment");
1067
+ if (value.kind !== "create" || !isObject(value.material)) throw new Error("new recovery Email enrollment is invalid");
1068
+ const material = value.material;
1069
+ requireExactObjectFields(material, [
1070
+ "enrollmentSealKeyVersion",
1071
+ "clientUnlockPublicKeyB64u",
1072
+ "unlockKeyVersion",
1073
+ "serverSealedFactorCiphertextB64u"
1074
+ ], "new recovery Email enrollment material");
1075
+ return {
1076
+ kind: "create",
1077
+ material: {
1078
+ enrollmentSealKeyVersion: parseRequiredString(material.enrollmentSealKeyVersion, "enrollmentSealKeyVersion"),
1079
+ clientUnlockPublicKeyB64u: parseRequiredString(material.clientUnlockPublicKeyB64u, "clientUnlockPublicKeyB64u"),
1080
+ unlockKeyVersion: parseRequiredString(material.unlockKeyVersion, "unlockKeyVersion"),
1081
+ serverSealedFactorCiphertextB64u: parseRequiredString(material.serverSealedFactorCiphertextB64u, "serverSealedFactorCiphertextB64u")
1082
+ }
1083
+ };
1084
+ }
1085
+ function walletRecoveryRequestError() {
1086
+ return toFetchRouteResponse({
1087
+ status: 400,
1088
+ body: {
1089
+ ok: false,
1090
+ code: "invalid_body",
1091
+ message: "wallet recovery request is invalid"
1092
+ }
1093
+ });
1094
+ }
1095
+ function walletRecoveryInternalError() {
1096
+ return toFetchRouteResponse({
1097
+ status: 500,
1098
+ body: {
1099
+ ok: false,
1100
+ code: "internal",
1101
+ message: "wallet recovery could not continue"
1102
+ }
1103
+ });
1104
+ }
1105
+ function walletRecoveryGoogleFailureResponse(result) {
1106
+ return toFetchRouteResponse({
1107
+ status: walletRecoveryGoogleStatusCode(result.code),
1108
+ body: {
1109
+ ok: false,
1110
+ code: result.code,
1111
+ message: "wallet recovery could not continue"
1112
+ }
1113
+ });
1114
+ }
1115
+ function walletRecoveryGoogleStatusCode(code) {
1116
+ if (code === "internal") return 500;
1117
+ if (code === "not_configured") return 503;
1118
+ if (code === "recovery_conflict") return 409;
1119
+ if (code === "rate_limited" || code === "otp_locked_out" || code === "otp_attempts_exhausted") return 429;
1120
+ if (code === "recovery_attempt_unavailable" || code === "provider_identity_mismatch" || code === "challenge_expired_or_invalid" || code === "invalid_otp") return 401;
1121
+ return emailOtpStatusCode(code);
1122
+ }
1123
+ function refusedSpend() {
1124
+ return {
1125
+ status: 401,
1126
+ body: {
1127
+ ok: false,
1128
+ code: "recovery_code_rejected",
1129
+ message: "that recovery code cannot be used"
1130
+ }
1131
+ };
1132
+ }
1133
+ function parseWireRequest(body, originHeader) {
1134
+ if (!body || typeof body !== "object") return null;
1135
+ const challengeId = trimmed(body.challengeId);
1136
+ const locator = parseEnvelopeRetrievalLocator(body.locator);
1137
+ const webauthnAuthentication = parseWebAuthnAuthenticationCredential(body.webauthnAuthentication);
1138
+ if (!challengeId || !locator || !webauthnAuthentication) return null;
1139
+ const expectedOrigin = trimmed(originHeader);
1140
+ if (!expectedOrigin) return null;
1141
+ return {
1142
+ challengeId,
1143
+ expectedOrigin,
1144
+ locator,
1145
+ webauthnAuthentication
1146
+ };
1147
+ }
1148
+ function parseEnvelopeRetrievalLocator(value) {
1149
+ if (!isObject(value) || !isObject(value.factor)) return null;
1150
+ try {
1151
+ requireExactObjectFields(value, ["walletId", "factor"], "custody locator");
1152
+ requireExactObjectFields(value.factor, [
1153
+ "kind",
1154
+ "rpId",
1155
+ "credentialIdB64u"
1156
+ ], "custody locator.factor");
1157
+ } catch {
1158
+ return null;
1159
+ }
1160
+ const walletId = parseWalletId(value.walletId);
1161
+ const rpId = parseWebAuthnRpId(value.factor.rpId);
1162
+ const credentialIdB64u = parseWebAuthnCredentialIdB64u(value.factor.credentialIdB64u);
1163
+ if (!walletId.ok || !rpId.ok || !credentialIdB64u.ok) return null;
1164
+ if (value.factor.kind !== "passkey") return null;
1165
+ return {
1166
+ walletId: walletId.value,
1167
+ factor: {
1168
+ kind: "passkey",
1169
+ rpId: rpId.value,
1170
+ credentialIdB64u: credentialIdB64u.value
1171
+ }
1172
+ };
1173
+ }
1174
+ function trimmed(value) {
1175
+ return typeof value === "string" ? value.trim() : "";
1176
+ }
1177
+ async function readJsonObject(request) {
1178
+ const value = await readJson(request);
1179
+ return isObject(value) ? value : null;
1180
+ }
1181
+ function isObject(value) {
1182
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1183
+ }
1184
+ function parseRecoveryCodeLocatorRecords(values, walletId, recoveryKeyIds) {
1185
+ if (values.length !== recoveryKeyIds.length) throw new Error("recovery code locators do not match the recovery wraps");
1186
+ const locators = values.map((value, index) => {
1187
+ requireExactObjectFields(value, ["locatorB64u", "recoveryKeyId"], "recovery code locator");
1188
+ const locatorB64u = parseRecoveryCodeLocatorV1(value.locatorB64u);
1189
+ const recoveryKeyId = parseDerivedWalletRecoveryKeyId(value.recoveryKeyId);
1190
+ const expectedRecoveryKeyId = recoveryKeyIds[index];
1191
+ if (!expectedRecoveryKeyId || String(recoveryKeyId) !== String(expectedRecoveryKeyId)) throw new Error("recovery code locator does not match its recovery wrap");
1192
+ return {
1193
+ locatorB64u,
1194
+ walletId,
1195
+ recoveryKeyId
1196
+ };
1197
+ });
1198
+ if (new Set(locators.map((locator) => String(locator.locatorB64u))).size !== locators.length) throw new Error("recovery code locators must be unique");
1199
+ return locators;
1200
+ }
1201
+ /**
1202
+ * Installing the credential a recovery enrolled.
1203
+ *
1204
+ * The envelope arrives sealed, but its complete wire shape is parsed here.
1205
+ * The server has no seed and cannot open the ciphertext. Exact key coverage
1206
+ * comes from its signer registry and durable activation receipts.
1207
+ */
1208
+ async function handleWalletRecoveryFinalize(ctx) {
1209
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_FINALIZE_ROUTE_ID);
1210
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_FINALIZE_ROUTE_ID}`);
1211
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1212
+ let requestBody;
1213
+ try {
1214
+ requestBody = parseWalletRecoveryFinalizeBody(await readJson(ctx.request));
1215
+ } catch {
1216
+ return toFetchRouteResponse({
1217
+ status: 400,
1218
+ body: {
1219
+ ok: false,
1220
+ code: "invalid_request",
1221
+ message: "wallet recovery finalization is invalid"
1222
+ }
1223
+ });
1224
+ }
1225
+ let serviceRequest;
1226
+ if (requestBody.kind === "finalize") {
1227
+ const expectedOrigin = trimmed(ctx.request.headers.get("origin"));
1228
+ if (!expectedOrigin) return toFetchRouteResponse({
1229
+ status: 400,
1230
+ body: {
1231
+ ok: false,
1232
+ code: "invalid_origin",
1233
+ message: "wallet recovery finalization requires the request Origin header"
1234
+ }
1235
+ });
1236
+ serviceRequest = {
1237
+ kind: "finalize",
1238
+ walletId: requestBody.walletId,
1239
+ reservationId: requestBody.reservationId,
1240
+ recoveryOperationId: requestBody.recoveryOperationId,
1241
+ targetDeviceId: requestBody.targetDeviceId,
1242
+ targetAuthorityId: requestBody.targetAuthorityId,
1243
+ targetWalletAuthMethodId: requestBody.targetWalletAuthMethodId,
1244
+ challengeId: requestBody.challengeId,
1245
+ replacementId: requestBody.replacementId,
1246
+ webauthnRegistration: requestBody.webauthnRegistration,
1247
+ expectedOrigin,
1248
+ replacementEnvelope: requestBody.replacementEnvelope,
1249
+ ecdsaMaterialPossessionProofs: requestBody.ecdsaMaterialPossessionProofs
1250
+ };
1251
+ } else serviceRequest = {
1252
+ kind: "replay",
1253
+ walletId: requestBody.walletId,
1254
+ reservationId: requestBody.reservationId,
1255
+ recoveryOperationId: requestBody.recoveryOperationId,
1256
+ targetDeviceId: requestBody.targetDeviceId,
1257
+ targetAuthorityId: requestBody.targetAuthorityId,
1258
+ targetWalletAuthMethodId: requestBody.targetWalletAuthMethodId,
1259
+ replacementId: requestBody.replacementId,
1260
+ replacementEnvelope: requestBody.replacementEnvelope
1261
+ };
1262
+ const result = await ctx.service.passkeyCustody.finalizeRecovery(serviceRequest);
1263
+ switch (result.kind) {
1264
+ case "promoted": return toFetchRouteResponse({
1265
+ status: 200,
1266
+ body: {
1267
+ ok: true,
1268
+ projection: result.projection
1269
+ }
1270
+ });
1271
+ case "conflict": return toFetchRouteResponse({
1272
+ status: 409,
1273
+ body: {
1274
+ ok: false,
1275
+ code: "recovery_conflict",
1276
+ message: "wallet recovery conflicted"
1277
+ }
1278
+ });
1279
+ case "refused":
1280
+ case "envelope_rejected":
1281
+ case "registration_rejected": return toFetchRouteResponse({
1282
+ status: 400,
1283
+ body: {
1284
+ ok: false,
1285
+ code: "recovery_rejected",
1286
+ message: "wallet recovery was rejected"
1287
+ }
1288
+ });
1289
+ }
1290
+ }
1291
+ function parseWalletRecoveryFinalizeBody(value) {
1292
+ if (!isObject(value)) throw new Error("wallet recovery finalization body must be an object");
1293
+ const walletId = parseWalletId(value.walletId);
1294
+ const recoveryOperationId = parseWalletRecoveryOperationId(value.recoveryOperationId);
1295
+ const targetDeviceId = parseDeviceId(value.targetDeviceId);
1296
+ const targetAuthorityId = parseWalletAuthorityId(value.targetAuthorityId);
1297
+ const targetWalletAuthMethodId = parseWalletAuthMethodId(value.targetWalletAuthMethodId);
1298
+ if (!walletId.ok || !recoveryOperationId.ok || !targetDeviceId.ok || !targetAuthorityId.ok || !targetWalletAuthMethodId.ok) throw new Error("wallet recovery finalization identity is invalid");
1299
+ const identity = {
1300
+ walletId: walletId.value,
1301
+ reservationId: parseRecoveryCodeReservationId(value.reservationId),
1302
+ recoveryOperationId: recoveryOperationId.value,
1303
+ targetDeviceId: targetDeviceId.value,
1304
+ targetAuthorityId: targetAuthorityId.value,
1305
+ targetWalletAuthMethodId: targetWalletAuthMethodId.value,
1306
+ replacementId: parseRequiredString(value.replacementId, "replacementId"),
1307
+ replacementEnvelope: parsePasskeyCustodyEnvelopeRecord(value.replacementEnvelope, "walletRecoveryFinalize.replacementEnvelope")
1308
+ };
1309
+ if (value.kind === "replay") {
1310
+ requireExactObjectFields(value, [
1311
+ "kind",
1312
+ "walletId",
1313
+ "reservationId",
1314
+ "recoveryOperationId",
1315
+ "targetDeviceId",
1316
+ "targetAuthorityId",
1317
+ "targetWalletAuthMethodId",
1318
+ "replacementId",
1319
+ "replacementEnvelope"
1320
+ ], "wallet recovery replay");
1321
+ return {
1322
+ kind: "replay",
1323
+ ...identity
1324
+ };
1325
+ }
1326
+ if (value.kind !== "finalize") throw new Error("wallet recovery finalization kind is invalid");
1327
+ requireExactObjectFields(value, [
1328
+ "kind",
1329
+ "walletId",
1330
+ "reservationId",
1331
+ "recoveryOperationId",
1332
+ "targetDeviceId",
1333
+ "targetAuthorityId",
1334
+ "targetWalletAuthMethodId",
1335
+ "challengeId",
1336
+ "replacementId",
1337
+ "webauthnRegistration",
1338
+ "replacementEnvelope",
1339
+ "ecdsaMaterialPossessionProofs"
1340
+ ], "wallet recovery finalization");
1341
+ if (!isObject(value.webauthnRegistration)) throw new Error("wallet recovery finalization registration is invalid");
1342
+ return {
1343
+ kind: "finalize",
1344
+ ...identity,
1345
+ challengeId: parseRequiredString(value.challengeId, "challengeId"),
1346
+ webauthnRegistration: value.webauthnRegistration,
1347
+ ecdsaMaterialPossessionProofs: parseEcdsaMaterialPossessionProofs(value.ecdsaMaterialPossessionProofs)
1348
+ };
1349
+ }
1350
+ function parseEcdsaMaterialPossessionProofs(value) {
1351
+ if (!Array.isArray(value)) throw new Error("wallet recovery finalization ECDSA proofs must be an array");
1352
+ const seen = /* @__PURE__ */ new Set();
1353
+ return value.map((item, index) => {
1354
+ if (!isObject(item)) throw new Error(`wallet recovery finalization ECDSA proof ${index} is invalid`);
1355
+ requireExactObjectFields(item, ["keySetId", "proof"], `ECDSA proof ${index}`);
1356
+ const keySetId = trimmed(item.keySetId);
1357
+ if (!/^evm_family_ecdsa:\S+$/.test(keySetId)) throw new Error(`wallet recovery finalization ECDSA proof ${index} is invalid`);
1358
+ if (seen.has(keySetId)) throw new Error(`wallet recovery finalization ECDSA proof ${index} is duplicated`);
1359
+ seen.add(keySetId);
1360
+ return {
1361
+ keySetId,
1362
+ proof: parseWalletRecoveryEcdsaPossessionProofV1(item.proof)
1363
+ };
1364
+ });
1365
+ }
1366
+ function authorizedOperationReplay(operation) {
1367
+ if (operation.lifecycle !== "completed") return toFetchRouteResponse({
1368
+ status: 409,
1369
+ body: {
1370
+ ok: false,
1371
+ code: "recovery_in_progress",
1372
+ message: "wallet recovery is still in progress"
1373
+ }
1374
+ });
1375
+ return new Response(operation.response.bodyText, {
1376
+ status: operation.response.status,
1377
+ headers: { "content-type": operation.response.contentType }
1378
+ });
1379
+ }
1380
+ async function handleWalletRecoveryBackupAcknowledge(ctx) {
1381
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_ACK_ROUTE_ID);
1382
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_ACK_ROUTE_ID}`);
1383
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1384
+ const body = await readJsonObject(ctx.request);
1385
+ let walletId = "";
1386
+ try {
1387
+ if (!body) throw new Error("acknowledgement body is required");
1388
+ requireExactObjectFields(body, ["walletId"], "recovery backup acknowledgement");
1389
+ walletId = parseRequiredString(body.walletId, "walletId");
1390
+ } catch {
1391
+ return toFetchRouteResponse({
1392
+ status: 400,
1393
+ body: {
1394
+ ok: false,
1395
+ code: "invalid_request",
1396
+ message: "an acknowledgement needs a wallet"
1397
+ }
1398
+ });
1399
+ }
1400
+ const result = await ctx.service.passkeyCustody.acknowledgeRecoveryBackup({ walletId });
1401
+ if (result.kind === "no_recovery_set") return toFetchRouteResponse({
1402
+ status: 404,
1403
+ body: {
1404
+ ok: false,
1405
+ code: "no_recovery_set",
1406
+ message: "this wallet has no issued recovery codes to acknowledge"
1407
+ }
1408
+ });
1409
+ return toFetchRouteResponse({
1410
+ status: 200,
1411
+ body: {
1412
+ ok: true,
1413
+ issuedAtMs: result.issuedAtMs
1414
+ }
1415
+ });
1416
+ }
1417
+ /**
1418
+ * Rotating a wallet's recovery codes.
1419
+ *
1420
+ * The wraps pass through as opaque records — the server cannot check that
1421
+ * they wrap the right KEK, because it has neither. What it does check is the
1422
+ * set's shape, and it does so before writing: a set that reaches the store
1423
+ * with the wrong number of wraps leaves a wallet holding fewer codes than its
1424
+ * owner wrote down, and nothing surfaces that until someone counts.
1425
+ */
1426
+ async function handleWalletRecoveryRotate(ctx) {
1427
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_ROTATE_ROUTE_ID);
1428
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_ROTATE_ROUTE_ID}`);
1429
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1430
+ const body = await readJsonObject(ctx.request);
1431
+ const walletId = trimmed(body?.walletId);
1432
+ const expectedStoreVersion = trimmed(body?.expectedStoreVersion);
1433
+ const manifestKekWraps = Array.isArray(body?.manifestKekWraps) ? body.manifestKekWraps.filter(isObject) : [];
1434
+ const entries = Array.isArray(body?.entries) ? body.entries.filter(isObject) : [];
1435
+ const rawRecoveryCodeLocators = Array.isArray(body?.recoveryCodeLocators) ? body.recoveryCodeLocators : [];
1436
+ const recoveryCodeLocators = rawRecoveryCodeLocators.filter(isObject);
1437
+ if (!walletId || !expectedStoreVersion || manifestKekWraps.length === 0 || entries.length !== 1 || recoveryCodeLocators.length !== rawRecoveryCodeLocators.length || recoveryCodeLocators.length !== manifestKekWraps.length) return toFetchRouteResponse({
1438
+ status: 400,
1439
+ body: {
1440
+ ok: false,
1441
+ code: "invalid_request",
1442
+ message: "a rotation needs a wallet and its complete replacement recovery set"
1443
+ }
1444
+ });
1445
+ const parsedWalletId = parseWalletId(walletId);
1446
+ if (!parsedWalletId.ok) return toFetchRouteResponse({
1447
+ status: 400,
1448
+ body: {
1449
+ ok: false,
1450
+ code: "invalid_request",
1451
+ message: "wallet id is invalid"
1452
+ }
1453
+ });
1454
+ let replacement;
1455
+ let parsedRecoveryCodeLocators;
1456
+ try {
1457
+ replacement = parseWalletRecoverySetRotationWireV1({
1458
+ walletId,
1459
+ manifestKekWraps,
1460
+ entries
1461
+ }, { expectedWalletId: parsedWalletId.value });
1462
+ parsedRecoveryCodeLocators = parseRecoveryCodeLocatorRecords(recoveryCodeLocators, parsedWalletId.value, replacement.manifestKekWraps.map((wrap) => wrap.recoveryKeyId));
1463
+ } catch (error) {
1464
+ return toFetchRouteResponse({
1465
+ status: 400,
1466
+ body: {
1467
+ ok: false,
1468
+ code: "invalid_request",
1469
+ message: error instanceof Error ? error.message : "replacement recovery set is invalid"
1470
+ }
1471
+ });
1472
+ }
1473
+ const authorized = await authorizeWalletCustodyOperation({
1474
+ ctx,
1475
+ walletId,
1476
+ operation: "recovery_rotate",
1477
+ payload: {
1478
+ walletId,
1479
+ expectedStoreVersion,
1480
+ manifestKekWraps,
1481
+ entries,
1482
+ recoveryCodeLocators
1483
+ },
1484
+ factorProof: body?.factorProof
1485
+ });
1486
+ if (!authorized.ok) return authorized.response;
1487
+ const result = await ctx.service.passkeyCustody.rotateRecoveryCodes({
1488
+ walletId,
1489
+ replacement,
1490
+ recoveryCodeLocators: parsedRecoveryCodeLocators,
1491
+ expectedStoreVersion
1492
+ });
1493
+ switch (result.kind) {
1494
+ case "rotated": return await completeWalletCustodyOperation(ctx, authorized.operation, 200, {
1495
+ ok: true,
1496
+ issuedAtMs: result.issuedAtMs,
1497
+ storeVersion: result.storeVersion
1498
+ });
1499
+ case "no_recovery_set": return await completeWalletCustodyOperation(ctx, authorized.operation, 404, {
1500
+ ok: false,
1501
+ code: "no_recovery_set",
1502
+ message: "this wallet has no codes to rotate"
1503
+ }, "failed_before_side_effect");
1504
+ case "conflict": return await completeWalletCustodyOperation(ctx, authorized.operation, 409, {
1505
+ ok: false,
1506
+ code: "recovery_set_conflict",
1507
+ message: "the recovery set changed during this rotation; try again"
1508
+ }, "failed_before_side_effect");
1509
+ case "rejected": return await completeWalletCustodyOperation(ctx, authorized.operation, 400, {
1510
+ ok: false,
1511
+ code: "rotation_rejected",
1512
+ message: result.reason
1513
+ }, "failed_before_side_effect");
1514
+ }
1515
+ }
1516
+ async function handleWalletRecoveryRead(ctx) {
1517
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_READ_ROUTE_ID);
1518
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_READ_ROUTE_ID}`);
1519
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1520
+ const body = await readJsonObject(ctx.request);
1521
+ const walletId = trimmed(body?.walletId);
1522
+ if (!walletId) return toFetchRouteResponse({
1523
+ status: 400,
1524
+ body: {
1525
+ ok: false,
1526
+ code: "invalid_request",
1527
+ message: "a read needs a wallet"
1528
+ }
1529
+ });
1530
+ const authorized = await authorizeWalletCustodyOperation({
1531
+ ctx,
1532
+ walletId,
1533
+ operation: "recovery_read",
1534
+ payload: { walletId },
1535
+ factorProof: body?.factorProof
1536
+ });
1537
+ if (!authorized.ok) return authorized.response;
1538
+ const result = await ctx.service.passkeyCustody.readRecoverySet({ walletId });
1539
+ if (result.kind === "no_recovery_set") return await completeWalletCustodyOperation(ctx, authorized.operation, 404, {
1540
+ ok: false,
1541
+ code: "no_recovery_set",
1542
+ message: "this wallet has no issued recovery codes"
1543
+ }, "failed_before_side_effect");
1544
+ return await completeWalletCustodyOperation(ctx, authorized.operation, 200, {
1545
+ ok: true,
1546
+ recoverySet: result.record,
1547
+ storeVersion: result.storeVersion
1548
+ });
1549
+ }
1550
+ /**
1551
+ * Reporting recovery status to the wallet's owner.
1552
+ *
1553
+ * The wallet comes from the path. Origin binding keeps this count endpoint
1554
+ * scoped to browser callers without exposing recovery identifiers.
1555
+ *
1556
+ * Counts only, never identifiers. Which codes remain is not something even
1557
+ * the owner's browser needs, and a list would be one leak away from being
1558
+ * useful to someone else.
1559
+ */
1560
+ async function handleWalletRecoveryStatus(ctx) {
1561
+ const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_STATUS_ROUTE_ID);
1562
+ if (!route) throw new Error(`Missing route definition for ${RECOVERY_STATUS_ROUTE_ID}`);
1563
+ if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1564
+ const walletId = walletIdFromPath(route.path, ctx.pathname);
1565
+ if (!walletId) return toFetchRouteResponse({
1566
+ status: 400,
1567
+ body: {
1568
+ ok: false,
1569
+ code: "invalid_request",
1570
+ message: "status needs a wallet"
1571
+ }
1572
+ });
1573
+ const origin = trimmed(ctx.request.headers.get("origin"));
1574
+ try {
1575
+ parseSessionOrigin(origin);
1576
+ } catch {
1577
+ return toFetchRouteResponse({
1578
+ status: 400,
1579
+ body: {
1580
+ ok: false,
1581
+ code: "invalid_origin",
1582
+ message: "request Origin is invalid"
1583
+ }
1584
+ });
1585
+ }
1586
+ const result = await ctx.service.passkeyCustody.readRecoveryStatus({ walletId });
1587
+ if (result.kind === "no_recovery_set") return toFetchRouteResponse({
1588
+ status: 404,
1589
+ body: {
1590
+ ok: false,
1591
+ code: "no_recovery_set",
1592
+ message: "this wallet has no recovery codes"
1593
+ }
1594
+ });
1595
+ return toFetchRouteResponse({
1596
+ status: 200,
1597
+ body: {
1598
+ ok: true,
1599
+ activeCodeCount: result.activeCodeCount,
1600
+ totalCodeCount: result.totalCodeCount,
1601
+ issuedAtMs: result.issuedAtMs,
1602
+ storeVersion: result.storeVersion,
1603
+ backupOutstanding: result.backupOutstanding
1604
+ }
1605
+ });
1606
+ }
1607
+ function walletIdFromPath(routePath, pathname) {
1608
+ const routeSegments = routePath.split("/").filter(Boolean);
1609
+ const pathSegments = pathname.split("/").filter(Boolean);
1610
+ const index = routeSegments.indexOf(":walletId");
1611
+ if (index < 0) return "";
1612
+ const segment = pathSegments[index];
1613
+ return segment ? decodeURIComponent(segment).trim() : "";
1614
+ }
1615
+ //#endregion
1616
+ export { handlePasskeyCustody, handleWalletCustodyCredentialLabel, handleWalletCustodyCredentialsList, handleWalletCustodyEmailOtpChallenge, handleWalletCustodyEnvelopeOwnershipUpgrade, handleWalletRecoveryBackupAcknowledge, handleWalletRecoveryEmailOtpRelease, handleWalletRecoveryEmailOtpVerify, handleWalletRecoveryFinalize, handleWalletRecoveryGoogleEmailOtpFinalize, handleWalletRecoveryGoogleVerify, handleWalletRecoveryPrepare, handleWalletRecoveryRead, handleWalletRecoveryRotate, handleWalletRecoveryStatus };
1617
+
1618
+ //# sourceMappingURL=passkeyCustody.js.map