@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,1831 @@
1
+ import { mpcMaterialActivationRefsEqual, parseLinkDeviceSessionId, parseWalletAuthMethodId, parseWalletAuthorityId, parseWalletId, parseWalletKeyId } from "../../../../shared-ts/src/utils/domainIds.js";
2
+ import { parseDeviceId, parsePrincipalId, parseTenantId, parseWalletSessionMintId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
3
+ import { base64UrlDecode, base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
4
+ import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
5
+ import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
6
+ import { buildDelegatedWalletAuthorityV1, parseDelegatedWalletPermissionSetV1, validateDelegatedWalletAuthorityAttenuationV1 } from "../../../../shared-ts/src/authorization/delegatedAuthority.js";
7
+ import { assertLinkedDeviceWalletSessionCredentialDeliveryIntegrityV1, buildLinkedDeviceWalletSessionCredentialDeliveryBindingV1, computeLinkedDeviceActivationCleanupReceiptDigestB64u, computeLinkedDeviceWalletSessionCredentialDeliveryAadDigestB64u, computeLinkedDeviceWalletSessionCredentialEnvelopeDigestB64u, encodeLinkedDeviceWalletSessionCredentialDeliveryAadV1, parseLinkedDeviceActivationCleanupReceiptV1, parseLinkedDeviceWalletSessionCredentialDeliveryV1 } from "../../../../shared-ts/src/device-linking/walletSessionCredentialDelivery.js";
8
+ import { buildActiveWalletAuthorityV1, buildPendingWalletAuthorityV1, buildWalletSignerActivationSetV1, computeWalletAuthorityDigestB64u, computeWalletSignerActivationSetDigestB64u, walletAuthorityDigestsMatchV1 } from "../../../../shared-ts/src/authorization/walletAuthority.js";
9
+ import { buildWalletAuthMethodRecordV2, sameWalletAuthMethodRecordV2 } from "../../../../shared-ts/src/utils/registrationIntent.js";
10
+ import { unknownWebAuthnAuthenticatorDeviceInfo } from "../../../../shared-ts/src/utils/webauthnDeviceInfo.js";
11
+ import { routerAbMpcMaterialActivationRefFromWire } from "../../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
12
+ import { parseRouterAbEd25519YaoApplicationBindingFactsV1, parseRouterAbEd25519YaoCeremonyBindingV1, sameRouterAbEd25519YaoActivationBindingV1 } from "../../../../shared-ts/src/utils/routerAbEd25519Yao.js";
13
+ import { assertLinkedDeviceOrdinaryMaterialSourceContributionMatchesContextV1, parseLinkedDeviceEcdsaSourceContributionPackageV1, parseLinkedDeviceEcdsaSourceDerivationV1, parseLinkedDeviceOrdinaryMaterialSourceContributionV1 } from "../../../../shared-ts/src/device-linking/sourceContribution.js";
14
+ import { computeCommittedSignerPackageSetDigestB64u, parseCommittedAuthorityPackagesV1 } from "../../../../shared-ts/src/device-linking/committedSignerPackages.js";
15
+ import { parseLocalAuthorityActivationFinalAckV1 } from "../../../../shared-ts/src/device-linking/parsers.js";
16
+ import { computeWalletSessionInstallationReceiptDigestB64u, computeWalletSessionOperationCredentialDigestB64u } from "../../../../shared-ts/src/device-linking/digests.js";
17
+ import { computeLinkedDevicePublicKeyDigestV1 } from "../../../../shared-ts/src/device-linking/requestProof.js";
18
+ import { buildPersistedActiveWalletSessionAuthorizationV2, walletSessionAuthorizationV2RecordsEqual } from "../../../../authorization/domain.js";
19
+ import { secureRandomBase64Url } from "../../../../shared-ts/src/utils/secureRandomId.js";
20
+ import { d1ChangedRows, parseD1JsonColumn } from "../../../../storage/d1Sql.js";
21
+ import { prepareD1WebAuthnCredentialBindingInsertStatement } from "../../../../core/WebAuthnCredentialBindingStore.js";
22
+ import { prepareD1WebAuthnAuthenticatorInsertStatement } from "../webauthn/d1WebAuthnStore.js";
23
+ import { buildAuthorityActiveSessionRecordV1, buildAuthorityPendingLocalInstallSessionRecordV1 } from "../../../../core/deviceLinking/linkedDeviceSession.js";
24
+ import { linkedDeviceX25519RecipientPublicKeyB64uV1 } from "./d1LinkedDeviceSourceContributionPreparationPlanner.js";
25
+ //#region src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.ts
26
+ var LinkedDeviceActivationIntegrityErrorV1 = class extends Error {
27
+ constructor(message) {
28
+ super(message);
29
+ this.name = "LinkedDeviceActivationIntegrityErrorV1";
30
+ }
31
+ };
32
+ /** Exact-method cleanup remains available for five minutes after server receipt creation. */
33
+ const LINKED_DEVICE_ACKNOWLEDGEMENT_CLEANUP_WINDOW_MS = 300 * 1e3;
34
+ var D1LinkedDeviceAuthorityInstallServiceV1 = class {
35
+ constructor(options) {
36
+ this.options = options;
37
+ this.nowV1 = options.nowV1 ?? Date.now;
38
+ }
39
+ async commitPendingAuthorityV1(input) {
40
+ try {
41
+ const nowMs = requireTime(input.nowMs, "nowMs");
42
+ const session = await this.options.sessionService.getSessionV1({
43
+ linkSessionId: input.linkSessionId,
44
+ nowMs
45
+ });
46
+ if (!session) return {
47
+ kind: "conflict",
48
+ message: "linked-device session was not found"
49
+ };
50
+ const sourceContributionPreparation = requireSourceContributionPreparations(session);
51
+ await validateVerifiedLinkInput(input, nowMs, this.options.authMethodStore, sourceContributionPreparation);
52
+ const existing = await this.readInstallation(input.linkSessionId);
53
+ const allocation = await this.prepareAuthorityAllocation(input, existing);
54
+ const expectedAuthorityId = allocation.authorityId;
55
+ if (existing) {
56
+ await assertStoredPackageDigest(existing);
57
+ assertRetryInput(existing, input, expectedAuthorityId);
58
+ if (allocation.statement) await this.options.database.batch([allocation.statement]);
59
+ if (session.state.state !== "authority_pending_local_install" && session.state.state !== "active") return {
60
+ kind: "conflict",
61
+ message: "stored authority installation has no pending session"
62
+ };
63
+ return {
64
+ kind: "replayed",
65
+ packages: existing.packages,
66
+ ordinarySignerMaterialPreparations: sourceContributionPreparation,
67
+ session
68
+ };
69
+ }
70
+ if (session.state.state !== "provisioning") return {
71
+ kind: "conflict",
72
+ message: `linked-device session is ${session.state.state}`
73
+ };
74
+ const authorityId = expectedAuthorityId;
75
+ const emailOtpEnrollmentStatements = await this.prepareEmailOtpEnrollmentStatements(input);
76
+ const reservations = await this.reserveSignerMaterial(input, sourceContributionPreparation);
77
+ const activationSet = buildActivationSet(input.signerManifest, reservations);
78
+ const pendingAuthMethod = buildPendingAuthMethod(input, authorityId, nowMs);
79
+ const sourceManifestDigestB64u = await digestJson(input.signerManifest);
80
+ const packageSetDigestB64u = await computeCommittedSignerPackageSetDigestB64u({
81
+ authorityId,
82
+ walletId: input.walletId,
83
+ enrollmentId: input.enrollmentId,
84
+ linkSessionId: input.linkSessionId,
85
+ deviceId: input.targetDeviceId,
86
+ authMethodId: pendingAuthMethod.walletAuthMethodId,
87
+ permissions: input.permissions,
88
+ sourceManifestDigestB64u,
89
+ signerPackages: reservations.packages,
90
+ ed25519ExportRootPackageDigestB64u: input.ed25519ExportRootPackage ? await digestJson(input.ed25519ExportRootPackage) : null,
91
+ targetFactorVerificationDigestB64u: input.targetFactor.verificationDigestB64u
92
+ });
93
+ const pendingAuthority = await buildPendingAuthority({
94
+ authorityId,
95
+ input,
96
+ activationSet,
97
+ packageSetDigestB64u,
98
+ nowMs
99
+ });
100
+ const packages = {
101
+ kind: "committed_authority_packages_v1",
102
+ authority: pendingAuthority,
103
+ authMethod: pendingAuthMethod,
104
+ signerPackages: reservations.packages,
105
+ ed25519ExportRootPackage: input.ed25519ExportRootPackage,
106
+ packageSetDigestB64u
107
+ };
108
+ const nextSession = buildAuthorityPendingLocalInstallSessionRecordV1({
109
+ record: session,
110
+ authorityId,
111
+ packageSetDigestB64u,
112
+ nowMs
113
+ });
114
+ const packageStatement = await this.buildInstallationInsertStatement({
115
+ input,
116
+ packages,
117
+ serverReservationIds: reservations.serverReservationIds,
118
+ nowMs
119
+ });
120
+ const sessionStatements = this.options.sessionStore.buildAuthorityPendingLocalInstallCasStatementsV1({
121
+ linkSessionId: session.linkSessionId,
122
+ expectedRevision: session.revision,
123
+ nextRecord: nextSession,
124
+ nowMs
125
+ });
126
+ const committed = await this.options.authorityStore.commitPendingAuthorityWithStatements({
127
+ authority: pendingAuthority,
128
+ authMethod: pendingAuthMethod
129
+ }, [
130
+ ...allocation.statement ? [allocation.statement] : [],
131
+ ...emailOtpEnrollmentStatements,
132
+ packageStatement,
133
+ ...sessionStatements
134
+ ]);
135
+ if (committed.kind === "conflict") {
136
+ const replay = await this.readInstallation(input.linkSessionId);
137
+ if (replay) {
138
+ await assertStoredPackageDigest(replay);
139
+ const replaySession = await this.options.sessionService.getSessionV1({
140
+ linkSessionId: input.linkSessionId,
141
+ nowMs
142
+ });
143
+ if (replaySession) return {
144
+ kind: "replayed",
145
+ packages: replay.packages,
146
+ ordinarySignerMaterialPreparations: sourceContributionPreparation,
147
+ session: replaySession
148
+ };
149
+ }
150
+ return {
151
+ kind: "conflict",
152
+ message: "wallet authority commit conflicts with an existing record"
153
+ };
154
+ }
155
+ if (committed.kind === "replayed") {
156
+ const replay = await this.readInstallation(input.linkSessionId);
157
+ if (!replay) return {
158
+ kind: "conflict",
159
+ message: "authority replay package is missing"
160
+ };
161
+ await assertStoredPackageDigest(replay);
162
+ const replaySession = await this.options.sessionService.getSessionV1({
163
+ linkSessionId: input.linkSessionId,
164
+ nowMs
165
+ });
166
+ if (!replaySession) return {
167
+ kind: "conflict",
168
+ message: "authority replay session is missing"
169
+ };
170
+ return {
171
+ kind: "replayed",
172
+ packages: replay.packages,
173
+ ordinarySignerMaterialPreparations: sourceContributionPreparation,
174
+ session: replaySession
175
+ };
176
+ }
177
+ return {
178
+ kind: "committed",
179
+ packages,
180
+ ordinarySignerMaterialPreparations: reservations.ordinarySignerMaterialPreparations,
181
+ session: nextSession
182
+ };
183
+ } catch (error) {
184
+ return {
185
+ kind: "invalid_input",
186
+ message: errorMessage(error)
187
+ };
188
+ }
189
+ }
190
+ async activateInstalledAuthorityV1(input) {
191
+ let stage = "receipt_validation";
192
+ try {
193
+ const nowMs = requireTime(input.nowMs ?? this.nowV1(), "nowMs");
194
+ const receipt = input.receipt;
195
+ const stored = await this.readInstallationByAuthority(receipt.authorityId);
196
+ if (!stored) return {
197
+ kind: "integrity_error",
198
+ message: "authority installation was not found"
199
+ };
200
+ await assertStoredPackageDigest(stored);
201
+ assertReceiptMatchesInstallation(receipt, stored, nowMs);
202
+ const session = await this.options.sessionService.getSessionV1({
203
+ linkSessionId: stored.linkSessionId,
204
+ nowMs
205
+ });
206
+ if (!session) return {
207
+ kind: "integrity_error",
208
+ message: "linked-device session was not found"
209
+ };
210
+ const authority = await this.options.authorityStore.readById(stored.authorityId);
211
+ const authMethod = await this.options.authMethodStore.readByIdV2({ walletAuthMethodId: stored.authMethodId });
212
+ if (!authority || !authMethod) return {
213
+ kind: "integrity_error",
214
+ message: "pending authority records are missing"
215
+ };
216
+ if (!sameAuthority(authority, stored.packages.authority) || !sameAuthMethod(authMethod, stored.packages.authMethod)) return {
217
+ kind: "integrity_error",
218
+ message: "pending authority records do not match committed packages"
219
+ };
220
+ if (authority.state === "active" && authMethod.status === "active" && session.state.state === "active") {
221
+ stage = "wallet_session_issuance";
222
+ const activeSession = await this.options.sessionService.getSessionV1({
223
+ linkSessionId: stored.linkSessionId,
224
+ nowMs
225
+ });
226
+ if (!activeSession || activeSession.state.state !== "active" || activeSession.state.authorityId !== authority.authorityId || activeSession.packageSetDigestB64u !== stored.packageSetDigestB64u) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device authority replay did not retain an active session");
227
+ const walletSession = await this.readCommittedWalletSession(authority, authMethod, receipt.installedAtMs);
228
+ const sealedDelivery = await this.readCredentialDelivery(stored.linkSessionId);
229
+ if (!sealedDelivery) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device Wallet Session credential delivery is missing");
230
+ await this.assertCredentialDeliveryMatchesCommittedSession({
231
+ stored,
232
+ receipt,
233
+ walletSession,
234
+ delivery: sealedDelivery
235
+ });
236
+ return {
237
+ kind: "active",
238
+ outcome: "replayed",
239
+ authority,
240
+ authMethod,
241
+ session: activeSession,
242
+ walletSession,
243
+ deliveryBinding: buildLinkedDeviceWalletSessionCredentialDeliveryBindingV1(sealedDelivery.aad),
244
+ sealedDelivery
245
+ };
246
+ }
247
+ if (authority.state !== "pending_local_install" || authMethod.status !== "pending_local_install" || session.state.state !== "authority_pending_local_install") return {
248
+ kind: "integrity_error",
249
+ message: "authority activation state is inconsistent"
250
+ };
251
+ if (!stored.deliveryRecipientPublicKey65B64u) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device installation has no credential delivery recipient");
252
+ const activeAuthority = await buildActiveAuthority(authority, receipt.installedAtMs);
253
+ const activeAuthMethod = buildActiveAuthMethod(authMethod, receipt.installedAtMs);
254
+ const passkeyCredentialStatements = await buildPasskeyCredentialPromotionStatements({
255
+ database: this.options.database,
256
+ scope: this.options.scope,
257
+ listWalletEd25519Signers: this.options.listWalletEd25519Signers,
258
+ authority: activeAuthority,
259
+ authMethod: activeAuthMethod,
260
+ activatedAtMs: receipt.installedAtMs
261
+ });
262
+ stage = "server_worker_activation";
263
+ await this.activateReservations(stored, receipt.installedAtMs);
264
+ stage = "wallet_session_issuance";
265
+ const nextSession = buildAuthorityActiveSessionRecordV1({
266
+ record: session,
267
+ activatedAtMs: receipt.installedAtMs,
268
+ nowMs
269
+ });
270
+ const sessionStatements = this.options.sessionStore.buildAuthorityActivationCasStatementsV1({
271
+ linkSessionId: session.linkSessionId,
272
+ expectedRevision: session.revision,
273
+ nextRecord: nextSession,
274
+ nowMs
275
+ });
276
+ const preparedWalletSession = await this.options.authorizationService.prepareWalletSessionAuthorizationV2(this.buildWalletSessionAuthorizationInput(activeAuthority, activeAuthMethod, receipt.installedAtMs));
277
+ const operationCredential = {
278
+ kind: "opaque_wallet_session_operation_credential_v1",
279
+ token: `wst_${secureRandomBase64Url(32, "linked-device Wallet Session operation credential")}`,
280
+ walletSessionId: preparedWalletSession.session.walletSessionId
281
+ };
282
+ const credentialDigestB64u = await computeWalletSessionOperationCredentialDigestB64u(operationCredential);
283
+ const walletSessionStatements = this.options.authorizationStore.prepareDirectWalletSessionAuthorizationV2Statements(buildPersistedActiveWalletSessionAuthorizationV2({
284
+ session: preparedWalletSession.session,
285
+ quota: preparedWalletSession.quota,
286
+ primaryOperationCredentialDigestB64u: credentialDigestB64u
287
+ }));
288
+ const installationReceiptDigestB64u = await computeWalletSessionInstallationReceiptDigestB64u(receipt);
289
+ const sealedDelivery = await sealLinkedDeviceWalletSessionCredentialV1({
290
+ scope: this.options.scope,
291
+ tenantId: this.options.tenantId,
292
+ linkSessionId: stored.linkSessionId,
293
+ authorityId: activeAuthority.authorityId,
294
+ walletId: activeAuthority.walletId,
295
+ walletAuthMethodId: activeAuthMethod.walletAuthMethodId,
296
+ authorizationId: preparedWalletSession.session.authorizationId,
297
+ walletSessionId: preparedWalletSession.session.walletSessionId,
298
+ quotaId: preparedWalletSession.quota.quotaId,
299
+ principalId: preparedWalletSession.session.principalId,
300
+ credentialDigestB64u,
301
+ recipientPublicKey65B64u: stored.deliveryRecipientPublicKey65B64u,
302
+ issuedAtMs: preparedWalletSession.session.createdAtMs,
303
+ expiresAtMs: preparedWalletSession.session.expiresAtMs,
304
+ installationReceiptDigestB64u,
305
+ operationCredential
306
+ });
307
+ const installationActivationStatement = this.buildInstallationActivationStatement({
308
+ stored,
309
+ receipt
310
+ });
311
+ const deliveryStatement = this.buildCredentialDeliveryInsertStatement(sealedDelivery);
312
+ stage = "authority_activation";
313
+ const activation = await this.options.authorityStore.activatePendingAuthorityWithStatements({
314
+ pendingAuthority: authority,
315
+ activeAuthority,
316
+ pendingAuthMethod: authMethod,
317
+ activeAuthMethod
318
+ }, [
319
+ ...sessionStatements,
320
+ ...walletSessionStatements,
321
+ installationActivationStatement,
322
+ deliveryStatement,
323
+ ...passkeyCredentialStatements
324
+ ]);
325
+ if (activation.kind === "conflict") {
326
+ const replay = await this.readActivationReplayAfterCasRace({
327
+ stored,
328
+ receipt,
329
+ expectedPendingAuthority: authority,
330
+ expectedPendingAuthMethod: authMethod,
331
+ nowMs
332
+ });
333
+ if (replay) return replay;
334
+ return {
335
+ kind: "integrity_error",
336
+ message: "authority activation conflicts with another transition"
337
+ };
338
+ }
339
+ const persistedSession = activation.kind === "replayed" ? await this.options.sessionService.getSessionV1({
340
+ linkSessionId: stored.linkSessionId,
341
+ nowMs
342
+ }) : nextSession;
343
+ if (!persistedSession || persistedSession.state.state !== "active" || persistedSession.state.authorityId !== activation.authority.authorityId || persistedSession.packageSetDigestB64u !== stored.packageSetDigestB64u) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device authority activation replay did not commit an active session");
344
+ stage = "wallet_session_issuance";
345
+ const walletSession = await this.readCommittedWalletSession(activation.authority, activation.authMethod, receipt.installedAtMs);
346
+ const persistedDelivery = activation.kind === "replayed" ? await this.readCredentialDelivery(stored.linkSessionId) : sealedDelivery;
347
+ if (!persistedDelivery) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device Wallet Session credential delivery is missing");
348
+ return {
349
+ kind: "active",
350
+ outcome: activation.kind === "replayed" ? "replayed" : "activated",
351
+ authority: activation.authority,
352
+ authMethod: activation.authMethod,
353
+ session: persistedSession,
354
+ walletSession,
355
+ deliveryBinding: buildLinkedDeviceWalletSessionCredentialDeliveryBindingV1(persistedDelivery.aad),
356
+ sealedDelivery: persistedDelivery
357
+ };
358
+ } catch (error) {
359
+ if (error instanceof LinkedDeviceActivationIntegrityErrorV1) return {
360
+ kind: "integrity_error",
361
+ message: error.message
362
+ };
363
+ if (stage === "server_worker_activation") return {
364
+ kind: "pending_local_install",
365
+ authorityId: input.receipt.authorityId,
366
+ reason: "server_worker_activation_pending"
367
+ };
368
+ if (stage === "wallet_session_issuance") return {
369
+ kind: "pending_local_install",
370
+ authorityId: input.receipt.authorityId,
371
+ reason: "wallet_session_issuance_pending"
372
+ };
373
+ return {
374
+ kind: "integrity_error",
375
+ message: errorMessage(error)
376
+ };
377
+ }
378
+ }
379
+ async readActivationReplayAfterCasRace(input) {
380
+ const authority = await this.options.authorityStore.readById(input.stored.authorityId);
381
+ const authMethod = await this.options.authMethodStore.readByIdV2({ walletAuthMethodId: input.stored.authMethodId });
382
+ if (!authority || !authMethod) return null;
383
+ const expectedAuthority = await buildActiveAuthority(input.expectedPendingAuthority, input.receipt.installedAtMs);
384
+ const expectedAuthMethod = buildActiveAuthMethod(input.expectedPendingAuthMethod, input.receipt.installedAtMs);
385
+ if (authority.state !== "active" || authMethod.status !== "active" || !sameActiveAuthority(authority, expectedAuthority) || !sameWalletAuthMethodRecordV2(authMethod, expectedAuthMethod)) return null;
386
+ const session = await this.options.sessionService.getSessionV1({
387
+ linkSessionId: input.stored.linkSessionId,
388
+ nowMs: input.nowMs
389
+ });
390
+ if (!session || session.state.state !== "active" || session.state.authorityId !== authority.authorityId || session.packageSetDigestB64u !== input.stored.packageSetDigestB64u) return null;
391
+ const walletSession = await this.readCommittedWalletSession(authority, authMethod, input.receipt.installedAtMs);
392
+ const sealedDelivery = await this.readCredentialDelivery(input.stored.linkSessionId);
393
+ if (!sealedDelivery) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device Wallet Session credential delivery is missing after activation race");
394
+ await this.assertCredentialDeliveryMatchesCommittedSession({
395
+ stored: input.stored,
396
+ receipt: input.receipt,
397
+ walletSession,
398
+ delivery: sealedDelivery
399
+ });
400
+ return {
401
+ kind: "active",
402
+ outcome: "replayed",
403
+ authority,
404
+ authMethod,
405
+ session,
406
+ walletSession,
407
+ deliveryBinding: buildLinkedDeviceWalletSessionCredentialDeliveryBindingV1(sealedDelivery.aad),
408
+ sealedDelivery
409
+ };
410
+ }
411
+ async readCommittedAuthorityPackagesV1(input) {
412
+ const nowMs = requireTime(input.requestedAtMs, "requestedAtMs");
413
+ if (input.session.state.state !== "provisioning" && input.session.state.state !== "authority_pending_local_install" && input.session.state.state !== "active") throw new Error("committed authority packages are unavailable before provisioning");
414
+ const stored = await this.readInstallation(input.session.linkSessionId);
415
+ if (!stored && input.session.state.state === "provisioning") return null;
416
+ if (!stored) throw new Error("committed authority packages were not found");
417
+ await assertStoredPackageDigest(stored);
418
+ if (stored.deviceId !== input.session.state.deviceId) throw new Error("committed authority package device does not match the session");
419
+ if (input.session.state.state !== "provisioning" && (input.session.state.authorityId !== stored.authorityId || input.session.state.packageSetDigestB64u !== stored.packageSetDigestB64u)) throw new Error("committed authority package identity does not match the session");
420
+ if (stored.packages.authority.createdAtMs > nowMs) throw new Error("committed authority package timestamp is from the future");
421
+ return stored.packages;
422
+ }
423
+ async readInstalledEd25519AuthorityByIdentityV1(input) {
424
+ try {
425
+ const walletId = parseWalletId(input.walletId);
426
+ const authorityId = parseWalletAuthorityId(input.authorityId);
427
+ const walletAuthMethodId = parseWalletAuthMethodId(input.walletAuthMethodId);
428
+ if (!walletId.ok || !authorityId.ok || !walletAuthMethodId.ok) return null;
429
+ const stored = await this.readInstallationByAuthority(authorityId.value);
430
+ if (!stored || stored.walletId !== walletId.value || stored.authorityId !== authorityId.value || stored.authMethodId !== walletAuthMethodId.value) return null;
431
+ await assertStoredPackageDigest(stored);
432
+ return projectInstalledEd25519Authority(stored);
433
+ } catch {
434
+ return null;
435
+ }
436
+ }
437
+ async readInstalledEd25519AuthorityByMaterialActivationV1(input) {
438
+ try {
439
+ const walletId = parseWalletId(input.walletId);
440
+ if (!walletId.ok) return null;
441
+ const storedRows = await this.readInstallationsByWallet(walletId.value);
442
+ for (const stored of storedRows) await assertStoredPackageDigest(stored);
443
+ const candidates = storedRows.filter((stored) => stored.packages.signerPackages.ed25519 !== void 0 && mpcMaterialActivationRefsEqual(stored.packages.signerPackages.ed25519.materialActivation, input.materialActivation));
444
+ if (candidates.length !== 1) return null;
445
+ const stored = candidates[0];
446
+ return stored ? projectInstalledEd25519Authority(stored) : null;
447
+ } catch {
448
+ return null;
449
+ }
450
+ }
451
+ async readInstalledEcdsaAuthorityByIdentityV1(input) {
452
+ try {
453
+ const walletId = parseWalletId(input.walletId);
454
+ const authorityId = parseWalletAuthorityId(input.authorityId);
455
+ const walletAuthMethodId = parseWalletAuthMethodId(input.walletAuthMethodId);
456
+ if (!walletId.ok || !authorityId.ok || !walletAuthMethodId.ok) return null;
457
+ const stored = await this.readInstallationByAuthority(authorityId.value);
458
+ if (!stored || stored.walletId !== walletId.value || stored.authorityId !== authorityId.value || stored.authMethodId !== walletAuthMethodId.value) return null;
459
+ await assertStoredPackageDigest(stored);
460
+ return projectInstalledEcdsaAuthority(stored);
461
+ } catch {
462
+ return null;
463
+ }
464
+ }
465
+ async readInstalledEcdsaAuthorityByMaterialActivationV1(input) {
466
+ try {
467
+ const walletId = parseWalletId(input.walletId);
468
+ if (!walletId.ok) return null;
469
+ const storedRows = await this.readInstallationsByWallet(walletId.value);
470
+ for (const stored of storedRows) await assertStoredPackageDigest(stored);
471
+ const candidates = storedRows.filter((stored) => stored.packages.signerPackages.ecdsa !== void 0 && mpcMaterialActivationRefsEqual(stored.packages.signerPackages.ecdsa.materialActivation, input.materialActivation));
472
+ if (candidates.length !== 1) return null;
473
+ const stored = candidates[0];
474
+ return stored ? projectInstalledEcdsaAuthority(stored) : null;
475
+ } catch {
476
+ return null;
477
+ }
478
+ }
479
+ async readActivationCleanupReceiptV1(input) {
480
+ const nowMs = requireTime(input.requestedAtMs, "requestedAtMs");
481
+ const row = await this.readCredentialDeliveryRow(input.linkSessionId);
482
+ if (!row) return null;
483
+ if (row.lifecycle_kind !== "acknowledged" && row.lifecycle_kind !== "cleanup_complete") return null;
484
+ if (row.cleanup_receipt_json === null || row.cleanup_receipt_json === void 0) throw new LinkedDeviceActivationIntegrityErrorV1("acknowledged linked-device credential delivery has no cleanup receipt");
485
+ const cleanupReceipt = parseLinkedDeviceActivationCleanupReceiptV1(parseD1JsonColumn(row.cleanup_receipt_json));
486
+ if (cleanupReceipt.expiresAtMs <= nowMs) return null;
487
+ const storedAck = row.acknowledgement_receipt_json === null || row.acknowledgement_receipt_json === void 0 ? null : parseLocalAuthorityActivationFinalAckV1(parseD1JsonColumn(row.acknowledgement_receipt_json));
488
+ if (!storedAck) throw new LinkedDeviceActivationIntegrityErrorV1("acknowledged linked-device credential delivery has no acknowledgement receipt");
489
+ assertAcknowledgementMatchesCleanupReceipt(storedAck, cleanupReceipt);
490
+ await assertCleanupReceiptMatchesDeliveryRow(cleanupReceipt, row);
491
+ const installation = await this.readInstallation(input.linkSessionId);
492
+ if (!installation || installation.walletId !== cleanupReceipt.walletId || installation.authorityId !== cleanupReceipt.authorityId || installation.authMethodId !== cleanupReceipt.walletAuthMethodId || installation.packageSetDigestB64u !== cleanupReceipt.packageSetDigestB64u) throw new LinkedDeviceActivationIntegrityErrorV1("activation cleanup receipt does not match the installation row");
493
+ return cleanupReceipt;
494
+ }
495
+ async acknowledgeLocalAuthorityActivationV1(input) {
496
+ const nowMs = requireTime(input.requestedAtMs, "requestedAtMs");
497
+ const acknowledgement = parseLocalAuthorityActivationFinalAckV1(input.acknowledgement);
498
+ if (acknowledgement.acknowledgedAtMs > nowMs) throw new Error("active authority acknowledgement is from the future");
499
+ if (input.authentication.kind === "exact_wallet_session") {
500
+ await this.assertExactAcknowledgementAuthenticationV1({
501
+ acknowledgement,
502
+ authentication: input.authentication,
503
+ nowMs
504
+ });
505
+ const persistedCleanupReceipt = await this.readActivationCleanupReceiptV1({
506
+ linkSessionId: acknowledgement.linkSessionId,
507
+ requestedAtMs: nowMs
508
+ });
509
+ if (persistedCleanupReceipt) {
510
+ assertAcknowledgementMatchesCleanupReceipt(acknowledgement, persistedCleanupReceipt);
511
+ return;
512
+ }
513
+ const durableSession = await this.options.sessionStore.getSessionV1(acknowledgement.linkSessionId);
514
+ const session = durableSession ? null : await this.options.sessionService.getSessionV1({
515
+ linkSessionId: acknowledgement.linkSessionId,
516
+ nowMs
517
+ });
518
+ if (durableSession && durableSession.state.state !== "active") throw new Error("active authority acknowledgement requires an active link session");
519
+ const cleanupSession = durableSession;
520
+ const devicePublicKeyB64u = durableSession?.qrPayload.devicePublicKeyB64u ?? session?.qrPayload.devicePublicKeyB64u;
521
+ if (!devicePublicKeyB64u) throw new LinkedDeviceActivationIntegrityErrorV1("exact Wallet Session acknowledgement has no durable cleanup receipt or device identity");
522
+ const prepared = await this.prepareActivationAcknowledgementV1({
523
+ acknowledgement,
524
+ devicePublicKeyB64u,
525
+ nowMs
526
+ });
527
+ await this.commitAcknowledgementCleanupV1({
528
+ prepared,
529
+ session: cleanupSession,
530
+ nowMs
531
+ });
532
+ return;
533
+ }
534
+ const providedSession = input.authentication.kind === "live" ? input.authentication.session : null;
535
+ const session = providedSession ? await this.options.sessionService.getSessionV1({
536
+ linkSessionId: providedSession.linkSessionId,
537
+ nowMs
538
+ }) : null;
539
+ if (providedSession && session && session.revision !== providedSession.revision) throw new Error("active authority acknowledgement session is stale");
540
+ if (!session) {
541
+ const persistedCleanupReceipt = await this.readActivationCleanupReceiptV1({
542
+ linkSessionId: acknowledgement.linkSessionId,
543
+ requestedAtMs: nowMs
544
+ });
545
+ if (input.authentication.kind === "cleanup_receipt" && (!persistedCleanupReceipt || await computeLinkedDeviceActivationCleanupReceiptDigestB64u(input.authentication.receipt) !== await computeLinkedDeviceActivationCleanupReceiptDigestB64u(persistedCleanupReceipt))) throw new LinkedDeviceActivationIntegrityErrorV1("activation cleanup receipt authentication does not match the persisted receipt");
546
+ const cleanupReceipt = persistedCleanupReceipt;
547
+ if (!cleanupReceipt) throw new Error("active authority acknowledgement session is stale or missing");
548
+ if (providedSession && providedSession.qrPayload.devicePublicKeyB64u !== cleanupReceipt.devicePublicKeyB64u) throw new LinkedDeviceActivationIntegrityErrorV1("active authority acknowledgement cleanup receipt device does not match the session");
549
+ assertAcknowledgementMatchesCleanupReceipt(acknowledgement, cleanupReceipt);
550
+ return;
551
+ }
552
+ if (session.state.state !== "active") throw new Error("active authority acknowledgement requires an active link session");
553
+ if (acknowledgement.linkSessionId !== session.linkSessionId || acknowledgement.authorityId !== session.state.authorityId || acknowledgement.packageSetDigestB64u !== session.packageSetDigestB64u) throw new Error("active authority acknowledgement identity does not match the session");
554
+ const prepared = await this.prepareActivationAcknowledgementV1({
555
+ acknowledgement,
556
+ devicePublicKeyB64u: session.qrPayload.devicePublicKeyB64u,
557
+ nowMs
558
+ });
559
+ await this.commitAcknowledgementCleanupV1({
560
+ prepared,
561
+ session,
562
+ nowMs
563
+ });
564
+ }
565
+ async commitAcknowledgementCleanupV1(input) {
566
+ const beforeDeleteStatements = [
567
+ this.buildCredentialDeliveryAcknowledgementStatement(input.prepared),
568
+ this.buildAuthorityAllocationDeleteStatement(input.prepared.acknowledgement.linkSessionId),
569
+ this.buildCredentialDeliveryCleanupStateStatement({
570
+ linkSessionId: input.prepared.acknowledgement.linkSessionId,
571
+ from: "pending",
572
+ to: "allocation_removed"
573
+ })
574
+ ];
575
+ const afterDeleteStatements = [this.buildCredentialDeliveryCleanupStateStatement({
576
+ linkSessionId: input.prepared.acknowledgement.linkSessionId,
577
+ from: "allocation_removed",
578
+ to: "session_removed"
579
+ }), this.buildCredentialDeliveryCleanupCompleteStatement(input.prepared.acknowledgement.linkSessionId)];
580
+ try {
581
+ if (input.session) {
582
+ const deleted = await this.options.sessionStore.deleteActiveSessionWithStatementsV1({
583
+ linkSessionId: input.session.linkSessionId,
584
+ expectedRevision: input.session.revision,
585
+ authorityId: input.prepared.acknowledgement.authorityId,
586
+ packageSetDigestB64u: input.prepared.acknowledgement.packageSetDigestB64u,
587
+ nowMs: input.nowMs,
588
+ beforeDeleteStatements,
589
+ afterDeleteStatements
590
+ });
591
+ if (deleted.outcome !== "applied" && deleted.outcome !== "replayed" && deleted.outcome !== "deleted") {
592
+ const detail = "message" in deleted && deleted.message ? `: ${deleted.message}` : "";
593
+ throw new Error(`active authority cleanup failed: ${deleted.outcome}${detail}`);
594
+ }
595
+ } else await this.options.database.batch([...beforeDeleteStatements, ...afterDeleteStatements]);
596
+ } catch (error) {
597
+ const replay = await this.readActivationCleanupReceiptV1({
598
+ linkSessionId: input.prepared.acknowledgement.linkSessionId,
599
+ requestedAtMs: input.nowMs
600
+ });
601
+ if (replay) {
602
+ assertAcknowledgementMatchesCleanupReceipt(input.prepared.acknowledgement, replay);
603
+ return;
604
+ }
605
+ throw error;
606
+ }
607
+ }
608
+ async assertExactAcknowledgementAuthenticationV1(input) {
609
+ if (input.authentication.expiresAtMs <= input.nowMs) throw new Error("exact Wallet Session acknowledgement authentication is expired");
610
+ const stored = await this.readInstallation(input.acknowledgement.linkSessionId);
611
+ if (!stored) throw new LinkedDeviceActivationIntegrityErrorV1("exact Wallet Session acknowledgement installation is missing");
612
+ const expectedPrincipalId = requireParsed(parsePrincipalId(`linked-device:${String(stored.deviceId)}`), "principalId");
613
+ if (input.authentication.tenantId !== this.options.tenantId || input.authentication.walletId !== stored.walletId || input.authentication.authorityId !== stored.authorityId || input.authentication.walletAuthMethodId !== stored.authMethodId || input.authentication.principalId !== expectedPrincipalId) throw new LinkedDeviceActivationIntegrityErrorV1("exact Wallet Session acknowledgement identity does not match the installation");
614
+ if (input.acknowledgement.authorityId !== stored.authorityId || input.acknowledgement.packageSetDigestB64u !== stored.packageSetDigestB64u) throw new LinkedDeviceActivationIntegrityErrorV1("exact Wallet Session acknowledgement does not match the installation");
615
+ }
616
+ async prepareActivationAcknowledgementV1(input) {
617
+ const stored = await this.readInstallation(input.acknowledgement.linkSessionId);
618
+ if (!stored) throw new Error("active authority installation was not found");
619
+ await assertStoredPackageDigest(stored);
620
+ if (stored.authorityId !== input.acknowledgement.authorityId || stored.packageSetDigestB64u !== input.acknowledgement.packageSetDigestB64u || stored.activatedAtMs === null || stored.installedRecordSetDigestB64u === null || input.acknowledgement.acknowledgedAtMs < stored.activatedAtMs) throw new Error("active authority acknowledgement does not match the activation record");
621
+ const authority = await this.options.authorityStore.readById(stored.authorityId);
622
+ const authMethod = await this.options.authMethodStore.readByIdV2({ walletAuthMethodId: stored.authMethodId });
623
+ if (!authority || authority.state !== "active" || !authMethod || authMethod.status !== "active") throw new LinkedDeviceActivationIntegrityErrorV1("active authority acknowledgement has no active authority records");
624
+ const receipt = buildInstallationReceiptFromStoredInstallation(stored);
625
+ const installationReceiptDigestB64u = await computeWalletSessionInstallationReceiptDigestB64u(receipt);
626
+ if (input.acknowledgement.installationReceiptDigestB64u !== installationReceiptDigestB64u) throw new Error("active authority acknowledgement installation receipt digest does not match the commit");
627
+ const delivery = await this.readCredentialDelivery(input.acknowledgement.linkSessionId);
628
+ if (!delivery) {
629
+ const cleanupReceipt = await this.readActivationCleanupReceiptV1({
630
+ linkSessionId: input.acknowledgement.linkSessionId,
631
+ requestedAtMs: input.nowMs
632
+ });
633
+ if (cleanupReceipt) {
634
+ assertAcknowledgementMatchesCleanupReceipt(input.acknowledgement, cleanupReceipt);
635
+ throw new LinkedDeviceActivationIntegrityErrorV1("active authority acknowledgement delivery was already cleaned up");
636
+ }
637
+ throw new LinkedDeviceActivationIntegrityErrorV1("active authority acknowledgement credential delivery is missing");
638
+ }
639
+ await this.assertCredentialDeliveryMatchesStoredInstallation({
640
+ stored,
641
+ receipt,
642
+ delivery
643
+ });
644
+ if (delivery.aad.authorizationId !== input.acknowledgement.authorizationId || delivery.aad.walletSessionId !== input.acknowledgement.walletSessionId || delivery.aad.credentialDigestB64u !== input.acknowledgement.credentialDigestB64u) throw new LinkedDeviceActivationIntegrityErrorV1("active authority acknowledgement Wallet Session identity does not match the delivery");
645
+ const authExpiresAtMs = input.nowMs + LINKED_DEVICE_ACKNOWLEDGEMENT_CLEANUP_WINDOW_MS;
646
+ if (!Number.isSafeInteger(authExpiresAtMs)) throw new Error("active authority acknowledgement is expired");
647
+ const cleanupReceipt = {
648
+ kind: "linked_device_activation_cleanup_receipt_v1",
649
+ devicePublicKeyB64u: input.devicePublicKeyB64u,
650
+ devicePublicKeyDigestB64u: await computeLinkedDevicePublicKeyDigestV1(input.devicePublicKeyB64u),
651
+ linkSessionId: input.acknowledgement.linkSessionId,
652
+ walletId: stored.walletId,
653
+ authorityId: stored.authorityId,
654
+ walletAuthMethodId: stored.authMethodId,
655
+ packageSetDigestB64u: stored.packageSetDigestB64u,
656
+ authorizationId: input.acknowledgement.authorizationId,
657
+ walletSessionId: input.acknowledgement.walletSessionId,
658
+ credentialDigestB64u: input.acknowledgement.credentialDigestB64u,
659
+ installationReceiptDigestB64u,
660
+ acknowledgedAtMs: input.acknowledgement.acknowledgedAtMs,
661
+ expiresAtMs: authExpiresAtMs
662
+ };
663
+ return {
664
+ acknowledgement: input.acknowledgement,
665
+ cleanupReceipt,
666
+ delivery,
667
+ authBindingDigestB64u: delivery.recipientBindingDigestB64u,
668
+ authExpiresAtMs
669
+ };
670
+ }
671
+ async assertCredentialDeliveryMatchesStoredInstallation(input) {
672
+ const recipientPublicKey65B64u = input.stored.deliveryRecipientPublicKey65B64u;
673
+ const aad = input.delivery.aad;
674
+ const expectedPrincipalId = requireParsed(parsePrincipalId(`linked-device:${String(input.stored.deviceId)}`), "principalId");
675
+ const installationReceiptDigestB64u = await computeWalletSessionInstallationReceiptDigestB64u(input.receipt);
676
+ if (!recipientPublicKey65B64u || aad.namespace !== this.options.scope.namespace || aad.orgId !== this.options.scope.orgId || aad.projectId !== this.options.scope.projectId || aad.envId !== this.options.scope.envId || aad.linkSessionId !== input.stored.linkSessionId || aad.tenantId !== this.options.tenantId || aad.principalId !== expectedPrincipalId || aad.walletId !== input.stored.walletId || aad.authorityId !== input.stored.authorityId || aad.walletAuthMethodId !== input.stored.authMethodId || aad.recipientPublicKey65B64u !== recipientPublicKey65B64u || input.delivery.installationReceiptDigestB64u !== installationReceiptDigestB64u) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device Wallet Session credential delivery identity is inconsistent with its commit");
677
+ await assertLinkedDeviceWalletSessionCredentialDeliveryIntegrityV1(input.delivery);
678
+ }
679
+ async assertCredentialDeliveryMatchesCommittedSession(input) {
680
+ await this.assertCredentialDeliveryMatchesStoredInstallation(input);
681
+ const session = input.walletSession.session;
682
+ const aad = input.delivery.aad;
683
+ if (aad.tenantId !== session.tenantId || aad.principalId !== session.principalId || aad.authorizationId !== session.authorizationId || aad.walletSessionId !== session.walletSessionId || aad.quotaId !== input.walletSession.quota.quotaId || aad.credentialDigestB64u !== input.walletSession.primaryOperationCredentialDigestB64u || aad.issuedAtMs !== session.createdAtMs || aad.expiresAtMs !== session.expiresAtMs) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device Wallet Session credential delivery identity is inconsistent with its commit");
684
+ }
685
+ buildCredentialDeliveryAcknowledgementStatement(input) {
686
+ const acknowledgementJson = JSON.stringify(input.acknowledgement);
687
+ const cleanupReceiptJson = JSON.stringify(input.cleanupReceipt);
688
+ const delivery = input.delivery;
689
+ return this.options.database.prepare(`UPDATE linked_device_wallet_session_credential_deliveries_v1
690
+ SET lifecycle_kind = 'acknowledged', sealed_envelope_json = NULL,
691
+ acknowledged_at_ms = ?, acknowledgement_receipt_json = ?,
692
+ cleanup_state = 'pending', cleanup_receipt_json = ?,
693
+ acknowledgement_auth_binding_digest_b64u = ?,
694
+ acknowledgement_auth_package_set_digest_b64u = ?,
695
+ acknowledgement_auth_expires_at_ms = ?
696
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
697
+ AND link_session_id = ? AND lifecycle_kind = 'issued'
698
+ AND tenant_id = ? AND authorization_id = ? AND wallet_session_id = ?
699
+ AND quota_id = ? AND principal_id = ? AND authority_id = ?
700
+ AND wallet_id = ? AND wallet_auth_method_id = ?
701
+ AND credential_digest_b64u = ? AND aad_digest_b64u = ?
702
+ AND sealed_envelope_digest_b64u = ? AND installation_receipt_digest_b64u = ?`).bind(input.acknowledgement.acknowledgedAtMs, acknowledgementJson, cleanupReceiptJson, String(input.authBindingDigestB64u), String(input.acknowledgement.packageSetDigestB64u), input.authExpiresAtMs, this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(input.acknowledgement.linkSessionId), String(delivery.aad.tenantId), String(delivery.aad.authorizationId), String(delivery.aad.walletSessionId), String(delivery.aad.quotaId), String(delivery.aad.principalId), String(delivery.aad.authorityId), String(delivery.aad.walletId), String(delivery.aad.walletAuthMethodId), String(delivery.aad.credentialDigestB64u), String(delivery.aadDigestB64u), String(delivery.envelopeDigestB64u), String(delivery.installationReceiptDigestB64u));
703
+ }
704
+ buildAuthorityAllocationDeleteStatement(linkSessionId) {
705
+ return this.options.database.prepare(`DELETE FROM linked_device_authority_allocations
706
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
707
+ AND link_session_id = ?`).bind(this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(linkSessionId));
708
+ }
709
+ buildCredentialDeliveryCleanupStateStatement(input) {
710
+ return this.options.database.prepare(`UPDATE linked_device_wallet_session_credential_deliveries_v1
711
+ SET cleanup_state = ?
712
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
713
+ AND link_session_id = ? AND lifecycle_kind = 'acknowledged'
714
+ AND cleanup_state = ?`).bind(input.to, this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(input.linkSessionId), input.from);
715
+ }
716
+ buildCredentialDeliveryCleanupCompleteStatement(linkSessionId) {
717
+ return this.options.database.prepare(`UPDATE linked_device_wallet_session_credential_deliveries_v1
718
+ SET lifecycle_kind = 'cleanup_complete', cleanup_state = 'complete',
719
+ cleanup_completed_at_ms = ?
720
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
721
+ AND link_session_id = ? AND lifecycle_kind = 'acknowledged'
722
+ AND cleanup_state = 'session_removed'`).bind(this.nowV1(), this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(linkSessionId));
723
+ }
724
+ async reserveSignerMaterial(input, sourceContributionPreparation) {
725
+ assertRecipientRequestsMatchManifest(input);
726
+ let ed25519;
727
+ let ecdsa;
728
+ let ed25519Preparation;
729
+ let ecdsaPreparation;
730
+ for (const signer of input.signerManifest.signers) {
731
+ const sourceContribution = sourceContributionForSigner(input, signer);
732
+ const prepared = sourceContributionPreparationForSigner(sourceContributionPreparation, signer);
733
+ const targetMaterialActivation = targetMaterialActivationForPreparation(prepared);
734
+ const sourceMaterialActivation = sourceMaterialActivationForSigner(input, signer);
735
+ assertLinkedDeviceOrdinaryMaterialSourceContributionMatchesContextV1({
736
+ contribution: sourceContribution,
737
+ linkSessionId: input.linkSessionId,
738
+ enrollmentId: input.enrollmentId,
739
+ sourceAuthorityId: input.sourceAuthority.authority.authorityId,
740
+ walletKeyId: signer.walletKeyId,
741
+ targetDeviceId: input.targetDeviceId,
742
+ targetFactorVerificationDigestB64u: input.targetFactor.verificationDigestB64u,
743
+ sourceMaterialActivation,
744
+ targetMaterialActivation,
745
+ sourceSigner: signer.keyFamily === "ed25519" ? {
746
+ keyFamily: "ed25519",
747
+ walletKeyId: signer.walletKeyId,
748
+ registeredPublicKeyB64u: signer.registeredPublicKeyB64u
749
+ } : {
750
+ keyFamily: "ecdsa_secp256k1",
751
+ walletKeyId: signer.walletKeyId,
752
+ thresholdPublicKey33B64u: signer.thresholdPublicKey33B64u
753
+ }
754
+ });
755
+ const preparation = workerReservationPreparationForContribution({
756
+ sourceContributionPreparation: prepared,
757
+ sourceContribution
758
+ });
759
+ if (signer.keyFamily === "ed25519") {
760
+ if (preparation.keyFamily !== "ed25519") throw new Error("ordinary material reservation preparation family does not match signer");
761
+ const workerPreparation = preparation.preparation;
762
+ assertPreparationActivationMatches(targetMaterialActivation, workerPreparation.sourceContribution.targetMaterialActivation);
763
+ const reservation = await this.options.reservationService.reserveOrdinaryInactiveSignerMaterialV1({
764
+ kind: "ordinary_ed25519_signer_material_reservation_request_v1",
765
+ keyFamily: "ed25519",
766
+ signer,
767
+ plannedActivationRef: targetMaterialActivation,
768
+ preparation: workerPreparation
769
+ });
770
+ if (reservation.keyFamily !== "ed25519") throw new Error("ordinary material reservation returned the wrong family");
771
+ ed25519 = reservation;
772
+ ed25519Preparation = workerPreparation;
773
+ continue;
774
+ }
775
+ if (preparation.keyFamily !== "ecdsa_secp256k1") throw new Error("ordinary material reservation preparation family does not match signer");
776
+ const workerPreparation = preparation.preparation;
777
+ assertPreparationActivationMatches(targetMaterialActivation, workerPreparation.sourceContribution.binding.target.activation);
778
+ const reservation = await this.options.reservationService.reserveOrdinaryInactiveSignerMaterialV1({
779
+ kind: "ordinary_ecdsa_signer_material_reservation_request_v1",
780
+ keyFamily: "ecdsa_secp256k1",
781
+ signer,
782
+ plannedActivationRef: targetMaterialActivation,
783
+ preparation: workerPreparation
784
+ });
785
+ if (reservation.keyFamily !== "ecdsa_secp256k1") throw new Error("ordinary material reservation returned the wrong family");
786
+ ecdsa = reservation;
787
+ ecdsaPreparation = workerPreparation;
788
+ }
789
+ if (!ed25519 && !ecdsa) throw new Error("signer manifest produced no reservations");
790
+ if (ed25519 && ecdsa) {
791
+ if (!ed25519Preparation || !ecdsaPreparation) throw new Error("signer material reservation preparation was not retained");
792
+ return {
793
+ packages: {
794
+ kind: "committed_signer_package_set_v1",
795
+ keyFamilies: ["ed25519", "ecdsa_secp256k1"],
796
+ ed25519: committedEd25519Package(ed25519),
797
+ ecdsa: committedEcdsaPackage(ecdsa)
798
+ },
799
+ ordinarySignerMaterialPreparations: sourceContributionPreparation,
800
+ serverReservationIds: {
801
+ ed25519: {
802
+ reservationId: ed25519.serverMaterial.reservationId,
803
+ preparation: ed25519Preparation
804
+ },
805
+ ecdsa_secp256k1: {
806
+ reservationId: ecdsa.serverMaterial.reservationId,
807
+ preparation: ecdsaPreparation
808
+ }
809
+ }
810
+ };
811
+ }
812
+ if (ed25519) {
813
+ if (!ed25519Preparation) throw new Error("Ed25519 reservation preparation was not retained");
814
+ return {
815
+ packages: {
816
+ kind: "committed_signer_package_set_v1",
817
+ keyFamilies: ["ed25519"],
818
+ ed25519: committedEd25519Package(ed25519)
819
+ },
820
+ ordinarySignerMaterialPreparations: sourceContributionPreparation,
821
+ serverReservationIds: { ed25519: {
822
+ reservationId: ed25519.serverMaterial.reservationId,
823
+ preparation: ed25519Preparation
824
+ } }
825
+ };
826
+ }
827
+ if (!ecdsa) throw new Error("signer manifest produced no ECDSA reservation");
828
+ if (!ecdsaPreparation) throw new Error("ECDSA reservation preparation was not retained");
829
+ return {
830
+ packages: {
831
+ kind: "committed_signer_package_set_v1",
832
+ keyFamilies: ["ecdsa_secp256k1"],
833
+ ecdsa: committedEcdsaPackage(ecdsa)
834
+ },
835
+ ordinarySignerMaterialPreparations: sourceContributionPreparation,
836
+ serverReservationIds: { ecdsa_secp256k1: {
837
+ reservationId: ecdsa.serverMaterial.reservationId,
838
+ preparation: ecdsaPreparation
839
+ } }
840
+ };
841
+ }
842
+ async activateReservations(stored, activatedAtMs) {
843
+ const activation = this.options.materialActivation;
844
+ for (const family of stored.packages.signerPackages.keyFamilies) {
845
+ if (family === "ed25519") {
846
+ const packageValue = stored.packages.signerPackages.ed25519;
847
+ const reservation = stored.serverReservationIds.ed25519;
848
+ if (!reservation || !packageValue) throw new Error("server reservation for ed25519 is missing");
849
+ await activation.activateOrdinaryInactiveSignerMaterialV1({
850
+ keyFamily: "ed25519",
851
+ reservationId: reservation.reservationId,
852
+ materialActivation: packageValue.materialActivation,
853
+ activatedAtMs,
854
+ preparation: {
855
+ keyFamily: "ed25519",
856
+ preparation: reservation.preparation
857
+ }
858
+ });
859
+ continue;
860
+ }
861
+ const packageValue = stored.packages.signerPackages.ecdsa;
862
+ const reservation = stored.serverReservationIds.ecdsa_secp256k1;
863
+ if (!reservation || !packageValue) throw new Error("server reservation for ECDSA is missing");
864
+ await activation.activateOrdinaryInactiveSignerMaterialV1({
865
+ keyFamily: "ecdsa_secp256k1",
866
+ reservationId: reservation.reservationId,
867
+ materialActivation: packageValue.materialActivation,
868
+ activatedAtMs,
869
+ preparation: {
870
+ keyFamily: "ecdsa_secp256k1",
871
+ preparation: reservation.preparation
872
+ }
873
+ });
874
+ }
875
+ }
876
+ async readCommittedWalletSession(authority, authMethod, issuedAtMs) {
877
+ const prepared = await this.options.authorizationService.prepareWalletSessionAuthorizationV2(this.buildWalletSessionAuthorizationInput(authority, authMethod, issuedAtMs));
878
+ const committed = await this.options.authorizationService.readWalletSessionAuthorizationV2ByMint({
879
+ tenantId: prepared.session.tenantId,
880
+ principalId: prepared.session.principalId,
881
+ walletId: prepared.session.walletId,
882
+ authorityId: prepared.session.authorityId,
883
+ walletAuthMethodId: prepared.session.walletAuthMethodId,
884
+ mintId: prepared.session.mintId
885
+ });
886
+ if (!committed || committed.retiredAtMs !== null) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device Wallet Session authorization is not active");
887
+ if (!walletSessionAuthorizationV2RecordsEqual(committed.session, prepared.session)) throw new LinkedDeviceActivationIntegrityErrorV1("linked-device Wallet Session authorization differs from its commit");
888
+ return {
889
+ session: committed.session,
890
+ quota: prepared.quota,
891
+ primaryOperationCredentialDigestB64u: committed.primaryOperationCredentialDigestB64u
892
+ };
893
+ }
894
+ buildInstallationActivationStatement(input) {
895
+ return this.options.database.prepare(`UPDATE linked_device_authority_installations
896
+ SET installed_record_set_digest_b64u = ?, activated_at_ms = ?, updated_at_ms = ?
897
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
898
+ AND link_session_id = ? AND package_set_digest_b64u = ?
899
+ AND installed_record_set_digest_b64u IS NULL AND activated_at_ms IS NULL`).bind(String(input.receipt.installedRecordSetDigestB64u), input.receipt.installedAtMs, input.receipt.installedAtMs, this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(input.stored.linkSessionId), String(input.stored.packageSetDigestB64u));
900
+ }
901
+ buildCredentialDeliveryInsertStatement(delivery) {
902
+ const aad = delivery.aad;
903
+ return this.options.database.prepare(`INSERT INTO linked_device_wallet_session_credential_deliveries_v1 (
904
+ namespace, org_id, project_id, env_id, link_session_id, tenant_id,
905
+ authorization_id, wallet_session_id, quota_id, principal_id,
906
+ authority_id, wallet_id, wallet_auth_method_id, credential_digest_b64u,
907
+ recipient_kind, recipient_public_key_b64u, recipient_binding_digest_b64u,
908
+ envelope_alg, aad_digest_b64u, sealed_envelope_json, sealed_envelope_digest_b64u,
909
+ installation_receipt_digest_b64u, issued_at_ms, expires_at_ms,
910
+ lifecycle_kind, acknowledged_at_ms, acknowledgement_receipt_json,
911
+ cleanup_state, cleanup_receipt_json, cleanup_completed_at_ms,
912
+ acknowledgement_auth_binding_digest_b64u,
913
+ acknowledgement_auth_package_set_digest_b64u,
914
+ acknowledgement_auth_expires_at_ms
915
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'p256_ecdh', ?, ?,
916
+ 'p256-ecdh-aes256gcm-v1', ?, ?, ?, ?, ?, ?, 'issued', NULL, NULL,
917
+ 'pending', NULL, NULL, NULL, NULL, NULL)`).bind(aad.namespace, aad.orgId, aad.projectId, aad.envId, String(aad.linkSessionId), String(aad.tenantId), String(aad.authorizationId), String(aad.walletSessionId), String(aad.quotaId), String(aad.principalId), String(aad.authorityId), String(aad.walletId), String(aad.walletAuthMethodId), String(aad.credentialDigestB64u), aad.recipientPublicKey65B64u, String(delivery.recipientBindingDigestB64u), String(delivery.aadDigestB64u), JSON.stringify(delivery.envelope), String(delivery.envelopeDigestB64u), String(delivery.installationReceiptDigestB64u), aad.issuedAtMs, aad.expiresAtMs);
918
+ }
919
+ async readCredentialDelivery(linkSessionId) {
920
+ const row = await this.readCredentialDeliveryRow(linkSessionId);
921
+ if (!row || row.lifecycle_kind !== "issued") return null;
922
+ return parseStoredCredentialDelivery(row);
923
+ }
924
+ async readCredentialDeliveryRow(linkSessionId) {
925
+ return await this.options.database.prepare(`SELECT * FROM linked_device_wallet_session_credential_deliveries_v1
926
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
927
+ AND link_session_id = ?
928
+ LIMIT 1`).bind(this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(linkSessionId)).first();
929
+ }
930
+ buildWalletSessionAuthorizationInput(authority, authMethod, issuedAtMs) {
931
+ const tenantId = requireParsed(parseTenantId(this.options.tenantId), "tenantId");
932
+ const principalId = requireParsed(parsePrincipalId(`linked-device:${String(authority.principal.deviceId)}`), "principalId");
933
+ const mintId = requireParsed(parseWalletSessionMintId(`linked-device-authority:${String(authority.authorityId)}`), "mintId");
934
+ const ttlMs = this.options.walletSessionTtlMs ?? 900 * 1e3;
935
+ const remainingUses = this.options.walletSessionRemainingUses ?? 100;
936
+ if (!Number.isSafeInteger(ttlMs) || ttlMs <= 0 || !Number.isSafeInteger(remainingUses) || remainingUses <= 0) throw new Error("ordinary Wallet Session policy is invalid");
937
+ return {
938
+ tenantId,
939
+ principalId,
940
+ walletId: authority.walletId,
941
+ authority,
942
+ walletAuthMethodId: authMethod.walletAuthMethodId,
943
+ mintId,
944
+ remainingUses,
945
+ issuedAtMs,
946
+ expiresAtMs: issuedAtMs + ttlMs
947
+ };
948
+ }
949
+ async markInstalled(stored, receipt) {
950
+ if (d1ChangedRows(await this.options.database.prepare(`UPDATE linked_device_authority_installations
951
+ SET installed_record_set_digest_b64u = ?, activated_at_ms = ?, updated_at_ms = ?
952
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
953
+ AND link_session_id = ? AND package_set_digest_b64u = ?
954
+ AND (installed_record_set_digest_b64u IS NULL OR installed_record_set_digest_b64u = ?)`).bind(String(receipt.installedRecordSetDigestB64u), receipt.installedAtMs, receipt.installedAtMs, this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(stored.linkSessionId), String(stored.packageSetDigestB64u), String(receipt.installedRecordSetDigestB64u)).run()) !== 1) {
955
+ if ((await this.readInstallation(stored.linkSessionId))?.installedRecordSetDigestB64u !== receipt.installedRecordSetDigestB64u) throw new Error("installation acknowledgement conflicts with a prior receipt");
956
+ }
957
+ }
958
+ async prepareAuthorityAllocation(input, existing) {
959
+ const current = await this.readAuthorityAllocation(input.linkSessionId);
960
+ if (current) {
961
+ assertAuthorityAllocationMatches(current, input, existing);
962
+ return {
963
+ authorityId: current.authorityId,
964
+ statement: null
965
+ };
966
+ }
967
+ const candidate = existing?.authorityId ?? requireParsed(parseWalletAuthorityId(`wallet-authority:${secureRandomBase64Url(32, "linked-device wallet authority id")}`), "authorityId");
968
+ return {
969
+ authorityId: candidate,
970
+ statement: this.options.database.prepare(`INSERT INTO linked_device_authority_allocations (
971
+ namespace, org_id, project_id, env_id, link_session_id,
972
+ authority_id, wallet_id, enrollment_id, device_id, created_at_ms
973
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).bind(this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(input.linkSessionId), String(candidate), String(input.walletId), String(input.enrollmentId), String(input.targetDeviceId), input.nowMs)
974
+ };
975
+ }
976
+ async prepareEmailOtpEnrollmentStatements(input) {
977
+ if (input.targetFactor.kind !== "verified_email_otp_target_v1") return [];
978
+ if (input.targetFactor.enrollment.kind !== "new_enrollment") return [];
979
+ const material = input.emailOtpEnrollment;
980
+ if (!material) throw new Error("new Email OTP target is missing enrollment material");
981
+ const finalizer = this.options.emailOtpEnrollmentFinalizer;
982
+ if (!finalizer) throw new Error("new Email OTP target enrollment finalizer is not configured");
983
+ const prepared = await finalizer.prepareLinkedDeviceEnrollment({
984
+ walletId: String(input.walletId),
985
+ orgId: this.options.scope.orgId,
986
+ authSubjectId: input.targetFactor.providerUserId,
987
+ verifiedEmail: input.targetFactor.targetEmail,
988
+ material,
989
+ nowMs: input.nowMs
990
+ });
991
+ if (!prepared.ok) throw new Error(prepared.message);
992
+ return prepared.statements;
993
+ }
994
+ async readAuthorityAllocation(linkSessionId) {
995
+ const row = await this.options.database.prepare(`SELECT authority_id, wallet_id, enrollment_id, device_id
996
+ FROM linked_device_authority_allocations
997
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
998
+ AND link_session_id = ?
999
+ LIMIT 1`).bind(this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(linkSessionId)).first();
1000
+ if (!row) return null;
1001
+ return parseAuthorityAllocation(row);
1002
+ }
1003
+ async buildInstallationInsertStatement(input) {
1004
+ return this.options.database.prepare(`INSERT INTO linked_device_authority_installations (
1005
+ namespace, org_id, project_id, env_id, link_session_id, authority_id,
1006
+ wallet_id, auth_method_id, device_id, package_set_digest_b64u,
1007
+ target_factor_verification_digest_b64u, target_factor_verified_at_ms,
1008
+ source_manifest_digest_b64u, delivery_recipient_public_key_b64u, packages_json,
1009
+ server_reservation_ids_json, installed_record_set_digest_b64u,
1010
+ activated_at_ms, created_at_ms, updated_at_ms
1011
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).bind(this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(input.input.linkSessionId), String(input.packages.authority.authorityId), String(input.packages.authority.walletId), String(input.packages.authMethod.walletAuthMethodId), String(input.input.targetDeviceId), String(input.packages.packageSetDigestB64u), String(input.input.targetFactor.verificationDigestB64u), input.input.targetFactor.verifiedAtMs, await digestJson(input.input.signerManifest), input.input.deliveryRecipientPublicKey65B64u, JSON.stringify(input.packages), JSON.stringify({
1012
+ ed25519: input.serverReservationIds.ed25519 ?? null,
1013
+ ecdsa_secp256k1: input.serverReservationIds.ecdsa_secp256k1 ?? null
1014
+ }), null, null, input.nowMs, input.nowMs);
1015
+ }
1016
+ async readInstallation(linkSessionId) {
1017
+ const row = await this.options.database.prepare(`SELECT * FROM linked_device_authority_installations
1018
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
1019
+ AND link_session_id = ? LIMIT 1`).bind(this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(linkSessionId)).first();
1020
+ return row ? parseStoredInstallationRow(row) : null;
1021
+ }
1022
+ async readInstallationByAuthority(authorityId) {
1023
+ const row = await this.options.database.prepare(`SELECT * FROM linked_device_authority_installations
1024
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
1025
+ AND authority_id = ? LIMIT 1`).bind(this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(authorityId)).first();
1026
+ return row ? parseStoredInstallationRow(row) : null;
1027
+ }
1028
+ async readInstallationsByWallet(walletId) {
1029
+ return ((await this.options.database.prepare(`SELECT * FROM linked_device_authority_installations
1030
+ WHERE namespace = ? AND org_id = ? AND project_id = ? AND env_id = ?
1031
+ AND wallet_id = ?
1032
+ ORDER BY link_session_id ASC`).bind(this.options.scope.namespace, this.options.scope.orgId, this.options.scope.projectId, this.options.scope.envId, String(walletId)).all()).results ?? []).map(parseStoredInstallationRow);
1033
+ }
1034
+ };
1035
+ function assertRecipientRequestsMatchManifest(input) {
1036
+ if (input.ordinarySignerMaterialRecipientRequests.length !== input.signerManifest.signers.length) throw new Error("ordinary signer material recipient requests do not match the signer manifest");
1037
+ if (input.sourceContribution.length !== input.signerManifest.signers.length) throw new Error("ordinary source contributions do not match the signer manifest");
1038
+ for (const signer of input.signerManifest.signers) {
1039
+ recipientRequestForSigner(input, signer);
1040
+ sourceContributionForSigner(input, signer);
1041
+ }
1042
+ }
1043
+ function recipientRequestForSigner(input, signer) {
1044
+ const matches = input.ordinarySignerMaterialRecipientRequests.filter((request) => request.walletKeyId === signer.walletKeyId && request.keyFamily === signer.keyFamily);
1045
+ if (matches.length !== 1) throw new Error(`ordinary signer material recipient request for ${String(signer.walletKeyId)} is missing or duplicated`);
1046
+ const request = matches[0];
1047
+ if (!request) throw new Error("ordinary signer material recipient request is missing");
1048
+ return request;
1049
+ }
1050
+ function sourceContributionForSigner(input, signer) {
1051
+ const matches = input.sourceContribution.filter((contribution) => contribution.walletKeyId === signer.walletKeyId && contribution.keyFamily === signer.keyFamily);
1052
+ if (matches.length !== 1) throw new Error(`ordinary source contribution for ${String(signer.walletKeyId)} is missing or duplicated`);
1053
+ const contribution = matches[0];
1054
+ if (!contribution) throw new Error("ordinary source contribution is missing");
1055
+ return contribution;
1056
+ }
1057
+ function sourceMaterialActivationForSigner(input, signer) {
1058
+ const activation = signer.keyFamily === "ed25519" ? input.sourceAuthority.authority.signerActivations.ed25519?.materialActivation : input.sourceAuthority.authority.signerActivations.ecdsa?.materialActivation;
1059
+ if (!activation) throw new Error(`ordinary source activation for ${String(signer.walletKeyId)} is missing`);
1060
+ return activation;
1061
+ }
1062
+ function sourceContributionPreparationForSigner(preparations, signer) {
1063
+ const preparation = preparations.find((candidate) => signer.keyFamily === "ed25519" ? "kind" in candidate : !("kind" in candidate));
1064
+ if (!preparation) throw new Error(`source contribution preparation for ${signer.keyFamily} is missing`);
1065
+ return preparation;
1066
+ }
1067
+ function workerReservationPreparationForContribution(input) {
1068
+ if ("kind" in input.sourceContributionPreparation) {
1069
+ if (input.sourceContribution.keyFamily !== "ed25519") throw new Error("Ed25519 source contribution preparation family does not match contribution");
1070
+ return {
1071
+ keyFamily: "ed25519",
1072
+ preparation: {
1073
+ kind: "ordinary_ed25519_signer_material_reservation_preparation_v1",
1074
+ sourceContribution: input.sourceContribution,
1075
+ targetBinding: input.sourceContributionPreparation.targetAdmission.binding,
1076
+ applicationBinding: input.sourceContributionPreparation.applicationBinding
1077
+ }
1078
+ };
1079
+ }
1080
+ if (input.sourceContribution.keyFamily !== "ecdsa_secp256k1") throw new Error("ECDSA source contribution preparation family does not match contribution");
1081
+ return {
1082
+ keyFamily: "ecdsa_secp256k1",
1083
+ preparation: {
1084
+ kind: "ordinary_ecdsa_signer_material_reservation_preparation_v1",
1085
+ sourceDerivation: input.sourceContribution.sourceDerivation,
1086
+ sourceContribution: input.sourceContribution.package
1087
+ }
1088
+ };
1089
+ }
1090
+ function targetMaterialActivationForPreparation(preparation) {
1091
+ return "kind" in preparation ? preparation.targetMaterialActivation : preparation.target.activation;
1092
+ }
1093
+ async function validateVerifiedLinkInput(input, nowMs, authMethodStore, sourceContributionPreparation) {
1094
+ if (input.sourceAuthority.authority.state !== "active") throw new Error("source authority must be active");
1095
+ if (input.sourceAuthority.authority.walletId !== input.walletId) throw new Error("source authority wallet does not match link wallet");
1096
+ if (input.sourceAuthority.authority.authorityDigestB64u !== input.sourceAuthority.authorityDigestB64u) throw new Error("source authority digest is unverified");
1097
+ if (!await walletAuthorityDigestsMatchV1(input.sourceAuthority.authority)) throw new Error("source authority digest does not match its canonical record");
1098
+ const sourceAuthMethod = await authMethodStore.readByIdV2({ walletAuthMethodId: input.sourceAuthority.authMethodId });
1099
+ if (!sourceAuthMethod || sourceAuthMethod.status !== "active" || sourceAuthMethod.walletId !== input.walletId || sourceAuthMethod.walletAuthorityId !== input.sourceAuthority.authority.authorityId) throw new Error("source auth method is not active for the verified authority");
1100
+ if (input.sourceAuthority.verifiedRevocationEpoch !== input.sourceAuthority.authority.revocationEpoch) throw new Error("source authority revocation epoch is stale");
1101
+ if (input.sourceAuthority.verifiedAtMs > nowMs || input.targetFactor.verifiedAtMs > nowMs) throw new Error("link verification is from the future");
1102
+ if (input.targetFactor.authMethod.walletId !== input.walletId) throw new Error("target auth method wallet does not match link wallet");
1103
+ if (input.targetFactor.kind === "verified_email_otp_target_v1") {
1104
+ if (input.targetFactor.enrollment.kind === "new_enrollment" ? input.emailOtpEnrollment === null : input.emailOtpEnrollment !== null) throw new Error("Email OTP target enrollment material does not match its branch");
1105
+ } else if (input.emailOtpEnrollment !== null) throw new Error("Passkey target cannot carry Email OTP enrollment material");
1106
+ if (input.signerManifest.signers.some((signer) => signer.walletId !== input.walletId)) throw new Error("signer manifest wallet does not match link wallet");
1107
+ assertRecipientRequestsMatchManifest(input);
1108
+ const permissions = parseDelegatedWalletPermissionSetV1(input.permissions);
1109
+ if (!permissions.ok) throw new Error(permissions.error.message);
1110
+ const attenuation = validateDelegatedWalletAuthorityAttenuationV1({
1111
+ parent: buildDelegatedWalletAuthorityV1({ permissions: input.sourceAuthority.authority.permissions }),
1112
+ child: buildDelegatedWalletAuthorityV1({ permissions: permissions.value })
1113
+ });
1114
+ if (!attenuation.ok) throw new Error(attenuation.error.message);
1115
+ if (!input.sourceAuthority.authority.permissions.includes("link_devices")) throw new Error("source authority cannot link devices");
1116
+ if (!Number.isSafeInteger(input.sourceAuthority.authority.revocationEpoch) || input.sourceAuthority.authority.revocationEpoch < 0) throw new Error("source authority revocation epoch is invalid");
1117
+ assertSourceContributionPreparationsMatchInputV1(input, sourceContributionPreparation);
1118
+ }
1119
+ function requireSourceContributionPreparations(session) {
1120
+ const preparations = session.sourceContributionPreparation;
1121
+ if (!preparations) throw new Error("linked-device source contribution preparations are missing from the session");
1122
+ return preparations;
1123
+ }
1124
+ function assertSourceContributionPreparationsMatchInputV1(input, preparations) {
1125
+ if (input.sourceContribution.length !== input.signerManifest.signers.length || preparations.length !== input.signerManifest.signers.length || input.ordinarySignerMaterialRecipientRequests.length !== input.signerManifest.signers.length) throw new Error("linked-device source contributions do not match the signer manifest");
1126
+ for (let index = 0; index < input.signerManifest.signers.length; index += 1) {
1127
+ const signer = input.signerManifest.signers[index];
1128
+ const contribution = input.sourceContribution[index];
1129
+ const preparation = preparations[index];
1130
+ const request = input.ordinarySignerMaterialRecipientRequests[index];
1131
+ if (!signer || !contribution || !preparation || !request) throw new Error(`linked-device source contribution ${index} is incomplete`);
1132
+ if (signer.keyFamily !== contribution.keyFamily || signer.keyFamily !== request.keyFamily || signer.walletKeyId !== request.walletKeyId) throw new Error(`linked-device source contribution ${index} family differs from the manifest`);
1133
+ const targetMaterialActivation = targetMaterialActivationForPreparation(preparation);
1134
+ assertLinkedDeviceOrdinaryMaterialSourceContributionMatchesContextV1({
1135
+ contribution,
1136
+ linkSessionId: input.linkSessionId,
1137
+ enrollmentId: input.enrollmentId,
1138
+ sourceAuthorityId: input.sourceAuthority.authority.authorityId,
1139
+ walletKeyId: signer.walletKeyId,
1140
+ targetDeviceId: input.targetDeviceId,
1141
+ targetFactorVerificationDigestB64u: input.targetFactor.verificationDigestB64u,
1142
+ sourceMaterialActivation: sourceMaterialActivationForSigner(input, signer),
1143
+ targetMaterialActivation,
1144
+ sourceSigner: signer.keyFamily === "ed25519" ? {
1145
+ keyFamily: "ed25519",
1146
+ walletKeyId: signer.walletKeyId,
1147
+ registeredPublicKeyB64u: signer.registeredPublicKeyB64u
1148
+ } : {
1149
+ keyFamily: "ecdsa_secp256k1",
1150
+ walletKeyId: signer.walletKeyId,
1151
+ thresholdPublicKey33B64u: signer.thresholdPublicKey33B64u
1152
+ }
1153
+ });
1154
+ assertPreparationMatchesContributionV1(preparation, contribution, request);
1155
+ }
1156
+ }
1157
+ function assertPreparationMatchesContributionV1(preparation, contribution, request) {
1158
+ if ("kind" in preparation) {
1159
+ if (contribution.keyFamily !== "ed25519" || preparation.sourceRegisteredPublicKeyB64u !== contribution.sourceRegisteredPublicKeyB64u || !mpcMaterialActivationRefsEqual(preparation.targetMaterialActivation, contribution.targetMaterialActivation) || preparation.targetClientRecipientPublicKeyB64u !== contribution.targetClientRecipientPublicKeyB64u || preparation.targetSigningWorkerRecipientPublicKeyB64u !== contribution.targetSigningWorkerRecipientPublicKeyB64u || !sameLinkedDeviceEd25519BindingsV1(preparation.sourceBinding, contribution.sourceBinding) || !("recipientPublicKeyB64u" in request) || request.recipientPublicKeyB64u !== preparation.targetClientRecipientPublicKeyB64u) throw new Error("Ed25519 source contribution differs from its persisted preparation");
1160
+ return;
1161
+ }
1162
+ if (contribution.keyFamily !== "ecdsa_secp256k1" || !mpcMaterialActivationRefsEqual(preparation.source.activation, contribution.sourceSigner.activation) || !mpcMaterialActivationRefsEqual(preparation.target.activation, contribution.target.activation) || preparation.source.thresholdPublicKey33B64u !== contribution.sourceSigner.thresholdPublicKey33B64u || preparation.target.clientRecipientPublicKeyB64u !== contribution.target.clientRecipientPublicKeyB64u || preparation.target.signingWorkerRecipientPublicKeyB64u !== contribution.target.signingWorkerRecipientPublicKeyB64u || !("clientEphemeralPublicKey" in request) || linkedDeviceX25519RecipientPublicKeyB64uV1(request.clientEphemeralPublicKey) !== preparation.target.clientRecipientPublicKeyB64u) throw new Error("ECDSA source contribution differs from its persisted preparation");
1163
+ }
1164
+ function assertPreparationActivationMatches(expected, actual) {
1165
+ if (!mpcMaterialActivationRefsEqual(expected, actual)) throw new Error("ordinary material preparation activation differs from the persisted target activation");
1166
+ }
1167
+ async function buildPendingAuthority(input) {
1168
+ const activationDigest = await computeWalletSignerActivationSetDigestB64u(input.activationSet);
1169
+ const draft = {
1170
+ kind: "wallet_authority_v1",
1171
+ authorityId: input.authorityId,
1172
+ walletId: input.input.walletId,
1173
+ principal: {
1174
+ kind: "owner_device",
1175
+ deviceId: input.input.targetDeviceId
1176
+ },
1177
+ provenance: {
1178
+ kind: "device_link",
1179
+ enrollmentId: input.input.enrollmentId,
1180
+ sourceAuthorityId: input.input.sourceAuthority.authority.authorityId,
1181
+ linkSessionId: input.input.linkSessionId
1182
+ },
1183
+ permissions: input.input.permissions,
1184
+ signerActivations: input.activationSet,
1185
+ signerActivationSetDigestB64u: activationDigest,
1186
+ authorityDigestB64u: input.packageSetDigestB64u,
1187
+ revocationEpoch: 0,
1188
+ createdAtMs: input.nowMs,
1189
+ updatedAtMs: input.nowMs,
1190
+ state: "pending_local_install",
1191
+ localInstallPackageSetDigestB64u: input.packageSetDigestB64u
1192
+ };
1193
+ const authorityDigestB64u = await computeWalletAuthorityDigestB64u(draft);
1194
+ return buildPendingWalletAuthorityV1({
1195
+ ...draft,
1196
+ authorityDigestB64u
1197
+ });
1198
+ }
1199
+ function buildPendingAuthMethod(input, authorityId, nowMs) {
1200
+ const draft = input.targetFactor.authMethod;
1201
+ if (draft.createdAtMs > nowMs) throw new Error("target auth method is from the future");
1202
+ if (draft.kind === "passkey") {
1203
+ const record = buildWalletAuthMethodRecordV2({
1204
+ version: "wallet_auth_method_v2",
1205
+ walletAuthMethodId: draft.walletAuthMethodId,
1206
+ walletId: draft.walletId,
1207
+ walletAuthorityId: authorityId,
1208
+ kind: "passkey",
1209
+ status: "pending_local_install",
1210
+ rpId: draft.rpId,
1211
+ credentialIdB64u: draft.credentialIdB64u,
1212
+ credentialPublicKeyB64u: draft.credentialPublicKeyB64u,
1213
+ counter: draft.counter,
1214
+ createdAtMs: draft.createdAtMs,
1215
+ updatedAtMs: nowMs
1216
+ });
1217
+ if (record.status !== "pending_local_install") throw new Error("auth method builder returned a non-pending record");
1218
+ return record;
1219
+ }
1220
+ const record = buildWalletAuthMethodRecordV2({
1221
+ version: "wallet_auth_method_v2",
1222
+ walletAuthMethodId: draft.walletAuthMethodId,
1223
+ walletId: draft.walletId,
1224
+ walletAuthorityId: authorityId,
1225
+ kind: "email_otp",
1226
+ status: "pending_local_install",
1227
+ emailHashHex: draft.emailHashHex,
1228
+ registrationAuthorityId: draft.registrationAuthorityId,
1229
+ createdAtMs: draft.createdAtMs,
1230
+ updatedAtMs: nowMs
1231
+ });
1232
+ if (record.status !== "pending_local_install") throw new Error("auth method builder returned a non-pending record");
1233
+ return record;
1234
+ }
1235
+ function buildActivationSet(manifest, reservations) {
1236
+ const ed25519 = reservations.packages.ed25519;
1237
+ const ecdsa = reservations.packages.ecdsa;
1238
+ if (ed25519 && ecdsa) return buildWalletSignerActivationSetV1({
1239
+ manifest,
1240
+ materialActivations: {
1241
+ keyFamilies: ["ed25519", "ecdsa_secp256k1"],
1242
+ ed25519: ed25519.materialActivation,
1243
+ ecdsa: ecdsa.materialActivation
1244
+ }
1245
+ });
1246
+ if (ed25519) return buildWalletSignerActivationSetV1({
1247
+ manifest,
1248
+ materialActivations: {
1249
+ keyFamilies: ["ed25519"],
1250
+ ed25519: ed25519.materialActivation
1251
+ }
1252
+ });
1253
+ if (!ecdsa) throw new Error("committed signer packages are empty");
1254
+ return buildWalletSignerActivationSetV1({
1255
+ manifest,
1256
+ materialActivations: {
1257
+ keyFamilies: ["ecdsa_secp256k1"],
1258
+ ecdsa: ecdsa.materialActivation
1259
+ }
1260
+ });
1261
+ }
1262
+ function committedEd25519Package(reservation) {
1263
+ return {
1264
+ kind: "committed_ed25519_signer_package_v1",
1265
+ materialActivation: reservation.materialActivation,
1266
+ targetBinding: reservation.targetBinding,
1267
+ applicationBinding: reservation.applicationBinding,
1268
+ participantIds: reservation.participantIds,
1269
+ activationReceipt: reservation.activationReceipt,
1270
+ deriver_a_client_package: reservation.clientMaterial.deriver_a_client_package,
1271
+ deriver_b_client_package: reservation.clientMaterial.deriver_b_client_package
1272
+ };
1273
+ }
1274
+ function committedEcdsaPackage(reservation) {
1275
+ return {
1276
+ kind: "committed_ecdsa_signer_package_v1",
1277
+ materialActivation: reservation.materialActivation,
1278
+ encryptedTargetClientShare: reservation.clientMaterial.encryptedTargetClientShare,
1279
+ activationReceipt: reservation.activationReceipt
1280
+ };
1281
+ }
1282
+ async function buildActiveAuthority(pending, activatedAtMs) {
1283
+ const draft = {
1284
+ kind: "wallet_authority_v1",
1285
+ authorityId: pending.authorityId,
1286
+ walletId: pending.walletId,
1287
+ principal: pending.principal,
1288
+ provenance: pending.provenance,
1289
+ permissions: pending.permissions,
1290
+ signerActivations: pending.signerActivations,
1291
+ signerActivationSetDigestB64u: pending.signerActivationSetDigestB64u,
1292
+ authorityDigestB64u: pending.authorityDigestB64u,
1293
+ revocationEpoch: pending.revocationEpoch,
1294
+ createdAtMs: pending.createdAtMs,
1295
+ updatedAtMs: activatedAtMs,
1296
+ state: "active",
1297
+ activatedAtMs
1298
+ };
1299
+ return buildActiveWalletAuthorityV1({
1300
+ ...draft,
1301
+ authorityDigestB64u: await computeWalletAuthorityDigestB64u(draft)
1302
+ });
1303
+ }
1304
+ function buildActiveAuthMethod(pending, activatedAtMs) {
1305
+ if (pending.kind === "passkey") {
1306
+ const record = buildWalletAuthMethodRecordV2({
1307
+ version: "wallet_auth_method_v2",
1308
+ walletAuthMethodId: pending.walletAuthMethodId,
1309
+ walletId: pending.walletId,
1310
+ walletAuthorityId: pending.walletAuthorityId,
1311
+ kind: "passkey",
1312
+ status: "active",
1313
+ rpId: pending.rpId,
1314
+ credentialIdB64u: pending.credentialIdB64u,
1315
+ credentialPublicKeyB64u: pending.credentialPublicKeyB64u,
1316
+ counter: pending.counter,
1317
+ createdAtMs: pending.createdAtMs,
1318
+ updatedAtMs: activatedAtMs,
1319
+ activatedAtMs
1320
+ });
1321
+ if (record.status !== "active") throw new Error("auth method builder returned a non-active record");
1322
+ return record;
1323
+ }
1324
+ const record = buildWalletAuthMethodRecordV2({
1325
+ version: "wallet_auth_method_v2",
1326
+ walletAuthMethodId: pending.walletAuthMethodId,
1327
+ walletId: pending.walletId,
1328
+ walletAuthorityId: pending.walletAuthorityId,
1329
+ kind: "email_otp",
1330
+ status: "active",
1331
+ emailHashHex: pending.emailHashHex,
1332
+ registrationAuthorityId: pending.registrationAuthorityId,
1333
+ createdAtMs: pending.createdAtMs,
1334
+ updatedAtMs: activatedAtMs,
1335
+ activatedAtMs
1336
+ });
1337
+ if (record.status !== "active") throw new Error("auth method builder returned a non-active record");
1338
+ return record;
1339
+ }
1340
+ async function buildPasskeyCredentialPromotionStatements(input) {
1341
+ if (input.authMethod.kind !== "passkey") return [];
1342
+ const signer = await resolveLinkedDeviceEd25519Signer({
1343
+ authority: input.authority,
1344
+ listWalletEd25519Signers: input.listWalletEd25519Signers
1345
+ });
1346
+ const bindingBase = {
1347
+ version: "webauthn_credential_binding_v1",
1348
+ rpId: input.authMethod.rpId,
1349
+ credentialIdB64u: input.authMethod.credentialIdB64u,
1350
+ userId: input.authMethod.walletId,
1351
+ createdAtMs: input.authMethod.createdAtMs,
1352
+ updatedAtMs: input.activatedAtMs
1353
+ };
1354
+ const binding = signer ? {
1355
+ ...bindingBase,
1356
+ nearAccountId: signer.nearAccountId,
1357
+ nearEd25519SigningKeyId: signer.nearEd25519SigningKeyId,
1358
+ signerSlot: signer.signerSlot,
1359
+ publicKey: signer.publicKey,
1360
+ relayerKeyId: signer.signingWorkerId,
1361
+ keyVersion: signer.keyVersion,
1362
+ recoveryExportCapable: signer.recoveryExportCapable,
1363
+ clientParticipantId: signer.participantIds[0],
1364
+ relayerParticipantId: signer.participantIds[1],
1365
+ participantIds: [...signer.participantIds],
1366
+ runtimePolicyScope: signer.runtimePolicyScope
1367
+ } : bindingBase;
1368
+ return [prepareD1WebAuthnAuthenticatorInsertStatement({
1369
+ database: input.database,
1370
+ scope: input.scope,
1371
+ userId: input.authMethod.walletId,
1372
+ record: {
1373
+ credentialIdB64u: input.authMethod.credentialIdB64u,
1374
+ credentialPublicKeyB64u: input.authMethod.credentialPublicKeyB64u,
1375
+ counter: input.authMethod.counter,
1376
+ createdAtMs: input.authMethod.createdAtMs,
1377
+ updatedAtMs: input.activatedAtMs,
1378
+ deviceInfo: unknownWebAuthnAuthenticatorDeviceInfo()
1379
+ }
1380
+ }), prepareD1WebAuthnCredentialBindingInsertStatement({
1381
+ database: input.database,
1382
+ scope: input.scope,
1383
+ record: binding
1384
+ })];
1385
+ }
1386
+ async function resolveLinkedDeviceEd25519Signer(input) {
1387
+ const activation = input.authority.signerActivations.ed25519;
1388
+ if (!activation) return null;
1389
+ const matches = (await input.listWalletEd25519Signers(input.authority.walletId)).filter((signer) => linkedDeviceEd25519SignerMatchesAuthority(signer, activation.signer));
1390
+ if (matches.length === 0) throw new Error("linked authority Ed25519 signer record is missing");
1391
+ if (matches.length > 1) throw new Error("linked authority Ed25519 signer record is ambiguous");
1392
+ const signer = matches[0];
1393
+ if (!signer) throw new Error("linked authority Ed25519 signer record is missing");
1394
+ return signer;
1395
+ }
1396
+ function linkedDeviceEd25519SignerMatchesAuthority(signer, authoritySigner) {
1397
+ const walletKeyId = parseWalletKeyId(`wallet-key:ed25519:${signer.walletId}:${signer.nearEd25519SigningKeyId}`);
1398
+ if (!walletKeyId.ok) return false;
1399
+ return signer.walletId === authoritySigner.walletId && walletKeyId.value === authoritySigner.walletKeyId && authoritySigner.registeredPublicKeyB64u === base64UrlEncode(Uint8Array.from(signer.activeYaoCapability.activationResult.public_receipt.registered_public_key));
1400
+ }
1401
+ function projectInstalledEd25519Authority(stored) {
1402
+ if (stored.activatedAtMs === null || stored.installedRecordSetDigestB64u === null) return null;
1403
+ const packages = stored.packages;
1404
+ if (packages.authority.authorityId !== stored.authorityId || packages.authority.walletId !== stored.walletId || packages.authMethod.walletAuthMethodId !== stored.authMethodId || packages.authMethod.walletId !== stored.walletId || packages.authMethod.walletAuthorityId !== stored.authorityId || packages.authority.provenance.kind !== "device_link" || packages.authority.provenance.linkSessionId !== stored.linkSessionId || packages.authority.principal.deviceId !== stored.deviceId) return null;
1405
+ const signerPackage = packages.signerPackages.ed25519;
1406
+ const authorityActivation = packages.authority.signerActivations.ed25519;
1407
+ if (!signerPackage || !authorityActivation) return null;
1408
+ if (!mpcMaterialActivationRefsEqual(signerPackage.materialActivation, authorityActivation.materialActivation) || !mpcMaterialActivationRefsEqual(signerPackage.materialActivation, routerAbMpcMaterialActivationRefFromWire(signerPackage.targetBinding.material_activation)) || !mpcMaterialActivationRefsEqual(signerPackage.materialActivation, routerAbMpcMaterialActivationRefFromWire(signerPackage.activationReceipt.material_activation))) return null;
1409
+ if (signerPackage.targetBinding.operation !== "registration" || signerPackage.applicationBinding.wallet_id !== String(stored.walletId) || base64UrlEncode(Uint8Array.from(signerPackage.activationReceipt.registered_public_key)) !== String(authorityActivation.signer.registeredPublicKeyB64u)) return null;
1410
+ return {
1411
+ walletId: stored.walletId,
1412
+ authorityId: stored.authorityId,
1413
+ walletAuthMethodId: stored.authMethodId,
1414
+ linkSessionId: stored.linkSessionId,
1415
+ deviceId: stored.deviceId,
1416
+ materialActivation: signerPackage.materialActivation,
1417
+ targetBinding: signerPackage.targetBinding,
1418
+ targetSessionId: signerPackage.targetBinding.lifecycle.session_id,
1419
+ applicationBinding: signerPackage.applicationBinding,
1420
+ participantIds: signerPackage.participantIds,
1421
+ activationReceipt: signerPackage.activationReceipt,
1422
+ installedRecordSetDigestB64u: stored.installedRecordSetDigestB64u,
1423
+ activatedAtMs: stored.activatedAtMs
1424
+ };
1425
+ }
1426
+ function projectInstalledEcdsaAuthority(stored) {
1427
+ if (stored.activatedAtMs === null || stored.installedRecordSetDigestB64u === null) return null;
1428
+ const packages = stored.packages;
1429
+ if (packages.authority.authorityId !== stored.authorityId || packages.authority.walletId !== stored.walletId || packages.authMethod.walletAuthMethodId !== stored.authMethodId || packages.authMethod.walletId !== stored.walletId || packages.authMethod.walletAuthorityId !== stored.authorityId || packages.authority.provenance.kind !== "device_link" || packages.authority.provenance.linkSessionId !== stored.linkSessionId || packages.authority.principal.deviceId !== stored.deviceId) return null;
1430
+ const signerPackage = packages.signerPackages.ecdsa;
1431
+ const authorityActivation = packages.authority.signerActivations.ecdsa;
1432
+ if (!signerPackage || !authorityActivation) return null;
1433
+ const receipt = signerPackage.activationReceipt;
1434
+ const source = receipt.binding.source;
1435
+ const target = receipt.binding.target;
1436
+ const sourceScope = receipt.sourceDerivation.sourceNormalSigning.scope;
1437
+ const targetScope = receipt.normalSigning.scope;
1438
+ const authorityEthereumAddress = ecdsaAuthorityEvmAddressB64u(authorityActivation.signer.evmAddress);
1439
+ if (authorityEthereumAddress === null || !mpcMaterialActivationRefsEqual(signerPackage.materialActivation, authorityActivation.materialActivation) || !mpcMaterialActivationRefsEqual(signerPackage.materialActivation, target.activation) || !mpcMaterialActivationRefsEqual(signerPackage.materialActivation, routerAbMpcMaterialActivationRefFromWire(targetScope.material_activation)) || String(receipt.binding.linkSessionId) !== String(stored.linkSessionId) || String(receipt.binding.enrollmentId) !== String(packages.authority.provenance.enrollmentId) || String(receipt.binding.sourceAuthorityId) !== String(packages.authority.provenance.sourceAuthorityId) || target.targetDeviceId !== stored.deviceId || target.targetFactorVerificationDigestB64u !== stored.targetFactorVerificationDigestB64u || signerPackage.encryptedTargetClientShare.recipientPublicKeyB64u !== target.clientRecipientPublicKeyB64u || sourceScope.wallet_id !== String(stored.walletId) || targetScope.wallet_id !== String(stored.walletId) || !mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(sourceScope.material_activation), source.activation) || sourceScope.public_identity.client_share_retry_counter !== targetScope.public_identity.client_share_retry_counter || sourceScope.public_identity.server_share_retry_counter !== targetScope.public_identity.server_share_retry_counter || targetScope.signing_worker.server_id !== target.activation.signingWorker || targetScope.public_identity.derivation_client_share_public_key33_b64u !== receipt.binding.targetClientPublicKey33B64u || targetScope.public_identity.server_public_key33_b64u !== receipt.targetRelayerPublicKey33B64u || targetScope.public_identity.threshold_public_key33_b64u !== receipt.thresholdPublicKey33B64u || targetScope.public_identity.ethereum_address20_b64u !== receipt.thresholdEthereumAddress20B64u || authorityActivation.signer.walletId !== stored.walletId || authorityActivation.signer.thresholdPublicKey33B64u !== receipt.thresholdPublicKey33B64u || authorityEthereumAddress !== receipt.thresholdEthereumAddress20B64u) return null;
1440
+ return {
1441
+ walletId: stored.walletId,
1442
+ authorityId: stored.authorityId,
1443
+ walletAuthMethodId: stored.authMethodId,
1444
+ linkSessionId: stored.linkSessionId,
1445
+ deviceId: stored.deviceId,
1446
+ materialActivation: signerPackage.materialActivation,
1447
+ signer: authorityActivation.signer,
1448
+ activationReceipt: receipt,
1449
+ installedRecordSetDigestB64u: stored.installedRecordSetDigestB64u,
1450
+ activatedAtMs: stored.activatedAtMs
1451
+ };
1452
+ }
1453
+ function ecdsaAuthorityEvmAddressB64u(value) {
1454
+ if (!/^0x[0-9a-fA-F]{40}$/.test(value)) return null;
1455
+ const bytes = new Uint8Array(20);
1456
+ for (let index = 0; index < bytes.length; index += 1) bytes[index] = Number.parseInt(value.slice(2 + index * 2, 4 + index * 2), 16);
1457
+ return base64UrlEncode(bytes);
1458
+ }
1459
+ function parseStoredInstallationRow(row) {
1460
+ const packages = parseCommittedAuthorityPackagesV1(parseD1JsonColumn(row.packages_json));
1461
+ const linkSessionId = requireParsed(parseLinkDeviceSessionId(row.link_session_id), "link_session_id");
1462
+ const authorityId = requireParsed(parseWalletAuthorityId(row.authority_id), "authority_id");
1463
+ const walletId = requireParsed(parseWalletId(row.wallet_id), "wallet_id");
1464
+ const authMethodId = requireParsed(parseWalletAuthMethodId(row.auth_method_id), "auth_method_id");
1465
+ const deviceId = requireParsed(parseDeviceId(row.device_id), "device_id");
1466
+ const packageSetDigestB64u = requireDigest(row.package_set_digest_b64u, "package_set_digest_b64u");
1467
+ const targetFactorVerificationDigestB64u = requireDigest(row.target_factor_verification_digest_b64u, "target_factor_verification_digest_b64u");
1468
+ const targetFactorVerifiedAtMs = requireTime(row.target_factor_verified_at_ms, "target_factor_verified_at_ms");
1469
+ const sourceManifestDigestB64u = requireDigest(row.source_manifest_digest_b64u, "source_manifest_digest_b64u");
1470
+ const deliveryRecipientPublicKey65B64u = row.delivery_recipient_public_key_b64u == null ? null : requireP256PublicKey(row.delivery_recipient_public_key_b64u, "delivery_recipient_public_key_b64u");
1471
+ if (packages.authority.authorityId !== authorityId || packages.authority.walletId !== walletId || packages.authMethod.walletAuthMethodId !== authMethodId || packages.packageSetDigestB64u !== packageSetDigestB64u) throw new Error("stored authority installation identity does not match packages");
1472
+ return {
1473
+ linkSessionId,
1474
+ authorityId,
1475
+ walletId,
1476
+ authMethodId,
1477
+ deviceId,
1478
+ packageSetDigestB64u,
1479
+ targetFactorVerificationDigestB64u,
1480
+ targetFactorVerifiedAtMs,
1481
+ sourceManifestDigestB64u,
1482
+ deliveryRecipientPublicKey65B64u,
1483
+ packages,
1484
+ serverReservationIds: parseServerReservationIds(parseD1JsonColumn(row.server_reservation_ids_json)),
1485
+ installedRecordSetDigestB64u: row.installed_record_set_digest_b64u == null ? null : requireDigest(row.installed_record_set_digest_b64u, "installed_record_set_digest_b64u"),
1486
+ activatedAtMs: row.activated_at_ms == null ? null : requireTime(row.activated_at_ms, "activated_at_ms")
1487
+ };
1488
+ }
1489
+ function parseStoredCredentialDelivery(row) {
1490
+ const envelope = parseD1JsonColumn(row.sealed_envelope_json);
1491
+ return parseLinkedDeviceWalletSessionCredentialDeliveryV1({
1492
+ kind: "linked_device_wallet_session_credential_delivery_v1",
1493
+ aad: {
1494
+ kind: "linked_device_wallet_session_credential_delivery_aad_v1",
1495
+ namespace: row.namespace,
1496
+ orgId: row.org_id,
1497
+ projectId: row.project_id,
1498
+ envId: row.env_id,
1499
+ tenantId: row.tenant_id,
1500
+ principalId: row.principal_id,
1501
+ linkSessionId: row.link_session_id,
1502
+ walletId: row.wallet_id,
1503
+ authorityId: row.authority_id,
1504
+ walletAuthMethodId: row.wallet_auth_method_id,
1505
+ authorizationId: row.authorization_id,
1506
+ walletSessionId: row.wallet_session_id,
1507
+ quotaId: row.quota_id,
1508
+ credentialDigestB64u: row.credential_digest_b64u,
1509
+ recipientPublicKey65B64u: row.recipient_public_key_b64u,
1510
+ issuedAtMs: row.issued_at_ms,
1511
+ expiresAtMs: row.expires_at_ms
1512
+ },
1513
+ aadDigestB64u: row.aad_digest_b64u,
1514
+ recipientBindingDigestB64u: row.recipient_binding_digest_b64u,
1515
+ envelope,
1516
+ envelopeDigestB64u: row.sealed_envelope_digest_b64u,
1517
+ installationReceiptDigestB64u: row.installation_receipt_digest_b64u
1518
+ });
1519
+ }
1520
+ function buildInstallationReceiptFromStoredInstallation(stored) {
1521
+ if (stored.installedRecordSetDigestB64u === null || stored.activatedAtMs === null) throw new LinkedDeviceActivationIntegrityErrorV1("active linked-device installation has no activation receipt");
1522
+ return {
1523
+ kind: "local_authority_installation_receipt_v1",
1524
+ authorityId: stored.authorityId,
1525
+ walletId: stored.walletId,
1526
+ authMethodId: stored.authMethodId,
1527
+ deviceId: stored.deviceId,
1528
+ packageSetDigestB64u: stored.packageSetDigestB64u,
1529
+ installedActivationRefs: stored.packages.authority.signerActivations,
1530
+ installedRecordSetDigestB64u: stored.installedRecordSetDigestB64u,
1531
+ targetFactorVerificationDigestB64u: stored.targetFactorVerificationDigestB64u,
1532
+ installedAtMs: stored.activatedAtMs
1533
+ };
1534
+ }
1535
+ function assertAcknowledgementMatchesCleanupReceipt(acknowledgement, cleanupReceipt) {
1536
+ if (acknowledgement.linkSessionId !== cleanupReceipt.linkSessionId || acknowledgement.authorityId !== cleanupReceipt.authorityId || acknowledgement.packageSetDigestB64u !== cleanupReceipt.packageSetDigestB64u || acknowledgement.authorizationId !== cleanupReceipt.authorizationId || acknowledgement.walletSessionId !== cleanupReceipt.walletSessionId || acknowledgement.credentialDigestB64u !== cleanupReceipt.credentialDigestB64u || acknowledgement.installationReceiptDigestB64u !== cleanupReceipt.installationReceiptDigestB64u || acknowledgement.acknowledgedAtMs !== cleanupReceipt.acknowledgedAtMs) throw new LinkedDeviceActivationIntegrityErrorV1("activation acknowledgement does not match the cleanup receipt");
1537
+ }
1538
+ async function assertCleanupReceiptMatchesDeliveryRow(cleanupReceipt, row) {
1539
+ if (await computeLinkedDevicePublicKeyDigestV1(cleanupReceipt.devicePublicKeyB64u) !== cleanupReceipt.devicePublicKeyDigestB64u) throw new LinkedDeviceActivationIntegrityErrorV1("activation cleanup receipt device key digest is invalid");
1540
+ if (!(String(row.link_session_id) === String(cleanupReceipt.linkSessionId) && String(row.wallet_id) === String(cleanupReceipt.walletId) && String(row.authority_id) === String(cleanupReceipt.authorityId) && String(row.wallet_auth_method_id) === String(cleanupReceipt.walletAuthMethodId) && String(row.authorization_id) === String(cleanupReceipt.authorizationId) && String(row.wallet_session_id) === String(cleanupReceipt.walletSessionId) && String(row.credential_digest_b64u) === String(cleanupReceipt.credentialDigestB64u) && String(row.installation_receipt_digest_b64u) === String(cleanupReceipt.installationReceiptDigestB64u) && Number(row.acknowledged_at_ms) === cleanupReceipt.acknowledgedAtMs && String(row.acknowledgement_auth_package_set_digest_b64u) === String(cleanupReceipt.packageSetDigestB64u) && Number(row.acknowledgement_auth_expires_at_ms) === cleanupReceipt.expiresAtMs)) throw new LinkedDeviceActivationIntegrityErrorV1("activation cleanup receipt does not match the delivery row");
1541
+ }
1542
+ function parseAuthorityAllocation(row) {
1543
+ return {
1544
+ authorityId: requireParsed(parseWalletAuthorityId(row.authority_id), "authority_id"),
1545
+ walletId: requireParsed(parseWalletId(row.wallet_id), "wallet_id"),
1546
+ enrollmentId: requireText(row.enrollment_id, "enrollment_id"),
1547
+ deviceId: requireParsed(parseDeviceId(row.device_id), "device_id")
1548
+ };
1549
+ }
1550
+ function assertAuthorityAllocationMatches(allocation, input, existing) {
1551
+ if (allocation.walletId !== input.walletId || allocation.enrollmentId !== input.enrollmentId || allocation.deviceId !== input.targetDeviceId || existing !== null && allocation.authorityId !== existing.authorityId) throw new Error("wallet authority allocation does not match the link session");
1552
+ }
1553
+ async function assertStoredPackageDigest(stored) {
1554
+ if (stored.packages.authority.provenance.kind !== "device_link") throw new Error("stored authority installation provenance is invalid");
1555
+ if (await computeCommittedSignerPackageSetDigestB64u({
1556
+ authorityId: stored.authorityId,
1557
+ walletId: stored.walletId,
1558
+ enrollmentId: stored.packages.authority.provenance.enrollmentId,
1559
+ linkSessionId: stored.linkSessionId,
1560
+ deviceId: stored.deviceId,
1561
+ authMethodId: stored.authMethodId,
1562
+ permissions: stored.packages.authority.permissions,
1563
+ sourceManifestDigestB64u: stored.sourceManifestDigestB64u,
1564
+ signerPackages: stored.packages.signerPackages,
1565
+ ed25519ExportRootPackageDigestB64u: stored.packages.ed25519ExportRootPackage ? await digestJson(stored.packages.ed25519ExportRootPackage) : null,
1566
+ targetFactorVerificationDigestB64u: stored.targetFactorVerificationDigestB64u
1567
+ }) !== stored.packageSetDigestB64u) throw new Error("stored authority installation package digest does not match its canonical contents");
1568
+ }
1569
+ function parseServerReservationIds(raw) {
1570
+ const record = requireRecord(raw, "server reservation ids");
1571
+ requireExactKeys(record, ["ed25519", "ecdsa_secp256k1"], "server reservation ids");
1572
+ const result = {};
1573
+ if (record.ed25519 !== void 0 && record.ed25519 !== null) result.ed25519 = parseEd25519ServerReservationRecord(record.ed25519);
1574
+ if (record.ecdsa_secp256k1 !== void 0 && record.ecdsa_secp256k1 !== null) result.ecdsa_secp256k1 = parseEcdsaServerReservationRecord(record.ecdsa_secp256k1);
1575
+ return result;
1576
+ }
1577
+ function parseEd25519ServerReservationRecord(raw) {
1578
+ const record = requireRecord(raw, "Ed25519 server reservation");
1579
+ requireExactKeys(record, ["reservationId", "preparation"], "Ed25519 server reservation");
1580
+ const preparationRecord = requireRecord(record.preparation, "Ed25519 reservation preparation");
1581
+ requireExactKeys(preparationRecord, [
1582
+ "kind",
1583
+ "sourceContribution",
1584
+ "targetBinding",
1585
+ "applicationBinding"
1586
+ ], "Ed25519 reservation preparation");
1587
+ if (preparationRecord.kind !== "ordinary_ed25519_signer_material_reservation_preparation_v1") throw new Error("Ed25519 reservation preparation kind is invalid");
1588
+ const sourceContribution = parseLinkedDeviceOrdinaryMaterialSourceContributionV1(preparationRecord.sourceContribution);
1589
+ if (sourceContribution.keyFamily !== "ed25519") throw new Error("Ed25519 reservation source contribution family is invalid");
1590
+ const targetBinding = parseRouterAbEd25519YaoCeremonyBindingV1(preparationRecord.targetBinding);
1591
+ const applicationBinding = parseRouterAbEd25519YaoApplicationBindingFactsV1(preparationRecord.applicationBinding);
1592
+ if (targetBinding.operation !== "registration") throw new Error("Ed25519 target binding must use registration");
1593
+ return {
1594
+ reservationId: requireReservationId(record.reservationId, "Ed25519 server reservation id"),
1595
+ preparation: {
1596
+ kind: "ordinary_ed25519_signer_material_reservation_preparation_v1",
1597
+ sourceContribution,
1598
+ targetBinding,
1599
+ applicationBinding
1600
+ }
1601
+ };
1602
+ }
1603
+ function parseEcdsaServerReservationRecord(raw) {
1604
+ const record = requireRecord(raw, "ECDSA server reservation");
1605
+ requireExactKeys(record, ["reservationId", "preparation"], "ECDSA server reservation");
1606
+ const preparationRecord = requireRecord(record.preparation, "ECDSA reservation preparation");
1607
+ requireExactKeys(preparationRecord, [
1608
+ "kind",
1609
+ "sourceDerivation",
1610
+ "sourceContribution"
1611
+ ], "ECDSA reservation preparation");
1612
+ if (preparationRecord.kind !== "ordinary_ecdsa_signer_material_reservation_preparation_v1") throw new Error("ECDSA reservation preparation kind is invalid");
1613
+ return {
1614
+ reservationId: requireReservationId(record.reservationId, "ECDSA server reservation id"),
1615
+ preparation: {
1616
+ kind: "ordinary_ecdsa_signer_material_reservation_preparation_v1",
1617
+ sourceDerivation: parseLinkedDeviceEcdsaSourceDerivationV1(preparationRecord.sourceDerivation),
1618
+ sourceContribution: parseLinkedDeviceEcdsaSourceContributionPackageV1(preparationRecord.sourceContribution)
1619
+ }
1620
+ };
1621
+ }
1622
+ function requireRecord(raw, label) {
1623
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error(`${label} is invalid`);
1624
+ return raw;
1625
+ }
1626
+ function requireExactKeys(record, keys, label) {
1627
+ const expected = new Set(keys);
1628
+ if (Object.keys(record).length !== keys.length || Object.keys(record).some((key) => !expected.has(key))) throw new Error(`${label} contains unknown or missing fields`);
1629
+ }
1630
+ function requireReservationId(raw, label) {
1631
+ if (typeof raw !== "string" || !raw.trim()) throw new Error(`${label} is invalid`);
1632
+ return raw;
1633
+ }
1634
+ function requireText(raw, label) {
1635
+ if (typeof raw !== "string" || !raw.trim()) throw new Error(`${label} is invalid`);
1636
+ return raw;
1637
+ }
1638
+ function assertRetryInput(stored, input, expectedAuthorityId) {
1639
+ if (stored.authorityId !== expectedAuthorityId || stored.walletId !== input.walletId || stored.linkSessionId !== input.linkSessionId || stored.deviceId !== input.targetDeviceId || stored.targetFactorVerificationDigestB64u !== input.targetFactor.verificationDigestB64u || stored.authMethodId !== input.targetFactor.authMethod.walletAuthMethodId) throw new Error("pending authority retry does not match the committed link input");
1640
+ }
1641
+ function assertReceiptMatchesInstallation(receipt, stored, nowMs) {
1642
+ if (receipt.walletId !== stored.walletId || receipt.authMethodId !== stored.authMethodId || receipt.deviceId !== stored.deviceId || receipt.packageSetDigestB64u !== stored.packageSetDigestB64u || receipt.targetFactorVerificationDigestB64u !== stored.targetFactorVerificationDigestB64u) throw new Error("local authority installation receipt identity does not match committed packages");
1643
+ if (!sameActivationSet(receipt.installedActivationRefs, stored.packages.authority.signerActivations)) throw new Error("local authority installation activation refs do not match committed authority");
1644
+ if (!Number.isSafeInteger(receipt.installedAtMs) || receipt.installedAtMs < stored.targetFactorVerifiedAtMs || receipt.installedAtMs < stored.packages.authority.createdAtMs || receipt.installedAtMs > nowMs) throw new Error("local authority installation receipt time is invalid");
1645
+ if (stored.installedRecordSetDigestB64u && stored.installedRecordSetDigestB64u !== receipt.installedRecordSetDigestB64u) throw new Error("local authority installation receipt record digest conflicts with prior receipt");
1646
+ if (stored.activatedAtMs !== null && stored.activatedAtMs !== receipt.installedAtMs) throw new Error("local authority installation time conflicts with prior receipt");
1647
+ }
1648
+ function sameActivationSet(left, right) {
1649
+ if (left.kind !== right.kind || left.keyFamilies.length !== right.keyFamilies.length) return false;
1650
+ for (let index = 0; index < left.keyFamilies.length; index += 1) if (left.keyFamilies[index] !== right.keyFamilies[index]) return false;
1651
+ const leftEd25519 = left.ed25519;
1652
+ const rightEd25519 = right.ed25519;
1653
+ if (leftEd25519) {
1654
+ if (!rightEd25519 || leftEd25519.kind !== rightEd25519.kind) return false;
1655
+ if (!sameEd25519Signer(leftEd25519.signer, rightEd25519.signer)) return false;
1656
+ if (!mpcMaterialActivationRefsEqual(leftEd25519.materialActivation, rightEd25519.materialActivation)) return false;
1657
+ }
1658
+ const leftEcdsa = left.ecdsa;
1659
+ const rightEcdsa = right.ecdsa;
1660
+ if (leftEcdsa) {
1661
+ if (!rightEcdsa || leftEcdsa.kind !== rightEcdsa.kind) return false;
1662
+ if (!sameEcdsaSigner(leftEcdsa.signer, rightEcdsa.signer)) return false;
1663
+ if (!mpcMaterialActivationRefsEqual(leftEcdsa.materialActivation, rightEcdsa.materialActivation)) return false;
1664
+ }
1665
+ return true;
1666
+ }
1667
+ function sameEd25519Signer(left, right) {
1668
+ return left.kind === right.kind && left.keyFamily === "ed25519" && right.keyFamily === "ed25519" && left.walletId === right.walletId && left.walletKeyId === right.walletKeyId && left.registeredPublicKeyB64u === right.registeredPublicKeyB64u;
1669
+ }
1670
+ function sameEcdsaSigner(left, right) {
1671
+ return left.kind === right.kind && left.keyFamily === "ecdsa_secp256k1" && right.keyFamily === "ecdsa_secp256k1" && left.walletId === right.walletId && left.walletKeyId === right.walletKeyId && left.thresholdPublicKey33B64u === right.thresholdPublicKey33B64u && left.evmAddress === right.evmAddress;
1672
+ }
1673
+ function sameAuthority(left, right) {
1674
+ if (left.state === "revoked") return false;
1675
+ if (left.state === "pending_local_install") return sameAuthorityStableFields(left, right) && right.state === "pending_local_install" && left.authorityDigestB64u === right.authorityDigestB64u && left.revocationEpoch === right.revocationEpoch && left.createdAtMs === right.createdAtMs && left.updatedAtMs === right.updatedAtMs && left.localInstallPackageSetDigestB64u === right.localInstallPackageSetDigestB64u;
1676
+ return sameAuthorityStableFields(left, right);
1677
+ }
1678
+ function sameActiveAuthority(left, right) {
1679
+ return sameAuthorityStableFields(left, right) && left.state === right.state && left.authorityDigestB64u === right.authorityDigestB64u && left.revocationEpoch === right.revocationEpoch && left.createdAtMs === right.createdAtMs && left.updatedAtMs === right.updatedAtMs && left.activatedAtMs === right.activatedAtMs;
1680
+ }
1681
+ function sameAuthorityStableFields(left, right) {
1682
+ return left.kind === right.kind && left.authorityId === right.authorityId && left.walletId === right.walletId && left.principal.kind === right.principal.kind && left.principal.deviceId === right.principal.deviceId && sameAuthorityProvenance(left.provenance, right.provenance) && samePermissionSet(left.permissions, right.permissions) && sameActivationSet(left.signerActivations, right.signerActivations) && left.signerActivationSetDigestB64u === right.signerActivationSetDigestB64u;
1683
+ }
1684
+ function sameAuthorityProvenance(left, right) {
1685
+ if (left.kind !== right.kind) return false;
1686
+ switch (left.kind) {
1687
+ case "wallet_registration": return true;
1688
+ case "device_link": return right.kind === "device_link" && left.enrollmentId === right.enrollmentId && left.sourceAuthorityId === right.sourceAuthorityId && left.linkSessionId === right.linkSessionId;
1689
+ case "wallet_recovery": return right.kind === "wallet_recovery" && left.recoveryOperationId === right.recoveryOperationId && left.continuityAuthorityId === right.continuityAuthorityId;
1690
+ }
1691
+ }
1692
+ function samePermissionSet(left, right) {
1693
+ if (left.length !== right.length) return false;
1694
+ for (let index = 0; index < left.length; index += 1) if (left[index] !== right[index]) return false;
1695
+ return true;
1696
+ }
1697
+ function sameAuthMethod(left, right) {
1698
+ if (left.walletAuthMethodId !== right.walletAuthMethodId || left.walletAuthorityId !== right.walletAuthorityId || left.walletId !== right.walletId) return false;
1699
+ if (!("kind" in left) || !("kind" in right) || left.kind !== right.kind || left.kind === void 0) return false;
1700
+ if (left.kind === "passkey") return right.kind === "passkey" && left.rpId === right.rpId && left.credentialIdB64u === right.credentialIdB64u && left.credentialPublicKeyB64u === right.credentialPublicKeyB64u && left.counter === right.counter;
1701
+ return right.kind === "email_otp" && left.emailHashHex === right.emailHashHex && left.registrationAuthorityId === right.registrationAuthorityId;
1702
+ }
1703
+ function sameLinkedDeviceEd25519BindingsV1(left, right) {
1704
+ if (!isLinkedDeviceEd25519ActivationBindingV1(left) || !isLinkedDeviceEd25519ActivationBindingV1(right)) return false;
1705
+ return sameRouterAbEd25519YaoActivationBindingV1(left, right);
1706
+ }
1707
+ function isLinkedDeviceEd25519ActivationBindingV1(value) {
1708
+ switch (value.operation) {
1709
+ case "registration": return value.lifecycle.work_kind === "registration_prepare" && value.lifecycle.primitive_request_kind === "registration";
1710
+ case "recovery": return value.lifecycle.work_kind === "recovery" && value.lifecycle.primitive_request_kind === "recovery";
1711
+ default: return false;
1712
+ }
1713
+ }
1714
+ async function digestJson(value) {
1715
+ return parseDigestB64u(base64UrlEncode(await sha256BytesUtf8(alphabetizeStringify(value))));
1716
+ }
1717
+ async function sealLinkedDeviceWalletSessionCredentialV1(input) {
1718
+ const recipientPublicKey = requireP256PublicKey(input.recipientPublicKey65B64u, "recipientPublicKey65B64u");
1719
+ const aad = {
1720
+ kind: "linked_device_wallet_session_credential_delivery_aad_v1",
1721
+ namespace: input.scope.namespace,
1722
+ orgId: input.scope.orgId,
1723
+ projectId: input.scope.projectId,
1724
+ envId: input.scope.envId,
1725
+ tenantId: input.tenantId,
1726
+ principalId: input.principalId,
1727
+ linkSessionId: input.linkSessionId,
1728
+ walletId: input.walletId,
1729
+ authorityId: input.authorityId,
1730
+ walletAuthMethodId: input.walletAuthMethodId,
1731
+ authorizationId: input.authorizationId,
1732
+ walletSessionId: input.walletSessionId,
1733
+ quotaId: input.quotaId,
1734
+ credentialDigestB64u: input.credentialDigestB64u,
1735
+ recipientPublicKey65B64u: recipientPublicKey,
1736
+ issuedAtMs: input.issuedAtMs,
1737
+ expiresAtMs: input.expiresAtMs
1738
+ };
1739
+ const aadBytes = new TextEncoder().encode(encodeLinkedDeviceWalletSessionCredentialDeliveryAadV1(aad));
1740
+ const plaintext = new TextEncoder().encode(alphabetizeStringify(input.operationCredential));
1741
+ let recipientBytes = null;
1742
+ let nonce = null;
1743
+ try {
1744
+ recipientBytes = base64UrlDecode(recipientPublicKey);
1745
+ const importedRecipient = await crypto.subtle.importKey("raw", recipientBytes, {
1746
+ name: "ECDH",
1747
+ namedCurve: "P-256"
1748
+ }, false, []);
1749
+ const serverKeyPair = await crypto.subtle.generateKey({
1750
+ name: "ECDH",
1751
+ namedCurve: "P-256"
1752
+ }, false, ["deriveKey"]);
1753
+ const encryptionKey = await crypto.subtle.deriveKey({
1754
+ name: "ECDH",
1755
+ public: importedRecipient
1756
+ }, serverKeyPair.privateKey, {
1757
+ name: "AES-GCM",
1758
+ length: 256
1759
+ }, false, ["encrypt"]);
1760
+ nonce = crypto.getRandomValues(new Uint8Array(12));
1761
+ const ciphertext = new Uint8Array(await crypto.subtle.encrypt({
1762
+ name: "AES-GCM",
1763
+ iv: nonce,
1764
+ additionalData: aadBytes,
1765
+ tagLength: 128
1766
+ }, encryptionKey, plaintext));
1767
+ const serverPublicKey = new Uint8Array(await crypto.subtle.exportKey("raw", serverKeyPair.publicKey));
1768
+ try {
1769
+ const envelope = {
1770
+ kind: "linked_device_wallet_session_credential_envelope_v1",
1771
+ algorithm: "p256-ecdh-aes256gcm-v1",
1772
+ serverEphemeralPublicKey65B64u: base64UrlEncode(serverPublicKey),
1773
+ nonce12B64u: base64UrlEncode(nonce),
1774
+ ciphertextB64u: base64UrlEncode(ciphertext)
1775
+ };
1776
+ return {
1777
+ kind: "linked_device_wallet_session_credential_delivery_v1",
1778
+ aad,
1779
+ aadDigestB64u: await computeLinkedDeviceWalletSessionCredentialDeliveryAadDigestB64u(aad),
1780
+ recipientBindingDigestB64u: await digestJson({
1781
+ domain: "seams/linked-device/delivery-recipient/v1",
1782
+ recipientPublicKey65B64u: recipientPublicKey
1783
+ }),
1784
+ envelope,
1785
+ envelopeDigestB64u: await computeLinkedDeviceWalletSessionCredentialEnvelopeDigestB64u(envelope),
1786
+ installationReceiptDigestB64u: input.installationReceiptDigestB64u
1787
+ };
1788
+ } finally {
1789
+ serverPublicKey.fill(0);
1790
+ ciphertext.fill(0);
1791
+ }
1792
+ } finally {
1793
+ recipientBytes?.fill(0);
1794
+ nonce?.fill(0);
1795
+ aadBytes.fill(0);
1796
+ plaintext.fill(0);
1797
+ }
1798
+ }
1799
+ function requireP256PublicKey(raw, label) {
1800
+ const encoded = requireText(raw, label);
1801
+ const bytes = base64UrlDecode(encoded);
1802
+ try {
1803
+ if (bytes.length !== 65 || bytes[0] !== 4 || base64UrlEncode(bytes) !== encoded) throw new Error(`${label} must be a canonical uncompressed P-256 point`);
1804
+ return encoded;
1805
+ } finally {
1806
+ bytes.fill(0);
1807
+ }
1808
+ }
1809
+ function requireParsed(result, label) {
1810
+ if (!result.ok) throw new Error(`${label} ${result.error.message}`);
1811
+ return result.value;
1812
+ }
1813
+ function requireDigest(raw, label) {
1814
+ try {
1815
+ return parseDigestB64u(raw);
1816
+ } catch (error) {
1817
+ throw new Error(`${label} ${errorMessage(error)}`);
1818
+ }
1819
+ }
1820
+ function requireTime(raw, label) {
1821
+ const value = typeof raw === "number" ? raw : Number(raw);
1822
+ if (!Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative safe integer`);
1823
+ return value;
1824
+ }
1825
+ function errorMessage(error) {
1826
+ return error instanceof Error ? error.message : String(error);
1827
+ }
1828
+ //#endregion
1829
+ export { D1LinkedDeviceAuthorityInstallServiceV1 };
1830
+
1831
+ //# sourceMappingURL=d1LinkedDeviceAuthorityInstallService.js.map