@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,1196 @@
1
+ import { parseLinkDeviceSessionId } from "../../../../shared-ts/src/utils/domainIds.js";
2
+ import { base64UrlDecode, base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
3
+ import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
4
+ import { sha256Bytes } from "../../../../shared-ts/src/utils/digests.js";
5
+ import { assertNeverLinkSessionStateV1 } from "../../../../shared-ts/src/device-linking/contracts.js";
6
+ import { parseLinkedDeviceEd25519ExportRootRecipientV1, parseLinkedDeviceEd25519ExportRootSubmissionV1 } from "../../../../shared-ts/src/device-linking/ed25519ExportRoot.js";
7
+ import { parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1, sameRouterAbEd25519YaoActivationBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
8
+ import { parseLinkedDeviceEd25519SourcePreservingReservationV1, parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1 } from "../../../../shared-ts/src/device-linking/sourceContribution.js";
9
+ import { parseActiveWalletSessionV1, parseLinkedDeviceApprovalDeliveryV1, parseLinkedDeviceApprovalV1, parseLinkedDeviceEmailOtpBaseFactorRequestV1, parseLinkedDeviceEmailOtpChallengeResendRequestV1, parseLinkedDeviceEmailOtpChallengeResultV1, parseLinkedDeviceEmailOtpChallengeStartRequestV1, parseLinkedDeviceEmailOtpChallengeVerifyRequestV1, parseLinkedDeviceEmailOtpVerificationResultV1, parseLinkedDeviceSessionClaimRequestV1, parseLinkedDeviceSessionTransportRequestV1, parseLinkedDeviceTargetCredentialRegistrationV1, parseLinkedDeviceTargetPreparationRequestV1, parseLinkedDeviceTargetPreparationV1, parseLocalAuthorityActivationFinalAckV1, parseLocalAuthorityInstallationReceiptV1, parseQrLinkedDeviceSessionPayloadV5 } from "../../../../shared-ts/src/device-linking/parsers.js";
10
+ import { LINKED_DEVICE_REQUEST_PROOF_HEADER_V1, computeLinkedDevicePublicKeyDigestV1 } from "../../../../shared-ts/src/device-linking/requestProof.js";
11
+ import { findRouteDefinitionById } from "../../../framework/routeDefinitions.js";
12
+ import { normalizeCorsOrigin } from "../../../../core/SessionService.js";
13
+ import { json, readJson } from "../../../framework/http.js";
14
+ import { extractBearerCredential, extractRouterApiEnvironmentId } from "../../../auth/routerApiKeyAuth.js";
15
+ import { resolvePublishableKeyApiCredentialAuth } from "../../../auth/routerApiCredentialAuth.js";
16
+ import { parseLinkedDeviceRequestProofV1 } from "../../../../core/deviceLinking/requestProof.js";
17
+ //#region src/router/transport/fetch/routes/deviceLinking.ts
18
+ const DEVICE_LINKING_BASE = "/wallet/device-linking/v1/sessions";
19
+ const TARGET_PREPARATION_ROUTE_ID = "linked_device_target_preparation";
20
+ const TARGET_CREDENTIAL_ROUTE_ID = "linked_device_target_credential";
21
+ const DEVICE_LINKING_REQUEST_PROOF_HEADER_V1 = LINKED_DEVICE_REQUEST_PROOF_HEADER_V1;
22
+ async function handleDeviceLinking(ctx) {
23
+ if (!ctx.pathname.startsWith(DEVICE_LINKING_BASE)) return null;
24
+ const service = ctx.service.deviceLinking;
25
+ if (!service) return notSupportedResponse();
26
+ const action = parseRoutePath(ctx.pathname);
27
+ if (!action) return null;
28
+ const nowMs = service.nowV1();
29
+ try {
30
+ switch (action.kind) {
31
+ case "create": return await handleCreate(ctx, service, nowMs);
32
+ case "session": return await handleSession(ctx, service, action.linkSessionId, nowMs);
33
+ case "claim": return await handleClaim(ctx, service, action.linkSessionId, nowMs);
34
+ case "approval": return await handleApproval(ctx, service, action.linkSessionId, nowMs);
35
+ case "target-preparation": return await handleTargetPreparation(ctx, service, action.linkSessionId, nowMs);
36
+ case "credential": return await handleCredential(ctx, service, action.linkSessionId, nowMs);
37
+ case "source-contribution-preparation": return await handleSourceContributionPreparation(ctx, service, action.linkSessionId, nowMs);
38
+ case "source-contribution": return await handleSourceContribution(ctx, service, action.linkSessionId, nowMs);
39
+ case "source-contribution-execute": return await handleSourceContributionExecute(ctx, service, action.linkSessionId, nowMs);
40
+ case "email-otp-challenge": return await handleEmailOtpChallenge(ctx, service, action.linkSessionId, nowMs, false);
41
+ case "email-otp-resend": return await handleEmailOtpChallenge(ctx, service, action.linkSessionId, nowMs, true);
42
+ case "email-otp-verify": return await handleEmailOtpVerify(ctx, service, action.linkSessionId, nowMs);
43
+ case "email-otp-base-factor": return await handleEmailOtpBaseFactor(ctx, service, action.linkSessionId, nowMs);
44
+ case "owner-cancel": return await handleOwnerCancel(ctx, service, action.linkSessionId, nowMs);
45
+ case "ed25519-export-root-recipient": return await handleExportRootRecipient(ctx, service, action.linkSessionId, nowMs);
46
+ case "ed25519-export-root": return await handleExportRootPackage(ctx, service, action.linkSessionId, nowMs);
47
+ case "receipt": return await handleReceipt(ctx, service, action.linkSessionId, nowMs);
48
+ case "cancel": return await handleCancel(ctx, service, action.linkSessionId, nowMs);
49
+ default: return assertNever(action);
50
+ }
51
+ } catch (error) {
52
+ if (error instanceof DeviceLinkingInputError) return invalidInputResponse(error.message);
53
+ return json({
54
+ ok: false,
55
+ code: "internal",
56
+ message: errorMessage(error)
57
+ }, { status: 500 });
58
+ }
59
+ }
60
+ async function handleCreate(ctx, service, nowMs) {
61
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
62
+ const bodyDigestB64u = await requestBodyDigest(ctx.request);
63
+ const rawBody = await readJsonBody(ctx.request);
64
+ const body = parseBoundary(() => parseCreateRequest(rawBody));
65
+ const keyDigest = await computeDevicePublicKeyDigestB64u(body.payload.devicePublicKeyB64u);
66
+ const proof = parseBoundary(() => parseRequestProofHeader(ctx.request));
67
+ validateRequestProof(proof, ctx.method, ctx.pathname, body.payload.linkSessionId, bodyDigestB64u, keyDigest, nowMs);
68
+ const verified = await service.verifyPublicSessionProofV1({
69
+ payload: body.payload,
70
+ proof,
71
+ method: ctx.method,
72
+ canonicalPath: ctx.pathname,
73
+ bodyDigestB64u,
74
+ devicePublicKeyDigestB64u: keyDigest,
75
+ requestedAtMs: nowMs
76
+ });
77
+ if (verified.kind === "denied") return authDeniedResponse(verified);
78
+ return sessionResultResponse(await service.sessionService.createUnclaimedSessionV1({
79
+ payload: body.payload,
80
+ nowMs
81
+ }));
82
+ }
83
+ async function handleSession(ctx, service, rawLinkSessionId, nowMs) {
84
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
85
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
86
+ if (authenticated.kind === "not_found") return notFoundResponse();
87
+ if (ctx.method !== "GET") return methodNotAllowedResponse();
88
+ return sessionProjectionResponse(authenticated.session, "applied");
89
+ }
90
+ async function handleClaim(ctx, service, rawLinkSessionId, nowMs) {
91
+ const bodyDigestB64u = await requestBodyDigest(ctx.request);
92
+ const authentication = await authenticateOwner(service, ctx, bodyDigestB64u, nowMs);
93
+ if (authentication.kind === "denied") return authDeniedResponse(authentication);
94
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
95
+ const request = parseBoundary(() => parseLinkedDeviceSessionClaimRequestV1(authentication.body));
96
+ if (request.payload.linkSessionId !== parseSessionId(rawLinkSessionId)) return invalidInputResponse("link session id does not match route");
97
+ validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
98
+ return claimResultResponse(await service.sessionService.claimSessionV1({
99
+ payload: request.payload,
100
+ nowMs,
101
+ owner: authentication.owner
102
+ }));
103
+ }
104
+ async function handleApproval(ctx, service, rawLinkSessionId, nowMs) {
105
+ if (ctx.method === "GET") {
106
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
107
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
108
+ if (authenticated.kind === "not_found") return notFoundResponse();
109
+ if (service.installationReceipt && (authenticated.session.state.state === "provisioning" || authenticated.session.state.state === "authority_pending_local_install" || authenticated.session.state.state === "active")) {
110
+ const committed = await service.installationReceipt.readCommittedAuthorityPackagesV1({
111
+ session: authenticated.session,
112
+ requestedAtMs: nowMs
113
+ });
114
+ if (!committed) return new Response(null, { status: 204 });
115
+ return json(committed, { status: 200 });
116
+ }
117
+ const approval = authenticated.session.approvalTranscript?.value;
118
+ if (!approval) return invalidStateResponse(authenticated.session);
119
+ return json(parseLinkedDeviceApprovalDeliveryV1({
120
+ kind: "linked_device_approval_delivery_v1",
121
+ approval
122
+ }), { status: 200 });
123
+ }
124
+ const bodyDigestB64u = await requestBodyDigest(ctx.request);
125
+ const authentication = await authenticateOwner(service, ctx, bodyDigestB64u, nowMs);
126
+ if (authentication.kind === "denied") return authDeniedResponse(authentication);
127
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
128
+ const approval = parseBoundary(() => parseLinkedDeviceApprovalV1(authentication.body));
129
+ const linkSessionId = parseSessionId(rawLinkSessionId);
130
+ if (approval.linkSessionId !== linkSessionId) return invalidInputResponse("link session id does not match route");
131
+ validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
132
+ const targetFactor = approval.targetFactor;
133
+ if (isExistingEmailOtpTargetFactorV1(targetFactor)) {
134
+ const session = await service.sessionService.getSessionV1({
135
+ linkSessionId,
136
+ nowMs
137
+ });
138
+ if (!session) return notFoundResponse();
139
+ const ownerMismatch = requireOwnerMatchesClaimedWallet(authentication.owner, session);
140
+ if (ownerMismatch) return ownerMismatch;
141
+ if (authentication.owner.walletId !== approval.walletId) return authDeniedResponse({
142
+ kind: "denied",
143
+ code: "unauthorized",
144
+ message: "owner session does not match link wallet"
145
+ });
146
+ if (session.state.state !== "claimed" || !session.claimTranscript) return invalidStateResponse(session);
147
+ const selectionError = await requireSelectedEmailOtpBaseFactorV1(service, session, {
148
+ walletId: approval.walletId,
149
+ baseWalletAuthMethodId: targetFactor.baseWalletAuthMethodId
150
+ });
151
+ if (selectionError) return selectionError;
152
+ }
153
+ return approvalResultResponse(await service.sessionService.recordOwnerApprovalV1({
154
+ approval,
155
+ nowMs,
156
+ owner: authentication.owner
157
+ }));
158
+ }
159
+ function isExistingEmailOtpTargetFactorV1(targetFactor) {
160
+ return targetFactor.kind === "email_otp" && targetFactor.enrollment.kind === "existing_enrollment";
161
+ }
162
+ async function handleTargetPreparation(ctx, service, rawLinkSessionId, nowMs) {
163
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
164
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
165
+ if (authenticated.kind === "not_found") return notFoundResponse();
166
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
167
+ const origin = await authenticateTargetPasskeyOriginV1(ctx, TARGET_PREPARATION_ROUTE_ID);
168
+ if (!origin.ok) return origin.response;
169
+ const request = parseBoundary(() => parseLinkedDeviceTargetPreparationRequestV1(authenticated.body));
170
+ if (request.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
171
+ const approval = requireApproval(authenticated.session);
172
+ const rawPreparation = await readTargetPreparation(service, authenticated.session, approval, {
173
+ access: "create_or_replay",
174
+ expectedOrigin: origin.expectedOrigin,
175
+ deliveryRecipientPublicKey65B64u: request.deliveryRecipientPublicKey65B64u
176
+ }, nowMs);
177
+ if (rawPreparation.kind === "conflict") return json({
178
+ ok: false,
179
+ code: "conflict",
180
+ message: rawPreparation.message
181
+ }, { status: 409 });
182
+ return json(parseBoundary(() => parseLinkedDeviceTargetPreparationV1(rawPreparation)), { status: 200 });
183
+ }
184
+ async function handleCredential(ctx, service, rawLinkSessionId, nowMs) {
185
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
186
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
187
+ if (authenticated.kind === "not_found") return notFoundResponse();
188
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
189
+ const origin = await authenticateTargetPasskeyOriginV1(ctx, TARGET_CREDENTIAL_ROUTE_ID);
190
+ if (!origin.ok) return origin.response;
191
+ const registration = parseBoundary(() => parseLinkedDeviceTargetCredentialRegistrationV1(authenticated.body));
192
+ if (registration.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
193
+ const session = authenticated.session;
194
+ const approval = requireApproval(session);
195
+ const rawPreparation = await readTargetPreparation(service, session, approval, { access: "replay_only" }, nowMs);
196
+ const preparation = parseBoundary(() => parseLinkedDeviceTargetPreparationV1(rawPreparation));
197
+ const result = await service.targetCredential.registerTargetCredentialV1({
198
+ registration,
199
+ preparation,
200
+ session,
201
+ approval,
202
+ expectedOrigin: origin.expectedOrigin,
203
+ requestedAtMs: nowMs
204
+ });
205
+ if (result.outcome === "invalid_input") return invalidInputResponse(result.message);
206
+ let sessionOutcome = result.outcome;
207
+ let recordedSession = session;
208
+ if (session.state.state === "awaiting_target_factor") {
209
+ const recorded = await service.sessionService.recordTargetCredentialV1({
210
+ linkSessionId: session.linkSessionId,
211
+ expectedRevision: session.revision,
212
+ sourceContributionPreparation: result.targetCredential.ordinarySignerMaterialPreparations,
213
+ nowMs
214
+ });
215
+ if (recorded.outcome !== "applied" && recorded.outcome !== "replayed") return sessionResultResponse(recorded);
216
+ sessionOutcome = recorded.outcome;
217
+ recordedSession = recorded.record;
218
+ } else if (session.state.state !== "awaiting_source_contribution" && session.state.state !== "provisioning" && session.state.state !== "authority_pending_local_install" && session.state.state !== "active") return invalidStateResponse(session);
219
+ return targetCredentialResultResponse(recordedSession, sessionOutcome, result.targetCredential);
220
+ }
221
+ async function handleSourceContributionPreparation(ctx, service, rawLinkSessionId, nowMs) {
222
+ const owner = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
223
+ if (owner.kind !== "authorized") return ownerSessionResponse(owner);
224
+ if (ctx.method !== "GET") return methodNotAllowedResponse();
225
+ const preparation = owner.session.sourceContributionPreparation;
226
+ if (!preparation) return new Response(null, { status: 204 });
227
+ return json(preparation, { status: 200 });
228
+ }
229
+ async function handleSourceContribution(ctx, service, rawLinkSessionId, nowMs) {
230
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
231
+ const linkSessionId = parseSessionId(rawLinkSessionId);
232
+ const bodyDigestB64u = await requestBodyDigest(ctx.request);
233
+ const authentication = await authenticateOwner(service, ctx, bodyDigestB64u, nowMs);
234
+ if (authentication.kind === "denied") return authDeniedResponse(authentication);
235
+ const approval = parseBoundary(() => parseLinkedDeviceApprovalV1(authentication.body));
236
+ if (approval.linkSessionId !== linkSessionId) return invalidInputResponse("link session id does not match route");
237
+ validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
238
+ const recorded = await service.sessionService.recordSourceContributionV1({
239
+ approval,
240
+ nowMs,
241
+ owner: authentication.owner
242
+ });
243
+ if (recorded.outcome !== "applied" && recorded.outcome !== "replayed") return sessionResultResponse(recorded);
244
+ if (recorded.record.state.state !== "provisioning" && recorded.record.state.state !== "authority_pending_local_install" && recorded.record.state.state !== "active") return sessionResultResponse(recorded);
245
+ if (recorded.record.state.state !== "provisioning") return sessionProjectionResponse(recorded.record, recorded.outcome);
246
+ const installationReceipt = service.installationReceipt;
247
+ if (!installationReceipt) return invalidInputResponse("verified authority installation is not configured");
248
+ const finalApproval = requireSourceContributionApproval(recorded.record);
249
+ const verifiedLinkInput = await service.targetCredential.buildVerifiedLinkInputV1({
250
+ session: recorded.record,
251
+ approval: finalApproval,
252
+ requestedAtMs: nowMs
253
+ });
254
+ const exportRootTransfer = await service.ed25519ExportRoot?.readTransferV1(linkSessionId);
255
+ const ed25519ExportRootPackage = exportRootTransfer?.state === "sealed" ? exportRootTransfer.package : null;
256
+ const requiresEd25519ExportRoot = verifiedLinkInput.signerManifest.keyFamilies[0] === "ed25519";
257
+ if (requiresEd25519ExportRoot !== (ed25519ExportRootPackage !== null)) return invalidInputResponse(requiresEd25519ExportRoot ? "linked-device Ed25519 export-root package is unavailable" : "linked-device export-root package has no Ed25519 signer");
258
+ const committed = await installationReceipt.commitPendingAuthorityV1({
259
+ input: verifiedLinkInput,
260
+ nowMs,
261
+ ed25519ExportRootPackage
262
+ });
263
+ if (committed.kind === "invalid_input") return sessionResultResponse(await service.sessionService.failBeforeCommitV1({
264
+ linkSessionId,
265
+ expectedRevision: recorded.record.revision,
266
+ error: {
267
+ kind: "package_preparation_failed",
268
+ reason: committed.message
269
+ },
270
+ nowMs
271
+ }));
272
+ if (committed.kind === "conflict") return sessionResultResponse(await service.sessionService.failBeforeCommitV1({
273
+ linkSessionId,
274
+ expectedRevision: recorded.record.revision,
275
+ error: {
276
+ kind: "package_preparation_failed",
277
+ reason: committed.message
278
+ },
279
+ nowMs
280
+ }));
281
+ return sessionProjectionResponse(committed.session, committed.kind === "replayed" ? "replayed" : recorded.outcome);
282
+ }
283
+ async function handleSourceContributionExecute(ctx, service, rawLinkSessionId, nowMs) {
284
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
285
+ const owner = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
286
+ if (owner.kind !== "authorized") return ownerSessionResponse(owner);
287
+ const router = service.sourceContributionRouter;
288
+ if (!router) return notSupportedResponse("Ed25519 source-preserving linking is not configured");
289
+ const preparation = requireEd25519SourceContributionPreparation(owner.session);
290
+ const targetRequest = parseBoundary(() => {
291
+ const parsed = parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1(owner.body);
292
+ if (!parsed.ok) throw new Error(parsed.message);
293
+ return parsed.value;
294
+ });
295
+ if (!sameRouterAbEd25519YaoActivationBindingV1(targetRequest.binding, preparation.targetAdmission.binding)) throw new DeviceLinkingInputError("source-preserving target request binding does not match the persisted preparation");
296
+ const rawReservation = await router.executeEd25519SourcePreservingV1({
297
+ sourceBinding: preparation.sourceBinding,
298
+ targetRequest,
299
+ targetAdmission: preparation.targetAdmission,
300
+ applicationBinding: preparation.applicationBinding,
301
+ participantIds: preparation.participantIds
302
+ });
303
+ const reservation = parseBoundary(() => parseLinkedDeviceEd25519SourcePreservingReservationV1(rawReservation));
304
+ if (reservation.participantIds[0] !== preparation.participantIds[0] || reservation.participantIds[1] !== preparation.participantIds[1]) throw new DeviceLinkingInputError("source-preserving reservation participant ids do not match the persisted preparation");
305
+ return json(rawReservation, { status: 200 });
306
+ }
307
+ async function handleEmailOtpChallenge(ctx, service, rawLinkSessionId, nowMs, resend) {
308
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
309
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
310
+ if (authenticated.kind === "not_found") return notFoundResponse();
311
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
312
+ const request = parseBoundary(() => parseEmailOtpChallengeRequest(authenticated.body, resend));
313
+ if (request.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
314
+ const provider = service.emailOtpTargetFactor;
315
+ if (!provider) return notSupportedResponse("Email OTP linking is not configured");
316
+ const session = authenticated.session;
317
+ const approval = requireApproval(session);
318
+ const rawPreparation = await readTargetPreparation(service, session, approval, { access: "replay_only" }, nowMs);
319
+ const preparation = parseBoundary(() => parseLinkedDeviceTargetPreparationV1(rawPreparation));
320
+ const started = await provider.startChallengeV1({
321
+ session,
322
+ approval,
323
+ preparation,
324
+ resend,
325
+ requestedAtMs: nowMs
326
+ });
327
+ if (started.kind === "refused") return json({
328
+ ok: false,
329
+ code: started.code,
330
+ message: started.message
331
+ }, { status: 403 });
332
+ const workerEphemeralPublicKey65B64u = request.kind === "linked_device_email_otp_challenge_start_request_v1" ? request.workerEphemeralPublicKey65B64u : requireSentEmailOtpChallenge(session).workerEphemeralPublicKey65B64u;
333
+ const recorded = await service.sessionService.recordEmailOtpChallengeStateV1({
334
+ linkSessionId: session.linkSessionId,
335
+ expectedRevision: session.revision,
336
+ challenge: {
337
+ challengeId: started.challengeId,
338
+ workerEphemeralPublicKey65B64u,
339
+ maskedEmailHint: started.maskedEmailHint,
340
+ expiresAtMs: started.expiresAtMs,
341
+ resendAvailableAtMs: started.resendAvailableAtMs
342
+ },
343
+ nowMs
344
+ });
345
+ if (recorded.outcome !== "applied" && recorded.outcome !== "replayed") return sessionResultResponse(recorded);
346
+ return json(parseLinkedDeviceEmailOtpChallengeResultV1({
347
+ kind: "linked_device_email_otp_challenge_result_v1",
348
+ challengeId: started.challengeId,
349
+ maskedEmailHint: started.maskedEmailHint,
350
+ expiresAtMs: started.expiresAtMs,
351
+ resendAvailableAtMs: started.resendAvailableAtMs
352
+ }), { status: 200 });
353
+ }
354
+ async function handleEmailOtpBaseFactor(ctx, service, rawLinkSessionId, nowMs) {
355
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
356
+ const authenticated = await authenticateOwnerForSession(ctx, service, parseSessionId(rawLinkSessionId), nowMs);
357
+ if (authenticated.kind !== "authorized") return ownerSessionResponse(authenticated);
358
+ const session = authenticated.session;
359
+ const ownerMismatch = requireOwnerMatchesClaimedWallet(authenticated.owner, session);
360
+ if (ownerMismatch) return ownerMismatch;
361
+ if (session.state.state !== "claimed" || session.qrPayload.targetFactor.kind !== "email_otp" || !session.claimTranscript) return invalidStateResponse(session);
362
+ const walletId = session.claimTranscript.value.walletId;
363
+ const request = parseBoundary(() => parseLinkedDeviceEmailOtpBaseFactorRequestV1(authenticated.body));
364
+ if (request.expectedRevision !== session.revision) return json({
365
+ ok: false,
366
+ outcome: "conflict",
367
+ expectedRevision: request.expectedRevision,
368
+ actualRevision: session.revision
369
+ }, { status: 409 });
370
+ const provider = service.emailOtpTargetFactor;
371
+ if (!provider) return notSupportedResponse("Email OTP linking is not configured");
372
+ const resolution = await provider.resolveBaseFactorSelectionV1({
373
+ walletId,
374
+ request
375
+ });
376
+ return json({
377
+ revision: session.revision,
378
+ resolution
379
+ }, { status: 200 });
380
+ }
381
+ async function handleOwnerCancel(ctx, service, rawLinkSessionId, nowMs) {
382
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
383
+ const linkSessionId = parseSessionId(rawLinkSessionId);
384
+ const authenticated = await authenticateOwnerForSession(ctx, service, linkSessionId, nowMs);
385
+ if (authenticated.kind !== "authorized") return ownerSessionResponse(authenticated);
386
+ parseBoundary(() => parseOwnerCancelRequest(authenticated.body));
387
+ const session = authenticated.session;
388
+ const ownerMismatch = requireOwnerMatchesClaimedWallet(authenticated.owner, session);
389
+ if (ownerMismatch) return ownerMismatch;
390
+ if (session.state.state === "cancelled") return sessionProjectionResponse(session, "replayed");
391
+ return sessionResultResponse(await service.sessionService.cancelSessionV1({
392
+ linkSessionId,
393
+ expectedRevision: session.revision,
394
+ nowMs
395
+ }));
396
+ }
397
+ async function handleEmailOtpVerify(ctx, service, rawLinkSessionId, nowMs) {
398
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
399
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
400
+ if (authenticated.kind === "not_found") return notFoundResponse();
401
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
402
+ const request = parseBoundary(() => parseLinkedDeviceEmailOtpChallengeVerifyRequestV1(authenticated.body));
403
+ if (request.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
404
+ const provider = service.emailOtpTargetFactor;
405
+ if (!provider) return notSupportedResponse("Email OTP linking is not configured");
406
+ const session = authenticated.session;
407
+ const approval = requireApproval(session);
408
+ const rawPreparation = await readTargetPreparation(service, session, approval, { access: "replay_only" }, nowMs);
409
+ const preparation = parseBoundary(() => parseLinkedDeviceTargetPreparationV1(rawPreparation));
410
+ if (requireSentEmailOtpChallenge(session).challengeId !== request.challengeId) return invalidInputResponse("email OTP challenge does not match this session");
411
+ const verified = await provider.verifyChallengeV1({
412
+ session,
413
+ approval,
414
+ preparation,
415
+ challengeId: request.challengeId,
416
+ otpCode: request.otpCode,
417
+ requestedAtMs: nowMs
418
+ });
419
+ if (verified.kind === "refused") return json({
420
+ ok: false,
421
+ code: verified.code,
422
+ message: verified.message
423
+ }, { status: 403 });
424
+ return json(parseBoundary(() => parseLinkedDeviceEmailOtpVerificationResultV1({
425
+ kind: "linked_device_email_otp_verification_result_v1",
426
+ verificationGrant: verified.grant,
427
+ factorRelease: verified.factorRelease
428
+ })), { status: 200 });
429
+ }
430
+ async function handleExportRootRecipient(ctx, service, rawLinkSessionId, nowMs) {
431
+ const port = service.ed25519ExportRoot;
432
+ if (!port) return notSupportedResponse("Linked-device Ed25519 export-root relay is not configured");
433
+ const sessionId = parseSessionId(rawLinkSessionId);
434
+ if (ctx.method === "GET") {
435
+ const owner = await authenticateOwnerForSession(ctx, service, sessionId, nowMs);
436
+ if (owner.kind !== "authorized") return ownerSessionResponse(owner);
437
+ const transfer = await port.readTransferV1(sessionId);
438
+ return transfer ? json(transfer.recipient, { status: 200 }) : new Response(null, { status: 204 });
439
+ }
440
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
441
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
442
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
443
+ if (authenticated.kind === "not_found") return notFoundResponse();
444
+ const recipient = parseBoundary(() => parseLinkedDeviceEd25519ExportRootRecipientV1(authenticated.body));
445
+ if (recipient.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
446
+ return exportRootWriteResponse(await port.registerRecipientV1({ recipient }));
447
+ }
448
+ async function handleExportRootPackage(ctx, service, rawLinkSessionId, nowMs) {
449
+ const port = service.ed25519ExportRoot;
450
+ if (!port) return notSupportedResponse("Linked-device Ed25519 export-root relay is not configured");
451
+ const sessionId = parseSessionId(rawLinkSessionId);
452
+ if (ctx.method === "GET") {
453
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
454
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
455
+ if (authenticated.kind === "not_found") return notFoundResponse();
456
+ const transfer = await port.readTransferV1(sessionId);
457
+ return transfer?.state === "sealed" ? json(transfer.package, { status: 200 }) : new Response(null, { status: 204 });
458
+ }
459
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
460
+ const owner = await authenticateOwnerForSession(ctx, service, sessionId, nowMs);
461
+ if (owner.kind !== "authorized") return ownerSessionResponse(owner);
462
+ const submission = parseBoundary(() => parseLinkedDeviceEd25519ExportRootSubmissionV1(owner.body));
463
+ if (submission.linkSessionId !== sessionId) return invalidInputResponse("link session id does not match route");
464
+ return exportRootWriteResponse(await port.submitPackageV1({
465
+ linkSessionId: sessionId,
466
+ package: submission.package
467
+ }));
468
+ }
469
+ async function handleReceipt(ctx, service, rawLinkSessionId, nowMs) {
470
+ if (!service.installationReceipt) return notSupportedResponse("Installation receipt is not configured");
471
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
472
+ const linkSessionId = parseSessionId(rawLinkSessionId);
473
+ const rawBody = await readJsonBody(ctx.request.clone());
474
+ if (isFinalActivationAcknowledgement(rawBody)) {
475
+ const acknowledgement = parseBoundary(() => parseLocalAuthorityActivationFinalAckV1(rawBody));
476
+ if (acknowledgement.linkSessionId !== linkSessionId) return invalidInputResponse("activation acknowledgement session does not match the route");
477
+ const bearerToken = extractBearerCredential(ctx.request.headers);
478
+ const hasDeviceProof = ctx.request.headers.has(LINKED_DEVICE_REQUEST_PROOF_HEADER_V1);
479
+ if (bearerToken && !hasDeviceProof) {
480
+ const exact = await authenticateExactWalletSessionForAcknowledgement(ctx, bearerToken, nowMs);
481
+ if (exact.kind === "denied") return authDeniedResponse(exact);
482
+ await service.installationReceipt.acknowledgeLocalAuthorityActivationV1({
483
+ acknowledgement,
484
+ authentication: exact.authentication,
485
+ requestedAtMs: nowMs
486
+ });
487
+ return new Response(null, { status: 204 });
488
+ }
489
+ const liveSession = await service.sessionService.getSessionV1({
490
+ linkSessionId,
491
+ nowMs
492
+ });
493
+ if (liveSession) {
494
+ const authenticated = await authenticateDeviceWithKnownSession(ctx, service, linkSessionId, liveSession, nowMs);
495
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
496
+ const authenticatedAcknowledgement = parseBoundary(() => parseLocalAuthorityActivationFinalAckV1(authenticated.body));
497
+ await service.installationReceipt.acknowledgeLocalAuthorityActivationV1({
498
+ acknowledgement: authenticatedAcknowledgement,
499
+ authentication: {
500
+ kind: "live",
501
+ session: liveSession
502
+ },
503
+ requestedAtMs: nowMs
504
+ });
505
+ return new Response(null, { status: 204 });
506
+ }
507
+ const cleanupReceipt = await service.installationReceipt.readActivationCleanupReceiptV1({
508
+ linkSessionId,
509
+ requestedAtMs: nowMs
510
+ });
511
+ if (!cleanupReceipt) return notFoundResponse();
512
+ const authenticated = await authenticateDeviceWithExpectedKey(ctx, service, linkSessionId, cleanupReceipt.devicePublicKeyB64u, nowMs);
513
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
514
+ const authenticatedAcknowledgement = parseBoundary(() => parseLocalAuthorityActivationFinalAckV1(authenticated.body));
515
+ await service.installationReceipt.acknowledgeLocalAuthorityActivationV1({
516
+ acknowledgement: authenticatedAcknowledgement,
517
+ authentication: {
518
+ kind: "cleanup_receipt",
519
+ receipt: cleanupReceipt
520
+ },
521
+ requestedAtMs: nowMs
522
+ });
523
+ return new Response(null, { status: 204 });
524
+ }
525
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
526
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
527
+ if (authenticated.kind === "not_found") return notFoundResponse();
528
+ const receipt = parseBoundary(() => parseLocalAuthorityInstallationReceiptV1(authenticated.body));
529
+ if (receipt.deviceId !== authenticated.session.state.deviceId) return invalidInputResponse("installation receipt device does not match this session");
530
+ return installationResultResponse(await service.installationReceipt.activateInstalledAuthorityV1({
531
+ receipt,
532
+ session: authenticated.session,
533
+ requestedAtMs: nowMs
534
+ }));
535
+ }
536
+ async function authenticateExactWalletSessionForAcknowledgement(ctx, token, nowMs) {
537
+ let context;
538
+ try {
539
+ context = await ctx.service.authorizationSessions.readWalletSessionAuthorizationV2ByOperationCredential({
540
+ tenantId: ctx.service.authorizationSessions.tenantId,
541
+ token,
542
+ nowMs
543
+ });
544
+ } catch {
545
+ return {
546
+ kind: "denied",
547
+ code: "unauthorized",
548
+ message: "Exact Wallet Session is unavailable"
549
+ };
550
+ }
551
+ if (!context) return {
552
+ kind: "denied",
553
+ code: "unauthorized",
554
+ message: "Exact Wallet Session is invalid"
555
+ };
556
+ const session = context.authorization.session;
557
+ if (context.retiredAtMs !== null || context.authority.state !== "active" || context.authMethod.status !== "active" || session.expiresAtMs <= nowMs) return {
558
+ kind: "denied",
559
+ code: "expired",
560
+ message: "Exact Wallet Session is expired or inactive"
561
+ };
562
+ return {
563
+ kind: "authorized",
564
+ authentication: {
565
+ kind: "exact_wallet_session",
566
+ tenantId: session.tenantId,
567
+ principalId: session.principalId,
568
+ walletId: session.walletId,
569
+ authorityId: session.authorityId,
570
+ walletAuthMethodId: session.walletAuthMethodId,
571
+ authorizationId: session.authorizationId,
572
+ walletSessionId: session.walletSessionId,
573
+ expiresAtMs: session.expiresAtMs
574
+ }
575
+ };
576
+ }
577
+ function isFinalActivationAcknowledgement(raw) {
578
+ return raw !== null && typeof raw === "object" && !Array.isArray(raw) && "kind" in raw && raw.kind === "local_authority_activation_final_ack_v1";
579
+ }
580
+ function installationResultResponse(result) {
581
+ switch (result.kind) {
582
+ case "active": return json({
583
+ kind: "active",
584
+ authority: result.authority,
585
+ authMethod: result.authMethod,
586
+ walletSession: activeWalletSessionWireV1(result.walletSession),
587
+ deliveryBinding: result.deliveryBinding,
588
+ sealedDelivery: result.sealedDelivery
589
+ }, { status: 200 });
590
+ case "pending_local_install": return json({
591
+ kind: "pending_local_install",
592
+ authorityId: result.authorityId,
593
+ reason: { kind: result.reason }
594
+ }, { status: 202 });
595
+ case "integrity_error": return json({
596
+ kind: "integrity_error",
597
+ reason: {
598
+ kind: "installation_receipt_mismatch",
599
+ field: "installedActivationRefs"
600
+ }
601
+ }, { status: 409 });
602
+ }
603
+ }
604
+ function activeWalletSessionWireV1(issued) {
605
+ const session = issued.session;
606
+ const capabilitySubjects = session.capabilitySubjects.map((subject) => {
607
+ switch (subject.kind) {
608
+ case "sign":
609
+ case "export_keys": return {
610
+ kind: subject.kind,
611
+ keyFamily: subject.keyFamily,
612
+ materialActivation: subject.materialActivation
613
+ };
614
+ case "link_devices":
615
+ case "revoke_devices": return { kind: subject.kind };
616
+ default: return assertNever(subject);
617
+ }
618
+ });
619
+ const first = capabilitySubjects[0];
620
+ if (!first) throw new Error("issued Wallet Session has no capability subjects");
621
+ return parseActiveWalletSessionV1({
622
+ kind: "active_wallet_session_v1",
623
+ walletId: session.walletId,
624
+ authorityId: session.authorityId,
625
+ authMethodId: session.walletAuthMethodId,
626
+ authorizationId: session.authorizationId,
627
+ quotaId: issued.quota.quotaId,
628
+ authorityDigestB64u: session.authorityDigestB64u,
629
+ authorityRevocationEpoch: session.authorityRevocationEpoch,
630
+ capabilitySubjects: [first, ...capabilitySubjects.slice(1)],
631
+ issuedAtMs: session.createdAtMs,
632
+ expiresAtMs: session.expiresAtMs
633
+ });
634
+ }
635
+ async function handleCancel(ctx, service, rawLinkSessionId, nowMs) {
636
+ const authenticated = await authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs);
637
+ if (authenticated.kind === "denied") return authDeniedResponse(authenticated);
638
+ if (authenticated.kind === "not_found") return notFoundResponse();
639
+ if (ctx.method !== "POST") return methodNotAllowedResponse();
640
+ const request = parseBoundary(() => parseLinkedDeviceSessionTransportRequestV1(authenticated.body));
641
+ if (request.kind !== "linked_device_session_cancel_unclaimed_request_v1" && request.kind !== "linked_device_session_cancel_claimed_request_v1") return invalidInputResponse("cancel request kind is invalid");
642
+ if (request.linkSessionId !== authenticated.linkSessionId) return invalidInputResponse("link session id does not match route");
643
+ return sessionResultResponse(await service.sessionService.cancelSessionV1({
644
+ linkSessionId: authenticated.linkSessionId,
645
+ expectedRevision: authenticated.session.revision,
646
+ nowMs
647
+ }));
648
+ }
649
+ async function authenticateOwnerForSession(ctx, service, linkSessionId, nowMs) {
650
+ const bodyDigestB64u = await requestBodyDigest(ctx.request);
651
+ const authentication = await authenticateOwner(service, ctx, bodyDigestB64u, nowMs);
652
+ if (authentication.kind === "denied") return authentication;
653
+ const session = await service.sessionService.getSessionV1({
654
+ linkSessionId,
655
+ nowMs
656
+ });
657
+ if (!session) return { kind: "not_found" };
658
+ validateOwnerRequestBinding(authentication.binding, ctx, bodyDigestB64u, nowMs);
659
+ return {
660
+ kind: "authorized",
661
+ body: authentication.body,
662
+ owner: authentication.owner,
663
+ linkSessionId,
664
+ session
665
+ };
666
+ }
667
+ async function authenticateOwner(service, ctx, bodyDigestB64u, nowMs) {
668
+ return service.authenticateOwnerRequestV1({
669
+ request: ctx.request,
670
+ method: ctx.method,
671
+ pathname: ctx.pathname,
672
+ bodyDigestB64u,
673
+ requestedAtMs: nowMs
674
+ });
675
+ }
676
+ async function authenticateDeviceForSession(ctx, service, rawLinkSessionId, nowMs) {
677
+ const linkSessionId = parseSessionId(rawLinkSessionId);
678
+ const rawSession = await service.sessionService.getSessionV1(linkSessionId);
679
+ if (!rawSession) return { kind: "not_found" };
680
+ const bodyDigestB64u = await requestBodyDigest(ctx.request);
681
+ const expectedKey = rawSession.qrPayload.devicePublicKeyB64u;
682
+ const keyDigest = await computeDevicePublicKeyDigestB64u(expectedKey);
683
+ const proof = parseBoundary(() => parseRequestProofHeader(ctx.request));
684
+ validateRequestProof(proof, ctx.method, ctx.pathname, linkSessionId, bodyDigestB64u, keyDigest, nowMs);
685
+ const authentication = await service.authenticateDeviceRequestV1({
686
+ request: ctx.request,
687
+ method: ctx.method,
688
+ pathname: ctx.pathname,
689
+ linkSessionId: String(linkSessionId),
690
+ bodyDigestB64u,
691
+ expectedDevicePublicKeyB64u: expectedKey,
692
+ expectedDevicePublicKeyDigestB64u: keyDigest,
693
+ proof,
694
+ requestedAtMs: nowMs
695
+ });
696
+ if (authentication.kind === "denied") return authentication;
697
+ const session = await service.sessionService.getSessionV1({
698
+ linkSessionId,
699
+ nowMs
700
+ });
701
+ if (!session) return { kind: "not_found" };
702
+ return {
703
+ kind: "authorized",
704
+ body: authentication.body,
705
+ proof: authentication.proof,
706
+ linkSessionId,
707
+ session
708
+ };
709
+ }
710
+ async function authenticateDeviceWithKnownSession(ctx, service, linkSessionId, session, nowMs) {
711
+ return await authenticateDeviceWithExpectedKey(ctx, service, linkSessionId, session.qrPayload.devicePublicKeyB64u, nowMs);
712
+ }
713
+ async function authenticateDeviceWithExpectedKey(ctx, service, linkSessionId, expectedDevicePublicKeyB64u, nowMs) {
714
+ const bodyDigestB64u = await requestBodyDigest(ctx.request);
715
+ const expectedDevicePublicKeyDigestB64u = await computeDevicePublicKeyDigestB64u(expectedDevicePublicKeyB64u);
716
+ const proof = parseBoundary(() => parseRequestProofHeader(ctx.request));
717
+ validateRequestProof(proof, ctx.method, ctx.pathname, linkSessionId, bodyDigestB64u, expectedDevicePublicKeyDigestB64u, nowMs);
718
+ return await service.authenticateDeviceRequestV1({
719
+ request: ctx.request,
720
+ method: ctx.method,
721
+ pathname: ctx.pathname,
722
+ linkSessionId: String(linkSessionId),
723
+ bodyDigestB64u,
724
+ expectedDevicePublicKeyB64u,
725
+ expectedDevicePublicKeyDigestB64u,
726
+ proof,
727
+ requestedAtMs: nowMs
728
+ });
729
+ }
730
+ function parseRoutePath(pathname) {
731
+ if (pathname === DEVICE_LINKING_BASE) return { kind: "create" };
732
+ if (!pathname.startsWith(`${DEVICE_LINKING_BASE}/`)) return null;
733
+ const parts = pathname.slice(35).split("/");
734
+ const linkSessionId = parts[0];
735
+ if (!linkSessionId) return null;
736
+ if (parts.length === 1) return {
737
+ kind: "session",
738
+ linkSessionId
739
+ };
740
+ if (parts.length === 3 && parts[1] === "email-otp" && parts[2] === "challenge") return {
741
+ kind: "email-otp-challenge",
742
+ linkSessionId
743
+ };
744
+ if (parts.length === 4 && parts[1] === "email-otp" && parts[2] === "challenge" && parts[3] === "resend") return {
745
+ kind: "email-otp-resend",
746
+ linkSessionId
747
+ };
748
+ if (parts.length === 4 && parts[1] === "email-otp" && parts[2] === "challenge" && parts[3] === "verify") return {
749
+ kind: "email-otp-verify",
750
+ linkSessionId
751
+ };
752
+ if (parts.length === 2 && parts[1] === "email-otp-base-factor") return {
753
+ kind: "email-otp-base-factor",
754
+ linkSessionId
755
+ };
756
+ if (parts.length === 2 && parts[1] === "owner-cancel") return {
757
+ kind: "owner-cancel",
758
+ linkSessionId
759
+ };
760
+ if (parts.length === 3 && parts[1] === "source-contribution" && parts[2] === "execute") return {
761
+ kind: "source-contribution-execute",
762
+ linkSessionId
763
+ };
764
+ if (parts.length !== 2 || !parts[1]) return null;
765
+ switch (parts[1]) {
766
+ case "claim":
767
+ case "approval":
768
+ case "target-preparation":
769
+ case "credential":
770
+ case "source-contribution-preparation":
771
+ case "source-contribution":
772
+ case "ed25519-export-root":
773
+ case "ed25519-export-root-recipient":
774
+ case "receipt":
775
+ case "cancel": return {
776
+ kind: parts[1],
777
+ linkSessionId
778
+ };
779
+ default: return null;
780
+ }
781
+ }
782
+ function requireApproval(session) {
783
+ const approval = session.approvalTranscript?.value;
784
+ if (!approval) throw new DeviceLinkingInputError("link session has no owner approval");
785
+ return approval;
786
+ }
787
+ function requireSourceContributionApproval(session) {
788
+ const approval = session.sourceContributionTranscript?.value;
789
+ if (!approval?.sourceContribution) throw new DeviceLinkingInputError("link session has no source contribution approval");
790
+ return approval;
791
+ }
792
+ function requireEd25519SourceContributionPreparation(session) {
793
+ if (!session.sourceContributionPreparation) throw new DeviceLinkingInputError("link session has no source contribution preparation");
794
+ const preparations = parseBoundary(() => parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1(session.sourceContributionPreparation));
795
+ const ed25519 = preparations.find((preparation) => "kind" in preparation);
796
+ if (!ed25519) throw new DeviceLinkingInputError("link session has no Ed25519 source contribution preparation");
797
+ if (preparations.filter((preparation) => "kind" in preparation).length !== 1 || ed25519.linkSessionId !== session.linkSessionId) throw new DeviceLinkingInputError("Ed25519 source contribution preparation does not match the link session");
798
+ return ed25519;
799
+ }
800
+ function requireSentEmailOtpChallenge(session) {
801
+ const challenge = session.emailOtpChallenge;
802
+ if (!challenge || challenge.state !== "sent") throw new DeviceLinkingInputError("email OTP challenge has not been sent");
803
+ return challenge;
804
+ }
805
+ function parseEmailOtpChallengeRequest(raw, resend) {
806
+ return resend ? parseLinkedDeviceEmailOtpChallengeResendRequestV1(raw) : parseLinkedDeviceEmailOtpChallengeStartRequestV1(raw);
807
+ }
808
+ function readTargetPreparation(service, session, approval, access, nowMs) {
809
+ return service.targetCredential.getTargetPreparationV1({
810
+ session,
811
+ approval,
812
+ ...access,
813
+ requestedAtMs: nowMs
814
+ });
815
+ }
816
+ async function authenticateTargetPasskeyOriginV1(ctx, routeId) {
817
+ const route = findRouteDefinitionById(ctx.routeDefinitions, routeId);
818
+ if (!route) throw new Error(`Missing route definition for ${routeId}`);
819
+ const publishableKeyAuth = ctx.opts.publishableKeyAuth;
820
+ if (!publishableKeyAuth) return {
821
+ ok: false,
822
+ response: json({
823
+ ok: false,
824
+ code: "service_not_configured",
825
+ message: "Publishable-key auth is not configured"
826
+ }, { status: 501 })
827
+ };
828
+ const rawOrigin = String(ctx.request.headers.get("origin") || "").trim();
829
+ const expectedOrigin = normalizeCorsOrigin(rawOrigin);
830
+ if (!expectedOrigin || expectedOrigin !== rawOrigin) return {
831
+ ok: false,
832
+ response: json({
833
+ ok: false,
834
+ code: "forbidden",
835
+ message: "Origin header is required and must be a valid exact origin"
836
+ }, { status: 403 })
837
+ };
838
+ const headers = Object.fromEntries(ctx.request.headers.entries());
839
+ const auth = await resolvePublishableKeyApiCredentialAuth({
840
+ environmentId: extractRouterApiEnvironmentId(headers),
841
+ headers,
842
+ missingEnvironmentMessage: "Environment header is required for linked-device Passkey setup",
843
+ missingOriginMessage: "Origin header is required and must be a valid exact origin",
844
+ missingPublishableKeyMessage: "Missing publishable key",
845
+ origin: expectedOrigin,
846
+ publishableKeyAuth,
847
+ route,
848
+ routeAuthNotConfiguredMessage: "Linked-device Passkey route auth is not configured"
849
+ });
850
+ if (!auth.ok) return {
851
+ ok: false,
852
+ response: json({
853
+ ok: false,
854
+ code: auth.code,
855
+ message: auth.message
856
+ }, { status: auth.status })
857
+ };
858
+ return {
859
+ ok: true,
860
+ expectedOrigin
861
+ };
862
+ }
863
+ function projectLinkSessionStateV1(state) {
864
+ switch (state.state) {
865
+ case "displaying_qr": return { state: "displaying_qr" };
866
+ case "claimed":
867
+ case "awaiting_target_factor":
868
+ case "awaiting_source_contribution":
869
+ case "provisioning": return {
870
+ state: state.state,
871
+ deviceId: state.deviceId
872
+ };
873
+ case "authority_pending_local_install": return {
874
+ state: "authority_pending_local_install",
875
+ deviceId: state.deviceId,
876
+ authorityId: state.authorityId,
877
+ packageSetDigestB64u: state.packageSetDigestB64u
878
+ };
879
+ case "active": return {
880
+ state: "active",
881
+ deviceId: state.deviceId,
882
+ authorityId: state.authorityId,
883
+ activatedAtMs: state.activatedAtMs
884
+ };
885
+ case "failed_before_commit": return {
886
+ state: "failed_before_commit",
887
+ error: state.error
888
+ };
889
+ case "cancelled": return {
890
+ state: "cancelled",
891
+ cancelledAtMs: state.cancelledAtMs
892
+ };
893
+ case "expired": return {
894
+ state: "expired",
895
+ expiredAtMs: state.expiredAtMs
896
+ };
897
+ default: return assertNeverLinkSessionStateV1(state);
898
+ }
899
+ }
900
+ function projectSession(record) {
901
+ return {
902
+ kind: "linked_device_session_projection_v1",
903
+ linkSessionId: record.linkSessionId,
904
+ qrPayload: record.qrPayload,
905
+ revision: record.revision,
906
+ createdAtMs: record.createdAtMs,
907
+ updatedAtMs: record.updatedAtMs,
908
+ state: projectLinkSessionStateV1(record.state)
909
+ };
910
+ }
911
+ function sessionProjectionResponse(record, outcome) {
912
+ return json({
913
+ ok: true,
914
+ outcome,
915
+ session: projectSession(record)
916
+ }, { status: 200 });
917
+ }
918
+ function targetCredentialResultResponse(record, outcome, targetCredential) {
919
+ return json({
920
+ ok: true,
921
+ outcome,
922
+ targetCredential,
923
+ session: projectSession(record)
924
+ }, { status: 200 });
925
+ }
926
+ function claimResultResponse(result) {
927
+ if (result.outcome !== "applied" && result.outcome !== "replayed") return sessionResultResponse(result);
928
+ const claim = result.record.claimTranscript?.value;
929
+ return claim ? json(claim, { status: 200 }) : invalidStateResponse(result.record);
930
+ }
931
+ function approvalResultResponse(result) {
932
+ if (result.outcome !== "applied" && result.outcome !== "replayed") return sessionResultResponse(result);
933
+ const record = result.record;
934
+ if (record.state.state === "active") return json({
935
+ ok: true,
936
+ outcome: result.outcome,
937
+ state: record.state,
938
+ authorityId: record.authorityId
939
+ }, { status: 200 });
940
+ if (record.state.state === "awaiting_target_factor" || record.state.state === "awaiting_source_contribution" || record.state.state === "provisioning" || record.state.state === "authority_pending_local_install") return result.outcome === "replayed" ? json({
941
+ outcome: "replayed",
942
+ replay: {
943
+ state: "pending",
944
+ session: record.state
945
+ }
946
+ }, { status: 200 }) : json({
947
+ outcome: "pending",
948
+ state: record.state
949
+ }, { status: 200 });
950
+ return invalidStateResponse(record);
951
+ }
952
+ function sessionResultResponse(result) {
953
+ switch (result.outcome) {
954
+ case "applied":
955
+ case "replayed": return sessionProjectionResponse(result.record, result.outcome);
956
+ case "conflict": return json({
957
+ ok: false,
958
+ outcome: result.outcome,
959
+ expectedRevision: result.expectedRevision,
960
+ actualRevision: result.actualRevision,
961
+ session: result.record ? projectSession(result.record) : null
962
+ }, { status: 409 });
963
+ case "expired": return json({
964
+ ok: false,
965
+ outcome: result.outcome,
966
+ session: projectSession(result.record)
967
+ }, { status: 410 });
968
+ case "invalid_state": return json({
969
+ ok: false,
970
+ outcome: result.outcome,
971
+ state: result.state,
972
+ session: projectSession(result.record)
973
+ }, { status: 409 });
974
+ case "integrity_error": return json({
975
+ ok: false,
976
+ outcome: result.outcome,
977
+ reason: result.reason,
978
+ session: projectSession(result.record)
979
+ }, { status: 500 });
980
+ case "unauthorized": return json({
981
+ ok: false,
982
+ outcome: result.outcome,
983
+ code: result.code,
984
+ message: result.message
985
+ }, { status: 401 });
986
+ case "invalid_input": return invalidInputResponse(result.message);
987
+ case "deleted": return json({
988
+ ok: true,
989
+ outcome: result.outcome
990
+ }, { status: 200 });
991
+ default: return assertNever(result);
992
+ }
993
+ }
994
+ function invalidStateResponse(record) {
995
+ return json({
996
+ ok: false,
997
+ outcome: "invalid_state",
998
+ state: record.state.state,
999
+ session: projectSession(record)
1000
+ }, { status: 409 });
1001
+ }
1002
+ function exportRootWriteResponse(result) {
1003
+ return result.outcome === "conflict" ? json({
1004
+ ok: false,
1005
+ code: result.reason ?? "conflict",
1006
+ message: "export-root relay conflict"
1007
+ }, { status: 409 }) : json({
1008
+ ok: true,
1009
+ outcome: result.outcome
1010
+ }, { status: 200 });
1011
+ }
1012
+ function ownerSessionResponse(context) {
1013
+ return context.kind === "denied" ? authDeniedResponse(context) : notFoundResponse();
1014
+ }
1015
+ /**
1016
+ * The one owner-to-session binding, shared by every owner route on a claimed
1017
+ * session. It runs before any state is disclosed: an authenticated owner of a
1018
+ * DIFFERENT wallet must get the same denial for every state, not a projection
1019
+ * or an invalid-state body. An unclaimed session has no wallet to bind to yet,
1020
+ * so the caller's state checks answer instead.
1021
+ */
1022
+ function requireOwnerMatchesClaimedWallet(owner, session) {
1023
+ const claimWalletId = session.claimTranscript?.value.walletId;
1024
+ if (claimWalletId === void 0) return null;
1025
+ if (owner.walletId === claimWalletId) return null;
1026
+ return authDeniedResponse({
1027
+ kind: "denied",
1028
+ code: "unauthorized",
1029
+ message: "owner session does not match link wallet"
1030
+ });
1031
+ }
1032
+ /**
1033
+ * Approval-time revalidation of the selected Email OTP base method. The same
1034
+ * eligibility question the dedicated base-factor route answers, asked once
1035
+ * more with the id the approval names, so the two paths cannot drift.
1036
+ */
1037
+ async function requireSelectedEmailOtpBaseFactorV1(service, session, input) {
1038
+ const provider = service.emailOtpTargetFactor;
1039
+ if (!provider) return notSupportedResponse("Email OTP linking is not configured");
1040
+ const selection = await provider.resolveBaseFactorSelectionV1({
1041
+ walletId: input.walletId,
1042
+ request: {
1043
+ kind: "select",
1044
+ expectedRevision: session.revision,
1045
+ baseWalletAuthMethodId: input.baseWalletAuthMethodId
1046
+ }
1047
+ });
1048
+ if (selection.kind !== "selected" || selection.choice.baseWalletAuthMethodId !== input.baseWalletAuthMethodId) return authDeniedResponse({
1049
+ kind: "denied",
1050
+ code: "unauthorized",
1051
+ message: "Email OTP base method is unavailable"
1052
+ });
1053
+ return null;
1054
+ }
1055
+ function authDeniedResponse(result) {
1056
+ return json({
1057
+ ok: false,
1058
+ outcome: "unauthorized",
1059
+ code: result.code,
1060
+ message: result.message
1061
+ }, { status: result.code === "expired" ? 410 : 401 });
1062
+ }
1063
+ function invalidInputResponse(message) {
1064
+ return json({
1065
+ ok: false,
1066
+ outcome: "invalid_input",
1067
+ code: "invalid_input",
1068
+ message
1069
+ }, { status: 400 });
1070
+ }
1071
+ function notSupportedResponse(message = "Device linking is not configured") {
1072
+ return json({
1073
+ ok: false,
1074
+ code: "not_supported",
1075
+ message
1076
+ }, { status: 501 });
1077
+ }
1078
+ function notFoundResponse() {
1079
+ return json({
1080
+ ok: false,
1081
+ code: "not_found",
1082
+ message: "Linked-device session not found"
1083
+ }, { status: 404 });
1084
+ }
1085
+ function methodNotAllowedResponse() {
1086
+ return json({
1087
+ ok: false,
1088
+ code: "method_not_allowed",
1089
+ message: "Method is not allowed"
1090
+ }, { status: 405 });
1091
+ }
1092
+ function parseCreateRequest(raw) {
1093
+ const record = requireRecord(raw, "device-linking create request");
1094
+ requireExactKeys(record, ["kind", "payload"]);
1095
+ if (record.kind !== "linked_device_session_create_request_v1") throw new Error("device-linking create request kind is invalid");
1096
+ return {
1097
+ kind: "linked_device_session_create_request_v1",
1098
+ payload: parseQrLinkedDeviceSessionPayloadV5(record.payload)
1099
+ };
1100
+ }
1101
+ function parseSessionId(raw) {
1102
+ let decoded = raw;
1103
+ try {
1104
+ decoded = decodeURIComponent(raw);
1105
+ } catch {
1106
+ throw new Error("link session id is invalid");
1107
+ }
1108
+ const parsed = parseLinkDeviceSessionId(decoded);
1109
+ if (!parsed.ok) throw new Error(parsed.error.message);
1110
+ return parsed.value;
1111
+ }
1112
+ function parseRequestProofHeader(request) {
1113
+ const encoded = request.headers.get(DEVICE_LINKING_REQUEST_PROOF_HEADER_V1);
1114
+ if (!encoded) throw new Error(`missing ${DEVICE_LINKING_REQUEST_PROOF_HEADER_V1} header`);
1115
+ const bytes = parseB64uBytes(encoded, DEVICE_LINKING_REQUEST_PROOF_HEADER_V1);
1116
+ let raw;
1117
+ try {
1118
+ raw = JSON.parse(new TextDecoder().decode(bytes));
1119
+ } catch {
1120
+ throw new Error("device-linking request proof is not valid JSON");
1121
+ }
1122
+ return parseLinkedDeviceRequestProofV1(raw);
1123
+ }
1124
+ function validateRequestProof(proof, method, pathname, linkSessionId, bodyDigestB64u, devicePublicKeyDigestB64u, nowMs) {
1125
+ if (proof.method !== method || proof.canonicalPath !== pathname || proof.linkSessionId !== linkSessionId) throw new DeviceLinkingInputError("request proof does not match method, path, or session");
1126
+ if (proof.bodyDigestB64u !== bodyDigestB64u) throw new DeviceLinkingInputError("request body digest does not match authenticated bytes");
1127
+ if (proof.devicePublicKeyDigestB64u !== devicePublicKeyDigestB64u) throw new DeviceLinkingInputError("request proof device identity does not match QR session");
1128
+ if (proof.expiresAtMs <= nowMs || proof.issuedAtMs > nowMs || proof.expiresAtMs <= proof.issuedAtMs) throw new DeviceLinkingInputError("request proof is expired");
1129
+ if (proof.expiresAtMs - proof.issuedAtMs > 6e4) throw new DeviceLinkingInputError("request proof lifetime exceeds the maximum");
1130
+ }
1131
+ function validateOwnerRequestBinding(binding, ctx, bodyDigestB64u, nowMs) {
1132
+ if (binding.kind !== "linked_device_owner_request_binding_v1" || binding.method !== ctx.method || binding.pathname !== ctx.pathname) throw new DeviceLinkingInputError("owner request binding does not match method or path");
1133
+ if (binding.bodyDigestB64u !== bodyDigestB64u || binding.expiresAtMs <= nowMs) throw new DeviceLinkingInputError("owner request proof is expired or does not match the request");
1134
+ }
1135
+ async function requestBodyDigest(request) {
1136
+ return parseDigestB64u(base64UrlEncode(await sha256Bytes(new Uint8Array(await request.clone().arrayBuffer()))));
1137
+ }
1138
+ async function computeDevicePublicKeyDigestB64u(publicKeyB64u) {
1139
+ try {
1140
+ return await computeLinkedDevicePublicKeyDigestV1(publicKeyB64u);
1141
+ } catch (error) {
1142
+ throw new DeviceLinkingInputError(errorMessage(error));
1143
+ }
1144
+ }
1145
+ function parseB64uBytes(raw, field) {
1146
+ if (typeof raw !== "string" || !/^[A-Za-z0-9_-]+$/.test(raw)) throw new Error(`${field} is invalid`);
1147
+ let bytes;
1148
+ try {
1149
+ bytes = base64UrlDecode(raw);
1150
+ } catch {
1151
+ throw new Error(`${field} is invalid`);
1152
+ }
1153
+ if (bytes.length === 0 || base64UrlEncode(bytes) !== raw) throw new Error(`${field} is not canonical base64url`);
1154
+ return bytes;
1155
+ }
1156
+ async function readJsonBody(request) {
1157
+ return await readJson(request);
1158
+ }
1159
+ function parseBoundary(parse) {
1160
+ try {
1161
+ return parse();
1162
+ } catch (error) {
1163
+ throw new DeviceLinkingInputError(errorMessage(error));
1164
+ }
1165
+ }
1166
+ function requireRecord(raw, field) {
1167
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) throw new Error(`${field} must be an object`);
1168
+ return raw;
1169
+ }
1170
+ function requireExactKeys(record, keys) {
1171
+ const actual = Object.keys(record).sort();
1172
+ const expected = [...keys].sort();
1173
+ if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) throw new Error("record contains invalid fields");
1174
+ }
1175
+ function parseOwnerCancelRequest(raw) {
1176
+ const record = requireRecord(raw, "owner cancel request");
1177
+ requireExactKeys(record, ["expectedRevision"]);
1178
+ if (!Number.isSafeInteger(record.expectedRevision) || Number(record.expectedRevision) < 0) throw new Error("owner cancel expectedRevision is invalid");
1179
+ return { expectedRevision: Number(record.expectedRevision) };
1180
+ }
1181
+ function errorMessage(error) {
1182
+ return error instanceof Error ? error.message : String(error || "invalid device-linking request");
1183
+ }
1184
+ function assertNever(value) {
1185
+ throw new Error(`unsupported device-linking value: ${String(value)}`);
1186
+ }
1187
+ var DeviceLinkingInputError = class extends Error {
1188
+ constructor(message) {
1189
+ super(message);
1190
+ this.name = "DeviceLinkingInputError";
1191
+ }
1192
+ };
1193
+ //#endregion
1194
+ export { DEVICE_LINKING_REQUEST_PROOF_HEADER_V1, handleDeviceLinking, targetCredentialResultResponse };
1195
+
1196
+ //# sourceMappingURL=deviceLinking.js.map