@seams/wallet-server 0.6.2 → 0.7.3

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 (790) hide show
  1. package/THIRD_PARTY_NOTICES.md +1 -105
  2. package/artifact-manifest.json +147 -32
  3. package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -0
  4. package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
  5. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  6. package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -0
  7. package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
  8. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  9. package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
  10. package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
  11. package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
  12. package/cloudflare-router-ab/build/router/build-stamp.json +1 -0
  13. package/cloudflare-router-ab/build/router/index.js +2 -2
  14. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  15. package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -0
  16. package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
  17. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  18. package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -0
  19. package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
  20. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  21. package/cloudflare-router-ab/migrations/deriver-a/0012_tenant_root_creation_tombstones.sql +20 -0
  22. package/cloudflare-router-ab/migrations/deriver-a/0013_tenant_root_root_use_admissions.sql +32 -0
  23. package/cloudflare-router-ab/migrations/deriver-a/0014_tenant_root_refresh_supersessions.sql +24 -0
  24. package/cloudflare-router-ab/migrations/deriver-a/0015_tenant_root_root_use_attempts.sql +56 -0
  25. package/cloudflare-router-ab/migrations/deriver-a/0016_tenant_root_root_use_admission_settlement.sql +5 -0
  26. package/cloudflare-router-ab/migrations/deriver-a/0017_tenant_root_root_use_admission_claims.sql +64 -0
  27. package/cloudflare-router-ab/migrations/deriver-a/0018_tenant_root_recovery_retention_keys.sql +12 -0
  28. package/cloudflare-router-ab/migrations/deriver-b/0012_tenant_root_creation_tombstones.sql +20 -0
  29. package/cloudflare-router-ab/migrations/deriver-b/0013_tenant_root_root_use_admissions.sql +32 -0
  30. package/cloudflare-router-ab/migrations/deriver-b/0014_tenant_root_refresh_supersessions.sql +24 -0
  31. package/cloudflare-router-ab/migrations/deriver-b/0015_tenant_root_root_use_attempts.sql +56 -0
  32. package/cloudflare-router-ab/migrations/deriver-b/0016_tenant_root_root_use_admission_settlement.sql +5 -0
  33. package/cloudflare-router-ab/migrations/deriver-b/0017_tenant_root_root_use_admission_claims.sql +64 -0
  34. package/cloudflare-router-ab/migrations/deriver-b/0018_tenant_root_recovery_retention_keys.sql +12 -0
  35. package/cloudflare-router-ab/scripts/bootstrap-local-tenant-root.mjs +81 -16
  36. package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +102 -9
  37. package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +4 -1
  38. package/cloudflare-router-ab/wrangler.deriver-a.toml +24 -0
  39. package/cloudflare-router-ab/wrangler.router.toml +13 -0
  40. package/dist/esm/authorization/capabilityPolicy.js +1 -1
  41. package/dist/esm/authorization/domain.js +2 -2
  42. package/dist/esm/authorization/factorEvidence.js +6 -100
  43. package/dist/esm/authorization/service.js +42 -2
  44. package/dist/esm/authorization/vaultProxyUse.js +5 -10
  45. package/dist/esm/cloud-host.js +17 -12
  46. package/dist/esm/core/EmailOtpRecords.js +19 -1
  47. package/dist/esm/core/EmailOtpStores.js +323 -924
  48. package/dist/esm/core/IdentityStore.js +67 -345
  49. package/dist/esm/core/NearPublicKeyStore.js +21 -63
  50. package/dist/esm/core/RegistrationCeremonyStore.js +3 -1793
  51. package/dist/esm/core/SessionService.js +7 -30
  52. package/dist/esm/core/ThresholdService/config.js +1 -82
  53. package/dist/esm/core/ThresholdService/kv.js +3 -3
  54. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +37 -5
  55. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +4 -74
  56. package/dist/esm/core/ThresholdService/routerAbNormalSigningPolicy.js +3 -10
  57. package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +15 -51
  58. package/dist/esm/core/ThresholdService/stores/KeyStore.js +3 -3
  59. package/dist/esm/core/ThresholdService/stores/SessionStore.js +5 -81
  60. package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +191 -372
  61. package/dist/esm/core/ThresholdService/stores/exportReplayGuard.js +7 -0
  62. package/dist/esm/core/ThresholdService/validation.js +18 -230
  63. package/dist/esm/core/WalletAuthMethodStore.js +22 -79
  64. package/dist/esm/core/WalletStore.js +62 -191
  65. package/dist/esm/core/WebAuthnAuthenticatorStore.js +57 -340
  66. package/dist/esm/core/WebAuthnCredentialBindingStore.js +90 -369
  67. package/dist/esm/core/WebAuthnLoginChallengeStore.js +17 -397
  68. package/dist/esm/core/WebAuthnSyncChallengeStore.js +17 -397
  69. package/dist/esm/core/authService/AuthService.js +2 -19
  70. package/dist/esm/core/authService/bytes.js +1 -4
  71. package/dist/esm/core/authService/emailOtpChallengeOperations.js +2 -5
  72. package/dist/esm/core/authService/emailOtpChallengeProof.js +10 -41
  73. package/dist/esm/core/authService/emailOtpChallengeVerification.js +19 -90
  74. package/dist/esm/core/authService/emailOtpChallenges.js +11 -46
  75. package/dist/esm/core/authService/emailOtpConfig.js +1 -32
  76. package/dist/esm/core/authService/emailOtpDelivery.js +10 -45
  77. package/dist/esm/core/authService/emailOtpEnrollment.js +9 -40
  78. package/dist/esm/core/authService/emailOtpGrant.js +9 -40
  79. package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +15 -193
  80. package/dist/esm/core/authService/emailOtpSeal.js +5 -20
  81. package/dist/esm/core/authService/emailOtpUnlock.js +20 -110
  82. package/dist/esm/core/authService/googleEmailOtpRegistration.js +29 -116
  83. package/dist/esm/core/authService/identity.js +5 -20
  84. package/dist/esm/core/authService/nearPrivateKeySigning.js +7 -15
  85. package/dist/esm/core/authService/nearPublicKeyMetadata.js +6 -25
  86. package/dist/esm/core/authService/nearTransactions.js +2 -1
  87. package/dist/esm/core/authService/oidcVerification.js +25 -38
  88. package/dist/esm/core/authService/rateLimits.js +3 -36
  89. package/dist/esm/core/authService/registrationThresholdHelpers.js +2 -103
  90. package/dist/esm/core/authService/storeRegistry.js +2 -13
  91. package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +6 -6
  92. package/dist/esm/core/authService/webauthn.js +52 -241
  93. package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -6
  94. package/dist/esm/core/authService/webauthnVerificationOutcomes.js +41 -0
  95. package/dist/esm/core/authService/webauthnWalletBinding.js +2 -122
  96. package/dist/esm/core/d1EcdsaSignerRead.js +76 -0
  97. package/dist/esm/core/d1IdentityStore.js +46 -139
  98. package/dist/esm/core/d1TenantStore.js +82 -0
  99. package/dist/esm/core/d1WalletAuthMethodStore.js +92 -143
  100. package/dist/esm/core/d1WalletStore.js +28 -36
  101. package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +10 -12
  102. package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +25 -3
  103. package/dist/esm/core/deviceLinking/linkedDeviceSession.js +6 -895
  104. package/dist/esm/core/deviceLinking/linkedDeviceSessionApproval.js +100 -0
  105. package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +662 -0
  106. package/dist/esm/core/deviceLinking/requestProof.js +13 -4
  107. package/dist/esm/core/ecdsaMaterialReadSnapshot.js +85 -0
  108. package/dist/esm/core/emailOtpD1Statements.js +383 -0
  109. package/dist/esm/core/hostedAccountIds.js +2 -2
  110. package/dist/esm/core/keyMaterialBrands.js +2 -48
  111. package/dist/esm/core/nearRelayerAccountProvisioning.js +27 -155
  112. package/dist/esm/core/nearSignerWasmRuntime.js +1 -4
  113. package/dist/esm/core/rpcClients/near/NearClient.js +15 -218
  114. package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +1 -1
  115. package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +2 -4
  116. package/dist/esm/core/signingLanes/LaneLifecycleStore.js +0 -24
  117. package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +8 -11
  118. package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +3 -8
  119. package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +1 -4
  120. package/dist/esm/core/signingMaterial/ordinaryInactiveSignerMaterialReservation.js +2 -5
  121. package/dist/esm/core/storeBackends.js +208 -0
  122. package/dist/esm/core/thresholdEcdsaChainTarget.js +2 -10
  123. package/dist/esm/core/webAuthnD1Statements.js +92 -0
  124. package/dist/esm/core/webAuthnStoreBackends.js +198 -0
  125. package/dist/esm/hosted-wallet-gateway.js +34 -17
  126. package/dist/esm/index.js +2 -2
  127. package/dist/esm/local-hosted-wallet-gateway-worker.js +2 -23
  128. package/dist/esm/localHostedWalletGatewayHandler.js +312 -0
  129. package/dist/esm/localIntendedEcdsaFinalizeFault.js +85 -0
  130. package/dist/esm/localIntendedLinkExecuteFault.js +140 -0
  131. package/dist/esm/localIntendedMaterialAdmissionFault.js +176 -0
  132. package/dist/esm/localIntendedPresignCancellation.js +44 -0
  133. package/dist/esm/localIntendedRevokeFault.js +106 -0
  134. package/dist/esm/localIntendedSessionAdmissionFault.js +139 -0
  135. package/dist/esm/localIntendedYaoExportFault.js +117 -0
  136. package/dist/esm/localIntendedYaoFault.js +13 -16
  137. package/dist/esm/localIntendedYaoFinalizeFault.js +99 -0
  138. package/dist/esm/localIntendedYaoRecoveryFault.js +102 -0
  139. package/dist/esm/localIntendedYaoSigningFault.js +127 -0
  140. package/dist/esm/router/auth/authRequestValidation.js +1 -1
  141. package/dist/esm/router/auth/commonRouterUtils.js +34 -12
  142. package/dist/esm/router/auth/walletSessionFailure.js +3 -19
  143. package/dist/esm/router/auth/webAuthnCredentialCodecs.js +4 -15
  144. package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +24 -0
  145. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.js +2 -6
  146. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +87 -89
  147. package/dist/esm/router/cloudflare/d1/auth/walletSessionCredentialReaders.js +76 -0
  148. package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +215 -0
  149. package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +423 -308
  150. package/dist/esm/router/cloudflare/d1/authorization/d1VaultProxyStore.js +8 -12
  151. package/dist/esm/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.js +14 -0
  152. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +107 -66
  153. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +3 -6
  154. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +1 -19
  155. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.js +4 -3
  156. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +52 -9
  157. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -6
  158. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.js +100 -0
  159. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +7 -10
  160. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +33 -124
  161. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js +2 -2
  162. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +10 -18
  163. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +6 -6
  164. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.js +3 -1
  165. package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +4 -4
  166. package/dist/esm/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.js +69 -0
  167. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +39 -68
  168. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +69 -0
  169. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +2 -2
  170. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.js +12 -55
  171. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeService.js +17 -80
  172. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +26 -71
  173. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +20 -3
  174. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpDeliveryRuntime.js +6 -25
  175. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +7 -94
  176. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +5 -47
  177. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +38 -170
  178. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +24 -87
  179. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +9 -32
  180. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.js +5 -20
  181. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +15 -134
  182. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +54 -260
  183. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +24 -111
  184. package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +1 -28
  185. package/dist/esm/router/cloudflare/d1/identity/d1IdentityService.js +9 -40
  186. package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +5 -18
  187. package/dist/esm/router/cloudflare/d1/oidc/d1OidcBoundary.js +18 -91
  188. package/dist/esm/router/cloudflare/d1/oidc/d1OidcVerificationService.js +6 -30
  189. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.js +1 -1
  190. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +7 -18
  191. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +25 -80
  192. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +24 -15
  193. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +23 -253
  194. package/dist/esm/router/cloudflare/d1/registration/d1EvmFamilyEcdsaRegistrationBranch.js +5 -20
  195. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +20 -39
  196. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +31 -73
  197. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +4 -1
  198. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +10 -31
  199. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +6 -30
  200. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +286 -220
  201. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +5 -3
  202. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +2 -2
  203. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +4 -7
  204. package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +139 -27
  205. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -1
  206. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +1 -1
  207. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +2 -1
  208. package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +2 -60
  209. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +158 -19
  210. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.js +19 -49
  211. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.js +100 -0
  212. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +132 -33
  213. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +83 -4
  214. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +45 -217
  215. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +10 -13
  216. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +22 -116
  217. package/dist/esm/router/cloudflare/durableObjects/thresholdStore.js +59 -66
  218. package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +1 -2
  219. package/dist/esm/router/cloudflare/runtime/routerAbPrewarm.js +2 -2
  220. package/dist/esm/router/cloudflare/runtime/staticWalletConsoleBinding.js +5 -20
  221. package/dist/esm/router/cloudflare/runtime/tenantRootCreationGrant.js +2 -9
  222. package/dist/esm/router/cloudflare/runtime/walletConsoleTenantRootLineage.js +11 -2
  223. package/dist/esm/router/cloudflare/runtime/walletControlOps.js +2 -1
  224. package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
  225. package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +7 -7
  226. package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +4 -3
  227. package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +48 -21
  228. package/dist/esm/router/cloudflare.js +13343 -14372
  229. package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +16 -5
  230. package/dist/esm/router/domains/ecdsa/thresholdEcdsaRequestValidation.js +2 -8
  231. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js +33 -0
  232. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +17 -9
  233. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +29 -431
  234. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +7 -2
  235. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js +5 -8
  236. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.js +2 -1
  237. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +70 -2
  238. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +134 -169
  239. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +77 -162
  240. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +205 -51
  241. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +29 -11
  242. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryWalletSessionAuthorization.js +3 -6
  243. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +182 -55
  244. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +2 -1
  245. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +63 -247
  246. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +9 -27
  247. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +87 -132
  248. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js +39 -55
  249. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js +5 -4
  250. package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +45 -0
  251. package/dist/esm/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.js +1 -1
  252. package/dist/esm/router/domains/emailOtp/emailOtpExportPolicy.js +1 -42
  253. package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +1 -6
  254. package/dist/esm/router/domains/emailOtp/emailOtpRouteHandlers.js +15 -62
  255. package/dist/esm/router/domains/emailOtp/emailOtpSessionRouteHelpers.js +1 -142
  256. package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.js +1 -1
  257. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -2
  258. package/dist/esm/router/domains/passkeyCustody/walletRecoveryFinalization.js +23 -45
  259. package/dist/esm/router/domains/passkeyCustody/walletRecoveryKeyManifest.js +5 -5
  260. package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
  261. package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +836 -0
  262. package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +698 -0
  263. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +210 -0
  264. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.js +16 -15
  265. package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +314 -0
  266. package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +62 -2159
  267. package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +1 -4
  268. package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +8 -14
  269. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +18 -22
  270. package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +3 -4
  271. package/dist/esm/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.js +2 -2
  272. package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +127 -339
  273. package/dist/esm/router/express.js +7172 -7997
  274. package/dist/esm/router/framework/http.js +5 -4
  275. package/dist/esm/router/framework/ror/normalize.js +1 -1
  276. package/dist/esm/router/framework/routerApiRouteSurface.js +1 -1
  277. package/dist/esm/router/framework/runtimeSnapshotConsumer.js +8 -35
  278. package/dist/esm/router/node/nodeHostedWalletGateway.js +64 -0
  279. package/dist/esm/router/node/nodeHostedWalletGatewayCheck.js +163 -0
  280. package/dist/esm/router/node/nodeHostedWalletGatewayMain.js +120 -0
  281. package/dist/esm/router/node/nodeHttp.js +79 -0
  282. package/dist/esm/router/node/nodeSqlite.js +43 -0
  283. package/dist/esm/router/node/signerSqlMigrations.js +48 -0
  284. package/dist/esm/router/transport/fetch/createFetchRouter.js +4 -7
  285. package/dist/esm/router/transport/fetch/routes/auth.js +9 -41
  286. package/dist/esm/router/transport/fetch/routes/deviceLinking.js +16 -18
  287. package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +8 -27
  288. package/dist/esm/router/transport/fetch/routes/deviceManagement.js +15 -24
  289. package/dist/esm/router/transport/fetch/routes/nearPublicKeys.js +4 -16
  290. package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +3 -16
  291. package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +144 -461
  292. package/dist/esm/router/transport/fetch/routes/sessions.js +5 -4
  293. package/dist/esm/router/transport/fetch/routes/syncAccount.js +12 -42
  294. package/dist/esm/router/transport/fetch/routes/syncAccountBootstrap.js +2 -2
  295. package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +96 -102
  296. package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +52 -27
  297. package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +4 -1
  298. package/dist/esm/router/transport/fetch/routes/webauthnAuthenticators.js +4 -16
  299. package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +1 -1
  300. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
  301. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -2
  302. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +99 -227
  303. package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
  304. package/dist/esm/shared-ts/src/authorization/walletSignerActivationEquality.js +12 -0
  305. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +74 -0
  306. package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +50 -0
  307. package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +10 -14
  308. package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -5
  309. package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +55 -0
  310. package/dist/esm/shared-ts/src/device-linking/digests.js +10 -65
  311. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +14 -16
  312. package/dist/esm/shared-ts/src/device-linking/index.js +4 -1
  313. package/dist/esm/shared-ts/src/device-linking/parsers.js +510 -1063
  314. package/dist/esm/shared-ts/src/device-linking/requestProof.js +5 -14
  315. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +10 -16
  316. package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +9 -9
  317. package/dist/esm/shared-ts/src/device-linking/wireFields.js +59 -0
  318. package/dist/esm/shared-ts/src/near/nearClient.js +252 -0
  319. package/dist/esm/shared-ts/src/passkey-custody/credentialActivity.js +3 -1
  320. package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +7 -5
  321. package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
  322. package/dist/esm/shared-ts/src/passkey-custody/primitives.js +9 -39
  323. package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -5
  324. package/dist/esm/shared-ts/src/signing-lanes/index.js +3 -3
  325. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +8 -19
  326. package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +5 -14
  327. package/dist/esm/shared-ts/src/signing-lanes/participants.js +2 -5
  328. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +7 -5
  329. package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +6 -45
  330. package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +423 -1511
  331. package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +323 -0
  332. package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +59 -0
  333. package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentifier.js +12 -0
  334. package/dist/esm/shared-ts/src/tenant-root/tenantRootIdentity.js +2 -9
  335. package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +2 -5
  336. package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +1 -2
  337. package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +49 -0
  338. package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
  339. package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +8 -1
  340. package/dist/esm/shared-ts/src/utils/digestEncoding.js +63 -0
  341. package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +2 -4
  342. package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +0 -1
  343. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +5 -3
  344. package/dist/esm/shared-ts/src/utils/exactKeys.js +17 -0
  345. package/dist/esm/shared-ts/src/utils/exactRecord.js +44 -0
  346. package/dist/esm/shared-ts/src/utils/failure.js +20 -0
  347. package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +127 -0
  348. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +2 -2
  349. package/dist/esm/shared-ts/src/utils/registrationIds.js +280 -0
  350. package/dist/esm/shared-ts/src/utils/registrationIntent.js +7 -1182
  351. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +426 -0
  352. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +11 -136
  353. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +3 -163
  354. package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +160 -0
  355. package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
  356. package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +7 -15
  357. package/dist/esm/shared-ts/src/utils/thresholdEcdsaChainTarget.js +9 -0
  358. package/dist/esm/shared-ts/src/utils/validation.js +37 -6
  359. package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +362 -0
  360. package/dist/esm/shared-ts/src/utils/wireSchema.js +77 -0
  361. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +1 -1
  362. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -1
  363. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +8 -15
  364. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
  365. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
  366. package/dist/esm/storage/d1Sql.js +10 -1
  367. package/dist/esm/storage/syncSqlite.js +79 -0
  368. package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +11 -33
  369. package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +1 -1
  370. package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +3 -3
  371. package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +3 -10
  372. package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -1
  373. package/dist/esm/threshold/session/signingSessionSeal/service.js +8 -35
  374. package/dist/esm/threshold/session/signingSessionSeal/transport/express.js +18 -94
  375. package/dist/esm/threshold/session/signingSessionSeal/transport/fetch.js +6 -30
  376. package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +23 -75
  377. package/dist/esm/threshold/statusCodes.js +1 -1
  378. package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
  379. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +3 -3
  380. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  381. package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +8 -26
  382. package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +2 -9
  383. package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +1 -3
  384. package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +25 -12
  385. package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +8 -0
  386. package/dist/types/shared-ts/src/authorization/walletSignerActivationEquality.d.ts +4 -0
  387. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -2
  388. package/dist/types/shared-ts/src/device-linking/authorityActivation.d.ts +5 -0
  389. package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +4 -8
  390. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +13 -74
  391. package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -1
  392. package/dist/types/shared-ts/src/device-linking/deviceManagement.d.ts +7 -0
  393. package/dist/types/shared-ts/src/device-linking/digests.d.ts +0 -5
  394. package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +3 -2
  395. package/dist/types/shared-ts/src/device-linking/index.d.ts +2 -0
  396. package/dist/types/shared-ts/src/device-linking/parsers.d.ts +4 -41
  397. package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +0 -1
  398. package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +5 -2
  399. package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +2 -1
  400. package/dist/types/shared-ts/src/device-linking/wireFields.d.ts +26 -0
  401. package/dist/types/shared-ts/src/near/actions.d.ts +4 -4
  402. package/dist/types/shared-ts/src/near/delegate.d.ts +3 -2
  403. package/dist/types/shared-ts/src/near/nearClient.d.ts +145 -0
  404. package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +0 -22
  405. package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +2 -4
  406. package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +14 -30
  407. package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +8 -24
  408. package/dist/types/shared-ts/src/passkey-custody/index.d.ts +0 -2
  409. package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +9 -14
  410. package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -15
  411. package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +11 -50
  412. package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +1 -10
  413. package/dist/types/shared-ts/src/signing-lanes/index.d.ts +1 -2
  414. package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +1 -2
  415. package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +5 -27
  416. package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +0 -11
  417. package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +6 -53
  418. package/dist/types/shared-ts/src/signing-lanes/records.d.ts +1 -2
  419. package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +18 -42
  420. package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +1 -20
  421. package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +4 -25
  422. package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +1 -41
  423. package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +6 -0
  424. package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +20 -0
  425. package/dist/types/shared-ts/src/tenant-root/tenantRootIdentifier.d.ts +3 -0
  426. package/dist/types/shared-ts/src/tenant-root/tenantRootOperationRecord.d.ts +2 -1
  427. package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +8 -35
  428. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +8 -35
  429. package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +25 -0
  430. package/dist/types/shared-ts/src/threshold/participants.d.ts +3 -9
  431. package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +0 -37
  432. package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +24 -0
  433. package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +3 -5
  434. package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +3 -4
  435. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +7 -108
  436. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +16 -3
  437. package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +2 -0
  438. package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +9 -0
  439. package/dist/types/shared-ts/src/utils/domainIds.d.ts +1 -2
  440. package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +3 -13
  441. package/dist/types/shared-ts/src/utils/eip1559TxWasmJson.d.ts +16 -0
  442. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +7 -5
  443. package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +0 -2
  444. package/dist/types/shared-ts/src/utils/errors.d.ts +0 -7
  445. package/dist/types/shared-ts/src/utils/exactKeys.d.ts +11 -0
  446. package/dist/types/shared-ts/src/utils/exactRecord.d.ts +12 -0
  447. package/dist/types/shared-ts/src/utils/failure.d.ts +12 -0
  448. package/dist/types/shared-ts/src/utils/index.d.ts +5 -2
  449. package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +6 -6
  450. package/dist/types/shared-ts/src/utils/near.d.ts +2 -1
  451. package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +8 -7
  452. package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -4
  453. package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +179 -0
  454. package/dist/types/shared-ts/src/utils/registrationContracts.d.ts +76 -0
  455. package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +1 -2
  456. package/dist/types/shared-ts/src/utils/registrationIds.d.ts +56 -0
  457. package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +9 -514
  458. package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +130 -0
  459. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +24 -93
  460. package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +15 -99
  461. package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +38 -0
  462. package/dist/types/shared-ts/src/utils/routerAbNormalSigningIdentity.d.ts +30 -8
  463. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +10 -15
  464. package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +2 -1
  465. package/dist/types/shared-ts/src/utils/routerApiKeyAuth.d.ts +2 -0
  466. package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +0 -2
  467. package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -35
  468. package/dist/types/shared-ts/src/utils/signerSlot.d.ts +0 -4
  469. package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +10 -17
  470. package/dist/types/shared-ts/src/utils/thresholdEcdsaChainTarget.d.ts +25 -0
  471. package/dist/types/shared-ts/src/utils/validation.d.ts +10 -10
  472. package/dist/types/shared-ts/src/utils/variant.d.ts +29 -0
  473. package/dist/types/shared-ts/src/utils/variant.typecheck.d.ts +22 -0
  474. package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +2 -2
  475. package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +1 -58
  476. package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +101 -0
  477. package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +3 -7
  478. package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +5 -4
  479. package/dist/types/shared-ts/src/utils/wireSchema.d.ts +60 -0
  480. package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +2 -1
  481. package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +0 -1
  482. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +0 -16
  483. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +2 -11
  484. package/dist/types/shared-ts/src/wallet-recovery/recoveryEnvelopes.d.ts +3 -16
  485. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +6 -18
  486. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +0 -2
  487. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +1 -3
  488. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryPreparation.d.ts +15 -0
  489. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.d.ts +3 -4
  490. package/dist/types/wallet-server/src/authorization/capabilityPolicy.d.ts +0 -1
  491. package/dist/types/wallet-server/src/authorization/domain.d.ts +36 -5
  492. package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +61 -0
  493. package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.typecheck.d.ts +2 -0
  494. package/dist/types/wallet-server/src/authorization/factorEvidence.d.ts +6 -7
  495. package/dist/types/wallet-server/src/authorization/service.d.ts +71 -3
  496. package/dist/types/wallet-server/src/cloud-host.d.ts +6 -2
  497. package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +10 -1
  498. package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +16 -116
  499. package/dist/types/wallet-server/src/core/IdentityStore.d.ts +2 -7
  500. package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +6 -16
  501. package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +29 -90
  502. package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -12
  503. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +10 -3
  504. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +17 -48
  505. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +2 -1
  506. package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +4 -71
  507. package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +2 -1
  508. package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +2 -6
  509. package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +2 -1
  510. package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +2 -4
  511. package/dist/types/wallet-server/src/core/ThresholdService/stores/exportReplayGuard.d.ts +3 -0
  512. package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +11 -137
  513. package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +2 -7
  514. package/dist/types/wallet-server/src/core/WalletStore.d.ts +3 -8
  515. package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +15 -22
  516. package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +14 -36
  517. package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +9 -34
  518. package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +9 -34
  519. package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -3
  520. package/dist/types/wallet-server/src/core/authService/bytes.d.ts +0 -1
  521. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +6 -5
  522. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +9 -17
  523. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +3 -2
  524. package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +8 -32
  525. package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +3 -10
  526. package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +4 -3
  527. package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +4 -3
  528. package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +3 -70
  529. package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +2 -1
  530. package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +6 -12
  531. package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +5 -8
  532. package/dist/types/wallet-server/src/core/authService/nearPrivateKeySigning.d.ts +3 -2
  533. package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +2 -1
  534. package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +2 -1
  535. package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +4 -3
  536. package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -3
  537. package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -26
  538. package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -5
  539. package/dist/types/wallet-server/src/core/authService/thresholdEcdsaKeyInventory.d.ts +0 -23
  540. package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +8 -16
  541. package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +7 -7
  542. package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +43 -0
  543. package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +1 -28
  544. package/dist/types/wallet-server/src/core/d1EcdsaSignerRead.d.ts +39 -0
  545. package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +6 -16
  546. package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +51 -0
  547. package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +11 -29
  548. package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +16 -1
  549. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEd25519ExportRoot.d.ts +2 -1
  550. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEmailOtpGrant.d.ts +2 -1
  551. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceManagement.d.ts +44 -26
  552. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +19 -217
  553. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionApproval.d.ts +8 -0
  554. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionRecord.d.ts +258 -0
  555. package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -2
  556. package/dist/types/wallet-server/src/core/ecdsaMaterialReadSnapshot.d.ts +19 -0
  557. package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +54 -0
  558. package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -15
  559. package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +4 -24
  560. package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +2 -3
  561. package/dist/types/wallet-server/src/core/nearSignerWasmRuntime.d.ts +0 -1
  562. package/dist/types/wallet-server/src/core/registrationContracts.d.ts +37 -108
  563. package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +8 -9
  564. package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +10 -107
  565. package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +4 -3
  566. package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +2 -3
  567. package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +2 -3
  568. package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +5 -20
  569. package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +4 -4
  570. package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +3 -3
  571. package/dist/types/wallet-server/src/core/signingLanes/signingWorkerLaneMaterialIdentity.d.ts +2 -19
  572. package/dist/types/wallet-server/src/core/storeBackends.d.ts +83 -0
  573. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +13 -59
  574. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +51 -3
  575. package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +3 -12
  576. package/dist/types/wallet-server/src/core/types.d.ts +5 -30
  577. package/dist/types/wallet-server/src/core/webAuthnD1Statements.d.ts +29 -0
  578. package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +96 -0
  579. package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +11 -7
  580. package/dist/types/wallet-server/src/index.d.ts +1 -1
  581. package/dist/types/wallet-server/src/local-hosted-wallet-gateway-worker.d.ts +1 -4
  582. package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +12 -0
  583. package/dist/types/wallet-server/src/localIntendedEcdsaFinalizeFault.d.ts +33 -0
  584. package/dist/types/wallet-server/src/localIntendedLinkExecuteFault.d.ts +47 -0
  585. package/dist/types/wallet-server/src/localIntendedMaterialAdmissionFault.d.ts +38 -0
  586. package/dist/types/wallet-server/src/localIntendedPresignCancellation.d.ts +4 -0
  587. package/dist/types/wallet-server/src/localIntendedRevokeFault.d.ts +40 -0
  588. package/dist/types/wallet-server/src/localIntendedSessionAdmissionFault.d.ts +41 -0
  589. package/dist/types/wallet-server/src/localIntendedYaoExportFault.d.ts +41 -0
  590. package/dist/types/wallet-server/src/localIntendedYaoFault.d.ts +7 -1
  591. package/dist/types/wallet-server/src/localIntendedYaoFinalizeFault.d.ts +37 -0
  592. package/dist/types/wallet-server/src/localIntendedYaoRecoveryFault.d.ts +45 -0
  593. package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +51 -0
  594. package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +13 -29
  595. package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +20 -11
  596. package/dist/types/wallet-server/src/router/auth/walletSessionFailure.d.ts +1 -4
  597. package/dist/types/wallet-server/src/router/auth/webAuthnCredentialCodecs.d.ts +3 -2
  598. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.d.ts +12 -0
  599. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +3 -3
  600. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +2 -2
  601. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +1 -1
  602. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/walletSessionCredentialReaders.d.ts +9 -0
  603. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/authorizedOperationStatements.d.ts +34 -0
  604. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +54 -21
  605. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.d.ts +3 -0
  606. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.d.ts +2 -1
  607. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +74 -6
  608. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +2 -3
  609. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.d.ts +8 -21
  610. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.d.ts +14 -1
  611. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.d.ts +49 -0
  612. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.d.ts +1 -1
  613. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +6 -8
  614. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.d.ts +1 -1
  615. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +7 -10
  616. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +8 -4
  617. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.d.ts +3 -5
  618. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.d.ts +7 -0
  619. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.d.ts +1 -2
  620. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +33 -0
  621. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +1 -1
  622. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +13 -3
  623. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +24 -5
  624. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +4 -11
  625. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +1 -3
  626. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +4 -12
  627. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +13 -12
  628. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.d.ts +0 -2
  629. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.d.ts +5 -4
  630. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpServerSealRuntime.d.ts +4 -14
  631. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +1 -3
  632. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -21
  633. package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityRecords.d.ts +0 -23
  634. package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +1 -2
  635. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.d.ts +11 -19
  636. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -54
  637. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +7 -19
  638. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.d.ts +4 -3
  639. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.d.ts +8 -12
  640. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +7 -14
  641. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -22
  642. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +6 -2
  643. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +10 -6
  644. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +21 -26
  645. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +5 -3
  646. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +4 -3
  647. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -5
  648. package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +17 -6
  649. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -1
  650. package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +0 -16
  651. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +29 -14
  652. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.d.ts +15 -12
  653. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.d.ts +71 -0
  654. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +34 -24
  655. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +44 -26
  656. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +13 -46
  657. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +8 -19
  658. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleOps.d.ts +8 -34
  659. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleTenantRootLineage.d.ts +2 -1
  660. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -0
  661. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +15 -2
  662. package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +2 -2
  663. package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +9 -7
  664. package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +6 -18
  665. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.d.ts +46 -0
  666. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +5 -3
  667. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +20 -79
  668. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -0
  669. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.d.ts +1 -1
  670. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +4 -3
  671. package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +62 -42
  672. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +108 -32
  673. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryActivation.typecheck.d.ts +5 -0
  674. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +36 -5
  675. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +5 -4
  676. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +41 -50
  677. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +2 -2
  678. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +3 -3
  679. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +6 -5
  680. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.d.ts +14 -4
  681. package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -1
  682. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +11 -52
  683. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.d.ts +3 -4
  684. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpExportPolicy.d.ts +2 -27
  685. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRequestValidation.d.ts +1 -2
  686. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRouteHandlers.d.ts +2 -1
  687. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpSessionRouteHelpers.d.ts +2 -102
  688. package/dist/types/wallet-server/src/router/domains/passkeyCustody/envelopeRevocationAdmission.d.ts +2 -1
  689. package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +3 -2
  690. package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.d.ts +1 -9
  691. package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +2 -1
  692. package/dist/types/wallet-server/src/router/domains/passkeyCustody/verifiedCustodyFactor.d.ts +2 -1
  693. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +2 -1
  694. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +2 -28
  695. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryFinalization.d.ts +43 -1
  696. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +7 -19
  697. package/dist/types/wallet-server/src/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.d.ts +0 -3
  698. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.d.ts +164 -0
  699. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.d.ts +110 -0
  700. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +373 -0
  701. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.d.ts +11 -10
  702. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.typecheck.d.ts +2 -0
  703. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +164 -0
  704. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +22 -717
  705. package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +5 -12
  706. package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +6 -10
  707. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootCustodyLineage.d.ts +6 -1
  708. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootIdentityResolution.d.ts +4 -7
  709. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +2 -1
  710. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +8 -8
  711. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +4 -4
  712. package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.d.ts +4 -4
  713. package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRouteHandlers.d.ts +4 -62
  714. package/dist/types/wallet-server/src/router/express-adaptor.d.ts +2 -2
  715. package/dist/types/wallet-server/src/router/framework/apiCredentialPorts.d.ts +3 -1
  716. package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +89 -65
  717. package/dist/types/wallet-server/src/router/framework/http.d.ts +1 -1
  718. package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +1 -9
  719. package/dist/types/wallet-server/src/router/framework/routeMeteringPolicy.d.ts +3 -2
  720. package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +1 -1
  721. package/dist/types/wallet-server/src/router/framework/routerApiRouteSurface.d.ts +3 -3
  722. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGateway.d.ts +34 -0
  723. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayCheck.d.ts +21 -0
  724. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayMain.d.ts +2 -0
  725. package/dist/types/wallet-server/src/router/node/nodeHttp.d.ts +13 -0
  726. package/dist/types/wallet-server/src/router/node/nodeSqlite.d.ts +22 -0
  727. package/dist/types/wallet-server/src/router/node/signerSqlMigrations.d.ts +20 -0
  728. package/dist/types/wallet-server/src/router/transport/fetch/createFetchRouter.d.ts +1 -3
  729. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +5 -6
  730. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +5 -8
  731. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceManagement.d.ts +14 -16
  732. package/dist/types/wallet-server/src/router/transport/fetch/routes/normalSigningRouterProxy.d.ts +0 -12
  733. package/dist/types/wallet-server/src/router/transport/fetch/routes/passkeyCustody.d.ts +1 -1
  734. package/dist/types/wallet-server/src/router/transport/fetch/routes/sessions.d.ts +2 -1
  735. package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +9 -17
  736. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +3 -58
  737. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEd25519.d.ts +0 -44
  738. package/dist/types/wallet-server/src/storage/d1Sql.d.ts +7 -0
  739. package/dist/types/wallet-server/src/storage/syncSqlite.d.ts +28 -0
  740. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +0 -1
  741. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +5 -7
  742. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/signingSessionSeal.types.d.ts +6 -8
  743. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/shared.d.ts +1 -0
  744. package/dist/types/wallet-server/src/threshold/statusCodes.d.ts +4 -4
  745. package/migrations/d1-signer/0036_r150_yao_lifecycle_decisions.sql +22 -0
  746. package/migrations/d1-signer/0037_r150_wallet_auth_method_revocation_replays.sql +26 -0
  747. package/migrations/d1-signer/0038_r150_registration_ceremony_cas_guard_seed.sql +8 -0
  748. package/migrations/d1-signer/0039_r150_revocation_replay_answer_kind.sql +9 -0
  749. package/package.json +1 -1
  750. package/dist/esm/core/ThresholdService/ecdsaClientRootProof.js +0 -27
  751. package/dist/esm/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.js +0 -115
  752. package/dist/esm/core/ThresholdService/secureRandomId.js +0 -9
  753. package/dist/esm/core/authService/record.js +0 -8
  754. package/dist/esm/core/authService/thresholdRuntimePolicy.js +0 -19
  755. package/dist/esm/core/authService/walletRegistrationPlanning.js +0 -49
  756. package/dist/esm/core/deviceLinking/index.js +0 -5
  757. package/dist/esm/core/errors.js +0 -54
  758. package/dist/esm/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.js +0 -39
  759. package/dist/esm/core/signingLanes/WalletKeyStore.js +0 -0
  760. package/dist/esm/core/signingLanes/index.js +0 -8
  761. package/dist/esm/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.js +0 -55
  762. package/dist/esm/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.js +0 -56
  763. package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
  764. package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker.js +0 -414
  765. package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
  766. package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +0 -74
  767. package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +0 -34
  768. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +0 -62
  769. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +0 -2
  770. package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +0 -11
  771. package/dist/types/shared-ts/src/utils/bigint.d.ts +0 -3
  772. package/dist/types/shared-ts/src/utils/paillier.d.ts +0 -37
  773. package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +0 -12
  774. package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +0 -2
  775. package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +0 -37
  776. package/dist/types/wallet-server/src/core/ThresholdService/ecdsaClientRootProof.d.ts +0 -12
  777. package/dist/types/wallet-server/src/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.d.ts +0 -17
  778. package/dist/types/wallet-server/src/core/ThresholdService/secureRandomId.d.ts +0 -2
  779. package/dist/types/wallet-server/src/core/authService/record.d.ts +0 -2
  780. package/dist/types/wallet-server/src/core/authService/thresholdRuntimePolicy.d.ts +0 -4
  781. package/dist/types/wallet-server/src/core/authService/walletRegistrationPlanning.d.ts +0 -19
  782. package/dist/types/wallet-server/src/core/deviceLinking/index.d.ts +0 -5
  783. package/dist/types/wallet-server/src/core/errors.d.ts +0 -10
  784. package/dist/types/wallet-server/src/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.d.ts +0 -28
  785. package/dist/types/wallet-server/src/core/signingLanes/SigningLaneStore.d.ts +0 -15
  786. package/dist/types/wallet-server/src/core/signingLanes/WalletKeyStore.d.ts +0 -13
  787. package/dist/types/wallet-server/src/core/signingLanes/index.d.ts +0 -11
  788. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.d.ts +0 -35
  789. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.d.ts +0 -35
  790. /package/dist/esm/{core/signingLanes/SigningLaneStore.js → authorization/ecdsaWalletSessionAdmission.js} +0 -0
