@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,2018 @@
1
+ import { parseChallengeSubjectId, parseEmailOtpChallengeId, parseOrgId, parseProviderSubject, parseWalletAuthMethodId, parseWebAuthnCredentialIdB64u, parseWebAuthnRpId } from "../../../../shared-ts/src/utils/domainIds.js";
2
+ import { base64UrlDecode, base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
3
+ import { alphabetizeStringify } from "../../../../shared-ts/src/utils/digests.js";
4
+ import "../../../../shared-ts/src/utils/encoders.js";
5
+ import { buildDelegatedWalletAuthorityV1, buildFullOwnerPermissionsV1, sameDelegatedWalletAuthorityV1 } from "../../../../shared-ts/src/authorization/delegatedAuthority.js";
6
+ import { parseWalletAddAuthMethodRegistrationOptions } from "../../../../shared-ts/src/utils/addAuthMethodRegistration.js";
7
+ import { addAuthMethodIntentGrantFromString, buildWalletAuthMethodRecordV2, computeAddAuthMethodIntentDigestB64u, computeWalletAuthMethodRevokeOperationFingerprintV1, normalizeEmailOtpRegistrationProof } from "../../../../shared-ts/src/utils/registrationIntent.js";
8
+ import { deriveWebAuthnAuthenticatorDeviceInfo } from "../../../../shared-ts/src/utils/webauthnDeviceInfo.js";
9
+ import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
10
+ import "../../../../shared-ts/src/utils/validation.js";
11
+ import { normalizeRuntimePolicyScope } from "../../../../shared-ts/src/threshold/signingRootScope.js";
12
+ import { buildEmailOtpWalletAuthAuthority, walletAuthAuthorityRef } from "../../../../shared-ts/src/utils/walletAuthAuthority.js";
13
+ import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
14
+ import { PASSKEY_PRF_FIRST_SALT_V1, PASSKEY_PRF_SECOND_SALT_V1 } from "../../../../shared-ts/src/utils/signingSessionSeal.js";
15
+ import { parsePasskeyCustodyEnvelopeRecord } from "../../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
16
+ import "../../../../shared-ts/src/passkey-custody/index.js";
17
+ import { parseWebAuthnClientDataJsonBase64url, webAuthnOriginHostnameOrEmpty } from "../../../auth/webAuthnCredentialCodecs.js";
18
+ import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_ACTIONS, WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
19
+ import { resolveWalletAuthMethodIdForAuthority } from "../../../../core/signingLanes/WalletExecutionLaneProjection.js";
20
+ import { toRecordValue } from "../auth/d1RouterApiAuthBoundary.js";
21
+ import { d1HostIsWithinWebAuthnRpId, resolveD1AddAuthMethodExistingAuth, resolveD1AddSignerExistingAuth, verifyD1LinkedDeviceFreshRevokeProofV1, walletAuthAuthorityFromRegistrationAuthority } from "./d1WalletAuthMethodBoundary.js";
22
+ import { parseWalletIdForIntent } from "../registration/d1RegistrationCeremonyRecords.js";
23
+ import { expiredGoogleEmailOtpRegistrationAttemptRecord, pendingGoogleEmailOtpRegistrationAttemptWithSelectedCandidate, runtimePolicyScopeKey } from "../emailOtp/d1GoogleEmailOtpRegistrationRecords.js";
24
+ import { admitAddWalletAuthMethod } from "../../../../shared-ts/src/utils/addWalletAuthMethod.js";
25
+ //#region src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.ts
26
+ /** Long enough for a device to retry across a reload, short of ceremony scale. */
27
+ const ADD_AUTH_METHOD_FINALIZE_REPLAY_TTL_MS = 1440 * 60 * 1e3;
28
+ function isPasskeyAddAuthMethodIntent(intent) {
29
+ return intent.authMethod.kind === "passkey";
30
+ }
31
+ function isEmailOtpAddAuthMethodIntent(intent) {
32
+ return intent.authMethod.kind === "email_otp";
33
+ }
34
+ function isActiveWalletAuthMethodRecordV2(record) {
35
+ return record.status === "active";
36
+ }
37
+ function requireStoredRpId(raw) {
38
+ const parsed = parseWebAuthnRpId(raw);
39
+ if (!parsed.ok) throw new Error("Stored passkey RP ID is invalid");
40
+ return parsed.value;
41
+ }
42
+ function requireStoredCredentialId(raw) {
43
+ const parsed = parseWebAuthnCredentialIdB64u(raw);
44
+ if (!parsed.ok) throw new Error("Stored passkey credential ID is invalid");
45
+ return parsed.value;
46
+ }
47
+ function errorMessage(error) {
48
+ return error instanceof Error ? error.message : String(error || "");
49
+ }
50
+ async function resolveActiveAddAuthMethodSource(input) {
51
+ const record = input.auth.kind === "email_otp" ? input.auth.authorityRef.walletId !== input.walletId ? null : await input.walletAuthMethodStore.readByIdV2({ walletAuthMethodId: input.auth.authorityRef.walletAuthMethodId }) : await input.walletAuthMethodStore.getPasskeyV2({
52
+ rpId: input.auth.rpId,
53
+ credentialIdB64u: input.auth.credentialIdB64u
54
+ });
55
+ if (!record || record.status !== "active" || record.walletId !== input.walletId) return null;
56
+ if (input.auth.kind === "email_otp") return record.kind === "email_otp" ? record : null;
57
+ return record.kind === "passkey" ? record : null;
58
+ }
59
+ function buildActiveAddedWalletAuthMethodV2(input) {
60
+ let record;
61
+ switch (input.authority.kind) {
62
+ case "passkey":
63
+ record = buildWalletAuthMethodRecordV2({
64
+ version: "wallet_auth_method_v2",
65
+ walletAuthMethodId: input.walletAuthMethodId,
66
+ walletId: input.authority.walletId,
67
+ walletAuthorityId: input.walletAuthorityId,
68
+ kind: "passkey",
69
+ status: "active",
70
+ rpId: input.authority.rpId,
71
+ credentialIdB64u: requireStoredCredentialId(input.authority.credentialIdB64u),
72
+ credentialPublicKeyB64u: input.authority.credentialPublicKeyB64u,
73
+ counter: input.authority.counter,
74
+ createdAtMs: input.now,
75
+ updatedAtMs: input.now,
76
+ activatedAtMs: input.now
77
+ });
78
+ break;
79
+ case "email_otp":
80
+ record = buildWalletAuthMethodRecordV2({
81
+ version: "wallet_auth_method_v2",
82
+ walletAuthMethodId: input.walletAuthMethodId,
83
+ walletId: input.authority.walletId,
84
+ walletAuthorityId: input.walletAuthorityId,
85
+ kind: "email_otp",
86
+ status: "active",
87
+ emailHashHex: input.authority.emailHashHex,
88
+ registrationAuthorityId: input.authority.registrationAuthorityId,
89
+ createdAtMs: input.now,
90
+ updatedAtMs: input.now,
91
+ activatedAtMs: input.now
92
+ });
93
+ break;
94
+ default: return unreachableRegistrationStartAuthority(input.authority);
95
+ }
96
+ if (record.status !== "active") throw new Error("Added wallet auth method must be active");
97
+ return record;
98
+ }
99
+ function bindEmailOtpAuthorityToMethod(authority, walletAuthMethodId) {
100
+ return {
101
+ walletId: authority.walletId,
102
+ factor: authority.factor,
103
+ verifier: authority.verifier,
104
+ bindingId: walletAuthMethodId
105
+ };
106
+ }
107
+ function isFullOwnerAuthorityV1(authority) {
108
+ return sameDelegatedWalletAuthorityV1(buildDelegatedWalletAuthorityV1({ permissions: authority.permissions }), buildDelegatedWalletAuthorityV1({ permissions: buildFullOwnerPermissionsV1() }));
109
+ }
110
+ function walletAuthMethodRevokedResponse(walletId, record) {
111
+ switch (record.kind) {
112
+ case "passkey": return {
113
+ ok: true,
114
+ walletId,
115
+ authMethod: {
116
+ kind: "passkey",
117
+ status: "revoked"
118
+ },
119
+ rpId: record.rpId
120
+ };
121
+ case "email_otp": return {
122
+ ok: true,
123
+ walletId,
124
+ authMethod: {
125
+ kind: "email_otp",
126
+ status: "revoked"
127
+ }
128
+ };
129
+ default: return unreachableRevokedMethodKind(record);
130
+ }
131
+ }
132
+ function bytesToHex(bytes) {
133
+ let hex = "";
134
+ for (const byte of bytes) hex += byte.toString(16).padStart(2, "0");
135
+ return hex;
136
+ }
137
+ function runtimePolicyScopeKeyForRegistrationIntent(input) {
138
+ try {
139
+ return runtimePolicyScopeKey(normalizeRuntimePolicyScope(input));
140
+ } catch {
141
+ return "";
142
+ }
143
+ }
144
+ function unreachableAddAuthMethodEmailOtpTarget(value) {
145
+ throw new Error(`Unhandled Email OTP add-auth-method target: ${String(value)}`);
146
+ }
147
+ function unreachableRevokedMethodKind(value) {
148
+ throw new Error(`Unhandled revoked wallet auth-method kind: ${String(value)}`);
149
+ }
150
+ function unreachableRegistrationStartAuthority(value) {
151
+ throw new Error(`Unhandled registration start authority kind: ${String(value)}`);
152
+ }
153
+ function custodyFactorFromAddAuthMethodAuth(auth) {
154
+ switch (auth.kind) {
155
+ case "webauthn_assertion": return {
156
+ kind: "passkey",
157
+ rpId: requireStoredRpId(auth.rpId),
158
+ credentialIdB64u: requireStoredCredentialId(auth.credentialIdB64u)
159
+ };
160
+ case "wallet_session": return {
161
+ kind: "passkey",
162
+ rpId: requireStoredRpId(auth.rpId),
163
+ credentialIdB64u: requireStoredCredentialId(auth.credentialIdB64u)
164
+ };
165
+ case "email_otp": return {
166
+ kind: "email_otp",
167
+ enrollmentId: auth.enrollmentId,
168
+ enrollmentSealKeyVersion: auth.enrollmentSealKeyVersion
169
+ };
170
+ default: return unreachableRegistrationStartAuthority(auth);
171
+ }
172
+ }
173
+ async function loadSimpleWebAuthnServer() {
174
+ try {
175
+ return await import("@simplewebauthn/server");
176
+ } catch (error) {
177
+ throw new Error(`Server WebAuthn route selected but '@simplewebauthn/server' dependency is not available: ${errorMessage(error) || "import failed"}`);
178
+ }
179
+ }
180
+ async function buildAddedPasskeyCredentialBinding(input) {
181
+ if (input.ceremony.auth.kind === "email_otp") {
182
+ const base = {
183
+ version: "webauthn_credential_binding_v1",
184
+ rpId: input.rpId,
185
+ credentialIdB64u: input.credentialIdB64u,
186
+ userId: String(input.walletId),
187
+ createdAtMs: input.now,
188
+ updatedAtMs: input.now
189
+ };
190
+ const [signer, ...remaining] = await input.listWalletEd25519Signers(input.walletId);
191
+ if (!signer) return base;
192
+ if (remaining.length > 0) throw new Error("Added passkey cannot resolve one exact wallet Ed25519 signer to bind against");
193
+ return {
194
+ ...base,
195
+ nearAccountId: signer.nearAccountId,
196
+ nearEd25519SigningKeyId: signer.nearEd25519SigningKeyId,
197
+ signerSlot: signer.signerSlot,
198
+ publicKey: signer.publicKey,
199
+ relayerKeyId: signer.signingWorkerId,
200
+ keyVersion: signer.keyVersion,
201
+ recoveryExportCapable: signer.recoveryExportCapable,
202
+ clientParticipantId: signer.participantIds[0],
203
+ relayerParticipantId: signer.participantIds[1],
204
+ participantIds: [signer.participantIds[0], signer.participantIds[1]],
205
+ runtimePolicyScope: signer.runtimePolicyScope
206
+ };
207
+ }
208
+ const source = await input.webAuthnStore.readBindingByCredential({
209
+ rpId: input.ceremony.auth.rpId,
210
+ credentialIdB64u: input.ceremony.auth.credentialIdB64u
211
+ });
212
+ if (!source || source.userId !== input.walletId || !source.nearAccountId || !source.nearEd25519SigningKeyId || source.signerSlot === void 0 || !source.publicKey) throw new Error("Authorizing passkey binding is missing wallet identity fields");
213
+ const binding = {
214
+ version: "webauthn_credential_binding_v1",
215
+ rpId: input.rpId,
216
+ credentialIdB64u: input.credentialIdB64u,
217
+ userId: String(input.walletId),
218
+ nearAccountId: source.nearAccountId,
219
+ nearEd25519SigningKeyId: source.nearEd25519SigningKeyId,
220
+ signerSlot: source.signerSlot,
221
+ publicKey: source.publicKey,
222
+ createdAtMs: input.now,
223
+ updatedAtMs: input.now
224
+ };
225
+ if (source.relayerKeyId) binding.relayerKeyId = source.relayerKeyId;
226
+ if (source.keyVersion) binding.keyVersion = source.keyVersion;
227
+ if (typeof source.recoveryExportCapable === "boolean") binding.recoveryExportCapable = source.recoveryExportCapable;
228
+ if (source.clientParticipantId !== void 0) binding.clientParticipantId = source.clientParticipantId;
229
+ if (source.relayerParticipantId !== void 0) binding.relayerParticipantId = source.relayerParticipantId;
230
+ if (source.participantIds) binding.participantIds = source.participantIds.slice();
231
+ if (source.runtimePolicyScope) binding.runtimePolicyScope = source.runtimePolicyScope;
232
+ return binding;
233
+ }
234
+ var CloudflareD1WalletAuthMethodService = class {
235
+ constructor(input) {
236
+ this.emailOtpChallengeVerifier = input.emailOtpChallengeVerifier;
237
+ this.emailOtpEnrollmentChallengeIssuer = input.emailOtpEnrollmentChallengeIssuer;
238
+ this.emailOtpSourceChallengeIssuer = input.emailOtpSourceChallengeIssuer;
239
+ this.emailOtpEnrollmentFinalizer = input.emailOtpEnrollmentFinalizer;
240
+ this.getRegistrationCeremonyIntentStore = input.getRegistrationCeremonyIntentStore;
241
+ this.getWalletAuthMethodStore = input.getWalletAuthMethodStore;
242
+ this.googleEmailOtpRegistrationAttempts = input.googleEmailOtpRegistrationAttempts;
243
+ this.passkeyCustodyEnvelopes = input.passkeyCustodyEnvelopes;
244
+ this.sha256Bytes = input.sha256Bytes;
245
+ this.webAuthnStore = input.webAuthnStore;
246
+ this.listWalletEd25519Signers = input.listWalletEd25519Signers;
247
+ this.walletAuthorityStore = input.walletAuthorityStore;
248
+ this.orgId = input.orgId;
249
+ this.verifyWebAuthnAuthenticationLite = input.verifyWebAuthnAuthenticationLite;
250
+ this.prepareOwnerWalletSessionRevocation = input.prepareOwnerWalletSessionRevocation;
251
+ }
252
+ /**
253
+ * Sends the enrollment code for an Email OTP addition.
254
+ *
255
+ * The challenge is bound to the add-auth-method intent digest, because that
256
+ * is the value the start's verification checks the code against — the same
257
+ * digest the source proof signs. Binding it to anything else would issue a
258
+ * code the ceremony cannot accept.
259
+ *
260
+ * The address is the intent's, never the request's. A caller who could name
261
+ * the recipient would be able to send a wallet's enrollment code anywhere,
262
+ * and the intent grant is what proves this addition was authorized at all.
263
+ */
264
+ /**
265
+ * The active methods on the authority this intent was issued against.
266
+ *
267
+ * The intent's own source names the authority, so admission can be answered
268
+ * before any factor is verified. A linked-device ceremony names no source;
269
+ * there the wallet's active methods are the honest answer, because the
270
+ * question is only whether the family already exists.
271
+ */
272
+ async activeMethodsOnIntentAuthority(input) {
273
+ const active = (await this.getWalletAuthMethodStore().listForWalletV2({ walletId: input.walletId })).filter(isActiveWalletAuthMethodRecordV2);
274
+ const source = input.intent.caller === "same_device_addition" ? input.intent.source : null;
275
+ if (!source) return active;
276
+ return active.filter((method) => method.walletAuthorityId === source.walletAuthorityId);
277
+ }
278
+ async createAddAuthMethodEmailOtpChallenge(input) {
279
+ try {
280
+ const stored = await this.getRegistrationCeremonyIntentStore().getAddAuthMethodIntent(input.addAuthMethodIntentGrant);
281
+ if (!stored || stored.expiresAtMs <= Date.now()) return {
282
+ ok: false,
283
+ code: "invalid_grant",
284
+ message: "add-auth-method intent grant expired"
285
+ };
286
+ if (stored.digestB64u !== input.addAuthMethodIntentDigestB64u || stored.intent.walletId !== input.walletId) return {
287
+ ok: false,
288
+ code: "unauthorized",
289
+ message: "add-auth-method intent does not match this request"
290
+ };
291
+ if (!isEmailOtpAddAuthMethodIntent(stored.intent)) {
292
+ if ((await this.activeMethodsOnIntentAuthority({
293
+ walletId: input.walletId,
294
+ intent: stored.intent
295
+ })).some((method) => method.kind === "passkey")) return {
296
+ ok: false,
297
+ code: "already_configured",
298
+ message: "Wallet authority already has an active passkey auth method"
299
+ };
300
+ return await this.createAddAuthMethodEmailOtpSourceChallenge({
301
+ walletId: input.walletId,
302
+ orgId: stored.orgId || this.orgId,
303
+ ownerProofBindingDigest: stored.digestB64u
304
+ });
305
+ }
306
+ if ((await this.activeMethodsOnIntentAuthority({
307
+ walletId: input.walletId,
308
+ intent: stored.intent
309
+ })).some((method) => method.kind === "email_otp")) return {
310
+ ok: false,
311
+ code: "already_configured",
312
+ message: "Wallet authority already has an active email_otp auth method"
313
+ };
314
+ const email = String(stored.intent.authMethod.email || "").trim().toLowerCase();
315
+ if (!email) return {
316
+ ok: false,
317
+ code: "invalid_body",
318
+ message: "the intent names no email address"
319
+ };
320
+ const challenge = await this.emailOtpEnrollmentChallengeIssuer({
321
+ userId: email,
322
+ walletId: String(input.walletId),
323
+ orgId: stored.orgId || this.orgId,
324
+ email,
325
+ otpChannel: EMAIL_OTP_CHANNEL,
326
+ ownerProofBindingDigest: stored.digestB64u
327
+ });
328
+ if (!challenge.ok) return challenge;
329
+ return {
330
+ ok: true,
331
+ challengeId: challenge.challenge.challengeId,
332
+ expiresAtMs: challenge.challenge.expiresAtMs,
333
+ emailHint: String(challenge.delivery?.emailHint || "")
334
+ };
335
+ } catch (error) {
336
+ return {
337
+ ok: false,
338
+ code: "internal",
339
+ message: errorMessage(error) || "Failed to send the Email OTP enrollment code"
340
+ };
341
+ }
342
+ }
343
+ /**
344
+ * Sends the code that proves the wallet's existing Email OTP method.
345
+ *
346
+ * The recipient is the address the wallet already verified, resolved from
347
+ * its active Email authority — never named by the caller. Bound to the
348
+ * addition's intent digest, so a code taken for any other operation cannot
349
+ * start this ceremony.
350
+ */
351
+ async createAddAuthMethodEmailOtpSourceChallenge(input) {
352
+ const enrollment = await this.emailOtpChallengeVerifier.readEnrollmentForWallet(String(input.walletId));
353
+ if (!enrollment) return {
354
+ ok: false,
355
+ code: "invalid_state",
356
+ message: "this wallet has no Email OTP method to prove"
357
+ };
358
+ const challenge = await this.emailOtpSourceChallengeIssuer({
359
+ userId: enrollment.providerUserId,
360
+ walletId: String(input.walletId),
361
+ orgId: input.orgId,
362
+ otpChannel: EMAIL_OTP_CHANNEL,
363
+ ownerProofBindingDigest: input.ownerProofBindingDigest,
364
+ operation: WALLET_EMAIL_OTP_UNLOCK_OPERATION,
365
+ reuseActiveChallenge: true
366
+ });
367
+ if (!challenge.ok) return challenge;
368
+ return {
369
+ ok: true,
370
+ challengeId: challenge.challenge.challengeId,
371
+ expiresAtMs: challenge.challenge.expiresAtMs,
372
+ emailHint: String(challenge.delivery?.emailHint || "")
373
+ };
374
+ }
375
+ /**
376
+ * Verifies the fresh Email OTP source proof and resolves who it proved.
377
+ *
378
+ * The caller supplies a code and the digest it was taken over; every identity
379
+ * the ceremony then trusts — provider subject, enrollment, authority — comes
380
+ * from the verified challenge. A body that could name them would let a caller
381
+ * authorize an addition with someone else's method.
382
+ */
383
+ async verifyAddAuthMethodEmailOtpSourceProof(input) {
384
+ const enrollment = await this.emailOtpChallengeVerifier.readEnrollmentForWallet(String(input.walletId));
385
+ if (!enrollment) return {
386
+ ok: false,
387
+ code: "invalid_state",
388
+ message: "this wallet has no Email OTP method to prove"
389
+ };
390
+ const verified = await this.emailOtpChallengeVerifier.verifyExisting({
391
+ userId: enrollment.providerUserId,
392
+ walletId: String(input.walletId),
393
+ orgId: this.orgId,
394
+ challengeId: input.challengeId,
395
+ otpCode: input.otpCode,
396
+ otpChannel: EMAIL_OTP_CHANNEL,
397
+ ownerProofBindingDigest: input.expectedDigestB64u,
398
+ action: WALLET_EMAIL_OTP_ACTIONS.login,
399
+ operation: WALLET_EMAIL_OTP_UNLOCK_OPERATION
400
+ });
401
+ if (!verified.ok) return {
402
+ ok: false,
403
+ code: verified.code,
404
+ message: verified.message
405
+ };
406
+ const authority = await this.resolveActiveEmailOtpAuthorityForVerifiedMethod({
407
+ walletId: String(input.walletId),
408
+ walletAuthMethodId: String(input.walletAuthMethodId),
409
+ providerUserId: enrollment.providerUserId
410
+ });
411
+ if (!authority.ok) return authority;
412
+ return {
413
+ ok: true,
414
+ auth: {
415
+ kind: "email_otp",
416
+ providerUserId: enrollment.providerUserId,
417
+ enrollmentId: verified.enrollment.enrollmentId,
418
+ enrollmentSealKeyVersion: verified.enrollment.enrollmentSealKeyVersion,
419
+ authorityRef: await walletAuthAuthorityRef({ authority: authority.authority })
420
+ }
421
+ };
422
+ }
423
+ async startWalletAddAuthMethod(request, _context) {
424
+ try {
425
+ const store = this.getRegistrationCeremonyIntentStore();
426
+ const walletId = parseWalletIdForIntent(request.subject.walletId);
427
+ if (!walletId) return {
428
+ ok: false,
429
+ code: "invalid_body",
430
+ message: "walletId is required"
431
+ };
432
+ const grant = addAuthMethodIntentGrantFromString(normalizeOptionalTrimmedString(request.addAuthMethodIntentGrant) || "");
433
+ if (!grant) return {
434
+ ok: false,
435
+ code: "invalid_grant",
436
+ message: "add-auth-method intent grant is required"
437
+ };
438
+ const intentPreview = await store.getAddAuthMethodIntent(grant);
439
+ if (!intentPreview) return {
440
+ ok: false,
441
+ code: "invalid_grant",
442
+ message: "add-auth-method intent grant expired"
443
+ };
444
+ if (request.intent.walletId !== walletId) return {
445
+ ok: false,
446
+ code: "invalid_body",
447
+ message: "add-auth-method walletId mismatch"
448
+ };
449
+ const digestB64u = normalizeOptionalTrimmedString(request.addAuthMethodIntentDigestB64u);
450
+ const requestDigest = await computeAddAuthMethodIntentDigestB64u(request.intent);
451
+ if (!digestB64u || digestB64u !== requestDigest || digestB64u !== intentPreview.digestB64u) return {
452
+ ok: false,
453
+ code: "invalid_body",
454
+ message: "add-auth-method intent digest mismatch"
455
+ };
456
+ const storedAuth = await this.resolveAddAuthMethodExistingAuth({
457
+ auth: request.auth,
458
+ walletId,
459
+ orgId: intentPreview.orgId,
460
+ intent: intentPreview.intent,
461
+ nowMs: Date.now()
462
+ });
463
+ if (!storedAuth.ok) return storedAuth;
464
+ const sourceMethod = await resolveActiveAddAuthMethodSource({
465
+ walletAuthMethodStore: this.getWalletAuthMethodStore(),
466
+ walletId,
467
+ auth: storedAuth.auth
468
+ });
469
+ if (!sourceMethod) return {
470
+ ok: false,
471
+ code: "unauthorized",
472
+ message: "Add-auth-method source is not an active V2 wallet auth method"
473
+ };
474
+ const sourceAuthority = await this.walletAuthorityStore.readById(sourceMethod.walletAuthorityId);
475
+ if (!sourceAuthority || sourceAuthority.state !== "active" || sourceAuthority.walletId !== walletId || !isFullOwnerAuthorityV1(sourceAuthority)) return {
476
+ ok: false,
477
+ code: "unauthorized",
478
+ message: "Add-auth-method source authority is not an active full owner"
479
+ };
480
+ const admission = admitAddWalletAuthMethod({
481
+ sourceMethod,
482
+ targetFamily: request.authority.kind,
483
+ activeMethodsOnAuthority: (await this.getWalletAuthMethodStore().listForWalletV2({ walletId })).filter(isActiveWalletAuthMethodRecordV2).filter((method) => method.walletAuthorityId === sourceMethod.walletAuthorityId)
484
+ });
485
+ if (admission.kind === "already_configured") return {
486
+ ok: false,
487
+ code: "already_configured",
488
+ message: `Wallet authority already has an active ${admission.family} auth method`
489
+ };
490
+ const storedIntent = await store.takeAddAuthMethodIntent(grant);
491
+ if (!storedIntent) return {
492
+ ok: false,
493
+ code: "invalid_grant",
494
+ message: "add-auth-method intent grant expired"
495
+ };
496
+ const storedExpectedOrigin = normalizeOptionalTrimmedString(storedIntent.expectedOrigin);
497
+ const addAuthMethodCeremonyId = `wauthc_${secureRandomBase64Url(24)}`;
498
+ const targetWalletAuthMethodId = storedIntent.intent.targetWalletAuthMethodId;
499
+ if (storedIntent.intent.caller === "same_device_addition") {
500
+ const claimed = storedIntent.intent.source;
501
+ if (claimed.walletAuthorityId !== sourceMethod.walletAuthorityId || claimed.walletAuthMethodId !== sourceMethod.walletAuthMethodId || claimed.revocationEpoch !== sourceAuthority.revocationEpoch) return {
502
+ ok: false,
503
+ code: "unauthorized",
504
+ message: "Add-auth-method intent names a different source than the presented proof"
505
+ };
506
+ }
507
+ const expiresAtMs = Date.now() + 10 * 6e4;
508
+ if (request.authority.kind === "passkey") {
509
+ const passkeyIntent = storedIntent.intent;
510
+ if (!isPasskeyAddAuthMethodIntent(passkeyIntent)) return {
511
+ ok: false,
512
+ code: "invalid_body",
513
+ message: "Passkey authority requires a passkey add-auth-method intent"
514
+ };
515
+ if (!storedExpectedOrigin) return {
516
+ ok: false,
517
+ code: "invalid_body",
518
+ message: "expected_origin is required for WebAuthn registration verification"
519
+ };
520
+ if (storedAuth.auth.kind === "email_otp") {
521
+ const authority = await this.resolveActiveEmailOtpAuthorityForVerifiedMethod({
522
+ walletId: String(walletId),
523
+ walletAuthMethodId: String(storedAuth.auth.authorityRef.walletAuthMethodId),
524
+ providerUserId: storedAuth.auth.providerUserId
525
+ });
526
+ if (!authority.ok) return authority;
527
+ const expectedAuthorityRef = await walletAuthAuthorityRef({ authority: authority.authority });
528
+ if (expectedAuthorityRef.walletId !== storedAuth.auth.authorityRef.walletId || expectedAuthorityRef.authorityDigest !== storedAuth.auth.authorityRef.authorityDigest || expectedAuthorityRef.walletAuthMethodId !== storedAuth.auth.authorityRef.walletAuthMethodId) return {
529
+ ok: false,
530
+ code: "unauthorized",
531
+ message: "Email OTP authority does not match this wallet"
532
+ };
533
+ const enrollment = await this.emailOtpChallengeVerifier.readActiveEnrollmentForWallet({
534
+ walletId: String(walletId),
535
+ orgId: storedIntent.orgId,
536
+ providerUserId: storedAuth.auth.providerUserId
537
+ });
538
+ if (!enrollment.ok) return enrollment;
539
+ if (enrollment.enrollment.enrollmentId !== storedAuth.auth.enrollmentId || enrollment.enrollment.enrollmentSealKeyVersion !== storedAuth.auth.enrollmentSealKeyVersion) return {
540
+ ok: false,
541
+ code: "conflict",
542
+ message: "Email OTP enrollment changed; retry passkey linking"
543
+ };
544
+ }
545
+ const custodyFactor = custodyFactorFromAddAuthMethodAuth(storedAuth.auth);
546
+ const envelopeLookup = await this.passkeyCustodyEnvelopes.lookupEnvelopeForWalletAuthMethod({
547
+ walletId,
548
+ factor: custodyFactor,
549
+ walletAuthMethodId: sourceMethod.walletAuthMethodId
550
+ });
551
+ if (envelopeLookup.kind !== "active") return {
552
+ ok: false,
553
+ code: "invalid_state",
554
+ message: "Authenticated wallet custody envelope is unavailable"
555
+ };
556
+ const registration = this.createPasskeyRegistrationOptions({
557
+ walletId,
558
+ rpId: passkeyIntent.authMethod.rpId,
559
+ sourceWalletAuthorityId: sourceMethod.walletAuthorityId,
560
+ walletMethods: await this.getWalletAuthMethodStore().listForWalletV2({ walletId })
561
+ });
562
+ await store.putAddAuthMethodCeremony({
563
+ kind: "passkey",
564
+ addAuthMethodCeremonyId,
565
+ intent: passkeyIntent,
566
+ digestB64u: storedIntent.digestB64u,
567
+ orgId: storedIntent.orgId,
568
+ sourceWalletAuthMethodId: sourceMethod.walletAuthMethodId,
569
+ sourceWalletAuthorityId: sourceMethod.walletAuthorityId,
570
+ sourceAuthorityDigestB64u: sourceAuthority.authorityDigestB64u,
571
+ sourceAuthorityRevocationEpoch: sourceAuthority.revocationEpoch,
572
+ targetWalletAuthMethodId,
573
+ ...storedIntent.expectedOrigin ? { expectedOrigin: storedIntent.expectedOrigin } : {},
574
+ expiresAtMs,
575
+ auth: storedAuth.auth,
576
+ passkeyRegistration: {
577
+ rpId: passkeyIntent.authMethod.rpId,
578
+ challengeB64u: registration.challengeB64u,
579
+ options: registration
580
+ },
581
+ custodyEnvelope: envelopeLookup.envelope
582
+ });
583
+ return {
584
+ ok: true,
585
+ addAuthMethodCeremonyId,
586
+ intent: passkeyIntent,
587
+ custodyEnvelope: envelopeLookup.envelope,
588
+ registration,
589
+ addAuthMethodCeremonyExpiresAtMs: expiresAtMs
590
+ };
591
+ }
592
+ const emailOtpIntent = storedIntent.intent;
593
+ if (!isEmailOtpAddAuthMethodIntent(emailOtpIntent)) return {
594
+ ok: false,
595
+ code: "invalid_body",
596
+ message: "Email OTP authority requires an Email OTP add-auth-method intent"
597
+ };
598
+ const authority = await this.verifyAddAuthMethodEmailOtpAuthority({
599
+ orgId: storedIntent.orgId,
600
+ authority: request.authority,
601
+ expectedDigestB64u: storedIntent.digestB64u,
602
+ intent: emailOtpIntent,
603
+ sourceWalletAuthorityId: sourceMethod.walletAuthorityId
604
+ });
605
+ if (!authority.ok) return authority;
606
+ const emailOtpSourceEnvelope = await this.passkeyCustodyEnvelopes.lookupEnvelopeForWalletAuthMethod({
607
+ walletId,
608
+ factor: custodyFactorFromAddAuthMethodAuth(storedAuth.auth),
609
+ walletAuthMethodId: sourceMethod.walletAuthMethodId
610
+ });
611
+ if (emailOtpSourceEnvelope.kind !== "active") return {
612
+ ok: false,
613
+ code: "invalid_state",
614
+ message: "Add-auth-method source has no active wallet custody envelope"
615
+ };
616
+ await store.putAddAuthMethodCeremony({
617
+ kind: "email_otp",
618
+ addAuthMethodCeremonyId,
619
+ intent: emailOtpIntent,
620
+ digestB64u: storedIntent.digestB64u,
621
+ orgId: storedIntent.orgId,
622
+ sourceWalletAuthMethodId: sourceMethod.walletAuthMethodId,
623
+ sourceWalletAuthorityId: sourceMethod.walletAuthorityId,
624
+ sourceAuthorityDigestB64u: sourceAuthority.authorityDigestB64u,
625
+ sourceAuthorityRevocationEpoch: sourceAuthority.revocationEpoch,
626
+ targetWalletAuthMethodId,
627
+ ...storedIntent.expectedOrigin ? { expectedOrigin: storedIntent.expectedOrigin } : {},
628
+ expiresAtMs,
629
+ auth: storedAuth.auth,
630
+ authority: authority.authority,
631
+ custodyEnvelope: emailOtpSourceEnvelope.envelope
632
+ });
633
+ return {
634
+ ok: true,
635
+ addAuthMethodCeremonyId,
636
+ intent: emailOtpIntent,
637
+ custodyEnvelope: emailOtpSourceEnvelope.envelope,
638
+ addAuthMethodCeremonyExpiresAtMs: expiresAtMs
639
+ };
640
+ } catch (error) {
641
+ return {
642
+ ok: false,
643
+ code: "internal",
644
+ message: errorMessage(error) || "Failed to start wallet add-auth-method ceremony"
645
+ };
646
+ }
647
+ }
648
+ /**
649
+ * What an exact retry has to match: the ceremony, the request as sent, and
650
+ * the authorization branch with any linked admission.
651
+ *
652
+ * Substituting a credential, an envelope, or any admitted identity — wallet,
653
+ * device, enrollment, key manifest — changes this digest, so one comparison
654
+ * separates a retry from a different finalize wearing the same ceremony id.
655
+ */
656
+ async finalizeReplayDigestB64u(request) {
657
+ return base64UrlEncode(await this.sha256Bytes(new TextEncoder().encode(alphabetizeStringify({
658
+ addAuthMethodCeremonyId: request.addAuthMethodCeremonyId,
659
+ webauthnRegistration: request.webauthnRegistration ?? null,
660
+ custodyEnvelope: request.custodyEnvelope ?? null,
661
+ emailOtpTarget: request.emailOtpTarget ?? null,
662
+ authorization: request.authorization
663
+ }))));
664
+ }
665
+ /**
666
+ * `atomicCompanionStatements` ride in the same batch as the credential, the
667
+ * custody envelope, and the owner binding.
668
+ *
669
+ * Device 2's linked finalize is the reason this exists. Its link session has
670
+ * to advance exactly when the credential commits, and a caller cannot get
671
+ * that by making two calls: finalize is irreversible, so a cancel or an expiry
672
+ * winning in between would leave a terminal session holding a live owner
673
+ * credential. Statements passed here either commit with it or the whole
674
+ * finalize fails, which is the only pair of outcomes that keeps those two
675
+ * facts in agreement.
676
+ *
677
+ * They are a separate argument rather than part of the command because the
678
+ * command is the wire contract every caller shares, and no wire request may
679
+ * describe database writes.
680
+ */
681
+ async finalizeWalletAddAuthMethod(request, atomicCompanionStatements = []) {
682
+ try {
683
+ const store = this.getRegistrationCeremonyIntentStore();
684
+ const replayDigestB64u = await this.finalizeReplayDigestB64u(request);
685
+ const priorFinalize = await store.getAddAuthMethodFinalizeReplay(request.addAuthMethodCeremonyId);
686
+ if (priorFinalize) return priorFinalize.requestDigestB64u === replayDigestB64u ? priorFinalize.response : {
687
+ ok: false,
688
+ code: "conflict",
689
+ message: "add-auth-method ceremony was already finalized with a different request"
690
+ };
691
+ const ceremony = await store.getAddAuthMethodCeremony(request.addAuthMethodCeremonyId);
692
+ if (!ceremony) return {
693
+ ok: false,
694
+ code: "not_found",
695
+ message: "add-auth-method ceremony not found"
696
+ };
697
+ const walletId = parseWalletIdForIntent(request.subject.walletId);
698
+ if (!walletId || ceremony.intent.walletId !== walletId) return {
699
+ ok: false,
700
+ code: "invalid_body",
701
+ message: "add-auth-method ceremony subject mismatch"
702
+ };
703
+ const sourceRevalidation = await this.revalidateAddAuthMethodSource({
704
+ ceremony,
705
+ walletId
706
+ });
707
+ if (sourceRevalidation) return sourceRevalidation;
708
+ if (ceremony.kind === "passkey") {
709
+ const hasWebAuthnRegistration = request.webauthnRegistration !== void 0;
710
+ const hasCustodyEnvelope = request.custodyEnvelope !== void 0;
711
+ if (!hasWebAuthnRegistration || !hasCustodyEnvelope) return {
712
+ ok: false,
713
+ code: "invalid_body",
714
+ message: "Passkey add-auth-method finalize requires registration and custody envelope"
715
+ };
716
+ const expectedOrigin = normalizeOptionalTrimmedString(ceremony.expectedOrigin);
717
+ if (!expectedOrigin) return {
718
+ ok: false,
719
+ code: "invalid_state",
720
+ message: "Passkey add-auth-method ceremony has no expected origin"
721
+ };
722
+ const verified = await this.verifyRegistrationCredentialForIntent({
723
+ webauthnRegistration: request.webauthnRegistration,
724
+ expectedChallenge: ceremony.passkeyRegistration.challengeB64u,
725
+ expectedOrigin,
726
+ rpId: ceremony.passkeyRegistration.rpId
727
+ });
728
+ if (!verified.ok) return verified;
729
+ const credential = verified.credential;
730
+ const duplicate = await this.getWalletAuthMethodStore().getPasskeyV2({
731
+ rpId: ceremony.passkeyRegistration.rpId,
732
+ credentialIdB64u: credential.credentialIdB64u
733
+ });
734
+ const duplicateAuthenticator = await this.webAuthnStore.readAuthenticator({
735
+ userId: String(walletId),
736
+ credentialIdB64u: credential.credentialIdB64u
737
+ });
738
+ const duplicateBinding = await this.webAuthnStore.readBindingByCredential({
739
+ rpId: ceremony.passkeyRegistration.rpId,
740
+ credentialIdB64u: credential.credentialIdB64u
741
+ });
742
+ if (duplicate || duplicateAuthenticator || duplicateBinding) return {
743
+ ok: false,
744
+ code: "duplicate_auth_method",
745
+ message: "Passkey credential is already registered"
746
+ };
747
+ let replacementEnvelope = null;
748
+ if (hasCustodyEnvelope) {
749
+ try {
750
+ replacementEnvelope = parsePasskeyCustodyEnvelopeRecord(request.custodyEnvelope);
751
+ } catch {
752
+ return {
753
+ ok: false,
754
+ code: "invalid_body",
755
+ message: "custodyEnvelope is invalid"
756
+ };
757
+ }
758
+ const expectedCiphertextDigestB64u = base64UrlEncode(await this.sha256Bytes(base64UrlDecode(replacementEnvelope.sealedCustodySecretB64u)));
759
+ if (replacementEnvelope.walletId !== walletId || replacementEnvelope.factor.kind !== "passkey" || replacementEnvelope.factor.rpId !== ceremony.passkeyRegistration.rpId || replacementEnvelope.factor.credentialIdB64u !== credential.credentialIdB64u || replacementEnvelope.envelopeRevision !== 1 || replacementEnvelope.lifecycle.state !== "active" || replacementEnvelope.envelopeId === ceremony.custodyEnvelope.envelopeId || replacementEnvelope.ciphertextDigestB64u !== expectedCiphertextDigestB64u) return {
760
+ ok: false,
761
+ code: "invalid_body",
762
+ message: "custodyEnvelope is not bound to the verified passkey"
763
+ };
764
+ const currentEnvelope = await this.passkeyCustodyEnvelopes.lookupEnvelopeForWalletAuthMethod({
765
+ walletId,
766
+ factor: custodyFactorFromAddAuthMethodAuth(ceremony.auth),
767
+ walletAuthMethodId: ceremony.sourceWalletAuthMethodId
768
+ });
769
+ if (currentEnvelope.kind !== "active" || currentEnvelope.envelope.envelopeId !== ceremony.custodyEnvelope.envelopeId) return {
770
+ ok: false,
771
+ code: "conflict",
772
+ message: "Existing passkey custody changed; retry add-auth-method linking"
773
+ };
774
+ }
775
+ const authority = {
776
+ kind: "passkey",
777
+ walletId,
778
+ rpId: requireStoredRpId(ceremony.passkeyRegistration.rpId),
779
+ credentialIdB64u: credential.credentialIdB64u,
780
+ credentialPublicKeyB64u: credential.credentialPublicKeyB64u,
781
+ counter: credential.counter,
782
+ device: credential.device,
783
+ registrationIntentDigestB64u: ceremony.digestB64u
784
+ };
785
+ const now = Date.now();
786
+ const authMethod = buildActiveAddedWalletAuthMethodV2({
787
+ authority,
788
+ walletAuthMethodId: ceremony.targetWalletAuthMethodId,
789
+ walletAuthorityId: ceremony.sourceWalletAuthorityId,
790
+ now
791
+ });
792
+ const binding = await buildAddedPasskeyCredentialBinding({
793
+ webAuthnStore: this.webAuthnStore,
794
+ listWalletEd25519Signers: this.listWalletEd25519Signers,
795
+ ceremony,
796
+ walletId,
797
+ rpId: requireStoredRpId(ceremony.passkeyRegistration.rpId),
798
+ credentialIdB64u: credential.credentialIdB64u,
799
+ now
800
+ });
801
+ const response = {
802
+ ok: true,
803
+ walletId,
804
+ authority: walletAuthAuthorityFromRegistrationAuthority({
805
+ authority,
806
+ walletAuthMethodId: ceremony.targetWalletAuthMethodId
807
+ }),
808
+ rpId: requireStoredRpId(ceremony.passkeyRegistration.rpId),
809
+ authMethod: {
810
+ kind: "passkey",
811
+ status: "active",
812
+ credentialIdB64u: credential.credentialIdB64u,
813
+ credentialPublicKeyB64u: credential.credentialPublicKeyB64u,
814
+ counter: credential.counter,
815
+ device: credential.device
816
+ }
817
+ };
818
+ const replayStatements = await store.buildAddAuthMethodFinalizeReplayStatements({
819
+ kind: "wallet_add_auth_method_finalize_replay_v1",
820
+ addAuthMethodCeremonyId: ceremony.addAuthMethodCeremonyId,
821
+ requestDigestB64u: replayDigestB64u,
822
+ response,
823
+ createdAtMs: now,
824
+ expiresAtMs: now + ADD_AUTH_METHOD_FINALIZE_REPLAY_TTL_MS
825
+ });
826
+ const additionalStatements = [
827
+ ...this.prepareAddAuthMethodSourceGuard({
828
+ ceremony,
829
+ walletId
830
+ }),
831
+ this.webAuthnStore.prepareAuthenticatorInsertStatement({
832
+ userId: String(walletId),
833
+ record: {
834
+ credentialIdB64u: credential.credentialIdB64u,
835
+ credentialPublicKeyB64u: credential.credentialPublicKeyB64u,
836
+ counter: credential.counter,
837
+ createdAtMs: now,
838
+ updatedAtMs: now,
839
+ deviceInfo: credential.device
840
+ }
841
+ }),
842
+ this.webAuthnStore.prepareCredentialBindingInsertStatement(binding),
843
+ ...this.getWalletAuthMethodStore().prepareV2InsertStatements(authMethod),
844
+ ...replayStatements,
845
+ ...atomicCompanionStatements
846
+ ];
847
+ const link = replacementEnvelope === null ? await this.passkeyCustodyEnvelopes.commitPasskeyFactorWithoutCustodyAtomically({ additionalStatements }) : await this.passkeyCustodyEnvelopes.linkWalletCustodyFactorAtomically({
848
+ envelope: replacementEnvelope,
849
+ additionalStatements
850
+ });
851
+ if (link.kind === "version_mismatch" || link.kind === "conflict") return {
852
+ ok: false,
853
+ code: "conflict",
854
+ message: "Passkey credential or custody envelope already exists"
855
+ };
856
+ await store.takeAddAuthMethodCeremony(ceremony.addAuthMethodCeremonyId);
857
+ return response;
858
+ }
859
+ if ((await this.getWalletAuthMethodStore().listForWalletV2({ walletId })).filter(isActiveWalletAuthMethodRecordV2).filter((method) => method.kind === "email_otp" && method.walletAuthorityId === ceremony.sourceWalletAuthorityId).length > 0) return {
860
+ ok: false,
861
+ code: "already_configured",
862
+ message: "Wallet authority already has an active email_otp auth method"
863
+ };
864
+ if (request.webauthnRegistration !== void 0) return {
865
+ ok: false,
866
+ code: "invalid_body",
867
+ message: "Email OTP add-auth-method finalize carries no WebAuthn registration"
868
+ };
869
+ if (request.custodyEnvelope === void 0) return {
870
+ ok: false,
871
+ code: "invalid_body",
872
+ message: "Email OTP add-auth-method finalize requires the resealed custody envelope"
873
+ };
874
+ const emailOtpTarget = request.emailOtpTarget;
875
+ if (emailOtpTarget === void 0) return {
876
+ ok: false,
877
+ code: "invalid_body",
878
+ message: "Email OTP add-auth-method finalize must state its enrollment target"
879
+ };
880
+ const enrollmentPlan = await this.resolveAddedEmailOtpEnrollment({
881
+ walletId,
882
+ ceremony,
883
+ target: emailOtpTarget,
884
+ nowMs: Date.now()
885
+ });
886
+ if (!enrollmentPlan.ok) return enrollmentPlan;
887
+ const targetEnrollment = enrollmentPlan.enrollment;
888
+ let resealedEnvelope;
889
+ try {
890
+ resealedEnvelope = parsePasskeyCustodyEnvelopeRecord(request.custodyEnvelope);
891
+ } catch {
892
+ return {
893
+ ok: false,
894
+ code: "invalid_body",
895
+ message: "custodyEnvelope is invalid"
896
+ };
897
+ }
898
+ const expectedResealedCiphertextDigestB64u = base64UrlEncode(await this.sha256Bytes(base64UrlDecode(resealedEnvelope.sealedCustodySecretB64u)));
899
+ if (resealedEnvelope.walletId !== walletId || resealedEnvelope.factor.kind !== "email_otp" || resealedEnvelope.factor.enrollmentId !== targetEnrollment.enrollmentId || resealedEnvelope.factor.enrollmentSealKeyVersion !== targetEnrollment.enrollmentSealKeyVersion || resealedEnvelope.envelopeRevision !== 1 || resealedEnvelope.lifecycle.state !== "active" || resealedEnvelope.envelopeId === ceremony.custodyEnvelope.envelopeId || resealedEnvelope.ciphertextDigestB64u !== expectedResealedCiphertextDigestB64u) return {
900
+ ok: false,
901
+ code: "invalid_body",
902
+ message: "custodyEnvelope is not bound to the verified Email OTP factor"
903
+ };
904
+ const currentSourceEnvelope = await this.passkeyCustodyEnvelopes.lookupEnvelopeForWalletAuthMethod({
905
+ walletId,
906
+ factor: custodyFactorFromAddAuthMethodAuth(ceremony.auth),
907
+ walletAuthMethodId: ceremony.sourceWalletAuthMethodId
908
+ });
909
+ if (currentSourceEnvelope.kind !== "active" || currentSourceEnvelope.envelope.envelopeId !== ceremony.custodyEnvelope.envelopeId) return {
910
+ ok: false,
911
+ code: "conflict",
912
+ message: "Existing wallet custody changed; retry add-auth-method linking"
913
+ };
914
+ const now = Date.now();
915
+ const authMethod = buildActiveAddedWalletAuthMethodV2({
916
+ authority: ceremony.authority,
917
+ walletAuthMethodId: ceremony.targetWalletAuthMethodId,
918
+ walletAuthorityId: ceremony.sourceWalletAuthorityId,
919
+ now
920
+ });
921
+ const authority = walletAuthAuthorityFromRegistrationAuthority({
922
+ authority: ceremony.authority,
923
+ walletAuthMethodId: ceremony.targetWalletAuthMethodId
924
+ });
925
+ const emailOtpResponse = {
926
+ ok: true,
927
+ walletId: ceremony.intent.walletId,
928
+ authority,
929
+ authMethod: {
930
+ kind: "email_otp",
931
+ status: "active"
932
+ }
933
+ };
934
+ const emailOtpReplayStatements = await store.buildAddAuthMethodFinalizeReplayStatements({
935
+ kind: "wallet_add_auth_method_finalize_replay_v1",
936
+ addAuthMethodCeremonyId: ceremony.addAuthMethodCeremonyId,
937
+ requestDigestB64u: replayDigestB64u,
938
+ response: emailOtpResponse,
939
+ createdAtMs: now,
940
+ expiresAtMs: now + ADD_AUTH_METHOD_FINALIZE_REPLAY_TTL_MS
941
+ });
942
+ const linked = await this.passkeyCustodyEnvelopes.linkWalletCustodyFactorAtomically({
943
+ envelope: resealedEnvelope,
944
+ additionalStatements: [
945
+ ...this.prepareAddAuthMethodSourceGuard({
946
+ ceremony,
947
+ walletId
948
+ }),
949
+ ...this.getWalletAuthMethodStore().prepareActiveV2TargetFamilyAbsentGuardStatements({
950
+ walletId,
951
+ walletAuthorityId: ceremony.sourceWalletAuthorityId,
952
+ kind: "email_otp"
953
+ }),
954
+ ...this.getWalletAuthMethodStore().prepareV2InsertStatements(authMethod),
955
+ ...enrollmentPlan.statements,
956
+ ...emailOtpReplayStatements,
957
+ ...atomicCompanionStatements
958
+ ]
959
+ });
960
+ if (linked.kind === "version_mismatch" || linked.kind === "conflict") return {
961
+ ok: false,
962
+ code: "conflict",
963
+ message: "Add-auth-method source changed or target method already exists"
964
+ };
965
+ await store.takeAddAuthMethodCeremony(ceremony.addAuthMethodCeremonyId);
966
+ return emailOtpResponse;
967
+ } catch (error) {
968
+ return {
969
+ ok: false,
970
+ code: "internal",
971
+ message: errorMessage(error) || "Failed to finalize wallet add-auth-method ceremony"
972
+ };
973
+ }
974
+ }
975
+ async revalidateAddAuthMethodSource(input) {
976
+ const sourceMethod = await this.getWalletAuthMethodStore().readByIdV2({ walletAuthMethodId: input.ceremony.sourceWalletAuthMethodId });
977
+ if (!sourceMethod || sourceMethod.status !== "active" || sourceMethod.walletId !== input.walletId || sourceMethod.walletAuthorityId !== input.ceremony.sourceWalletAuthorityId) return {
978
+ ok: false,
979
+ code: "conflict",
980
+ message: "Add-auth-method source method changed; restart the operation"
981
+ };
982
+ const sourceAuthority = await this.walletAuthorityStore.readById(input.ceremony.sourceWalletAuthorityId);
983
+ if (!sourceAuthority || sourceAuthority.state !== "active" || sourceAuthority.walletId !== input.walletId || sourceAuthority.authorityDigestB64u !== input.ceremony.sourceAuthorityDigestB64u || sourceAuthority.revocationEpoch !== input.ceremony.sourceAuthorityRevocationEpoch || !isFullOwnerAuthorityV1(sourceAuthority)) return {
984
+ ok: false,
985
+ code: "conflict",
986
+ message: "Add-auth-method source authority changed; restart the operation"
987
+ };
988
+ return null;
989
+ }
990
+ /**
991
+ * The factor whose envelope a revoked method owned.
992
+ *
993
+ * Selected by the owning method the envelope itself records, so an Email
994
+ * method's envelope is removable without touching its sibling's even though
995
+ * both share one provider enrollment. Legacy unbound envelopes match nothing
996
+ * and survive until an open has upgraded them.
997
+ */
998
+ /**
999
+ * Resolves which enrollment an added Email OTP method binds to.
1000
+ *
1001
+ * The wallet's Email OTP enrollment is per provider identity, not per method:
1002
+ * every Email method on the wallet reads its factor secret through the same
1003
+ * record, and its seal key version is inside each of their envelopes' AAD. So
1004
+ * re-enrolling on a wallet that already has one would leave the existing
1005
+ * methods holding ciphertext that no longer opens.
1006
+ *
1007
+ * The caller states which case it believes it is in and is refused when live
1008
+ * state disagrees, rather than being silently switched to the other branch —
1009
+ * a client that thought it was enrolling a new address, and was quietly bound
1010
+ * to an existing one, would report the wrong email as verified.
1011
+ */
1012
+ async resolveAddedEmailOtpEnrollment(input) {
1013
+ const existing = await this.emailOtpChallengeVerifier.readActiveEnrollmentForWallet({
1014
+ walletId: String(input.walletId),
1015
+ orgId: input.ceremony.orgId,
1016
+ providerUserId: String(input.ceremony.authority.providerSubject)
1017
+ });
1018
+ switch (input.target.kind) {
1019
+ case "existing_enrollment":
1020
+ if (!existing.ok) return existing;
1021
+ return {
1022
+ ok: true,
1023
+ enrollment: {
1024
+ enrollmentId: existing.enrollment.enrollmentId,
1025
+ enrollmentSealKeyVersion: existing.enrollment.enrollmentSealKeyVersion
1026
+ },
1027
+ statements: []
1028
+ };
1029
+ case "new_enrollment": {
1030
+ if (existing.ok) return {
1031
+ ok: false,
1032
+ code: "conflict",
1033
+ message: "this wallet already has an Email OTP enrollment for this identity"
1034
+ };
1035
+ const prepared = await this.emailOtpEnrollmentFinalizer.prepareAddedAuthMethodEnrollment({
1036
+ walletId: String(input.walletId),
1037
+ orgId: input.ceremony.orgId,
1038
+ authSubjectId: String(input.ceremony.authority.providerSubject),
1039
+ verifiedEmail: String(input.ceremony.authority.email),
1040
+ material: input.target.enrollment,
1041
+ nowMs: input.nowMs
1042
+ });
1043
+ if (!prepared.ok) return prepared;
1044
+ return {
1045
+ ok: true,
1046
+ enrollment: {
1047
+ enrollmentId: prepared.enrollment.enrollmentId,
1048
+ enrollmentSealKeyVersion: prepared.enrollment.enrollmentSealKeyVersion
1049
+ },
1050
+ statements: prepared.statements
1051
+ };
1052
+ }
1053
+ default: return unreachableAddAuthMethodEmailOtpTarget(input.target);
1054
+ }
1055
+ }
1056
+ async prepareRevokedMethodEnvelopeStatements(input) {
1057
+ return await this.passkeyCustodyEnvelopes.prepareMethodEnvelopeRevocationStatements({
1058
+ walletId: input.walletId,
1059
+ walletAuthMethodId: input.method.walletAuthMethodId,
1060
+ revokedAtMs: input.revokedAtMs
1061
+ });
1062
+ }
1063
+ prepareAddAuthMethodSourceGuard(input) {
1064
+ return this.getWalletAuthMethodStore().prepareActiveV2SourceGuardStatements({
1065
+ walletId: input.walletId,
1066
+ walletAuthMethodId: input.ceremony.sourceWalletAuthMethodId,
1067
+ walletAuthorityId: input.ceremony.sourceWalletAuthorityId,
1068
+ authorityDigestB64u: input.ceremony.sourceAuthorityDigestB64u,
1069
+ authorityRevocationEpoch: input.ceremony.sourceAuthorityRevocationEpoch
1070
+ });
1071
+ }
1072
+ async resolveAddSignerExistingAuth(input) {
1073
+ return await resolveD1AddSignerExistingAuth({
1074
+ auth: input.auth,
1075
+ walletId: input.walletId,
1076
+ intent: input.intent,
1077
+ walletAuthMethodStore: this.getWalletAuthMethodStore(),
1078
+ nowMs: input.nowMs
1079
+ });
1080
+ }
1081
+ async resolveAddAuthMethodExistingAuth(input) {
1082
+ const walletAuthMethodStore = this.getWalletAuthMethodStore();
1083
+ const activeWalletMethods = (await walletAuthMethodStore.listForWalletV2({ walletId: input.walletId })).filter(isActiveWalletAuthMethodRecordV2);
1084
+ if (activeWalletMethods.length === 0) return {
1085
+ ok: false,
1086
+ code: "not_found",
1087
+ message: "wallet has no active auth methods"
1088
+ };
1089
+ if (input.auth.kind === "email_otp") {
1090
+ const authority = await this.resolveActiveEmailOtpAuthorityForVerifiedMethod({
1091
+ walletId: String(input.walletId),
1092
+ walletAuthMethodId: String(input.auth.authorityRef.walletAuthMethodId),
1093
+ providerUserId: input.auth.providerUserId
1094
+ });
1095
+ if (!authority.ok) return authority;
1096
+ const expectedAuthorityRef = await walletAuthAuthorityRef({ authority: authority.authority });
1097
+ if (expectedAuthorityRef.walletId !== input.auth.authorityRef.walletId || expectedAuthorityRef.authorityDigest !== input.auth.authorityRef.authorityDigest || expectedAuthorityRef.walletAuthMethodId !== input.auth.authorityRef.walletAuthMethodId) return {
1098
+ ok: false,
1099
+ code: "unauthorized",
1100
+ message: "Email OTP authority reference does not match this wallet"
1101
+ };
1102
+ const enrollment = await this.emailOtpChallengeVerifier.readActiveEnrollmentForWallet({
1103
+ walletId: String(input.walletId),
1104
+ orgId: input.orgId,
1105
+ providerUserId: input.auth.providerUserId
1106
+ });
1107
+ if (!enrollment.ok) return enrollment;
1108
+ if (enrollment.enrollment.enrollmentId !== input.auth.enrollmentId || enrollment.enrollment.enrollmentSealKeyVersion !== input.auth.enrollmentSealKeyVersion) return {
1109
+ ok: false,
1110
+ code: "conflict",
1111
+ message: "Email OTP enrollment changed; retry passkey linking"
1112
+ };
1113
+ return {
1114
+ ok: true,
1115
+ auth: {
1116
+ kind: "email_otp",
1117
+ providerUserId: input.auth.providerUserId,
1118
+ enrollmentId: input.auth.enrollmentId,
1119
+ enrollmentSealKeyVersion: input.auth.enrollmentSealKeyVersion,
1120
+ authorityRef: input.auth.authorityRef
1121
+ }
1122
+ };
1123
+ }
1124
+ if (input.auth.kind === "wallet_session") {
1125
+ if (!activeWalletMethods.some((method) => method.kind === "passkey" && input.auth.kind === "wallet_session" && String(method.rpId || "") === String(input.auth.rpId) && String(method.credentialIdB64u || "") === String(input.auth.credentialIdB64u))) return {
1126
+ ok: false,
1127
+ code: "unauthorized",
1128
+ message: "Owner Wallet Session passkey is not an active auth method of this wallet"
1129
+ };
1130
+ return {
1131
+ ok: true,
1132
+ auth: {
1133
+ kind: "wallet_session",
1134
+ walletSessionId: input.auth.walletSessionId,
1135
+ authorizationId: input.auth.authorizationId,
1136
+ rpId: String(input.auth.rpId),
1137
+ credentialIdB64u: input.auth.credentialIdB64u
1138
+ }
1139
+ };
1140
+ }
1141
+ return await resolveD1AddAuthMethodExistingAuth({
1142
+ auth: input.auth,
1143
+ walletId: input.walletId,
1144
+ intent: input.intent,
1145
+ walletAuthMethodStore,
1146
+ nowMs: input.nowMs
1147
+ });
1148
+ }
1149
+ async verifyRegistrationAuthorityForIntent(input) {
1150
+ const authority = input.authority;
1151
+ switch (authority.kind) {
1152
+ case "passkey": return await this.verifyRegistrationPasskeyAuthority({
1153
+ authority,
1154
+ expectedDigestB64u: input.expectedDigestB64u,
1155
+ expectedOrigin: input.expectedOrigin,
1156
+ intent: input.intent,
1157
+ userAgent: input.userAgent
1158
+ });
1159
+ case "email_otp": return await this.verifyRegistrationEmailOtpAuthority({
1160
+ orgId: input.orgId,
1161
+ authority,
1162
+ expectedDigestB64u: input.expectedDigestB64u,
1163
+ intent: input.intent,
1164
+ verificationOperationId: input.verificationOperationId,
1165
+ verificationReceiptExpiresAtMs: input.verificationReceiptExpiresAtMs
1166
+ });
1167
+ }
1168
+ return unreachableRegistrationStartAuthority(authority);
1169
+ }
1170
+ async verifyActivePasskeyAuthority(authority) {
1171
+ const record = await this.getWalletAuthMethodStore().getPasskeyV2({
1172
+ rpId: authority.verifier.rpId,
1173
+ credentialIdB64u: authority.factor.credentialIdB64u
1174
+ });
1175
+ if (!record || record.kind !== "passkey" || record.status !== "active" || record.walletId !== authority.walletId || record.walletAuthMethodId !== authority.bindingId || record.rpId !== authority.verifier.rpId || record.credentialIdB64u !== authority.factor.credentialIdB64u) return {
1176
+ ok: false,
1177
+ code: "unauthorized",
1178
+ message: "Passkey authority is not active for this wallet"
1179
+ };
1180
+ const walletAuthority = await this.walletAuthorityStore.readById(record.walletAuthorityId);
1181
+ if (!walletAuthority || walletAuthority.state !== "active" || walletAuthority.walletId !== record.walletId || walletAuthority.authorityId !== record.walletAuthorityId) return {
1182
+ ok: false,
1183
+ code: "unauthorized",
1184
+ message: "Passkey wallet authority is not active for this wallet"
1185
+ };
1186
+ return {
1187
+ ok: true,
1188
+ authority: walletAuthority,
1189
+ authMethod: record
1190
+ };
1191
+ }
1192
+ async resolveActiveWalletSessionAuthority(input) {
1193
+ const authMethods = await this.getWalletAuthMethodStore().listForWalletV2({ walletId: input.walletId });
1194
+ const walletAuthMethodId = await resolveWalletAuthMethodIdForAuthority({
1195
+ walletId: input.walletId,
1196
+ authorityRef: input.authorityRef,
1197
+ authSource: input.authSource,
1198
+ authMethods
1199
+ });
1200
+ if (!walletAuthMethodId) return {
1201
+ kind: "rejected",
1202
+ code: "unauthorized",
1203
+ message: "Wallet Session proof does not identify one active wallet auth method"
1204
+ };
1205
+ const authMethod = authMethods.find((candidate) => candidate.walletAuthMethodId === walletAuthMethodId);
1206
+ if (!authMethod || authMethod.status !== "active") return {
1207
+ kind: "rejected",
1208
+ code: "unauthorized",
1209
+ message: "Wallet Session auth method is not active"
1210
+ };
1211
+ const authority = await this.walletAuthorityStore.readById(authMethod.walletAuthorityId);
1212
+ if (!authority || authority.state !== "active" || authority.walletId !== input.walletId || authority.authorityId !== authMethod.walletAuthorityId) return {
1213
+ kind: "rejected",
1214
+ code: "unauthorized",
1215
+ message: "Wallet Session authority is not active"
1216
+ };
1217
+ return {
1218
+ kind: "active_authority",
1219
+ authority,
1220
+ authMethod
1221
+ };
1222
+ }
1223
+ async resolveActivePasskeyAuthorityForVerifiedCredential(input) {
1224
+ const record = await this.getWalletAuthMethodStore().getPasskeyV2({
1225
+ rpId: input.rpId,
1226
+ credentialIdB64u: input.credentialIdB64u
1227
+ });
1228
+ if (!record || record.kind !== "passkey" || record.status !== "active" || record.walletId !== input.walletId) return {
1229
+ ok: false,
1230
+ code: "unauthorized",
1231
+ message: "Passkey credential is not active for this wallet"
1232
+ };
1233
+ const authority = {
1234
+ walletId: record.walletId,
1235
+ factor: {
1236
+ kind: "passkey",
1237
+ credentialIdB64u: record.credentialIdB64u
1238
+ },
1239
+ verifier: {
1240
+ kind: "webauthn",
1241
+ rpId: record.rpId
1242
+ },
1243
+ bindingId: record.walletAuthMethodId
1244
+ };
1245
+ const active = await this.verifyActivePasskeyAuthority(authority);
1246
+ return active.ok ? {
1247
+ ok: true,
1248
+ authority,
1249
+ walletAuthority: active.authority,
1250
+ authMethod: active.authMethod
1251
+ } : active;
1252
+ }
1253
+ async resolveActivePasskeyAuthorityForUnlock(input) {
1254
+ const record = await this.getWalletAuthMethodStore().readByIdV2({ walletAuthMethodId: input.walletAuthMethodId });
1255
+ if (!record || record.kind !== "passkey" || record.status !== "active" || record.walletId !== input.walletId || record.walletAuthorityId !== input.walletAuthorityId || record.rpId !== input.rpId || record.credentialIdB64u !== input.credentialIdB64u) return {
1256
+ kind: "rejected",
1257
+ code: "unauthorized",
1258
+ message: "Verified passkey does not identify an active wallet auth method"
1259
+ };
1260
+ const authority = await this.walletAuthorityStore.readById(record.walletAuthorityId);
1261
+ if (!authority || authority.state !== "active" || authority.walletId !== record.walletId || authority.authorityId !== record.walletAuthorityId) return {
1262
+ kind: "rejected",
1263
+ code: "unauthorized",
1264
+ message: "Verified passkey authority is not active for this wallet"
1265
+ };
1266
+ return {
1267
+ kind: "active_authority",
1268
+ authority,
1269
+ authMethod: record
1270
+ };
1271
+ }
1272
+ async resolveActiveEmailOtpAuthorityForUnlock(input) {
1273
+ const record = await this.getWalletAuthMethodStore().readByIdV2({ walletAuthMethodId: input.walletAuthMethodId });
1274
+ if (!record || record.kind !== "email_otp" || record.status !== "active" || record.walletId !== input.walletId || record.emailHashHex !== input.emailHashHex) return {
1275
+ kind: "rejected",
1276
+ code: "unauthorized",
1277
+ message: "Verified Email OTP does not identify an active wallet auth method"
1278
+ };
1279
+ const authority = await this.walletAuthorityStore.readById(record.walletAuthorityId);
1280
+ if (!authority || authority.state !== "active" || authority.walletId !== record.walletId || authority.authorityId !== record.walletAuthorityId) return {
1281
+ kind: "rejected",
1282
+ code: "unauthorized",
1283
+ message: "Verified Email OTP authority is not active for this wallet"
1284
+ };
1285
+ const provider = input.providerUserId.startsWith("google:") ? "google" : "email";
1286
+ let boundAuthority;
1287
+ try {
1288
+ boundAuthority = bindEmailOtpAuthorityToMethod(buildEmailOtpWalletAuthAuthority({
1289
+ walletId: String(record.walletId),
1290
+ provider,
1291
+ providerUserId: input.providerUserId,
1292
+ emailHashHex: record.emailHashHex
1293
+ }), record.walletAuthMethodId);
1294
+ } catch (error) {
1295
+ return {
1296
+ kind: "rejected",
1297
+ code: "invalid_state",
1298
+ message: errorMessage(error) || "Stored Email OTP authority is invalid"
1299
+ };
1300
+ }
1301
+ return {
1302
+ kind: "active_authority",
1303
+ authority,
1304
+ walletAuthAuthority: boundAuthority,
1305
+ authMethod: record
1306
+ };
1307
+ }
1308
+ async verifyActiveEmailOtpAuthority(authority) {
1309
+ const record = await this.getWalletAuthMethodStore().getEmailOtpV2({
1310
+ walletId: authority.walletId,
1311
+ emailHashHex: authority.verifier.emailHashHex
1312
+ });
1313
+ if (!record || record.kind !== "email_otp" || record.status !== "active" || record.walletId !== authority.walletId || record.emailHashHex !== authority.verifier.emailHashHex) return {
1314
+ ok: false,
1315
+ code: "unauthorized",
1316
+ message: "Email OTP authority is not active for this wallet"
1317
+ };
1318
+ return { ok: true };
1319
+ }
1320
+ async resolveActiveEmailOtpAuthorityForVerifiedSubject(input) {
1321
+ const walletId = normalizeOptionalTrimmedString(input.walletId);
1322
+ const providerUserId = normalizeOptionalTrimmedString(input.providerUserId);
1323
+ if (!walletId || !providerUserId) return {
1324
+ ok: false,
1325
+ code: "invalid_body",
1326
+ message: "Verified Email OTP authority identity is required"
1327
+ };
1328
+ const records = [];
1329
+ for (const record of await this.getWalletAuthMethodStore().listForWalletV2({ walletId })) if (record.kind === "email_otp" && record.status === "active") records.push(record);
1330
+ let record = records[0];
1331
+ if (records.length > 1) {
1332
+ const foundingMethods = [];
1333
+ for (const candidate of records) {
1334
+ const authority = await this.walletAuthorityStore.readById(candidate.walletAuthorityId);
1335
+ if (authority?.state === "active" && authority.walletId === candidate.walletId && authority.authorityId === candidate.walletAuthorityId && authority.provenance.kind === "wallet_registration") foundingMethods.push(candidate);
1336
+ }
1337
+ record = foundingMethods.length === 1 ? foundingMethods[0] : void 0;
1338
+ }
1339
+ if (!record) return {
1340
+ ok: false,
1341
+ code: "unauthorized",
1342
+ message: "Wallet Email OTP authority cannot be selected from the verified subject"
1343
+ };
1344
+ if (record.kind !== "email_otp") return {
1345
+ ok: false,
1346
+ code: "unauthorized",
1347
+ message: "Wallet Email OTP authority is unavailable"
1348
+ };
1349
+ const provider = providerUserId.startsWith("google:") ? "google" : "email";
1350
+ try {
1351
+ return {
1352
+ ok: true,
1353
+ authority: bindEmailOtpAuthorityToMethod(buildEmailOtpWalletAuthAuthority({
1354
+ walletId,
1355
+ provider,
1356
+ providerUserId,
1357
+ emailHashHex: record.emailHashHex
1358
+ }), record.walletAuthMethodId)
1359
+ };
1360
+ } catch (error) {
1361
+ return {
1362
+ ok: false,
1363
+ code: "invalid_state",
1364
+ message: errorMessage(error) || "Stored Email OTP authority is invalid"
1365
+ };
1366
+ }
1367
+ }
1368
+ /**
1369
+ * The exact active Email OTP authority a caller names. Several methods can
1370
+ * share one wallet's verified email once a device is linked, so an operation
1371
+ * that knows its method must resolve by that identity instead of asking for
1372
+ * the wallet's only one.
1373
+ */
1374
+ async resolveActiveEmailOtpAuthorityForVerifiedMethod(input) {
1375
+ const walletId = normalizeOptionalTrimmedString(input.walletId);
1376
+ const providerUserId = normalizeOptionalTrimmedString(input.providerUserId);
1377
+ const parsedMethodId = parseWalletAuthMethodId(input.walletAuthMethodId);
1378
+ if (!walletId || !providerUserId || !parsedMethodId.ok) return {
1379
+ ok: false,
1380
+ code: "invalid_body",
1381
+ message: "Verified Email OTP authority identity is required"
1382
+ };
1383
+ const record = await this.getWalletAuthMethodStore().readByIdV2({ walletAuthMethodId: parsedMethodId.value });
1384
+ if (!record || record.kind !== "email_otp" || record.status !== "active" || String(record.walletId) !== walletId) return {
1385
+ ok: false,
1386
+ code: "unauthorized",
1387
+ message: "Named Email OTP method is not active for this wallet"
1388
+ };
1389
+ const provider = providerUserId.startsWith("google:") ? "google" : "email";
1390
+ try {
1391
+ return {
1392
+ ok: true,
1393
+ authority: bindEmailOtpAuthorityToMethod(buildEmailOtpWalletAuthAuthority({
1394
+ walletId,
1395
+ provider,
1396
+ providerUserId,
1397
+ emailHashHex: record.emailHashHex
1398
+ }), record.walletAuthMethodId)
1399
+ };
1400
+ } catch (error) {
1401
+ return {
1402
+ ok: false,
1403
+ code: "invalid_state",
1404
+ message: errorMessage(error) || "Stored Email OTP authority is invalid"
1405
+ };
1406
+ }
1407
+ }
1408
+ async findDuplicateAuthority(authority) {
1409
+ if (authority.kind === "passkey") return await this.getWalletAuthMethodStore().getPasskeyV2({
1410
+ rpId: authority.rpId,
1411
+ credentialIdB64u: authority.credentialIdB64u
1412
+ }) ? {
1413
+ ok: false,
1414
+ code: "duplicate_auth_method",
1415
+ message: "Passkey credential is already registered"
1416
+ } : null;
1417
+ const duplicateEmailOtp = await this.getWalletAuthMethodStore().getEmailOtpV2({
1418
+ walletId: authority.walletId,
1419
+ emailHashHex: authority.emailHashHex
1420
+ });
1421
+ return duplicateEmailOtp && duplicateEmailOtp.status === "active" ? {
1422
+ ok: false,
1423
+ code: "duplicate_auth_method",
1424
+ message: "Email OTP auth method is already registered"
1425
+ } : null;
1426
+ }
1427
+ /**
1428
+ * Mixed registration finalization runs in two requests. The ECDSA leg
1429
+ * persists the founding authority and auth method before the deferred
1430
+ * Ed25519 leg arrives, so that leg must address the same rows.
1431
+ */
1432
+ async readActiveRegistrationIdentity(authority) {
1433
+ let record;
1434
+ switch (authority.kind) {
1435
+ case "passkey":
1436
+ record = await this.getWalletAuthMethodStore().getPasskeyV2({
1437
+ rpId: authority.rpId,
1438
+ credentialIdB64u: authority.credentialIdB64u
1439
+ });
1440
+ break;
1441
+ case "email_otp":
1442
+ record = await this.getWalletAuthMethodStore().getEmailOtpV2({
1443
+ walletId: String(authority.walletId),
1444
+ emailHashHex: authority.emailHashHex
1445
+ });
1446
+ break;
1447
+ default: return unreachableRegistrationStartAuthority(authority);
1448
+ }
1449
+ if (!record || record.status !== "active" || record.walletId !== authority.walletId) return null;
1450
+ if (authority.kind === "passkey") {
1451
+ if (record.kind !== "passkey" || record.rpId !== authority.rpId || record.credentialIdB64u !== authority.credentialIdB64u || record.credentialPublicKeyB64u !== authority.credentialPublicKeyB64u) return null;
1452
+ } else if (record.kind !== "email_otp" || record.emailHashHex !== authority.emailHashHex || record.registrationAuthorityId !== authority.registrationAuthorityId) return null;
1453
+ const walletAuthority = await this.walletAuthorityStore.readById(record.walletAuthorityId);
1454
+ if (!walletAuthority || walletAuthority.state !== "active" || walletAuthority.walletId !== record.walletId) return null;
1455
+ return {
1456
+ walletAuthorityId: record.walletAuthorityId,
1457
+ walletAuthMethodId: record.walletAuthMethodId,
1458
+ authority: walletAuthority,
1459
+ authMethod: record
1460
+ };
1461
+ }
1462
+ async readActiveRegistrationAuthority(authority) {
1463
+ const identity = await this.readActiveRegistrationIdentity(authority);
1464
+ if (!identity) return null;
1465
+ const walletAuthority = await this.walletAuthorityStore.readById(identity.walletAuthorityId);
1466
+ if (!walletAuthority || walletAuthority.state !== "active" || walletAuthority.walletId !== authority.walletId || walletAuthority.authorityId !== identity.walletAuthorityId) return null;
1467
+ return {
1468
+ authority: walletAuthority,
1469
+ walletAuthMethodId: identity.walletAuthMethodId
1470
+ };
1471
+ }
1472
+ async verifyWalletAuthMethodRevokeProof(input) {
1473
+ try {
1474
+ const operationFingerprintDigest = await computeWalletAuthMethodRevokeOperationFingerprintV1({
1475
+ walletId: input.walletId,
1476
+ targetWalletAuthMethodId: input.targetWalletAuthMethodId,
1477
+ requestedAtMs: input.requestedAtMs
1478
+ });
1479
+ const verified = await verifyD1LinkedDeviceFreshRevokeProofV1({
1480
+ walletId: input.walletId,
1481
+ orgId: this.orgId,
1482
+ targetWalletAuthMethodId: input.targetWalletAuthMethodId,
1483
+ proof: input.sourceProof,
1484
+ expectedOrigin: input.expectedOrigin,
1485
+ verifiedAtMs: input.requestedAtMs,
1486
+ operationFingerprintDigest,
1487
+ walletAuthMethodStore: this.getWalletAuthMethodStore(),
1488
+ verifyWebAuthnAuthenticationLite: this.verifyWebAuthnAuthenticationLite,
1489
+ verifyEmailOtpExisting: this.emailOtpChallengeVerifier.verifyExisting.bind(this.emailOtpChallengeVerifier),
1490
+ readEmailOtpEnrollment: this.emailOtpChallengeVerifier.readEnrollmentForWallet.bind(this.emailOtpChallengeVerifier)
1491
+ });
1492
+ if (verified.kind === "denied") return verified;
1493
+ const sourceMethod = await this.getWalletAuthMethodStore().readByIdV2({ walletAuthMethodId: verified.walletAuthMethodId });
1494
+ if (!sourceMethod || sourceMethod.status !== "active" || sourceMethod.walletId !== input.walletId || sourceMethod.walletAuthMethodId === input.targetWalletAuthMethodId) return {
1495
+ kind: "denied",
1496
+ code: "unauthorized",
1497
+ message: "Fresh revocation proof is not from a different active wallet method"
1498
+ };
1499
+ const sourceAuthority = await this.walletAuthorityStore.readById(sourceMethod.walletAuthorityId);
1500
+ if (!sourceAuthority || sourceAuthority.state !== "active" || sourceAuthority.walletId !== input.walletId || !isFullOwnerAuthorityV1(sourceAuthority)) return {
1501
+ kind: "denied",
1502
+ code: "unauthorized",
1503
+ message: "Fresh revocation proof requires a full-owner authority"
1504
+ };
1505
+ return verified;
1506
+ } catch (error) {
1507
+ return {
1508
+ kind: "denied",
1509
+ code: "invalid",
1510
+ message: errorMessage(error) || "Fresh revocation proof is invalid"
1511
+ };
1512
+ }
1513
+ }
1514
+ createPasskeyRegistrationOptions(input) {
1515
+ return parseWalletAddAuthMethodRegistrationOptions({
1516
+ kind: "webauthn_add_auth_method_registration_v1",
1517
+ challengeId: secureRandomBase64Url(16, "add-auth-method registration challenge id"),
1518
+ challengeB64u: secureRandomBase64Url(32, "add-auth-method registration challenge"),
1519
+ rpId: input.rpId,
1520
+ user: {
1521
+ idB64u: base64UrlEncode(new TextEncoder().encode(String(input.walletId))),
1522
+ name: String(input.walletId),
1523
+ displayName: String(input.walletId)
1524
+ },
1525
+ pubKeyCredParams: [{
1526
+ type: "public-key",
1527
+ alg: -7
1528
+ }, {
1529
+ type: "public-key",
1530
+ alg: -257
1531
+ }],
1532
+ authenticatorSelection: {
1533
+ residentKey: "required",
1534
+ userVerification: "preferred"
1535
+ },
1536
+ timeoutMs: 6e4,
1537
+ attestation: "none",
1538
+ extensions: { prf: { eval: {
1539
+ firstB64u: base64UrlEncode(PASSKEY_PRF_FIRST_SALT_V1),
1540
+ secondB64u: base64UrlEncode(PASSKEY_PRF_SECOND_SALT_V1)
1541
+ } } },
1542
+ excludeCredentials: input.walletMethods.filter((method) => method.kind === "passkey" && method.status === "active" && method.walletAuthorityId === input.sourceWalletAuthorityId && method.rpId === input.rpId).map((method) => ({
1543
+ type: "public-key",
1544
+ id: method.credentialIdB64u
1545
+ }))
1546
+ });
1547
+ }
1548
+ async revokeWalletAuthMethod(input) {
1549
+ try {
1550
+ const walletId = input.subject.walletId;
1551
+ const sourceWalletAuthMethodId = input.verifiedSource.walletAuthMethodId;
1552
+ if (sourceWalletAuthMethodId === input.walletAuthMethodId) return {
1553
+ ok: false,
1554
+ code: "unauthorized",
1555
+ message: "Revocation requires a different active source auth method"
1556
+ };
1557
+ const walletAuthMethodStore = this.getWalletAuthMethodStore();
1558
+ const sourceMethod = await walletAuthMethodStore.readByIdV2({ walletAuthMethodId: sourceWalletAuthMethodId });
1559
+ const sourceAuthority = sourceMethod ? await this.walletAuthorityStore.readById(sourceMethod.walletAuthorityId) : null;
1560
+ if (!sourceMethod || sourceMethod.status !== "active" || sourceMethod.walletId !== walletId || !sourceAuthority || sourceAuthority.state !== "active" || sourceAuthority.walletId !== walletId || !isFullOwnerAuthorityV1(sourceAuthority)) return {
1561
+ ok: false,
1562
+ code: "unauthorized",
1563
+ message: "Fresh revocation proof requires a different active full-owner method"
1564
+ };
1565
+ const targetMethod = await walletAuthMethodStore.readByIdV2({ walletAuthMethodId: input.walletAuthMethodId });
1566
+ if (!targetMethod || targetMethod.walletId !== walletId) return {
1567
+ ok: false,
1568
+ code: "not_found",
1569
+ message: "wallet auth method not found"
1570
+ };
1571
+ if (targetMethod.status === "revoked") return walletAuthMethodRevokedResponse(walletId, targetMethod);
1572
+ if (targetMethod.status !== "active") return {
1573
+ ok: false,
1574
+ code: "invalid_state",
1575
+ message: "wallet auth method is not active"
1576
+ };
1577
+ const targetAuthority = await this.walletAuthorityStore.readById(targetMethod.walletAuthorityId);
1578
+ if (!targetAuthority || targetAuthority.walletId !== walletId || targetAuthority.state !== "active") return {
1579
+ ok: false,
1580
+ code: "invalid_state",
1581
+ message: "wallet auth method authority is not active"
1582
+ };
1583
+ const envelopeRevocation = await this.prepareRevokedMethodEnvelopeStatements({
1584
+ walletId,
1585
+ method: targetMethod,
1586
+ revokedAtMs: input.requestedAtMs
1587
+ });
1588
+ if (envelopeRevocation.kind === "refused") return {
1589
+ ok: false,
1590
+ code: "invalid_state",
1591
+ message: envelopeRevocation.reason
1592
+ };
1593
+ if (envelopeRevocation.kind === "version_mismatch") return {
1594
+ ok: false,
1595
+ code: "conflict",
1596
+ message: "wallet custody envelope changed; retry revocation"
1597
+ };
1598
+ const revoked = await this.walletAuthorityStore.revokeWalletAuthMethod({
1599
+ walletId,
1600
+ authorityId: targetAuthority.authorityId,
1601
+ walletAuthMethodId: input.walletAuthMethodId,
1602
+ expectedAuthorityRevocationEpoch: targetAuthority.revocationEpoch,
1603
+ requestedAtMs: input.requestedAtMs,
1604
+ sessionRevocationStatements: [
1605
+ ...this.prepareOwnerWalletSessionRevocation({
1606
+ walletId,
1607
+ walletAuthMethodId: input.walletAuthMethodId,
1608
+ requestedAtMs: input.requestedAtMs
1609
+ }),
1610
+ ...envelopeRevocation.statements,
1611
+ ...targetMethod.kind === "email_otp" ? [this.emailOtpChallengeVerifier.prepareDeleteEnrollmentIfUnreferencedStatement(String(walletId))] : []
1612
+ ]
1613
+ });
1614
+ if (revoked.kind === "would_remove_last_wallet_auth_method") return {
1615
+ ok: false,
1616
+ code: "invalid_state",
1617
+ message: "wallet must retain at least one active auth method"
1618
+ };
1619
+ if (revoked.kind === "conflict") return {
1620
+ ok: false,
1621
+ code: "conflict",
1622
+ message: "wallet auth method changed; retry revocation"
1623
+ };
1624
+ return walletAuthMethodRevokedResponse(walletId, revoked.authMethod);
1625
+ } catch (error) {
1626
+ return {
1627
+ ok: false,
1628
+ code: "internal",
1629
+ message: errorMessage(error) || "Failed to revoke wallet auth method"
1630
+ };
1631
+ }
1632
+ }
1633
+ async verifyRegistrationCredentialForIntent(input) {
1634
+ const credential = toRecordValue(input.webauthnRegistration);
1635
+ if (!credential) return {
1636
+ ok: false,
1637
+ code: "invalid_body",
1638
+ message: "Missing webauthn_registration"
1639
+ };
1640
+ const response = toRecordValue(credential.response);
1641
+ const clientData = parseWebAuthnClientDataJsonBase64url(normalizeOptionalTrimmedString(response?.clientDataJSON));
1642
+ if (clientData.type !== "webauthn.create") return {
1643
+ ok: false,
1644
+ code: "invalid_body",
1645
+ message: "Invalid webauthn_registration.clientDataJSON.type (expected webauthn.create)"
1646
+ };
1647
+ if (clientData.challenge !== input.expectedChallenge) return {
1648
+ ok: false,
1649
+ code: "challenge_mismatch",
1650
+ message: "Registration challenge mismatch"
1651
+ };
1652
+ const expectedOrigin = normalizeOptionalTrimmedString(input.expectedOrigin);
1653
+ if (!expectedOrigin) return {
1654
+ ok: false,
1655
+ code: "invalid_body",
1656
+ message: "expected_origin is required for WebAuthn registration verification"
1657
+ };
1658
+ if (!d1HostIsWithinWebAuthnRpId(webAuthnOriginHostnameOrEmpty(clientData.origin), input.rpId)) return {
1659
+ ok: false,
1660
+ code: "invalid_origin",
1661
+ message: "WebAuthn origin is not within rpId"
1662
+ };
1663
+ const verifyRegistrationResponse = (await loadSimpleWebAuthnServer()).verifyRegistrationResponse;
1664
+ if (typeof verifyRegistrationResponse !== "function") return {
1665
+ ok: false,
1666
+ code: "unsupported",
1667
+ message: "WebAuthn registration verifier is unavailable in this runtime"
1668
+ };
1669
+ const registrationRecord = toRecordValue(await verifyRegistrationResponse({
1670
+ response: credential,
1671
+ expectedChallenge: input.expectedChallenge,
1672
+ expectedOrigin,
1673
+ expectedRPID: input.rpId,
1674
+ requireUserVerification: false
1675
+ }));
1676
+ if (registrationRecord?.verified !== true) return {
1677
+ ok: false,
1678
+ code: "not_verified",
1679
+ message: "Registration verification failed"
1680
+ };
1681
+ const registrationInfo = toRecordValue(registrationRecord.registrationInfo);
1682
+ const credentialInfo = toRecordValue(registrationInfo?.credential);
1683
+ const credentialIdB64u = normalizeOptionalTrimmedString(credentialInfo?.id);
1684
+ const publicKey = credentialInfo?.publicKey;
1685
+ if (!credentialInfo || !credentialIdB64u || !(publicKey instanceof Uint8Array)) return {
1686
+ ok: false,
1687
+ code: "internal",
1688
+ message: "Registration verification did not return credential public key material"
1689
+ };
1690
+ const counter = Number(credentialInfo.counter);
1691
+ const transports = Array.isArray(credentialInfo.transports) ? credentialInfo.transports.filter((t) => typeof t === "string") : Array.isArray(response?.transports) ? response.transports.filter((t) => typeof t === "string") : [];
1692
+ const device = deriveWebAuthnAuthenticatorDeviceInfo({
1693
+ userAgent: input.userAgent,
1694
+ aaguid: normalizeOptionalTrimmedString(registrationInfo?.aaguid) || "",
1695
+ backedUp: registrationInfo?.credentialBackedUp === true,
1696
+ transports
1697
+ });
1698
+ return {
1699
+ ok: true,
1700
+ credential: {
1701
+ credentialIdB64u,
1702
+ credentialPublicKeyB64u: base64UrlEncode(publicKey),
1703
+ counter: Number.isFinite(counter) && counter >= 0 ? Math.floor(counter) : 0,
1704
+ device
1705
+ }
1706
+ };
1707
+ }
1708
+ async verifyRegistrationPasskeyAuthority(input) {
1709
+ if (input.intent.authMethod.kind !== "passkey") return {
1710
+ ok: false,
1711
+ code: "invalid_body",
1712
+ message: "Passkey registration authority requires a passkey intent"
1713
+ };
1714
+ const verified = await this.verifyRegistrationCredentialForIntent({
1715
+ webauthnRegistration: input.authority.webauthnRegistration,
1716
+ expectedChallenge: input.expectedDigestB64u,
1717
+ expectedOrigin: input.expectedOrigin,
1718
+ rpId: input.intent.authMethod.rpId,
1719
+ userAgent: input.userAgent
1720
+ });
1721
+ if (!verified.ok) return verified;
1722
+ if (await this.getWalletAuthMethodStore().getPasskeyV2({
1723
+ rpId: input.intent.authMethod.rpId,
1724
+ credentialIdB64u: verified.credential.credentialIdB64u
1725
+ })) return {
1726
+ ok: false,
1727
+ code: "duplicate_auth_method",
1728
+ message: "Passkey credential is already registered"
1729
+ };
1730
+ return {
1731
+ ok: true,
1732
+ authority: {
1733
+ kind: "passkey",
1734
+ walletId: input.intent.walletId,
1735
+ rpId: input.intent.authMethod.rpId,
1736
+ credentialIdB64u: verified.credential.credentialIdB64u,
1737
+ credentialPublicKeyB64u: verified.credential.credentialPublicKeyB64u,
1738
+ counter: verified.credential.counter,
1739
+ device: verified.credential.device,
1740
+ registrationIntentDigestB64u: input.expectedDigestB64u
1741
+ }
1742
+ };
1743
+ }
1744
+ async verifyRegistrationEmailOtpAuthority(input) {
1745
+ const proof = normalizeEmailOtpRegistrationProof(input.authority.emailOtpRegistrationProof);
1746
+ if (!proof) return {
1747
+ ok: false,
1748
+ code: "invalid_body",
1749
+ message: "emailOtpRegistrationProof is required for Email OTP registration"
1750
+ };
1751
+ if (proof.registrationIntentDigestB64u !== input.expectedDigestB64u) return {
1752
+ ok: false,
1753
+ code: "registration_intent_digest_mismatch",
1754
+ message: "Email OTP registration proof is not bound to this registration intent"
1755
+ };
1756
+ if (input.intent.authMethod.kind !== "email_otp") return {
1757
+ ok: false,
1758
+ code: "invalid_body",
1759
+ message: "Email OTP registration authority requires an Email OTP intent"
1760
+ };
1761
+ if (proof.proofKind === "google_sso_registration") {
1762
+ if (input.intent.authMethod.proofKind !== "google_sso_registration") return {
1763
+ ok: false,
1764
+ code: "invalid_body",
1765
+ message: "Google SSO registration proof requires a Google SSO registration intent"
1766
+ };
1767
+ if (proof.email !== input.intent.authMethod.email.toLowerCase()) return {
1768
+ ok: false,
1769
+ code: "email_mismatch",
1770
+ message: "Email OTP registration proof email does not match the intent"
1771
+ };
1772
+ if (proof.googleEmailOtpRegistrationAttemptId !== input.intent.authMethod.googleEmailOtpRegistrationAttemptId) return {
1773
+ ok: false,
1774
+ code: "registration_attempt_mismatch",
1775
+ message: "Google SSO registration proof does not match the registration attempt"
1776
+ };
1777
+ if (proof.googleEmailOtpRegistrationOfferId !== input.intent.authMethod.googleEmailOtpRegistrationOfferId || proof.googleEmailOtpRegistrationCandidateId !== input.intent.authMethod.googleEmailOtpRegistrationCandidateId) return {
1778
+ ok: false,
1779
+ code: "registration_offer_mismatch",
1780
+ message: "Google SSO registration proof does not match the selected offer candidate"
1781
+ };
1782
+ const attempt = await this.googleEmailOtpRegistrationAttempts.read(proof.googleEmailOtpRegistrationAttemptId);
1783
+ if (!attempt) return {
1784
+ ok: false,
1785
+ code: "registration_attempt_missing",
1786
+ message: "Google Email OTP registration attempt expired or was not found"
1787
+ };
1788
+ if (attempt.state !== "started" && attempt.state !== "key_finalized") return {
1789
+ ok: false,
1790
+ code: "registration_attempt_not_started",
1791
+ message: "Google Email OTP registration attempt is not active"
1792
+ };
1793
+ if (attempt.expiresAtMs <= Date.now()) {
1794
+ await this.googleEmailOtpRegistrationAttempts.put(expiredGoogleEmailOtpRegistrationAttemptRecord({
1795
+ record: attempt,
1796
+ updatedAtMs: Date.now()
1797
+ }));
1798
+ return {
1799
+ ok: false,
1800
+ code: "registration_attempt_expired",
1801
+ message: "Google Email OTP registration attempt expired"
1802
+ };
1803
+ }
1804
+ if (attempt.email.toLowerCase() !== proof.email) return {
1805
+ ok: false,
1806
+ code: "email_mismatch",
1807
+ message: "Google Email OTP registration attempt email does not match the proof"
1808
+ };
1809
+ if (attempt.offerId !== proof.googleEmailOtpRegistrationOfferId) return {
1810
+ ok: false,
1811
+ code: "registration_offer_mismatch",
1812
+ message: "Google Email OTP registration attempt does not match the selected offer"
1813
+ };
1814
+ const selectedOfferCandidate = attempt.offerCandidates.find((candidate) => candidate.candidateId === proof.googleEmailOtpRegistrationCandidateId);
1815
+ if (!selectedOfferCandidate || selectedOfferCandidate.walletId !== input.intent.walletId) return {
1816
+ ok: false,
1817
+ code: "registration_candidate_mismatch",
1818
+ message: "Google Email OTP registration candidate does not match walletId"
1819
+ };
1820
+ if (attempt.walletId !== selectedOfferCandidate.walletId || attempt.selectedCandidateId !== selectedOfferCandidate.candidateId || attempt.collisionCounter !== selectedOfferCandidate.collisionCounter) await this.googleEmailOtpRegistrationAttempts.put(pendingGoogleEmailOtpRegistrationAttemptWithSelectedCandidate({
1821
+ record: attempt,
1822
+ candidate: selectedOfferCandidate,
1823
+ updatedAtMs: Date.now()
1824
+ }));
1825
+ if (runtimePolicyScopeKey(attempt.runtimePolicyScope) !== runtimePolicyScopeKeyForRegistrationIntent(input.intent.runtimePolicyScope)) return {
1826
+ ok: false,
1827
+ code: "runtime_policy_scope_mismatch",
1828
+ message: "Google Email OTP registration attempt does not match runtime policy scope"
1829
+ };
1830
+ const providerSubject = parseProviderSubject(attempt.providerSubject);
1831
+ const finalWalletId = parseWalletIdForIntent(input.intent.walletId);
1832
+ const orgId = parseOrgId(input.orgId);
1833
+ if (!providerSubject.ok || !finalWalletId || !orgId.ok) return {
1834
+ ok: false,
1835
+ code: "invalid_body",
1836
+ message: "Google SSO registration proof contains invalid domain fields"
1837
+ };
1838
+ const email = attempt.email.toLowerCase();
1839
+ const emailHashHex = await this.emailHashHex(email);
1840
+ const duplicateEmailOtp = await this.getWalletAuthMethodStore().getEmailOtpV2({
1841
+ walletId: finalWalletId,
1842
+ emailHashHex
1843
+ });
1844
+ if (duplicateEmailOtp && duplicateEmailOtp.status === "active") return {
1845
+ ok: false,
1846
+ code: "duplicate_auth_method",
1847
+ message: "Email OTP auth method is already registered"
1848
+ };
1849
+ return {
1850
+ ok: true,
1851
+ authority: {
1852
+ kind: "email_otp",
1853
+ proofKind: "google_sso_registration",
1854
+ walletId: finalWalletId,
1855
+ providerSubject: providerSubject.value,
1856
+ email,
1857
+ emailHashHex,
1858
+ googleEmailOtpRegistrationAttemptId: attempt.attemptId,
1859
+ googleEmailOtpRegistrationOfferId: attempt.offerId,
1860
+ googleEmailOtpRegistrationCandidateId: selectedOfferCandidate.candidateId,
1861
+ registrationAuthorityId: attempt.attemptId,
1862
+ finalWalletId,
1863
+ orgId: orgId.value,
1864
+ ownerProofBindingDigest: input.expectedDigestB64u,
1865
+ registrationIntentDigestB64u: input.expectedDigestB64u
1866
+ }
1867
+ };
1868
+ }
1869
+ if (input.intent.authMethod.proofKind !== "otp_challenge") return {
1870
+ ok: false,
1871
+ code: "unsupported",
1872
+ message: "Cloudflare D1 registration start currently supports direct Email OTP challenge intent"
1873
+ };
1874
+ if (proof.email !== input.intent.authMethod.email.toLowerCase()) return {
1875
+ ok: false,
1876
+ code: "email_mismatch",
1877
+ message: "Email OTP registration proof email does not match the intent"
1878
+ };
1879
+ const verified = await this.emailOtpChallengeVerifier.verifyRegistrationResumable({
1880
+ providerSubject: proof.providerSubject,
1881
+ proofEmail: proof.email,
1882
+ walletId: input.intent.walletId,
1883
+ orgId: input.orgId,
1884
+ challengeId: proof.challengeId,
1885
+ otpCode: proof.otpCode,
1886
+ otpChannel: proof.otpChannel,
1887
+ ownerProofBindingDigest: input.expectedDigestB64u,
1888
+ operationId: input.verificationOperationId,
1889
+ receiptExpiresAtMs: input.verificationReceiptExpiresAtMs
1890
+ });
1891
+ if (!verified.ok) return verified;
1892
+ if (normalizeOptionalTrimmedString(verified.email)?.toLowerCase() !== proof.email) return {
1893
+ ok: false,
1894
+ code: "email_mismatch",
1895
+ message: "Verified Email OTP address does not match the registration proof"
1896
+ };
1897
+ const emailHashHex = await this.emailHashHex(proof.email);
1898
+ const duplicateEmailOtp = await this.getWalletAuthMethodStore().getEmailOtpV2({
1899
+ walletId: input.intent.walletId,
1900
+ emailHashHex
1901
+ });
1902
+ if (duplicateEmailOtp && duplicateEmailOtp.status === "active") return {
1903
+ ok: false,
1904
+ code: "duplicate_auth_method",
1905
+ message: "Email OTP auth method is already registered"
1906
+ };
1907
+ const providerSubject = parseProviderSubject(proof.providerSubject);
1908
+ const challengeSubjectId = parseChallengeSubjectId(proof.providerSubject);
1909
+ const challengeId = parseEmailOtpChallengeId(proof.challengeId);
1910
+ const orgId = parseOrgId(input.orgId);
1911
+ if (!providerSubject.ok || !challengeSubjectId.ok || !challengeId.ok || !orgId.ok) return {
1912
+ ok: false,
1913
+ code: "invalid_body",
1914
+ message: "Email OTP registration proof contains invalid domain fields"
1915
+ };
1916
+ return {
1917
+ ok: true,
1918
+ authority: {
1919
+ kind: "email_otp",
1920
+ proofKind: "otp_challenge",
1921
+ walletId: input.intent.walletId,
1922
+ providerSubject: providerSubject.value,
1923
+ challengeSubjectId: challengeSubjectId.value,
1924
+ email: proof.email,
1925
+ emailHashHex,
1926
+ challengeId: challengeId.value,
1927
+ registrationAuthorityId: challengeId.value,
1928
+ originalWalletId: input.intent.walletId,
1929
+ finalWalletId: input.intent.walletId,
1930
+ orgId: orgId.value,
1931
+ ownerProofBindingDigest: input.expectedDigestB64u,
1932
+ challengePurpose: "registration",
1933
+ registrationIntentDigestB64u: input.expectedDigestB64u
1934
+ }
1935
+ };
1936
+ }
1937
+ async verifyAddAuthMethodEmailOtpAuthority(input) {
1938
+ const proof = input.authority.emailOtpRegistrationProof;
1939
+ if (proof.proofKind !== "otp_challenge") return {
1940
+ ok: false,
1941
+ code: "invalid_body",
1942
+ message: "Email OTP add-auth-method requires an OTP challenge proof"
1943
+ };
1944
+ if (proof.registrationIntentDigestB64u !== input.expectedDigestB64u) return {
1945
+ ok: false,
1946
+ code: "registration_intent_digest_mismatch",
1947
+ message: "Email OTP registration proof is not bound to this add-auth-method intent"
1948
+ };
1949
+ if (input.intent.authMethod.kind !== "email_otp") return {
1950
+ ok: false,
1951
+ code: "invalid_body",
1952
+ message: "Email OTP add-auth-method authority requires an Email OTP intent"
1953
+ };
1954
+ if (proof.email !== input.intent.authMethod.email.toLowerCase()) return {
1955
+ ok: false,
1956
+ code: "email_mismatch",
1957
+ message: "Email OTP registration proof email does not match the intent"
1958
+ };
1959
+ const verified = await this.emailOtpChallengeVerifier.verifyRegistration({
1960
+ providerSubject: proof.providerSubject,
1961
+ proofEmail: proof.email,
1962
+ walletId: input.intent.walletId,
1963
+ orgId: input.orgId,
1964
+ challengeId: proof.challengeId,
1965
+ otpCode: proof.otpCode,
1966
+ otpChannel: proof.otpChannel,
1967
+ ownerProofBindingDigest: input.expectedDigestB64u
1968
+ });
1969
+ if (!verified.ok) return verified;
1970
+ if (normalizeOptionalTrimmedString(verified.email)?.toLowerCase() !== proof.email) return {
1971
+ ok: false,
1972
+ code: "email_mismatch",
1973
+ message: "Verified Email OTP address does not match the registration proof"
1974
+ };
1975
+ const emailHashHex = await this.emailHashHex(proof.email);
1976
+ if ((await this.getWalletAuthMethodStore().listForWalletV2({ walletId: input.intent.walletId })).filter(isActiveWalletAuthMethodRecordV2).filter((method) => method.kind === "email_otp" && method.walletAuthorityId === input.sourceWalletAuthorityId).length > 0) return {
1977
+ ok: false,
1978
+ code: "already_configured",
1979
+ message: "Wallet authority already has an active email_otp auth method"
1980
+ };
1981
+ const providerSubject = parseProviderSubject(proof.providerSubject);
1982
+ const challengeSubjectId = parseChallengeSubjectId(proof.providerSubject);
1983
+ const challengeId = parseEmailOtpChallengeId(proof.challengeId);
1984
+ const orgId = parseOrgId(input.orgId);
1985
+ if (!providerSubject.ok || !challengeSubjectId.ok || !challengeId.ok || !orgId.ok) return {
1986
+ ok: false,
1987
+ code: "invalid_body",
1988
+ message: "Email OTP registration proof contains invalid domain fields"
1989
+ };
1990
+ return {
1991
+ ok: true,
1992
+ authority: {
1993
+ kind: "email_otp",
1994
+ proofKind: "otp_challenge",
1995
+ walletId: input.intent.walletId,
1996
+ providerSubject: providerSubject.value,
1997
+ challengeSubjectId: challengeSubjectId.value,
1998
+ email: proof.email,
1999
+ emailHashHex,
2000
+ challengeId: challengeId.value,
2001
+ registrationAuthorityId: challengeId.value,
2002
+ originalWalletId: input.intent.walletId,
2003
+ finalWalletId: input.intent.walletId,
2004
+ orgId: orgId.value,
2005
+ ownerProofBindingDigest: input.expectedDigestB64u,
2006
+ challengePurpose: "registration",
2007
+ registrationIntentDigestB64u: input.expectedDigestB64u
2008
+ }
2009
+ };
2010
+ }
2011
+ async emailHashHex(email) {
2012
+ return bytesToHex(await this.sha256Bytes(new TextEncoder().encode(email)));
2013
+ }
2014
+ };
2015
+ //#endregion
2016
+ export { CloudflareD1WalletAuthMethodService };
2017
+
2018
+ //# sourceMappingURL=d1WalletAuthMethodService.js.map