@@ -1,10 +1,11 @@
1
1
  import { parseEmailOtpChallengeId, parseOrgId, parseProviderSubject, parseWalletAuthMethodId, parseWalletAuthorityId, parseWalletId, parseWalletRecoveryOperationId, parseWebAuthnCredentialIdB64u, parseWebAuthnRpId } from "../../../../shared-ts/src/utils/domainIds.js";
2
2
  import { buildVaultOperationRef, parseAuthFactorId, parseAuthorizationAuditEventId, parseAuthorizationEvidenceId, parseAuthorizationEvidenceSetId, parseAuthorizedOperationId, parseCapabilityId, parseCapabilityOperationId, parseDeviceId, parsePrincipalId, parseTenantId } from "../../../../shared-ts/src/authorization/capabilityKinds.js";
3
- import { base64UrlDecode, base64UrlEncode } from "../../../../shared-ts/src/utils/base64.js";
4
- import { parseDigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
5
- import { alphabetizeStringify, sha256BytesUtf8 } from "../../../../shared-ts/src/utils/digests.js";
3
+ import { base64UrlDecode } from "../../../../shared-ts/src/utils/base64.js";
4
+ import { alphabetizeStringify } from "../../../../shared-ts/src/utils/digests.js";
5
+ import { sha256Utf8DigestB64u } from "../../../../shared-ts/src/utils/canonicalPrimitives.js";
6
6
  import { buildCapabilityOperationEnvelope, computeCapabilityOperationFingerprintDigest } from "../../../../shared-ts/src/authorization/operationFingerprint.js";
7
- import "../../../../shared-ts/src/utils/encoders.js";
7
+ import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
8
+ import { isPlainObject, requireTrimmedString } from "../../../../shared-ts/src/utils/validation.js";
8
9
  import { buildPasskeyWalletAuthAuthority, walletAuthAuthorityRef } from "../../../../shared-ts/src/utils/walletAuthAuthority.js";
9
10
  import { parseSessionOrigin, parseVerifiedOwnerProofId } from "../../../../authorization/domain.js";
10
11
  import { buildVerifiedWalletOperationEmailOtpFactorResult, buildVerifiedWalletOperationPasskeyFactorResult } from "../../../../authorization/factorEvidence.js";
@@ -19,8 +20,8 @@ import { parseRecoveryCodeReservationId } from "../../../../shared-ts/src/wallet
19
20
  import { computeWalletCustodyAdminChallengeDigest } from "../../../../shared-ts/src/authorization/walletCustodyOperation.js";
20
21
  import { parseWalletRecoveryTargetV1 } from "../../../../shared-ts/src/wallet-recovery/walletRecoveryTarget.js";
21
22
  import { parseWebAuthnAuthenticationCredential } from "../../../auth/webAuthnCredentialCodecs.js";
22
- import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
23
23
  import { emailOtpStatusCode, hashEmailOtpOperationBinding } from "../../../domains/emailOtp/emailOtpSessionRouteHelpers.js";
24
+ import { EMAIL_OTP_CHANNEL, WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../../../shared-ts/src/utils/emailOtpDomain.js";
24
25
  import { parseDerivedWalletRecoveryKeyId } from "../../../../shared-ts/src/wallet-recovery/recoveryKeyId.js";
25
26
  import { parseWalletRecoverySetRotationWireV1 } from "../../../../shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js";
26
27
  import { parseRecoveryCodeLocatorV1 } from "../../../../shared-ts/src/wallet-recovery/recoveryCodeLocator.js";
@@ -52,18 +53,14 @@ const EMAIL_OTP_CHALLENGE_ROUTE_ID = "wallet_custody_email_otp_challenge";
52
53
  const ENVELOPE_OWNERSHIP_UPGRADE_ROUTE_ID = "wallet_custody_envelope_ownership_upgrade";
53
54
  const CUSTODY_OPERATION_CAPABILITY_ID = "wallet-custody-admin";
54
55
  const CUSTODY_PROOF_TTL_MS = 6e4;
55
- function parseRequiredString(value, field) {
56
- if (typeof value !== "string" || !value.trim()) throw new Error(`${field} is required`);
57
- return value.trim();
58
- }
59
56
  function requireExactObjectFields(value, fields, label) {
60
57
  const keys = Object.keys(value).sort();
61
58
  const expected = [...fields].sort();
62
59
  if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index])) throw new Error(`${label} contains unsupported fields`);
63
60
  }
64
61
  function parseCustodyOwnerProof(value) {
65
- if (!isObject(value)) throw new Error("factorProof is required");
66
- const kind = trimmed(value.kind);
62
+ if (!isPlainObject(value)) throw new Error("factorProof is required");
63
+ const kind = normalizeOptionalTrimmedString(value.kind);
67
64
  if (kind === "passkey") {
68
65
  requireExactObjectFields(value, [
69
66
  "kind",
@@ -77,10 +74,10 @@ function parseCustodyOwnerProof(value) {
77
74
  if (!webauthnAuthentication) throw new Error("factorProof.webauthn_authentication is invalid");
78
75
  return {
79
76
  kind,
80
- walletId: parseRequiredString(value.walletId, "factorProof.walletId"),
81
- rpId: parseRequiredString(value.rpId, "factorProof.rpId"),
82
- credentialIdB64u: parseRequiredString(value.credentialIdB64u, "factorProof.credentialIdB64u"),
83
- challenge_digest: parseRequiredString(value.challenge_digest, "factorProof.challenge_digest"),
77
+ walletId: requireTrimmedString(value.walletId, "factorProof.walletId"),
78
+ rpId: requireTrimmedString(value.rpId, "factorProof.rpId"),
79
+ credentialIdB64u: requireTrimmedString(value.credentialIdB64u, "factorProof.credentialIdB64u"),
80
+ challenge_digest: requireTrimmedString(value.challenge_digest, "factorProof.challenge_digest"),
84
81
  webauthn_authentication: webauthnAuthentication
85
82
  };
86
83
  }
@@ -94,10 +91,10 @@ function parseCustodyOwnerProof(value) {
94
91
  ], "factorProof");
95
92
  return {
96
93
  kind,
97
- provider_subject_id: parseRequiredString(value.provider_subject_id, "factorProof.provider_subject_id"),
98
- challenge_id: parseRequiredString(value.challenge_id, "factorProof.challenge_id"),
99
- otp_code: parseRequiredString(value.otp_code, "factorProof.otp_code"),
100
- challenge_digest: parseRequiredString(value.challenge_digest, "factorProof.challenge_digest")
94
+ provider_subject_id: requireTrimmedString(value.provider_subject_id, "factorProof.provider_subject_id"),
95
+ challenge_id: requireTrimmedString(value.challenge_id, "factorProof.challenge_id"),
96
+ otp_code: requireTrimmedString(value.otp_code, "factorProof.otp_code"),
97
+ challenge_digest: requireTrimmedString(value.challenge_digest, "factorProof.challenge_digest")
101
98
  };
102
99
  }
103
100
  throw new Error("factorProof.kind must be passkey or email_otp");
@@ -107,7 +104,7 @@ function parseRequiredAuthorizationValue(parsed) {
107
104
  return parsed.value;
108
105
  }
109
106
  async function custodyDigest(domain, value) {
110
- return parseDigestB64u(base64UrlEncode(await sha256BytesUtf8(`${domain}|${alphabetizeStringify(value)}`)));
107
+ return sha256Utf8DigestB64u(`${domain}|${alphabetizeStringify(value)}`);
111
108
  }
112
109
  async function buildWalletCustodyOperation(input) {
113
110
  const tenantId = parseRequiredAuthorizationValue(parseTenantId(input.tenantId));
@@ -147,7 +144,7 @@ async function buildWalletCustodyOperation(input) {
147
144
  };
148
145
  }
149
146
  async function authorizeWalletCustodyOperation(input) {
150
- const requestOrigin = trimmed(input.ctx.request.headers.get("origin"));
147
+ const requestOrigin = normalizeOptionalTrimmedString(input.ctx.request.headers.get("origin"));
151
148
  if (!requestOrigin) return toCustodyAuthorizationFailure(400, "invalid_origin", "request Origin is required");
152
149
  let origin;
153
150
  let proof;
@@ -322,16 +319,24 @@ async function authorizeWalletCustodyOperation(input) {
322
319
  function toCustodyAuthorizationFailure(status, code, message) {
323
320
  return {
324
321
  ok: false,
325
- response: toFetchRouteResponse({
326
- status,
327
- body: {
328
- ok: false,
329
- code,
330
- message
331
- }
332
- })
322
+ response: routeErrorResponse(status, code, message)
333
323
  };
334
324
  }
325
+ function routeErrorResponse(status, code, message) {
326
+ return toFetchRouteResponse({
327
+ status,
328
+ body: {
329
+ ok: false,
330
+ code,
331
+ message
332
+ }
333
+ });
334
+ }
335
+ function matchRoute(ctx, routeId) {
336
+ const route = findRouteDefinitionById(ctx.routeDefinitions, routeId);
337
+ if (!route) throw new Error(`Missing route definition for ${routeId}`);
338
+ return matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname) ? route : null;
339
+ }
335
340
  async function completeWalletCustodyOperation(ctx, operation, status, body, result = "succeeded") {
336
341
  const bodyText = JSON.stringify(body);
337
342
  await ctx.service.authorizedOperations.completeAuthorizedOperation({
@@ -350,22 +355,13 @@ async function completeWalletCustodyOperation(ctx, operation, status, body, resu
350
355
  });
351
356
  }
352
357
  async function handlePasskeyCustody(ctx) {
353
- const route = findRouteDefinitionById(ctx.routeDefinitions, ROUTE_ID);
354
- if (!route) throw new Error(`Missing route definition for ${ROUTE_ID}`);
355
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
358
+ if (!matchRoute(ctx, ROUTE_ID)) return null;
356
359
  const request = parseWireRequest(await readJsonObject(ctx.request), ctx.request.headers.get("origin"));
357
- if (!request) return toFetchRouteResponse({
358
- status: 400,
359
- body: {
360
- ok: false,
361
- code: "invalid_request",
362
- message: "custody retrieval needs a locator, a challenge id, and an assertion"
363
- }
364
- });
360
+ if (!request) return routeErrorResponse(400, "invalid_request", "custody retrieval needs a locator, a challenge id, and an assertion");
365
361
  return toFetchRouteResponse(await ctx.service.passkeyCustody.retrieveEnvelope(request));
366
362
  }
367
363
  function parseWalletCustodyEmailOtpChallengeRequest(value, actualOrigin) {
368
- if (!isObject(value)) throw new Error("Email OTP custody challenge body must be an object");
364
+ if (!isPlainObject(value)) throw new Error("Email OTP custody challenge body must be an object");
369
365
  const keys = Object.keys(value).sort();
370
366
  const expected = [
371
367
  "operation",
@@ -386,7 +382,7 @@ function parseWalletCustodyEmailOtpChallengeRequest(value, actualOrigin) {
386
382
  const providerSubjectId = parseRequiredAuthorizationValue(parseProviderSubject(value.providerSubjectId));
387
383
  const operation = value.operation;
388
384
  if (operation !== "credentials_list" && operation !== "credential_label" && operation !== "recovery_rotate" && operation !== "recovery_read") throw new Error("Email OTP custody challenge operation is invalid");
389
- if (!isObject(value.payload)) throw new Error("Email OTP custody challenge payload is invalid");
385
+ if (!isPlainObject(value.payload)) throw new Error("Email OTP custody challenge payload is invalid");
390
386
  if (value.requestOrigin !== void 0 && value.requestOrigin !== actualOrigin) throw new Error("Email OTP custody challenge requestOrigin does not match Origin");
391
387
  return {
392
388
  walletId,
@@ -398,36 +394,20 @@ function parseWalletCustodyEmailOtpChallengeRequest(value, actualOrigin) {
398
394
  }
399
395
  /** Issues one operation-bound Email OTP challenge without exposing authority metadata. */
400
396
  async function handleWalletCustodyEmailOtpChallenge(ctx) {
401
- const route = findRouteDefinitionById(ctx.routeDefinitions, EMAIL_OTP_CHALLENGE_ROUTE_ID);
402
- if (!route) throw new Error(`Missing route definition for ${EMAIL_OTP_CHALLENGE_ROUTE_ID}`);
403
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
404
- const originHeader = trimmed(ctx.request.headers.get("origin"));
397
+ if (!matchRoute(ctx, EMAIL_OTP_CHALLENGE_ROUTE_ID)) return null;
398
+ const originHeader = normalizeOptionalTrimmedString(ctx.request.headers.get("origin"));
405
399
  let request;
406
400
  try {
407
401
  const origin = parseSessionOrigin(originHeader);
408
402
  request = parseWalletCustodyEmailOtpChallengeRequest(await readJson(ctx.request), origin);
409
403
  } catch (error) {
410
- return toFetchRouteResponse({
411
- status: 400,
412
- body: {
413
- ok: false,
414
- code: "invalid_request",
415
- message: error instanceof Error ? error.message : "Email OTP custody challenge is invalid"
416
- }
417
- });
404
+ return routeErrorResponse(400, "invalid_request", error instanceof Error ? error.message : "Email OTP custody challenge is invalid");
418
405
  }
419
406
  const active = await ctx.service.walletAuthMethods.resolveActiveEmailOtpAuthorityForVerifiedSubject({
420
407
  walletId: request.walletId,
421
408
  providerUserId: request.providerSubjectId
422
409
  });
423
- if (!active.ok) return toFetchRouteResponse({
424
- status: 403,
425
- body: {
426
- ok: false,
427
- code: active.code,
428
- message: active.message
429
- }
430
- });
410
+ if (!active.ok) return routeErrorResponse(403, active.code, active.message);
431
411
  const authoritativeOrgId = parseRequiredAuthorizationValue(parseOrgId(ctx.service.authorizedOperations.tenantId));
432
412
  const challengeDigest = await computeWalletCustodyAdminChallengeDigest(request);
433
413
  const ownerProofBindingDigest = await hashEmailOtpOperationBinding({
@@ -472,18 +452,10 @@ async function handleWalletCustodyEmailOtpChallenge(ctx) {
472
452
  }
473
453
  /** Lists public passkey envelope identities with their sibling activity rows. */
474
454
  async function handleWalletCustodyCredentialsList(ctx) {
475
- const route = findRouteDefinitionById(ctx.routeDefinitions, CREDENTIALS_LIST_ROUTE_ID);
476
- if (!route) throw new Error(`Missing route definition for ${CREDENTIALS_LIST_ROUTE_ID}`);
477
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
455
+ const route = matchRoute(ctx, CREDENTIALS_LIST_ROUTE_ID);
456
+ if (!route) return null;
478
457
  const walletId = walletIdFromPath(route.path, ctx.pathname);
479
- if (!walletId) return toFetchRouteResponse({
480
- status: 400,
481
- body: {
482
- ok: false,
483
- code: "invalid_request",
484
- message: "credential list needs a wallet"
485
- }
486
- });
458
+ if (!walletId) return routeErrorResponse(400, "invalid_request", "credential list needs a wallet");
487
459
  const body = await readJsonObject(ctx.request);
488
460
  const authorized = await authorizeWalletCustodyOperation({
489
461
  ctx,
@@ -494,14 +466,7 @@ async function handleWalletCustodyCredentialsList(ctx) {
494
466
  });
495
467
  if (!authorized.ok) return authorized.response;
496
468
  const parsedWalletId = parseWalletId(walletId);
497
- if (!parsedWalletId.ok) return toFetchRouteResponse({
498
- status: 400,
499
- body: {
500
- ok: false,
501
- code: "invalid_request",
502
- message: "wallet id is invalid"
503
- }
504
- });
469
+ if (!parsedWalletId.ok) return routeErrorResponse(400, "invalid_request", "wallet id is invalid");
505
470
  const result = await ctx.service.passkeyCustody.listWalletCredentials({ walletId: parsedWalletId.value });
506
471
  return await completeWalletCustodyOperation(ctx, authorized.operation, 200, {
507
472
  ok: true,
@@ -509,61 +474,32 @@ async function handleWalletCustodyCredentialsList(ctx) {
509
474
  });
510
475
  }
511
476
  /**
512
- * Refactor 109C: binds a pre-109C custody envelope to the method that opened it.
477
+ * Binds an unbound custody envelope to the method that opened it.
513
478
  *
514
479
  * The exact operation credential names the auth method that opened the
515
480
  * envelope. Unlock already proved that method, so finishing the ownership
516
481
  * upgrade requires no second user assertion.
517
482
  */
518
483
  async function handleWalletCustodyEnvelopeOwnershipUpgrade(ctx) {
519
- const route = findRouteDefinitionById(ctx.routeDefinitions, ENVELOPE_OWNERSHIP_UPGRADE_ROUTE_ID);
520
- if (!route) throw new Error(`Missing route definition for ${ENVELOPE_OWNERSHIP_UPGRADE_ROUTE_ID}`);
521
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
484
+ const route = matchRoute(ctx, ENVELOPE_OWNERSHIP_UPGRADE_ROUTE_ID);
485
+ if (!route) return null;
522
486
  const parsedWalletId = parseWalletId(walletIdFromPath(route.path, ctx.pathname));
523
- if (!parsedWalletId.ok) return toFetchRouteResponse({
524
- status: 400,
525
- body: {
526
- ok: false,
527
- code: "invalid_request",
528
- message: "wallet id is invalid"
529
- }
530
- });
487
+ if (!parsedWalletId.ok) return routeErrorResponse(400, "invalid_request", "wallet id is invalid");
531
488
  const token = extractBearerCredential(ctx.request.headers);
532
- if (!token) return toFetchRouteResponse({
533
- status: 401,
534
- body: {
535
- ok: false,
536
- code: "unauthorized",
537
- message: "No valid Wallet Session"
538
- }
539
- });
489
+ if (!token) return routeErrorResponse(401, "unauthorized", "No valid Wallet Session");
540
490
  const exact = await ctx.service.authorizationSessions.readWalletSessionAuthorizationV2ByOperationCredential({
541
491
  tenantId: ctx.service.authorizationSessions.tenantId,
542
492
  token,
543
493
  nowMs: Date.now()
544
494
  });
545
- if (!exact || String(exact.authorization.session.walletId) !== String(parsedWalletId.value)) return toFetchRouteResponse({
546
- status: 401,
547
- body: {
548
- ok: false,
549
- code: "unauthorized",
550
- message: "No valid Wallet Session"
551
- }
552
- });
495
+ if (!exact || String(exact.authorization.session.walletId) !== String(parsedWalletId.value)) return routeErrorResponse(401, "unauthorized", "No valid Wallet Session");
553
496
  const walletAuthMethodId = exact.authMethod.walletAuthMethodId;
554
497
  const body = await readJsonObject(ctx.request);
555
498
  let envelope;
556
499
  try {
557
500
  envelope = parsePasskeyCustodyEnvelopeRecord(body?.envelope);
558
501
  } catch (error) {
559
- return toFetchRouteResponse({
560
- status: 400,
561
- body: {
562
- ok: false,
563
- code: "invalid_request",
564
- message: error instanceof Error ? error.message : "custody envelope is invalid"
565
- }
566
- });
502
+ return routeErrorResponse(400, "invalid_request", error instanceof Error ? error.message : "custody envelope is invalid");
567
503
  }
568
504
  const result = await ctx.service.passkeyCustody.upgradeEnvelopeOwnership({
569
505
  walletId: parsedWalletId.value,
@@ -586,49 +522,20 @@ async function handleWalletCustodyEnvelopeOwnershipUpgrade(ctx) {
586
522
  upgraded: false
587
523
  }
588
524
  });
589
- case "not_found": return toFetchRouteResponse({
590
- status: 404,
591
- body: {
592
- ok: false,
593
- code: "not_found",
594
- message: "no custody envelope to upgrade"
595
- }
596
- });
597
- case "conflict": return toFetchRouteResponse({
598
- status: 409,
599
- body: {
600
- ok: false,
601
- code: "conflict",
602
- message: result.reason
603
- }
604
- });
605
- case "refused": return toFetchRouteResponse({
606
- status: 403,
607
- body: {
608
- ok: false,
609
- code: "forbidden",
610
- message: result.reason
611
- }
612
- });
525
+ case "not_found": return routeErrorResponse(404, "not_found", "no custody envelope to upgrade");
526
+ case "conflict": return routeErrorResponse(409, "conflict", result.reason);
527
+ case "refused": return routeErrorResponse(403, "forbidden", result.reason);
613
528
  }
614
529
  }
615
530
  /** Renames one passkey credential; the label is metadata and never AAD. */
616
531
  async function handleWalletCustodyCredentialLabel(ctx) {
617
- const route = findRouteDefinitionById(ctx.routeDefinitions, CREDENTIAL_LABEL_ROUTE_ID);
618
- if (!route) throw new Error(`Missing route definition for ${CREDENTIAL_LABEL_ROUTE_ID}`);
619
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
532
+ const route = matchRoute(ctx, CREDENTIAL_LABEL_ROUTE_ID);
533
+ if (!route) return null;
620
534
  const walletId = walletIdFromPath(route.path, ctx.pathname);
621
535
  const body = await readJsonObject(ctx.request);
622
- const envelopeId = trimmed(body?.envelopeId);
536
+ const envelopeId = normalizeOptionalTrimmedString(body?.envelopeId);
623
537
  const label = body?.label;
624
- if (!walletId || !envelopeId || label !== void 0 && typeof label !== "string") return toFetchRouteResponse({
625
- status: 400,
626
- body: {
627
- ok: false,
628
- code: "invalid_request",
629
- message: "credential rename needs a wallet, envelope, and optional label"
630
- }
631
- });
538
+ if (!walletId || !envelopeId || label !== void 0 && typeof label !== "string") return routeErrorResponse(400, "invalid_request", "credential rename needs a wallet, envelope, and optional label");
632
539
  const authorized = await authorizeWalletCustodyOperation({
633
540
  ctx,
634
541
  walletId,
@@ -642,14 +549,7 @@ async function handleWalletCustodyCredentialLabel(ctx) {
642
549
  });
643
550
  if (!authorized.ok) return authorized.response;
644
551
  const parsedWalletId = parseWalletId(walletId);
645
- if (!parsedWalletId.ok) return toFetchRouteResponse({
646
- status: 400,
647
- body: {
648
- ok: false,
649
- code: "invalid_request",
650
- message: "wallet id is invalid"
651
- }
652
- });
552
+ if (!parsedWalletId.ok) return routeErrorResponse(400, "invalid_request", "wallet id is invalid");
653
553
  const result = await ctx.service.passkeyCustody.renameWalletCredential({
654
554
  walletId: parsedWalletId.value,
655
555
  envelopeId,
@@ -691,9 +591,7 @@ async function handleWalletCustodyCredentialLabel(ctx) {
691
591
  * this must not helpfully re-separate them on the way out.
692
592
  */
693
593
  async function handleWalletRecoveryPrepare(ctx) {
694
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_PREPARE_ROUTE_ID);
695
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_PREPARE_ROUTE_ID}`);
696
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
594
+ if (!matchRoute(ctx, RECOVERY_PREPARE_ROUTE_ID)) return null;
697
595
  const body = await readJsonObject(ctx.request);
698
596
  let parsed;
699
597
  try {
@@ -704,7 +602,7 @@ async function handleWalletRecoveryPrepare(ctx) {
704
602
  "reservationId"
705
603
  ], "wallet recovery preparation");
706
604
  const target = parseWalletRecoveryTargetV1(body.target);
707
- const recoveryCodeB64u = parseRequiredString(body.recoveryCodeB64u, "recoveryCodeB64u");
605
+ const recoveryCodeB64u = requireTrimmedString(body.recoveryCodeB64u, "recoveryCodeB64u");
708
606
  if (!/^[A-Za-z0-9_-]+$/.test(recoveryCodeB64u)) throw new Error("wallet recovery preparation is invalid");
709
607
  parsed = {
710
608
  target,
@@ -712,24 +610,10 @@ async function handleWalletRecoveryPrepare(ctx) {
712
610
  reservationId: parseRecoveryCodeReservationId(body.reservationId)
713
611
  };
714
612
  } catch {
715
- return toFetchRouteResponse({
716
- status: 400,
717
- body: {
718
- ok: false,
719
- code: "invalid_request",
720
- message: "wallet recovery preparation is invalid"
721
- }
722
- });
613
+ return routeErrorResponse(400, "invalid_request", "wallet recovery preparation is invalid");
723
614
  }
724
- const origin = trimmed(ctx.request.headers.get("origin"));
725
- if (!origin || parsed.target.kind === "passkey" && !isHostWithinRpId(originHostnameOrEmpty(origin), parsed.target.rpId)) return toFetchRouteResponse({
726
- status: 400,
727
- body: {
728
- ok: false,
729
- code: "invalid_origin",
730
- message: "wallet recovery origin does not match the relying party"
731
- }
732
- });
615
+ const origin = normalizeOptionalTrimmedString(ctx.request.headers.get("origin"));
616
+ if (!origin || parsed.target.kind === "passkey" && !isHostWithinRpId(originHostnameOrEmpty(origin), parsed.target.rpId)) return routeErrorResponse(400, "invalid_origin", "wallet recovery origin does not match the relying party");
733
617
  let recoveryCodeBytes;
734
618
  try {
735
619
  recoveryCodeBytes = base64UrlDecode(parsed.recoveryCodeB64u);
@@ -764,57 +648,27 @@ async function handleWalletRecoveryPrepare(ctx) {
764
648
  storeVersion: result.storeVersion
765
649
  }
766
650
  });
767
- case "conflict": return toFetchRouteResponse({
768
- status: 409,
769
- body: {
770
- ok: false,
771
- code: "recovery_set_conflict",
772
- message: "the recovery set changed during this attempt"
773
- }
774
- });
651
+ case "conflict": return routeErrorResponse(409, "recovery_set_conflict", "the recovery set changed during this attempt");
775
652
  case "refused": return toFetchRouteResponse(refusedSpend());
776
653
  case "reserved":
777
- case "consumed": return toFetchRouteResponse({
778
- status: 401,
779
- body: {
780
- ok: false,
781
- code: "recovery_code_used",
782
- message: "that recovery code has already been used"
783
- }
784
- });
654
+ case "consumed": return routeErrorResponse(401, "recovery_code_used", "that recovery code has already been used");
785
655
  case "manifest_unavailable":
786
- case "registration_unavailable": return toFetchRouteResponse({
787
- status: 409,
788
- body: {
789
- ok: false,
790
- code: "recovery_preparation_conflict",
791
- message: "wallet recovery could not be prepared"
792
- }
793
- });
656
+ case "registration_unavailable": return routeErrorResponse(409, "recovery_preparation_conflict", "wallet recovery could not be prepared");
794
657
  }
795
658
  } finally {
796
659
  recoveryCodeBytes.fill(0);
797
660
  }
798
661
  }
799
662
  async function handleWalletRecoveryGoogleVerify(ctx) {
800
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_GOOGLE_VERIFY_ROUTE_ID);
801
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_GOOGLE_VERIFY_ROUTE_ID}`);
802
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
663
+ if (!matchRoute(ctx, RECOVERY_GOOGLE_VERIFY_ROUTE_ID)) return null;
803
664
  let request;
804
665
  try {
805
666
  request = parseWalletRecoveryGoogleVerifyRequest(await readJsonObject(ctx.request));
806
667
  } catch {
807
668
  return walletRecoveryRequestError();
808
669
  }
809
- const requestOrigin = trimmed(ctx.request.headers.get("origin"));
810
- if (!requestOrigin) return toFetchRouteResponse({
811
- status: 400,
812
- body: {
813
- ok: false,
814
- code: "invalid_origin",
815
- message: "wallet recovery origin is required"
816
- }
817
- });
670
+ const requestOrigin = normalizeOptionalTrimmedString(ctx.request.headers.get("origin"));
671
+ if (!requestOrigin) return routeErrorResponse(400, "invalid_origin", "wallet recovery origin is required");
818
672
  try {
819
673
  const result = await ctx.service.passkeyCustody.verifyGoogleRecovery({
820
674
  recoveryOperationId: request.recoveryOperationId,
@@ -840,9 +694,7 @@ async function handleWalletRecoveryGoogleVerify(ctx) {
840
694
  }
841
695
  }
842
696
  async function handleWalletRecoveryEmailOtpVerify(ctx) {
843
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_EMAIL_OTP_VERIFY_ROUTE_ID);
844
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_EMAIL_OTP_VERIFY_ROUTE_ID}`);
845
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
697
+ if (!matchRoute(ctx, RECOVERY_EMAIL_OTP_VERIFY_ROUTE_ID)) return null;
846
698
  let request;
847
699
  try {
848
700
  request = parseWalletRecoveryEmailOtpVerifyRequest(await readJsonObject(ctx.request));
@@ -872,9 +724,7 @@ async function handleWalletRecoveryEmailOtpVerify(ctx) {
872
724
  }
873
725
  }
874
726
  async function handleWalletRecoveryEmailOtpRelease(ctx) {
875
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_EMAIL_OTP_RELEASE_ROUTE_ID);
876
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_EMAIL_OTP_RELEASE_ROUTE_ID}`);
877
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
727
+ if (!matchRoute(ctx, RECOVERY_EMAIL_OTP_RELEASE_ROUTE_ID)) return null;
878
728
  let request;
879
729
  try {
880
730
  request = parseWalletRecoveryEmailOtpReleaseRequest(await readJsonObject(ctx.request));
@@ -931,9 +781,7 @@ async function handleWalletRecoveryEmailOtpRelease(ctx) {
931
781
  * server-side; the body can add only a new-enrollment material bundle.
932
782
  */
933
783
  async function handleWalletRecoveryGoogleEmailOtpFinalize(ctx) {
934
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_GOOGLE_EMAIL_OTP_FINALIZE_ROUTE_ID);
935
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_GOOGLE_EMAIL_OTP_FINALIZE_ROUTE_ID}`);
936
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
784
+ if (!matchRoute(ctx, RECOVERY_GOOGLE_EMAIL_OTP_FINALIZE_ROUTE_ID)) return null;
937
785
  let request;
938
786
  try {
939
787
  request = parseWalletRecoveryGoogleEmailOtpFinalizeRequest(await readJson(ctx.request));
@@ -941,43 +789,9 @@ async function handleWalletRecoveryGoogleEmailOtpFinalize(ctx) {
941
789
  return walletRecoveryRequestError();
942
790
  }
943
791
  const finalizer = ctx.service.passkeyCustody.finalizeGoogleEmailOtpRecovery;
944
- if (!finalizer) return toFetchRouteResponse({
945
- status: 503,
946
- body: {
947
- ok: false,
948
- code: "not_configured",
949
- message: "Google Email OTP recovery is not configured"
950
- }
951
- });
792
+ if (!finalizer) return routeErrorResponse(503, "not_configured", "Google Email OTP recovery is not configured");
952
793
  try {
953
- const result = await finalizer(request);
954
- switch (result.kind) {
955
- case "promoted": return toFetchRouteResponse({
956
- status: 200,
957
- body: {
958
- ok: true,
959
- projection: result.projection
960
- }
961
- });
962
- case "conflict": return toFetchRouteResponse({
963
- status: 409,
964
- body: {
965
- ok: false,
966
- code: "recovery_conflict",
967
- message: "wallet recovery conflicted"
968
- }
969
- });
970
- case "refused":
971
- case "envelope_rejected":
972
- case "enrollment_rejected": return toFetchRouteResponse({
973
- status: 400,
974
- body: {
975
- ok: false,
976
- code: "recovery_rejected",
977
- message: "wallet recovery was rejected"
978
- }
979
- });
980
- }
794
+ return walletRecoveryFinalizationResponse(await finalizer(request));
981
795
  } catch {
982
796
  return walletRecoveryInternalError();
983
797
  }
@@ -997,7 +811,7 @@ function parseWalletRecoveryGoogleVerifyRequest(body) {
997
811
  "reservationId",
998
812
  "idToken"
999
813
  ], "wallet recovery Google verification"),
1000
- idToken: parseRequiredString(body?.idToken, "idToken")
814
+ idToken: requireTrimmedString(body?.idToken, "idToken")
1001
815
  };
1002
816
  }
1003
817
  function parseWalletRecoveryEmailOtpVerifyRequest(body) {
@@ -1009,7 +823,7 @@ function parseWalletRecoveryEmailOtpVerifyRequest(body) {
1009
823
  "otpCode"
1010
824
  ], "wallet recovery Email OTP verification"),
1011
825
  challengeId: parseRequiredAuthorizationValue(parseEmailOtpChallengeId(body?.challengeId)),
1012
- otpCode: parseRequiredString(body?.otpCode, "otpCode")
826
+ otpCode: requireTrimmedString(body?.otpCode, "otpCode")
1013
827
  };
1014
828
  }
1015
829
  function parseWalletRecoveryEmailOtpReleaseRequest(body) {
@@ -1019,11 +833,11 @@ function parseWalletRecoveryEmailOtpReleaseRequest(body) {
1019
833
  "reservationId",
1020
834
  "workerEphemeralPublicKey65B64u"
1021
835
  ], "wallet recovery Email OTP factor release"),
1022
- workerEphemeralPublicKey65B64u: parseRequiredString(body?.workerEphemeralPublicKey65B64u, "workerEphemeralPublicKey65B64u")
836
+ workerEphemeralPublicKey65B64u: requireTrimmedString(body?.workerEphemeralPublicKey65B64u, "workerEphemeralPublicKey65B64u")
1023
837
  };
1024
838
  }
1025
839
  function parseWalletRecoveryGoogleEmailOtpFinalizeRequest(value) {
1026
- if (!isObject(value)) throw new Error("wallet recovery Google Email OTP finalization body must be an object");
840
+ if (!isPlainObject(value)) throw new Error("wallet recovery Google Email OTP finalization body must be an object");
1027
841
  const recoveryOperationId = parseWalletRecoveryOperationId(value.recoveryOperationId);
1028
842
  if (!recoveryOperationId.ok) throw new Error("wallet recovery Google Email OTP finalization operation is invalid");
1029
843
  const reservationId = parseRecoveryCodeReservationId(value.reservationId);
@@ -1062,9 +876,9 @@ function parseWalletRecoveryGoogleEmailOtpFinalizeRequest(value) {
1062
876
  };
1063
877
  }
1064
878
  function parseWalletRecoveryGoogleEmailOtpCreateEnrollment(value) {
1065
- if (!isObject(value)) throw new Error("new recovery Email enrollment is invalid");
879
+ if (!isPlainObject(value)) throw new Error("new recovery Email enrollment is invalid");
1066
880
  requireExactObjectFields(value, ["kind", "material"], "new recovery Email enrollment");
1067
- if (value.kind !== "create" || !isObject(value.material)) throw new Error("new recovery Email enrollment is invalid");
881
+ if (value.kind !== "create" || !isPlainObject(value.material)) throw new Error("new recovery Email enrollment is invalid");
1068
882
  const material = value.material;
1069
883
  requireExactObjectFields(material, [
1070
884
  "enrollmentSealKeyVersion",
@@ -1075,42 +889,37 @@ function parseWalletRecoveryGoogleEmailOtpCreateEnrollment(value) {
1075
889
  return {
1076
890
  kind: "create",
1077
891
  material: {
1078
- enrollmentSealKeyVersion: parseRequiredString(material.enrollmentSealKeyVersion, "enrollmentSealKeyVersion"),
1079
- clientUnlockPublicKeyB64u: parseRequiredString(material.clientUnlockPublicKeyB64u, "clientUnlockPublicKeyB64u"),
1080
- unlockKeyVersion: parseRequiredString(material.unlockKeyVersion, "unlockKeyVersion"),
1081
- serverSealedFactorCiphertextB64u: parseRequiredString(material.serverSealedFactorCiphertextB64u, "serverSealedFactorCiphertextB64u")
892
+ enrollmentSealKeyVersion: requireTrimmedString(material.enrollmentSealKeyVersion, "enrollmentSealKeyVersion"),
893
+ clientUnlockPublicKeyB64u: requireTrimmedString(material.clientUnlockPublicKeyB64u, "clientUnlockPublicKeyB64u"),
894
+ unlockKeyVersion: requireTrimmedString(material.unlockKeyVersion, "unlockKeyVersion"),
895
+ serverSealedFactorCiphertextB64u: requireTrimmedString(material.serverSealedFactorCiphertextB64u, "serverSealedFactorCiphertextB64u")
1082
896
  }
1083
897
  };
1084
898
  }
899
+ function walletRecoveryFinalizationResponse(result) {
900
+ switch (result.kind) {
901
+ case "promoted": return toFetchRouteResponse({
902
+ status: 200,
903
+ body: {
904
+ ok: true,
905
+ projection: result.projection
906
+ }
907
+ });
908
+ case "conflict": return routeErrorResponse(409, "recovery_conflict", "wallet recovery conflicted");
909
+ case "refused":
910
+ case "envelope_rejected":
911
+ case "registration_rejected":
912
+ case "enrollment_rejected": return routeErrorResponse(400, "recovery_rejected", "wallet recovery was rejected");
913
+ }
914
+ }
1085
915
  function walletRecoveryRequestError() {
1086
- return toFetchRouteResponse({
1087
- status: 400,
1088
- body: {
1089
- ok: false,
1090
- code: "invalid_body",
1091
- message: "wallet recovery request is invalid"
1092
- }
1093
- });
916
+ return routeErrorResponse(400, "invalid_body", "wallet recovery request is invalid");
1094
917
  }
1095
918
  function walletRecoveryInternalError() {
1096
- return toFetchRouteResponse({
1097
- status: 500,
1098
- body: {
1099
- ok: false,
1100
- code: "internal",
1101
- message: "wallet recovery could not continue"
1102
- }
1103
- });
919
+ return routeErrorResponse(500, "internal", "wallet recovery could not continue");
1104
920
  }
1105
921
  function walletRecoveryGoogleFailureResponse(result) {
1106
- return toFetchRouteResponse({
1107
- status: walletRecoveryGoogleStatusCode(result.code),
1108
- body: {
1109
- ok: false,
1110
- code: result.code,
1111
- message: "wallet recovery could not continue"
1112
- }
1113
- });
922
+ return routeErrorResponse(walletRecoveryGoogleStatusCode(result.code), result.code, "wallet recovery could not continue");
1114
923
  }
1115
924
  function walletRecoveryGoogleStatusCode(code) {
1116
925
  if (code === "internal") return 500;
@@ -1132,11 +941,11 @@ function refusedSpend() {
1132
941
  }
1133
942
  function parseWireRequest(body, originHeader) {
1134
943
  if (!body || typeof body !== "object") return null;
1135
- const challengeId = trimmed(body.challengeId);
944
+ const challengeId = normalizeOptionalTrimmedString(body.challengeId);
1136
945
  const locator = parseEnvelopeRetrievalLocator(body.locator);
1137
946
  const webauthnAuthentication = parseWebAuthnAuthenticationCredential(body.webauthnAuthentication);
1138
947
  if (!challengeId || !locator || !webauthnAuthentication) return null;
1139
- const expectedOrigin = trimmed(originHeader);
948
+ const expectedOrigin = normalizeOptionalTrimmedString(originHeader);
1140
949
  if (!expectedOrigin) return null;
1141
950
  return {
1142
951
  challengeId,
@@ -1146,7 +955,7 @@ function parseWireRequest(body, originHeader) {
1146
955
  };
1147
956
  }
1148
957
  function parseEnvelopeRetrievalLocator(value) {
1149
- if (!isObject(value) || !isObject(value.factor)) return null;
958
+ if (!isPlainObject(value) || !isPlainObject(value.factor)) return null;
1150
959
  try {
1151
960
  requireExactObjectFields(value, ["walletId", "factor"], "custody locator");
1152
961
  requireExactObjectFields(value.factor, [
@@ -1171,15 +980,9 @@ function parseEnvelopeRetrievalLocator(value) {
1171
980
  }
1172
981
  };
1173
982
  }
1174
- function trimmed(value) {
1175
- return typeof value === "string" ? value.trim() : "";
1176
- }
1177
983
  async function readJsonObject(request) {
1178
984
  const value = await readJson(request);
1179
- return isObject(value) ? value : null;
1180
- }
1181
- function isObject(value) {
1182
- return typeof value === "object" && value !== null && !Array.isArray(value);
985
+ return isPlainObject(value) ? value : null;
1183
986
  }
1184
987
  function parseRecoveryCodeLocatorRecords(values, walletId, recoveryKeyIds) {
1185
988
  if (values.length !== recoveryKeyIds.length) throw new Error("recovery code locators do not match the recovery wraps");
@@ -1206,33 +1009,17 @@ function parseRecoveryCodeLocatorRecords(values, walletId, recoveryKeyIds) {
1206
1009
  * comes from its signer registry and durable activation receipts.
1207
1010
  */
1208
1011
  async function handleWalletRecoveryFinalize(ctx) {
1209
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_FINALIZE_ROUTE_ID);
1210
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_FINALIZE_ROUTE_ID}`);
1211
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1012
+ if (!matchRoute(ctx, RECOVERY_FINALIZE_ROUTE_ID)) return null;
1212
1013
  let requestBody;
1213
1014
  try {
1214
1015
  requestBody = parseWalletRecoveryFinalizeBody(await readJson(ctx.request));
1215
1016
  } catch {
1216
- return toFetchRouteResponse({
1217
- status: 400,
1218
- body: {
1219
- ok: false,
1220
- code: "invalid_request",
1221
- message: "wallet recovery finalization is invalid"
1222
- }
1223
- });
1017
+ return routeErrorResponse(400, "invalid_request", "wallet recovery finalization is invalid");
1224
1018
  }
1225
1019
  let serviceRequest;
1226
1020
  if (requestBody.kind === "finalize") {
1227
- const expectedOrigin = trimmed(ctx.request.headers.get("origin"));
1228
- if (!expectedOrigin) return toFetchRouteResponse({
1229
- status: 400,
1230
- body: {
1231
- ok: false,
1232
- code: "invalid_origin",
1233
- message: "wallet recovery finalization requires the request Origin header"
1234
- }
1235
- });
1021
+ const expectedOrigin = normalizeOptionalTrimmedString(ctx.request.headers.get("origin"));
1022
+ if (!expectedOrigin) return routeErrorResponse(400, "invalid_origin", "wallet recovery finalization requires the request Origin header");
1236
1023
  serviceRequest = {
1237
1024
  kind: "finalize",
1238
1025
  walletId: requestBody.walletId,
@@ -1259,37 +1046,10 @@ async function handleWalletRecoveryFinalize(ctx) {
1259
1046
  replacementId: requestBody.replacementId,
1260
1047
  replacementEnvelope: requestBody.replacementEnvelope
1261
1048
  };
1262
- const result = await ctx.service.passkeyCustody.finalizeRecovery(serviceRequest);
1263
- switch (result.kind) {
1264
- case "promoted": return toFetchRouteResponse({
1265
- status: 200,
1266
- body: {
1267
- ok: true,
1268
- projection: result.projection
1269
- }
1270
- });
1271
- case "conflict": return toFetchRouteResponse({
1272
- status: 409,
1273
- body: {
1274
- ok: false,
1275
- code: "recovery_conflict",
1276
- message: "wallet recovery conflicted"
1277
- }
1278
- });
1279
- case "refused":
1280
- case "envelope_rejected":
1281
- case "registration_rejected": return toFetchRouteResponse({
1282
- status: 400,
1283
- body: {
1284
- ok: false,
1285
- code: "recovery_rejected",
1286
- message: "wallet recovery was rejected"
1287
- }
1288
- });
1289
- }
1049
+ return walletRecoveryFinalizationResponse(await ctx.service.passkeyCustody.finalizeRecovery(serviceRequest));
1290
1050
  }
1291
1051
  function parseWalletRecoveryFinalizeBody(value) {
1292
- if (!isObject(value)) throw new Error("wallet recovery finalization body must be an object");
1052
+ if (!isPlainObject(value)) throw new Error("wallet recovery finalization body must be an object");
1293
1053
  const walletId = parseWalletId(value.walletId);
1294
1054
  const recoveryOperationId = parseWalletRecoveryOperationId(value.recoveryOperationId);
1295
1055
  const targetDeviceId = parseDeviceId(value.targetDeviceId);
@@ -1303,7 +1063,7 @@ function parseWalletRecoveryFinalizeBody(value) {
1303
1063
  targetDeviceId: targetDeviceId.value,
1304
1064
  targetAuthorityId: targetAuthorityId.value,
1305
1065
  targetWalletAuthMethodId: targetWalletAuthMethodId.value,
1306
- replacementId: parseRequiredString(value.replacementId, "replacementId"),
1066
+ replacementId: requireTrimmedString(value.replacementId, "replacementId"),
1307
1067
  replacementEnvelope: parsePasskeyCustodyEnvelopeRecord(value.replacementEnvelope, "walletRecoveryFinalize.replacementEnvelope")
1308
1068
  };
1309
1069
  if (value.kind === "replay") {
@@ -1338,11 +1098,11 @@ function parseWalletRecoveryFinalizeBody(value) {
1338
1098
  "replacementEnvelope",
1339
1099
  "ecdsaMaterialPossessionProofs"
1340
1100
  ], "wallet recovery finalization");
1341
- if (!isObject(value.webauthnRegistration)) throw new Error("wallet recovery finalization registration is invalid");
1101
+ if (!isPlainObject(value.webauthnRegistration)) throw new Error("wallet recovery finalization registration is invalid");
1342
1102
  return {
1343
1103
  kind: "finalize",
1344
1104
  ...identity,
1345
- challengeId: parseRequiredString(value.challengeId, "challengeId"),
1105
+ challengeId: requireTrimmedString(value.challengeId, "challengeId"),
1346
1106
  webauthnRegistration: value.webauthnRegistration,
1347
1107
  ecdsaMaterialPossessionProofs: parseEcdsaMaterialPossessionProofs(value.ecdsaMaterialPossessionProofs)
1348
1108
  };
@@ -1351,9 +1111,9 @@ function parseEcdsaMaterialPossessionProofs(value) {
1351
1111
  if (!Array.isArray(value)) throw new Error("wallet recovery finalization ECDSA proofs must be an array");
1352
1112
  const seen = /* @__PURE__ */ new Set();
1353
1113
  return value.map((item, index) => {
1354
- if (!isObject(item)) throw new Error(`wallet recovery finalization ECDSA proof ${index} is invalid`);
1114
+ if (!isPlainObject(item)) throw new Error(`wallet recovery finalization ECDSA proof ${index} is invalid`);
1355
1115
  requireExactObjectFields(item, ["keySetId", "proof"], `ECDSA proof ${index}`);
1356
- const keySetId = trimmed(item.keySetId);
1116
+ const keySetId = normalizeOptionalTrimmedString(item.keySetId);
1357
1117
  if (!/^evm_family_ecdsa:\S+$/.test(keySetId)) throw new Error(`wallet recovery finalization ECDSA proof ${index} is invalid`);
1358
1118
  if (seen.has(keySetId)) throw new Error(`wallet recovery finalization ECDSA proof ${index} is duplicated`);
1359
1119
  seen.add(keySetId);
@@ -1364,48 +1124,25 @@ function parseEcdsaMaterialPossessionProofs(value) {
1364
1124
  });
1365
1125
  }
1366
1126
  function authorizedOperationReplay(operation) {
1367
- if (operation.lifecycle !== "completed") return toFetchRouteResponse({
1368
- status: 409,
1369
- body: {
1370
- ok: false,
1371
- code: "recovery_in_progress",
1372
- message: "wallet recovery is still in progress"
1373
- }
1374
- });
1127
+ if (operation.lifecycle !== "completed") return routeErrorResponse(409, "recovery_in_progress", "wallet recovery is still in progress");
1375
1128
  return new Response(operation.response.bodyText, {
1376
1129
  status: operation.response.status,
1377
1130
  headers: { "content-type": operation.response.contentType }
1378
1131
  });
1379
1132
  }
1380
1133
  async function handleWalletRecoveryBackupAcknowledge(ctx) {
1381
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_ACK_ROUTE_ID);
1382
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_ACK_ROUTE_ID}`);
1383
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1134
+ if (!matchRoute(ctx, RECOVERY_ACK_ROUTE_ID)) return null;
1384
1135
  const body = await readJsonObject(ctx.request);
1385
1136
  let walletId = "";
1386
1137
  try {
1387
1138
  if (!body) throw new Error("acknowledgement body is required");
1388
1139
  requireExactObjectFields(body, ["walletId"], "recovery backup acknowledgement");
1389
- walletId = parseRequiredString(body.walletId, "walletId");
1140
+ walletId = requireTrimmedString(body.walletId, "walletId");
1390
1141
  } catch {
1391
- return toFetchRouteResponse({
1392
- status: 400,
1393
- body: {
1394
- ok: false,
1395
- code: "invalid_request",
1396
- message: "an acknowledgement needs a wallet"
1397
- }
1398
- });
1142
+ return routeErrorResponse(400, "invalid_request", "an acknowledgement needs a wallet");
1399
1143
  }
1400
1144
  const result = await ctx.service.passkeyCustody.acknowledgeRecoveryBackup({ walletId });
1401
- if (result.kind === "no_recovery_set") return toFetchRouteResponse({
1402
- status: 404,
1403
- body: {
1404
- ok: false,
1405
- code: "no_recovery_set",
1406
- message: "this wallet has no issued recovery codes to acknowledge"
1407
- }
1408
- });
1145
+ if (result.kind === "no_recovery_set") return routeErrorResponse(404, "no_recovery_set", "this wallet has no issued recovery codes to acknowledge");
1409
1146
  return toFetchRouteResponse({
1410
1147
  status: 200,
1411
1148
  body: {
@@ -1424,33 +1161,17 @@ async function handleWalletRecoveryBackupAcknowledge(ctx) {
1424
1161
  * owner wrote down, and nothing surfaces that until someone counts.
1425
1162
  */
1426
1163
  async function handleWalletRecoveryRotate(ctx) {
1427
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_ROTATE_ROUTE_ID);
1428
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_ROTATE_ROUTE_ID}`);
1429
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1164
+ if (!matchRoute(ctx, RECOVERY_ROTATE_ROUTE_ID)) return null;
1430
1165
  const body = await readJsonObject(ctx.request);
1431
- const walletId = trimmed(body?.walletId);
1432
- const expectedStoreVersion = trimmed(body?.expectedStoreVersion);
1433
- const manifestKekWraps = Array.isArray(body?.manifestKekWraps) ? body.manifestKekWraps.filter(isObject) : [];
1434
- const entries = Array.isArray(body?.entries) ? body.entries.filter(isObject) : [];
1166
+ const walletId = normalizeOptionalTrimmedString(body?.walletId);
1167
+ const expectedStoreVersion = normalizeOptionalTrimmedString(body?.expectedStoreVersion);
1168
+ const manifestKekWraps = Array.isArray(body?.manifestKekWraps) ? body.manifestKekWraps.filter(isPlainObject) : [];
1169
+ const entries = Array.isArray(body?.entries) ? body.entries.filter(isPlainObject) : [];
1435
1170
  const rawRecoveryCodeLocators = Array.isArray(body?.recoveryCodeLocators) ? body.recoveryCodeLocators : [];
1436
- const recoveryCodeLocators = rawRecoveryCodeLocators.filter(isObject);
1437
- if (!walletId || !expectedStoreVersion || manifestKekWraps.length === 0 || entries.length !== 1 || recoveryCodeLocators.length !== rawRecoveryCodeLocators.length || recoveryCodeLocators.length !== manifestKekWraps.length) return toFetchRouteResponse({
1438
- status: 400,
1439
- body: {
1440
- ok: false,
1441
- code: "invalid_request",
1442
- message: "a rotation needs a wallet and its complete replacement recovery set"
1443
- }
1444
- });
1171
+ const recoveryCodeLocators = rawRecoveryCodeLocators.filter(isPlainObject);
1172
+ if (!walletId || !expectedStoreVersion || manifestKekWraps.length === 0 || entries.length !== 1 || recoveryCodeLocators.length !== rawRecoveryCodeLocators.length || recoveryCodeLocators.length !== manifestKekWraps.length) return routeErrorResponse(400, "invalid_request", "a rotation needs a wallet and its complete replacement recovery set");
1445
1173
  const parsedWalletId = parseWalletId(walletId);
1446
- if (!parsedWalletId.ok) return toFetchRouteResponse({
1447
- status: 400,
1448
- body: {
1449
- ok: false,
1450
- code: "invalid_request",
1451
- message: "wallet id is invalid"
1452
- }
1453
- });
1174
+ if (!parsedWalletId.ok) return routeErrorResponse(400, "invalid_request", "wallet id is invalid");
1454
1175
  let replacement;
1455
1176
  let parsedRecoveryCodeLocators;
1456
1177
  try {
@@ -1461,14 +1182,7 @@ async function handleWalletRecoveryRotate(ctx) {
1461
1182
  }, { expectedWalletId: parsedWalletId.value });
1462
1183
  parsedRecoveryCodeLocators = parseRecoveryCodeLocatorRecords(recoveryCodeLocators, parsedWalletId.value, replacement.manifestKekWraps.map((wrap) => wrap.recoveryKeyId));
1463
1184
  } catch (error) {
1464
- return toFetchRouteResponse({
1465
- status: 400,
1466
- body: {
1467
- ok: false,
1468
- code: "invalid_request",
1469
- message: error instanceof Error ? error.message : "replacement recovery set is invalid"
1470
- }
1471
- });
1185
+ return routeErrorResponse(400, "invalid_request", error instanceof Error ? error.message : "replacement recovery set is invalid");
1472
1186
  }
1473
1187
  const authorized = await authorizeWalletCustodyOperation({
1474
1188
  ctx,
@@ -1514,19 +1228,10 @@ async function handleWalletRecoveryRotate(ctx) {
1514
1228
  }
1515
1229
  }
1516
1230
  async function handleWalletRecoveryRead(ctx) {
1517
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_READ_ROUTE_ID);
1518
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_READ_ROUTE_ID}`);
1519
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1231
+ if (!matchRoute(ctx, RECOVERY_READ_ROUTE_ID)) return null;
1520
1232
  const body = await readJsonObject(ctx.request);
1521
- const walletId = trimmed(body?.walletId);
1522
- if (!walletId) return toFetchRouteResponse({
1523
- status: 400,
1524
- body: {
1525
- ok: false,
1526
- code: "invalid_request",
1527
- message: "a read needs a wallet"
1528
- }
1529
- });
1233
+ const walletId = normalizeOptionalTrimmedString(body?.walletId);
1234
+ if (!walletId) return routeErrorResponse(400, "invalid_request", "a read needs a wallet");
1530
1235
  const authorized = await authorizeWalletCustodyOperation({
1531
1236
  ctx,
1532
1237
  walletId,
@@ -1558,40 +1263,18 @@ async function handleWalletRecoveryRead(ctx) {
1558
1263
  * useful to someone else.
1559
1264
  */
1560
1265
  async function handleWalletRecoveryStatus(ctx) {
1561
- const route = findRouteDefinitionById(ctx.routeDefinitions, RECOVERY_STATUS_ROUTE_ID);
1562
- if (!route) throw new Error(`Missing route definition for ${RECOVERY_STATUS_ROUTE_ID}`);
1563
- if (!matchesRouteDefinitionRequest(route, ctx.method, ctx.pathname)) return null;
1266
+ const route = matchRoute(ctx, RECOVERY_STATUS_ROUTE_ID);
1267
+ if (!route) return null;
1564
1268
  const walletId = walletIdFromPath(route.path, ctx.pathname);
1565
- if (!walletId) return toFetchRouteResponse({
1566
- status: 400,
1567
- body: {
1568
- ok: false,
1569
- code: "invalid_request",
1570
- message: "status needs a wallet"
1571
- }
1572
- });
1573
- const origin = trimmed(ctx.request.headers.get("origin"));
1269
+ if (!walletId) return routeErrorResponse(400, "invalid_request", "status needs a wallet");
1270
+ const origin = normalizeOptionalTrimmedString(ctx.request.headers.get("origin"));
1574
1271
  try {
1575
1272
  parseSessionOrigin(origin);
1576
1273
  } catch {
1577
- return toFetchRouteResponse({
1578
- status: 400,
1579
- body: {
1580
- ok: false,
1581
- code: "invalid_origin",
1582
- message: "request Origin is invalid"
1583
- }
1584
- });
1274
+ return routeErrorResponse(400, "invalid_origin", "request Origin is invalid");
1585
1275
  }
1586
1276
  const result = await ctx.service.passkeyCustody.readRecoveryStatus({ walletId });
1587
- if (result.kind === "no_recovery_set") return toFetchRouteResponse({
1588
- status: 404,
1589
- body: {
1590
- ok: false,
1591
- code: "no_recovery_set",
1592
- message: "this wallet has no recovery codes"
1593
- }
1594
- });
1277
+ if (result.kind === "no_recovery_set") return routeErrorResponse(404, "no_recovery_set", "this wallet has no recovery codes");
1595
1278
  return toFetchRouteResponse({
1596
1279
  status: 200,
1597
1280
  body: {