@seams/wallet-server 0.6.1 → 0.7.1

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 (705) hide show
  1. package/artifact-manifest.json +147 -32
  2. package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -0
  3. package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
  4. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  5. package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -0
  6. package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
  7. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  8. package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
  9. package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
  10. package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
  11. package/cloudflare-router-ab/build/router/build-stamp.json +1 -0
  12. package/cloudflare-router-ab/build/router/index.js +2 -2
  13. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  14. package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -0
  15. package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
  16. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  17. package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -0
  18. package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
  19. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  20. package/cloudflare-router-ab/migrations/deriver-a/0012_tenant_root_creation_tombstones.sql +20 -0
  21. package/cloudflare-router-ab/migrations/deriver-a/0013_tenant_root_root_use_admissions.sql +32 -0
  22. package/cloudflare-router-ab/migrations/deriver-a/0014_tenant_root_refresh_supersessions.sql +24 -0
  23. package/cloudflare-router-ab/migrations/deriver-a/0015_tenant_root_root_use_attempts.sql +56 -0
  24. package/cloudflare-router-ab/migrations/deriver-a/0016_tenant_root_root_use_admission_settlement.sql +5 -0
  25. package/cloudflare-router-ab/migrations/deriver-a/0017_tenant_root_root_use_admission_claims.sql +64 -0
  26. package/cloudflare-router-ab/migrations/deriver-a/0018_tenant_root_recovery_retention_keys.sql +12 -0
  27. package/cloudflare-router-ab/migrations/deriver-b/0012_tenant_root_creation_tombstones.sql +20 -0
  28. package/cloudflare-router-ab/migrations/deriver-b/0013_tenant_root_root_use_admissions.sql +32 -0
  29. package/cloudflare-router-ab/migrations/deriver-b/0014_tenant_root_refresh_supersessions.sql +24 -0
  30. package/cloudflare-router-ab/migrations/deriver-b/0015_tenant_root_root_use_attempts.sql +56 -0
  31. package/cloudflare-router-ab/migrations/deriver-b/0016_tenant_root_root_use_admission_settlement.sql +5 -0
  32. package/cloudflare-router-ab/migrations/deriver-b/0017_tenant_root_root_use_admission_claims.sql +64 -0
  33. package/cloudflare-router-ab/migrations/deriver-b/0018_tenant_root_recovery_retention_keys.sql +12 -0
  34. package/cloudflare-router-ab/scripts/bootstrap-local-tenant-root.mjs +81 -16
  35. package/cloudflare-router-ab/scripts/prepare-local-runtime-config.mjs +102 -9
  36. package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +4 -1
  37. package/cloudflare-router-ab/wrangler.deriver-a.toml +24 -0
  38. package/cloudflare-router-ab/wrangler.router.toml +13 -0
  39. package/dist/esm/authorization/capabilityPolicy.js +1 -1
  40. package/dist/esm/authorization/domain.js +2 -2
  41. package/dist/esm/authorization/factorEvidence.js +6 -100
  42. package/dist/esm/authorization/service.js +34 -2
  43. package/dist/esm/authorization/vaultProxyUse.js +3 -4
  44. package/dist/esm/cloud-host.js +16 -11
  45. package/dist/esm/core/EmailOtpRecords.js +19 -1
  46. package/dist/esm/core/EmailOtpStores.js +323 -924
  47. package/dist/esm/core/IdentityStore.js +44 -235
  48. package/dist/esm/core/NearPublicKeyStore.js +21 -63
  49. package/dist/esm/core/RegistrationCeremonyStore.js +3 -1793
  50. package/dist/esm/core/ThresholdService/config.js +1 -82
  51. package/dist/esm/core/ThresholdService/kv.js +3 -3
  52. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.js +37 -5
  53. package/dist/esm/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.js +4 -74
  54. package/dist/esm/core/ThresholdService/stores/CloudflareDurableObjectStore.js +15 -51
  55. package/dist/esm/core/ThresholdService/stores/KeyStore.js +3 -3
  56. package/dist/esm/core/ThresholdService/stores/SessionStore.js +5 -81
  57. package/dist/esm/core/ThresholdService/stores/WalletSessionStore.js +185 -290
  58. package/dist/esm/core/ThresholdService/validation.js +18 -230
  59. package/dist/esm/core/WalletAuthMethodStore.js +22 -79
  60. package/dist/esm/core/WalletStore.js +58 -185
  61. package/dist/esm/core/WebAuthnAuthenticatorStore.js +57 -340
  62. package/dist/esm/core/WebAuthnCredentialBindingStore.js +90 -369
  63. package/dist/esm/core/WebAuthnLoginChallengeStore.js +17 -397
  64. package/dist/esm/core/WebAuthnSyncChallengeStore.js +17 -397
  65. package/dist/esm/core/authService/AuthService.js +2 -19
  66. package/dist/esm/core/authService/emailOtpChallengeProof.js +1 -1
  67. package/dist/esm/core/authService/emailOtpChallenges.js +1 -1
  68. package/dist/esm/core/authService/emailOtpConfig.js +1 -32
  69. package/dist/esm/core/authService/emailOtpRegistrationEnrollment.js +6 -153
  70. package/dist/esm/core/authService/googleEmailOtpRegistration.js +1 -1
  71. package/dist/esm/core/authService/nearPrivateKeySigning.js +7 -15
  72. package/dist/esm/core/authService/nearTransactions.js +2 -1
  73. package/dist/esm/core/authService/oidcVerification.js +3 -4
  74. package/dist/esm/core/authService/rateLimits.js +1 -31
  75. package/dist/esm/core/authService/registrationThresholdHelpers.js +2 -103
  76. package/dist/esm/core/authService/storeRegistry.js +2 -13
  77. package/dist/esm/core/authService/thresholdEcdsaKeyInventory.js +4 -5
  78. package/dist/esm/core/authService/webauthn.js +15 -50
  79. package/dist/esm/core/authService/webauthnOidcHelpers.js +1 -6
  80. package/dist/esm/core/authService/webauthnVerificationOutcomes.js +60 -0
  81. package/dist/esm/core/authService/webauthnWalletBinding.js +2 -122
  82. package/dist/esm/core/d1IdentityStore.js +32 -66
  83. package/dist/esm/core/d1TenantStore.js +82 -0
  84. package/dist/esm/core/d1WalletAuthMethodStore.js +92 -143
  85. package/dist/esm/core/d1WalletStore.js +14 -12
  86. package/dist/esm/core/deviceLinking/linkedDeviceEmailOtpGrant.js +10 -8
  87. package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +25 -3
  88. package/dist/esm/core/deviceLinking/linkedDeviceSession.js +6 -895
  89. package/dist/esm/core/deviceLinking/linkedDeviceSessionApproval.js +102 -0
  90. package/dist/esm/core/deviceLinking/linkedDeviceSessionRecord.js +668 -0
  91. package/dist/esm/core/emailOtpD1Statements.js +383 -0
  92. package/dist/esm/core/hostedAccountIds.js +2 -2
  93. package/dist/esm/core/keyMaterialBrands.js +2 -48
  94. package/dist/esm/core/nearRelayerAccountProvisioning.js +25 -150
  95. package/dist/esm/core/nearSignerWasmRuntime.js +1 -4
  96. package/dist/esm/core/rpcClients/near/NearClient.js +15 -218
  97. package/dist/esm/core/signingLanes/LaneEnrollmentActivation.js +1 -1
  98. package/dist/esm/core/signingLanes/LaneLifecycleApplicationService.js +2 -4
  99. package/dist/esm/core/signingLanes/LaneLifecycleStore.js +0 -24
  100. package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +5 -5
  101. package/dist/esm/core/signingLanes/ecdsaServerRetirement.js +3 -8
  102. package/dist/esm/core/signingLanes/ed25519ServerRetirement.js +1 -4
  103. package/dist/esm/core/storeBackends.js +208 -0
  104. package/dist/esm/core/thresholdEcdsaChainTarget.js +1 -7
  105. package/dist/esm/core/webAuthnD1Statements.js +92 -0
  106. package/dist/esm/core/webAuthnStoreBackends.js +198 -0
  107. package/dist/esm/hosted-wallet-gateway.js +33 -16
  108. package/dist/esm/index.js +2 -2
  109. package/dist/esm/local-hosted-wallet-gateway-worker.js +2 -23
  110. package/dist/esm/localHostedWalletGatewayHandler.js +299 -0
  111. package/dist/esm/localIntendedEcdsaFinalizeFault.js +85 -0
  112. package/dist/esm/localIntendedLinkExecuteFault.js +140 -0
  113. package/dist/esm/localIntendedRevokeFault.js +106 -0
  114. package/dist/esm/localIntendedSessionAdmissionFault.js +139 -0
  115. package/dist/esm/localIntendedYaoExportFault.js +117 -0
  116. package/dist/esm/localIntendedYaoFault.js +13 -16
  117. package/dist/esm/localIntendedYaoFinalizeFault.js +99 -0
  118. package/dist/esm/localIntendedYaoRecoveryFault.js +102 -0
  119. package/dist/esm/localIntendedYaoSigningFault.js +127 -0
  120. package/dist/esm/router/auth/authRequestValidation.js +1 -1
  121. package/dist/esm/router/auth/commonRouterUtils.js +10 -2
  122. package/dist/esm/router/auth/walletSessionFailure.js +1 -14
  123. package/dist/esm/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.js +23 -0
  124. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +86 -66
  125. package/dist/esm/router/cloudflare/d1/authorization/authorizedOperationStatements.js +208 -0
  126. package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +246 -296
  127. package/dist/esm/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.js +14 -0
  128. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +62 -63
  129. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.js +3 -6
  130. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.js +1 -19
  131. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceManagementService.js +4 -3
  132. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +52 -9
  133. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRequestProofNonceStore.js +3 -6
  134. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.js +100 -0
  135. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.js +7 -10
  136. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.js +33 -124
  137. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.js +2 -2
  138. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.js +9 -17
  139. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.js +6 -6
  140. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkSourceReader.js +3 -1
  141. package/dist/esm/router/cloudflare/d1/deviceLinking/index.js +3 -3
  142. package/dist/esm/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.js +69 -0
  143. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.js +39 -68
  144. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.js +69 -0
  145. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +2 -2
  146. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.js +26 -71
  147. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.js +20 -3
  148. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.js +7 -94
  149. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.js +5 -47
  150. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +26 -123
  151. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +0 -2
  152. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.js +2 -2
  153. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +15 -134
  154. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.js +54 -260
  155. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -1
  156. package/dist/esm/router/cloudflare/d1/identity/d1IdentityRecords.js +1 -28
  157. package/dist/esm/router/cloudflare/d1/near/d1NearPublicKeyStore.js +2 -8
  158. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.js +1 -1
  159. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.js +3 -3
  160. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.js +23 -73
  161. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.js +15 -2
  162. package/dist/esm/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.js +12 -203
  163. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +16 -32
  164. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +29 -72
  165. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +4 -1
  166. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationIntentService.js +3 -1
  167. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +6 -30
  168. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +261 -205
  169. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetup.js +5 -3
  170. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +2 -2
  171. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.js +3 -3
  172. package/dist/esm/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.js +43 -25
  173. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.js +0 -1
  174. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneLifecycleStore.js +1 -1
  175. package/dist/esm/router/cloudflare/d1/signingLanes/d1LaneRecords.js +2 -1
  176. package/dist/esm/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js +2 -60
  177. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +158 -19
  178. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.js +19 -49
  179. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.js +100 -0
  180. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +132 -33
  181. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +83 -4
  182. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +14 -49
  183. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +4 -4
  184. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnStore.js +22 -116
  185. package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +1 -2
  186. package/dist/esm/router/cloudflare/runtime/walletConsoleTenantRootLineage.js +11 -2
  187. package/dist/esm/router/cloudflare/runtime/walletGateway.js +1 -1
  188. package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneCurveExecution.js +5 -6
  189. package/dist/esm/router/cloudflare/signingLanes/cloudflareLaneProtocolCommitter.js +2 -1
  190. package/dist/esm/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js +48 -21
  191. package/dist/esm/router/cloudflare.js +11480 -12853
  192. package/dist/esm/router/domains/ecdsa/routerAbEcdsaStrictRegistration.js +16 -5
  193. package/dist/esm/router/domains/ecdsa/thresholdEcdsaRequestValidation.js +2 -8
  194. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.js +33 -0
  195. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +17 -9
  196. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +29 -431
  197. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +7 -2
  198. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.js +2 -1
  199. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +70 -2
  200. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +134 -169
  201. package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExportRequestScopedCloudflare.js +77 -162
  202. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.js +205 -51
  203. package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +29 -11
  204. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +182 -55
  205. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +2 -1
  206. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.js +63 -247
  207. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +3 -2
  208. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +87 -132
  209. package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.js +5 -4
  210. package/dist/esm/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.js +45 -0
  211. package/dist/esm/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.js +1 -1
  212. package/dist/esm/router/domains/emailOtp/emailOtpExportPolicy.js +1 -42
  213. package/dist/esm/router/domains/emailOtp/emailOtpRequestValidation.js +1 -6
  214. package/dist/esm/router/domains/emailOtp/emailOtpSessionRouteHelpers.js +1 -142
  215. package/dist/esm/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.js +1 -1
  216. package/dist/esm/router/domains/passkeyCustody/walletCustodyRegistrationCommit.js +2 -2
  217. package/dist/esm/router/domains/passkeyCustody/walletRecoveryFinalization.js +23 -45
  218. package/dist/esm/router/domains/passkeyCustody/walletRecoveryKeyManifest.js +5 -5
  219. package/dist/esm/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.js +1 -1
  220. package/dist/esm/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.js +827 -0
  221. package/dist/esm/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.js +698 -0
  222. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmission.js +209 -0
  223. package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.js +16 -15
  224. package/dist/esm/router/domains/signingOperations/routerAbOperationStepUp.js +313 -0
  225. package/dist/esm/router/domains/signingOperations/routerAbPrivateSigningWorker.js +62 -2159
  226. package/dist/esm/router/domains/tenantRoot/tenantRootIdentityResolution.js +1 -1
  227. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +18 -22
  228. package/dist/esm/router/domains/walletRegistration/walletRegistrationSetupPayload.js +3 -4
  229. package/dist/esm/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.js +2 -2
  230. package/dist/esm/router/domains/walletUnlock/walletUnlockRouteHandlers.js +97 -150
  231. package/dist/esm/router/express.js +5967 -6410
  232. package/dist/esm/router/framework/http.js +1 -4
  233. package/dist/esm/router/framework/ror/normalize.js +1 -1
  234. package/dist/esm/router/framework/routerApiRouteSurface.js +1 -1
  235. package/dist/esm/router/node/nodeHostedWalletGateway.js +64 -0
  236. package/dist/esm/router/node/nodeHostedWalletGatewayCheck.js +163 -0
  237. package/dist/esm/router/node/nodeHostedWalletGatewayMain.js +120 -0
  238. package/dist/esm/router/node/nodeHttp.js +79 -0
  239. package/dist/esm/router/node/nodeSqlite.js +43 -0
  240. package/dist/esm/router/node/signerSqlMigrations.js +48 -0
  241. package/dist/esm/router/transport/fetch/createFetchRouter.js +1 -1
  242. package/dist/esm/router/transport/fetch/routes/deviceLinking.js +16 -18
  243. package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +3 -5
  244. package/dist/esm/router/transport/fetch/routes/deviceManagement.js +15 -24
  245. package/dist/esm/router/transport/fetch/routes/normalSigningRouterProxy.js +3 -16
  246. package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +144 -461
  247. package/dist/esm/router/transport/fetch/routes/sessions.js +4 -4
  248. package/dist/esm/router/transport/fetch/routes/syncAccount.js +4 -6
  249. package/dist/esm/router/transport/fetch/routes/syncAccountBootstrap.js +2 -2
  250. package/dist/esm/router/transport/fetch/routes/thresholdEcdsa.js +69 -23
  251. package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +52 -27
  252. package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +1 -1
  253. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
  254. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -2
  255. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +99 -227
  256. package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
  257. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +74 -0
  258. package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +50 -0
  259. package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +8 -9
  260. package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
  261. package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +55 -0
  262. package/dist/esm/shared-ts/src/device-linking/digests.js +10 -65
  263. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
  264. package/dist/esm/shared-ts/src/device-linking/index.js +4 -1
  265. package/dist/esm/shared-ts/src/device-linking/parsers.js +510 -1063
  266. package/dist/esm/shared-ts/src/device-linking/requestProof.js +5 -14
  267. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +6 -9
  268. package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +9 -9
  269. package/dist/esm/shared-ts/src/device-linking/wireFields.js +59 -0
  270. package/dist/esm/shared-ts/src/near/nearClient.js +252 -0
  271. package/dist/esm/shared-ts/src/passkey-custody/credentialActivity.js +3 -1
  272. package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +7 -5
  273. package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
  274. package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -39
  275. package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -5
  276. package/dist/esm/shared-ts/src/signing-lanes/index.js +3 -3
  277. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +5 -12
  278. package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +5 -14
  279. package/dist/esm/shared-ts/src/signing-lanes/participants.js +2 -5
  280. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +7 -5
  281. package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +6 -45
  282. package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +423 -1511
  283. package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +323 -0
  284. package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +59 -0
  285. package/dist/esm/shared-ts/src/tenant-root/tenantRootOperationRecord.js +1 -1
  286. package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +1 -2
  287. package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +49 -0
  288. package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
  289. package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +8 -1
  290. package/dist/esm/shared-ts/src/utils/digestEncoding.js +63 -0
  291. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +2 -2
  292. package/dist/esm/shared-ts/src/utils/exactRecord.js +44 -0
  293. package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +127 -0
  294. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +2 -2
  295. package/dist/esm/shared-ts/src/utils/registrationIds.js +280 -0
  296. package/dist/esm/shared-ts/src/utils/registrationIntent.js +4 -1170
  297. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +429 -0
  298. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +11 -136
  299. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +3 -163
  300. package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +160 -0
  301. package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
  302. package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +7 -15
  303. package/dist/esm/shared-ts/src/utils/validation.js +37 -6
  304. package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +362 -0
  305. package/dist/esm/shared-ts/src/utils/wireSchema.js +77 -0
  306. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +1 -1
  307. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -1
  308. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +7 -11
  309. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
  310. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
  311. package/dist/esm/storage/d1Sql.js +10 -1
  312. package/dist/esm/storage/syncSqlite.js +79 -0
  313. package/dist/esm/threshold/session/signingSessionSeal/crypto/cipher.js +1 -1
  314. package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +1 -1
  315. package/dist/esm/threshold/session/signingSessionSeal/idempotencyRecords.js +1 -2
  316. package/dist/esm/threshold/session/signingSessionSeal/options.js +1 -1
  317. package/dist/esm/threshold/session/signingSessionSeal/transport/shared.js +18 -55
  318. package/dist/esm/threshold/statusCodes.js +1 -1
  319. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +3 -3
  320. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  321. package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker_bg.wasm +0 -0
  322. package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +8 -26
  323. package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +0 -8
  324. package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +1 -3
  325. package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +25 -12
  326. package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +2 -1
  327. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -2
  328. package/dist/types/shared-ts/src/device-linking/authorityActivation.d.ts +5 -0
  329. package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +2 -5
  330. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +8 -11
  331. package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -1
  332. package/dist/types/shared-ts/src/device-linking/deviceManagement.d.ts +7 -0
  333. package/dist/types/shared-ts/src/device-linking/digests.d.ts +0 -5
  334. package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +3 -2
  335. package/dist/types/shared-ts/src/device-linking/index.d.ts +2 -0
  336. package/dist/types/shared-ts/src/device-linking/parsers.d.ts +4 -41
  337. package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +0 -1
  338. package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +3 -2
  339. package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +2 -1
  340. package/dist/types/shared-ts/src/device-linking/wireFields.d.ts +26 -0
  341. package/dist/types/shared-ts/src/near/actions.d.ts +4 -4
  342. package/dist/types/shared-ts/src/near/delegate.d.ts +3 -2
  343. package/dist/types/shared-ts/src/near/nearClient.d.ts +145 -0
  344. package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +0 -22
  345. package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +2 -4
  346. package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +9 -18
  347. package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +8 -24
  348. package/dist/types/shared-ts/src/passkey-custody/index.d.ts +0 -2
  349. package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +0 -14
  350. package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -15
  351. package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +2 -51
  352. package/dist/types/shared-ts/src/signing-lanes/index.d.ts +1 -2
  353. package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +1 -2
  354. package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +5 -27
  355. package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +0 -11
  356. package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +6 -53
  357. package/dist/types/shared-ts/src/signing-lanes/records.d.ts +1 -2
  358. package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +15 -37
  359. package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +1 -20
  360. package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +4 -25
  361. package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +1 -41
  362. package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +6 -0
  363. package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +20 -0
  364. package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +2 -35
  365. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +8 -35
  366. package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +25 -0
  367. package/dist/types/shared-ts/src/threshold/participants.d.ts +3 -9
  368. package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +0 -37
  369. package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +24 -0
  370. package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +2 -5
  371. package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +3 -4
  372. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +7 -108
  373. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +16 -3
  374. package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +2 -0
  375. package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +9 -0
  376. package/dist/types/shared-ts/src/utils/domainIds.d.ts +1 -2
  377. package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +1 -2
  378. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +5 -5
  379. package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +0 -2
  380. package/dist/types/shared-ts/src/utils/errors.d.ts +0 -7
  381. package/dist/types/shared-ts/src/utils/exactRecord.d.ts +12 -0
  382. package/dist/types/shared-ts/src/utils/index.d.ts +5 -2
  383. package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -2
  384. package/dist/types/shared-ts/src/utils/near.d.ts +2 -1
  385. package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +7 -7
  386. package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -4
  387. package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +184 -0
  388. package/dist/types/shared-ts/src/utils/registrationContracts.d.ts +76 -0
  389. package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +1 -2
  390. package/dist/types/shared-ts/src/utils/registrationIds.d.ts +56 -0
  391. package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +9 -514
  392. package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +142 -0
  393. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +21 -92
  394. package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +14 -99
  395. package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +39 -0
  396. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +10 -15
  397. package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +2 -1
  398. package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +0 -2
  399. package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -35
  400. package/dist/types/shared-ts/src/utils/signerSlot.d.ts +0 -4
  401. package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +1 -7
  402. package/dist/types/shared-ts/src/utils/validation.d.ts +10 -10
  403. package/dist/types/shared-ts/src/utils/variant.d.ts +11 -0
  404. package/dist/types/shared-ts/src/utils/variant.typecheck.d.ts +22 -0
  405. package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +2 -2
  406. package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +1 -58
  407. package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +104 -0
  408. package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +3 -7
  409. package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +3 -4
  410. package/dist/types/shared-ts/src/utils/wireSchema.d.ts +60 -0
  411. package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +2 -1
  412. package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +0 -1
  413. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +0 -16
  414. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +2 -11
  415. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +6 -18
  416. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +0 -2
  417. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +1 -3
  418. package/dist/types/wallet-server/src/authorization/capabilityPolicy.d.ts +0 -1
  419. package/dist/types/wallet-server/src/authorization/domain.d.ts +25 -5
  420. package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.d.ts +37 -0
  421. package/dist/types/wallet-server/src/authorization/ecdsaWalletSessionAdmission.typecheck.d.ts +2 -0
  422. package/dist/types/wallet-server/src/authorization/factorEvidence.d.ts +6 -7
  423. package/dist/types/wallet-server/src/authorization/service.d.ts +52 -3
  424. package/dist/types/wallet-server/src/cloud-host.d.ts +6 -2
  425. package/dist/types/wallet-server/src/core/EmailOtpRecords.d.ts +10 -1
  426. package/dist/types/wallet-server/src/core/EmailOtpStores.d.ts +16 -116
  427. package/dist/types/wallet-server/src/core/IdentityStore.d.ts +2 -7
  428. package/dist/types/wallet-server/src/core/NearPublicKeyStore.d.ts +6 -16
  429. package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +29 -90
  430. package/dist/types/wallet-server/src/core/ThresholdService/config.d.ts +0 -12
  431. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPoolFillHandlers.d.ts +10 -3
  432. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/ecdsaDerivationPresignBridge.d.ts +17 -48
  433. package/dist/types/wallet-server/src/core/ThresholdService/routerAb/internalServiceHttp.d.ts +2 -1
  434. package/dist/types/wallet-server/src/core/ThresholdService/stores/CloudflareDurableObjectStore.d.ts +4 -71
  435. package/dist/types/wallet-server/src/core/ThresholdService/stores/KeyStore.d.ts +2 -1
  436. package/dist/types/wallet-server/src/core/ThresholdService/stores/SessionStore.d.ts +4 -8
  437. package/dist/types/wallet-server/src/core/ThresholdService/stores/StoreConfig.d.ts +2 -1
  438. package/dist/types/wallet-server/src/core/ThresholdService/stores/WalletSessionStore.d.ts +1 -3
  439. package/dist/types/wallet-server/src/core/ThresholdService/validation.d.ts +14 -47
  440. package/dist/types/wallet-server/src/core/WalletAuthMethodStore.d.ts +2 -7
  441. package/dist/types/wallet-server/src/core/WalletStore.d.ts +3 -8
  442. package/dist/types/wallet-server/src/core/WebAuthnAuthenticatorStore.d.ts +7 -22
  443. package/dist/types/wallet-server/src/core/WebAuthnCredentialBindingStore.d.ts +14 -36
  444. package/dist/types/wallet-server/src/core/WebAuthnLoginChallengeStore.d.ts +9 -34
  445. package/dist/types/wallet-server/src/core/WebAuthnSyncChallengeStore.d.ts +9 -34
  446. package/dist/types/wallet-server/src/core/authService/AuthService.d.ts +0 -3
  447. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeOperations.d.ts +6 -5
  448. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeProof.d.ts +9 -17
  449. package/dist/types/wallet-server/src/core/authService/emailOtpChallengeVerification.d.ts +3 -2
  450. package/dist/types/wallet-server/src/core/authService/emailOtpChallenges.d.ts +7 -23
  451. package/dist/types/wallet-server/src/core/authService/emailOtpConfig.d.ts +3 -10
  452. package/dist/types/wallet-server/src/core/authService/emailOtpDelivery.d.ts +4 -3
  453. package/dist/types/wallet-server/src/core/authService/emailOtpGrant.d.ts +4 -3
  454. package/dist/types/wallet-server/src/core/authService/emailOtpRegistrationEnrollment.d.ts +3 -70
  455. package/dist/types/wallet-server/src/core/authService/emailOtpSeal.d.ts +3 -2
  456. package/dist/types/wallet-server/src/core/authService/emailOtpUnlock.d.ts +4 -3
  457. package/dist/types/wallet-server/src/core/authService/googleEmailOtpRegistration.d.ts +5 -8
  458. package/dist/types/wallet-server/src/core/authService/nearPrivateKeySigning.d.ts +3 -2
  459. package/dist/types/wallet-server/src/core/authService/nearPublicKeyMetadata.d.ts +2 -1
  460. package/dist/types/wallet-server/src/core/authService/nearTransactions.d.ts +2 -1
  461. package/dist/types/wallet-server/src/core/authService/oidcVerification.d.ts +4 -3
  462. package/dist/types/wallet-server/src/core/authService/rateLimits.d.ts +0 -3
  463. package/dist/types/wallet-server/src/core/authService/registrationThresholdHelpers.d.ts +0 -26
  464. package/dist/types/wallet-server/src/core/authService/storeRegistry.d.ts +0 -5
  465. package/dist/types/wallet-server/src/core/authService/thresholdEcdsaKeyInventory.d.ts +0 -23
  466. package/dist/types/wallet-server/src/core/authService/webauthn.d.ts +8 -16
  467. package/dist/types/wallet-server/src/core/authService/webauthnOidcHelpers.d.ts +7 -7
  468. package/dist/types/wallet-server/src/core/authService/webauthnVerificationOutcomes.d.ts +43 -0
  469. package/dist/types/wallet-server/src/core/authService/webauthnWalletBinding.d.ts +1 -28
  470. package/dist/types/wallet-server/src/core/d1IdentityStore.d.ts +6 -16
  471. package/dist/types/wallet-server/src/core/d1TenantStore.d.ts +51 -0
  472. package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +11 -29
  473. package/dist/types/wallet-server/src/core/d1WalletStore.d.ts +6 -1
  474. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEd25519ExportRoot.d.ts +2 -1
  475. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceEmailOtpGrant.d.ts +2 -1
  476. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceManagement.d.ts +44 -26
  477. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSession.d.ts +19 -217
  478. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionApproval.d.ts +8 -0
  479. package/dist/types/wallet-server/src/core/deviceLinking/linkedDeviceSessionRecord.d.ts +259 -0
  480. package/dist/types/wallet-server/src/core/deviceLinking/requestProof.d.ts +2 -2
  481. package/dist/types/wallet-server/src/core/emailOtpD1Statements.d.ts +54 -0
  482. package/dist/types/wallet-server/src/core/hostedAccountIds.d.ts +0 -15
  483. package/dist/types/wallet-server/src/core/keyMaterialBrands.d.ts +4 -24
  484. package/dist/types/wallet-server/src/core/nearRelayerAccountProvisioning.d.ts +2 -3
  485. package/dist/types/wallet-server/src/core/nearSignerWasmRuntime.d.ts +0 -1
  486. package/dist/types/wallet-server/src/core/registrationContracts.d.ts +37 -108
  487. package/dist/types/wallet-server/src/core/routerAbSigning/RouterAbNormalSigningRuntime.d.ts +5 -4
  488. package/dist/types/wallet-server/src/core/rpcClients/near/NearClient.d.ts +10 -106
  489. package/dist/types/wallet-server/src/core/signingLanes/LaneAggregateRevocationApplicationService.d.ts +4 -3
  490. package/dist/types/wallet-server/src/core/signingLanes/LaneEffectJournalStore.d.ts +2 -3
  491. package/dist/types/wallet-server/src/core/signingLanes/LaneLifecycleStore.d.ts +2 -3
  492. package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +3 -9
  493. package/dist/types/wallet-server/src/core/signingLanes/ecdsaServerRetirement.d.ts +4 -4
  494. package/dist/types/wallet-server/src/core/signingLanes/ed25519ServerRetirement.d.ts +3 -3
  495. package/dist/types/wallet-server/src/core/storeBackends.d.ts +83 -0
  496. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +13 -59
  497. package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.typecheck.d.ts +51 -3
  498. package/dist/types/wallet-server/src/core/thresholdEcdsaChainTarget.d.ts +0 -1
  499. package/dist/types/wallet-server/src/core/types.d.ts +3 -24
  500. package/dist/types/wallet-server/src/core/webAuthnD1Statements.d.ts +29 -0
  501. package/dist/types/wallet-server/src/core/webAuthnStoreBackends.d.ts +96 -0
  502. package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +11 -7
  503. package/dist/types/wallet-server/src/index.d.ts +1 -1
  504. package/dist/types/wallet-server/src/local-hosted-wallet-gateway-worker.d.ts +1 -4
  505. package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +12 -0
  506. package/dist/types/wallet-server/src/localIntendedEcdsaFinalizeFault.d.ts +33 -0
  507. package/dist/types/wallet-server/src/localIntendedLinkExecuteFault.d.ts +47 -0
  508. package/dist/types/wallet-server/src/localIntendedRevokeFault.d.ts +40 -0
  509. package/dist/types/wallet-server/src/localIntendedSessionAdmissionFault.d.ts +41 -0
  510. package/dist/types/wallet-server/src/localIntendedYaoExportFault.d.ts +41 -0
  511. package/dist/types/wallet-server/src/localIntendedYaoFault.d.ts +7 -1
  512. package/dist/types/wallet-server/src/localIntendedYaoFinalizeFault.d.ts +37 -0
  513. package/dist/types/wallet-server/src/localIntendedYaoRecoveryFault.d.ts +45 -0
  514. package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +51 -0
  515. package/dist/types/wallet-server/src/router/auth/authRequestValidation.d.ts +10 -21
  516. package/dist/types/wallet-server/src/router/auth/commonRouterUtils.d.ts +5 -10
  517. package/dist/types/wallet-server/src/router/auth/walletSessionFailure.d.ts +1 -4
  518. package/dist/types/wallet-server/src/router/auth/webAuthnCredentialCodecs.d.ts +3 -2
  519. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1AuthorizedOperationRouteService.d.ts +12 -0
  520. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthBoundary.d.ts +3 -2
  521. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthConfig.d.ts +2 -2
  522. package/dist/types/wallet-server/src/router/cloudflare/d1/auth/d1RouterApiAuthService.d.ts +1 -1
  523. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/authorizedOperationStatements.d.ts +30 -0
  524. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/d1AuthorizationStore.d.ts +45 -21
  525. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/persistedWalletSessionAuthorization.d.ts +3 -0
  526. package/dist/types/wallet-server/src/router/cloudflare/d1/authorization/walletSessionAuthorityProjection.d.ts +2 -1
  527. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.d.ts +57 -6
  528. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpGrantStore.d.ts +2 -3
  529. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceEmailOtpTargetFactor.d.ts +8 -21
  530. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.d.ts +14 -1
  531. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceRevocation.d.ts +49 -0
  532. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionRecords.d.ts +1 -1
  533. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSessionStore.d.ts +4 -2
  534. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceSourceContributionPreparationPlanner.d.ts +1 -1
  535. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetCredentialProvider.d.ts +2 -2
  536. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceTargetPlanner.d.ts +8 -4
  537. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/d1LinkedDeviceVerifiedLinkBuilder.d.ts +3 -5
  538. package/dist/types/wallet-server/src/router/cloudflare/d1/deviceLinking/installedEcdsaAuthority.d.ts +7 -0
  539. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoCapabilityPersistence.d.ts +1 -2
  540. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoLifecycleDecisionStore.d.ts +33 -0
  541. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeIssuer.d.ts +1 -1
  542. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeStore.d.ts +13 -3
  543. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpChallengeVerifier.d.ts +24 -5
  544. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpEnrollmentStore.d.ts +2 -3
  545. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpGrantStore.d.ts +1 -3
  546. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRateLimitStore.d.ts +3 -4
  547. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.d.ts +9 -8
  548. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.d.ts +0 -2
  549. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer.d.ts +5 -4
  550. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.d.ts +1 -3
  551. package/dist/types/wallet-server/src/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationRecords.d.ts +3 -21
  552. package/dist/types/wallet-server/src/router/cloudflare/d1/identity/d1IdentityRecords.d.ts +0 -23
  553. package/dist/types/wallet-server/src/router/cloudflare/d1/near/d1NearPublicKeyStore.d.ts +1 -2
  554. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.d.ts +11 -19
  555. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyRouteService.d.ts +5 -54
  556. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletCustodyCommitStore.d.ts +7 -19
  557. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpRecords.d.ts +4 -3
  558. package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1WalletRecoveryGoogleEmailOtpService.d.ts +8 -12
  559. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +5 -8
  560. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.d.ts +10 -22
  561. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +6 -2
  562. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +10 -6
  563. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +15 -22
  564. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetup.d.ts +5 -3
  565. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +4 -3
  566. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationSessionCommitReceipt.d.ts +5 -5
  567. package/dist/types/wallet-server/src/router/cloudflare/d1/signingAdmission/d1RouterAbNormalSigningAdmissionStore.d.ts +3 -5
  568. package/dist/types/wallet-server/src/router/cloudflare/d1/signingLanes/d1LaneEffectJournalStore.d.ts +0 -1
  569. package/dist/types/wallet-server/src/router/cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.d.ts +0 -16
  570. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAddSignerService.d.ts +29 -14
  571. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodBoundary.d.ts +15 -12
  572. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodRevocationReplayStore.d.ts +71 -0
  573. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +34 -24
  574. package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthorityStore.d.ts +44 -26
  575. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnRecords.d.ts +3 -7
  576. package/dist/types/wallet-server/src/router/cloudflare/d1/webauthn/d1WebAuthnStore.d.ts +8 -19
  577. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletConsoleTenantRootLineage.d.ts +2 -1
  578. package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -0
  579. package/dist/types/wallet-server/src/router/cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.d.ts +15 -2
  580. package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +2 -2
  581. package/dist/types/wallet-server/src/router/domains/ecdsa/routerAbEcdsaStrictRegistration.d.ts +9 -7
  582. package/dist/types/wallet-server/src/router/domains/ecdsa/thresholdEcdsaRequestValidation.d.ts +4 -4
  583. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision.d.ts +46 -0
  584. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +5 -3
  585. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +20 -79
  586. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.d.ts +2 -0
  587. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRunner.d.ts +1 -1
  588. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +4 -3
  589. package/dist/types/wallet-server/src/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.d.ts +62 -42
  590. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +108 -32
  591. package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryActivation.typecheck.d.ts +5 -0
  592. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +36 -5
  593. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +5 -4
  594. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord.d.ts +41 -50
  595. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +2 -2
  596. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +3 -3
  597. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.d.ts +6 -5
  598. package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationTwoPhaseRunner.d.ts +14 -4
  599. package/dist/types/wallet-server/src/router/domains/ed25519Yao/routerAbEd25519YaoGatewayEnvelope.d.ts +12 -1
  600. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/routerAbEd25519YaoWalletSession.d.ts +5 -5
  601. package/dist/types/wallet-server/src/router/domains/ed25519Yao/session/thresholdEd25519RequestValidation.d.ts +3 -4
  602. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpExportPolicy.d.ts +2 -27
  603. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRequestValidation.d.ts +1 -2
  604. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpRouteHandlers.d.ts +2 -1
  605. package/dist/types/wallet-server/src/router/domains/emailOtp/emailOtpSessionRouteHelpers.d.ts +2 -102
  606. package/dist/types/wallet-server/src/router/domains/passkeyCustody/envelopeRevocationAdmission.d.ts +2 -1
  607. package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrieval.d.ts +3 -2
  608. package/dist/types/wallet-server/src/router/domains/passkeyCustody/passkeyCustodyEnvelopeRetrievalRoute.d.ts +1 -9
  609. package/dist/types/wallet-server/src/router/domains/passkeyCustody/registrationCustodyOutcome.d.ts +2 -1
  610. package/dist/types/wallet-server/src/router/domains/passkeyCustody/verifiedCustodyFactor.d.ts +2 -1
  611. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationAdmission.d.ts +2 -1
  612. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletCustodyRegistrationCommit.d.ts +2 -28
  613. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryFinalization.d.ts +43 -1
  614. package/dist/types/wallet-server/src/router/domains/passkeyCustody/walletRecoveryKeyManifest.d.ts +7 -7
  615. package/dist/types/wallet-server/src/router/domains/signingOperations/ed25519AuthorizedOperationReceipt.d.ts +0 -3
  616. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEcdsaDerivationNormalSigningRoute.d.ts +165 -0
  617. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbEd25519NormalSigningRoute.d.ts +110 -0
  618. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmission.d.ts +360 -0
  619. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.d.ts +11 -10
  620. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.typecheck.d.ts +2 -0
  621. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbOperationStepUp.d.ts +165 -0
  622. package/dist/types/wallet-server/src/router/domains/signingOperations/routerAbPrivateSigningWorker.d.ts +16 -702
  623. package/dist/types/wallet-server/src/router/domains/signingOperations/walletExecutionAdmission.d.ts +5 -12
  624. package/dist/types/wallet-server/src/router/domains/syncAccount/syncAccountRequestValidation.d.ts +5 -4
  625. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootCustodyLineage.d.ts +6 -1
  626. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootIdentityResolution.d.ts +4 -7
  627. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +2 -1
  628. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +8 -8
  629. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationSetupPayload.d.ts +4 -4
  630. package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRequestedCapabilitiesValidation.d.ts +4 -4
  631. package/dist/types/wallet-server/src/router/domains/walletUnlock/walletUnlockRouteHandlers.d.ts +4 -62
  632. package/dist/types/wallet-server/src/router/express-adaptor.d.ts +2 -2
  633. package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +64 -61
  634. package/dist/types/wallet-server/src/router/framework/http.d.ts +0 -1
  635. package/dist/types/wallet-server/src/router/framework/ror/normalize.d.ts +2 -2
  636. package/dist/types/wallet-server/src/router/framework/routeMeteringPolicy.d.ts +3 -2
  637. package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +1 -1
  638. package/dist/types/wallet-server/src/router/framework/routerApiRouteSurface.d.ts +3 -3
  639. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGateway.d.ts +34 -0
  640. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayCheck.d.ts +21 -0
  641. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayMain.d.ts +2 -0
  642. package/dist/types/wallet-server/src/router/node/nodeHttp.d.ts +13 -0
  643. package/dist/types/wallet-server/src/router/node/nodeSqlite.d.ts +22 -0
  644. package/dist/types/wallet-server/src/router/node/signerSqlMigrations.d.ts +20 -0
  645. package/dist/types/wallet-server/src/router/transport/fetch/createFetchRouter.d.ts +1 -3
  646. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinking.d.ts +5 -6
  647. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.d.ts +2 -2
  648. package/dist/types/wallet-server/src/router/transport/fetch/routes/deviceManagement.d.ts +14 -16
  649. package/dist/types/wallet-server/src/router/transport/fetch/routes/normalSigningRouterProxy.d.ts +0 -12
  650. package/dist/types/wallet-server/src/router/transport/fetch/routes/passkeyCustody.d.ts +1 -1
  651. package/dist/types/wallet-server/src/router/transport/fetch/routes/sessions.d.ts +2 -1
  652. package/dist/types/wallet-server/src/router/transport/fetch/routes/syncAccountBootstrap.d.ts +7 -13
  653. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEcdsa.d.ts +3 -57
  654. package/dist/types/wallet-server/src/router/transport/fetch/routes/thresholdEd25519.d.ts +0 -44
  655. package/dist/types/wallet-server/src/storage/d1Sql.d.ts +7 -0
  656. package/dist/types/wallet-server/src/storage/syncSqlite.d.ts +28 -0
  657. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +0 -1
  658. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyRecords.d.ts +5 -6
  659. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/shared.d.ts +1 -0
  660. package/dist/types/wallet-server/src/threshold/statusCodes.d.ts +4 -4
  661. package/migrations/d1-signer/0036_r150_yao_lifecycle_decisions.sql +22 -0
  662. package/migrations/d1-signer/0037_r150_wallet_auth_method_revocation_replays.sql +26 -0
  663. package/migrations/d1-signer/0038_r150_registration_ceremony_cas_guard_seed.sql +8 -0
  664. package/migrations/d1-signer/0039_r150_revocation_replay_answer_kind.sql +9 -0
  665. package/package.json +1 -1
  666. package/dist/esm/core/ThresholdService/ecdsaClientRootProof.js +0 -27
  667. package/dist/esm/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.js +0 -115
  668. package/dist/esm/core/ThresholdService/secureRandomId.js +0 -9
  669. package/dist/esm/core/authService/record.js +0 -8
  670. package/dist/esm/core/authService/thresholdRuntimePolicy.js +0 -19
  671. package/dist/esm/core/authService/walletRegistrationPlanning.js +0 -49
  672. package/dist/esm/core/deviceLinking/index.js +0 -5
  673. package/dist/esm/core/errors.js +0 -54
  674. package/dist/esm/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.js +0 -39
  675. package/dist/esm/core/signingLanes/WalletKeyStore.js +0 -0
  676. package/dist/esm/core/signingLanes/index.js +0 -8
  677. package/dist/esm/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.js +0 -55
  678. package/dist/esm/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.js +0 -56
  679. package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
  680. package/dist/esm/wasm/router_ab_ecdsa_signing_worker/pkg/router_ab_ecdsa_signing_worker.js +0 -414
  681. package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +0 -74
  682. package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +0 -34
  683. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +0 -62
  684. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +0 -2
  685. package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +0 -11
  686. package/dist/types/shared-ts/src/utils/bigint.d.ts +0 -3
  687. package/dist/types/shared-ts/src/utils/paillier.d.ts +0 -37
  688. package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +0 -12
  689. package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +0 -2
  690. package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +0 -37
  691. package/dist/types/wallet-server/src/core/ThresholdService/ecdsaClientRootProof.d.ts +0 -12
  692. package/dist/types/wallet-server/src/core/ThresholdService/routerAbEcdsaSigningWorkerWasm.d.ts +0 -17
  693. package/dist/types/wallet-server/src/core/ThresholdService/secureRandomId.d.ts +0 -2
  694. package/dist/types/wallet-server/src/core/authService/record.d.ts +0 -2
  695. package/dist/types/wallet-server/src/core/authService/thresholdRuntimePolicy.d.ts +0 -4
  696. package/dist/types/wallet-server/src/core/authService/walletRegistrationPlanning.d.ts +0 -19
  697. package/dist/types/wallet-server/src/core/deviceLinking/index.d.ts +0 -5
  698. package/dist/types/wallet-server/src/core/errors.d.ts +0 -10
  699. package/dist/types/wallet-server/src/core/routerAbSigning/createCloudflareDurableObjectRouterAbSigningRuntimes.d.ts +0 -28
  700. package/dist/types/wallet-server/src/core/signingLanes/SigningLaneStore.d.ts +0 -15
  701. package/dist/types/wallet-server/src/core/signingLanes/WalletKeyStore.d.ts +0 -13
  702. package/dist/types/wallet-server/src/core/signingLanes/index.d.ts +0 -11
  703. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEcdsaWalletSessionComposition.d.ts +0 -35
  704. package/dist/types/wallet-server/src/router/domains/tenantRoot/tenantRootEd25519WalletSessionComposition.d.ts +0 -35
  705. /package/dist/esm/{core/signingLanes/SigningLaneStore.js → authorization/ecdsaWalletSessionAdmission.js} +0 -0
@@ -1,19 +1,12 @@
1
1
  import { normalizeOptionalTrimmedString } from "../shared-ts/src/utils/normalize.js";
2
2
  import { isPlainObject } from "../shared-ts/src/utils/validation.js";
3
- import { d1ChangedRows, formatD1ExecStatement, resolveD1DatabaseFromConfig } from "../storage/d1Sql.js";
4
- import "./defaultConfigsServer.js";
5
- import { parseCurrentEmailOtpAuthStateRecord, parseCurrentEmailOtpAuthStateRow, parseCurrentEmailOtpChallengeRecord, parseCurrentEmailOtpChallengeRow, parseCurrentEmailOtpGrantRecord, parseCurrentEmailOtpGrantRow, parseCurrentEmailOtpUnlockChallengeRecord, parseCurrentEmailOtpUnlockChallengeRow, parseCurrentEmailOtpWalletEnrollmentRecord, parseCurrentEmailOtpWalletEnrollmentRow, parseCurrentGoogleEmailOtpRegistrationAttemptRecord, parseCurrentGoogleEmailOtpRegistrationAttemptRow } from "./EmailOtpRecords.js";
3
+ import { d1ChangedRows, resolveD1DatabaseFromConfig } from "../storage/d1Sql.js";
4
+ import { D1TenantTable, d1TenantScopeFromConfig, resolveStorePrefix } from "./d1TenantStore.js";
5
+ import { parseCurrentEmailOtpAuthStateRecord, parseCurrentEmailOtpAuthStateRow, parseCurrentEmailOtpChallengeRecord, parseCurrentEmailOtpChallengeRow, parseCurrentEmailOtpGrantRecord, parseCurrentEmailOtpGrantRow, parseCurrentEmailOtpUnlockChallengeRecord, parseCurrentEmailOtpUnlockChallengeRow, parseCurrentEmailOtpWalletEnrollmentRecord, parseCurrentEmailOtpWalletEnrollmentRow, parseCurrentGoogleEmailOtpRegistrationAttemptRecord, parseCurrentGoogleEmailOtpRegistrationAttemptRow, parseJsonRecord, registrationAttemptMatchesReplacementScope, registrationAttemptMatchesStartedScope } from "./EmailOtpRecords.js";
6
+ import { emailOtpAuthStateRows, emailOtpChallengeRows, emailOtpGrantRows, emailOtpRegistrationAttemptRows, emailOtpUnlockChallengeRows, emailOtpWalletEnrollmentRows } from "./emailOtpD1Statements.js";
6
7
  //#region src/core/EmailOtpStores.ts
7
- function runtimePolicyScopeKey(scope) {
8
- if (!scope) return "";
9
- return `${scope.orgId}\n${scope.projectId}\n${scope.envId}\n${scope.signingRootVersion}`;
10
- }
11
- function registrationAttemptMatchesStartedScope(record, input) {
12
- return record.providerSubject === input.providerSubject && record.email === input.email && record.ownerProofBindingDigest === input.ownerProofBindingDigest && record.runtimePolicyScope?.orgId === input.orgId && runtimePolicyScopeKey(record.runtimePolicyScope) === runtimePolicyScopeKey(input.runtimePolicyScope) && (record.state === "started" || record.state === "key_finalized") && record.expiresAtMs > input.nowMs;
13
- }
14
- function registrationAttemptMatchesReplacementScope(record, input) {
15
- return record.providerSubject === input.providerSubject && record.email === input.email && record.ownerProofBindingDigest !== input.ownerProofBindingDigest && record.runtimePolicyScope?.orgId === input.orgId && runtimePolicyScopeKey(record.runtimePolicyScope) === runtimePolicyScopeKey(input.runtimePolicyScope) && (record.state === "started" || record.state === "key_finalized") && record.expiresAtMs > input.nowMs;
16
- }
8
+ /** Names the Email OTP stores in D1 scope errors. */
9
+ const EMAIL_OTP_D1_STORE = "Email OTP store";
17
10
  const EMAIL_OTP_STORE_D1_SCHEMA_SQL = Object.freeze([
18
11
  `
19
12
  CREATE TABLE IF NOT EXISTS email_otp_challenges (
@@ -261,99 +254,109 @@ const EMAIL_OTP_STORE_D1_SCHEMA_SQL = Object.freeze([
261
254
  )
262
255
  `
263
256
  ]);
264
- async function ensureEmailOtpStoreD1Schema(options) {
265
- for (const statement of EMAIL_OTP_STORE_D1_SCHEMA_SQL) await options.database.exec(formatD1ExecStatement(statement));
266
- }
267
- function toPrefixWithColon(prefix, defaultPrefix) {
268
- const p = normalizeOptionalTrimmedString(prefix);
269
- if (!p) return defaultPrefix;
270
- return p.endsWith(":") ? p : `${p}:`;
271
- }
272
- function resolveEmailOtpStoreNamespace(config) {
273
- const explicit = normalizeOptionalTrimmedString(config.EMAIL_OTP_PREFIX) || normalizeOptionalTrimmedString(config.EMAIL_OTP_STORE_PREFIX);
274
- if (explicit) return toPrefixWithColon(explicit, "");
275
- return `${toPrefixWithColon(normalizeOptionalTrimmedString(config.THRESHOLD_PREFIX) || "w3a", `w3a:`)}email-otp:`;
276
- }
277
- function getStoreConfig(input) {
278
- return isPlainObject(input?.config) ? input.config : {};
279
- }
280
- function requireD1ScopeString(input, field) {
281
- const normalized = normalizeOptionalTrimmedString(input);
282
- if (!normalized) throw new Error(`${field} is required for D1 Email OTP store`);
283
- return normalized;
284
- }
285
- function normalizeD1EmailOtpStoreOptions(input) {
286
- return {
287
- database: input.database,
288
- namespace: requireD1ScopeString(input.namespace, "namespace"),
289
- orgId: requireD1ScopeString(input.orgId, "orgId"),
290
- projectId: requireD1ScopeString(input.projectId, "projectId"),
291
- envId: requireD1ScopeString(input.envId, "envId"),
292
- ensureSchema: input.ensureSchema !== false
293
- };
294
- }
295
- function d1ScopeFromConfig(input) {
296
- return {
297
- namespace: requireD1ScopeString(input.namespace, "namespace"),
298
- orgId: requireD1ScopeString(input.config.orgId || input.config.ORG_ID, "orgId"),
299
- projectId: requireD1ScopeString(input.config.projectId || input.config.PROJECT_ID, "projectId"),
300
- envId: requireD1ScopeString(input.config.envId || input.config.ENV_ID, "envId")
301
- };
302
- }
303
- function bindD1EmailOtpScope(database, scope, statement, values = []) {
304
- return database.prepare(statement).bind(scope.namespace, scope.orgId, scope.projectId, scope.envId, ...values);
305
- }
306
- function assertD1EmailOtpOrgScope(input) {
307
- if (!input.recordOrgId) return;
308
- if (input.recordOrgId !== input.scope.orgId) throw new Error(`${input.label} orgId must match D1 Email OTP store orgId`);
309
- }
310
- function resolveD1EmailOtpStoreOptions(input, storeLabel) {
311
- const config = getStoreConfig(input);
312
- if (normalizeOptionalTrimmedString(config.kind) !== "d1") return null;
313
- const database = resolveD1DatabaseFromConfig(config);
314
- if (!database) throw new Error(`[email-otp] D1 ${storeLabel} store selected but no D1 database was provided`);
315
- return {
316
- database,
317
- ...d1ScopeFromConfig({
318
- config,
319
- namespace: resolveEmailOtpStoreNamespace(config)
320
- })
321
- };
257
+ /**
258
+ * Selects a store's backend: D1 when the config's `kind` is `d1`, else in memory; any other
259
+ * `kind` is an error. `label` names the store in log lines and errors; the unknown-kind error
260
+ * uses `kindLabel`, which the wallet enrollment store shortens to `enrollment`. The store type
261
+ * `S` comes from the caller's return type.
262
+ */
263
+ function createEmailOtpStore(input, label, build, kindLabel = label) {
264
+ const config = isPlainObject(input?.config) ? input.config : {};
265
+ const kind = normalizeOptionalTrimmedString(config.kind);
266
+ if (kind === "d1") {
267
+ const database = resolveD1DatabaseFromConfig(config);
268
+ if (!database) throw new Error(`[email-otp] D1 ${label} store selected but no D1 database was provided`);
269
+ const scope = d1TenantScopeFromConfig(config, resolveStorePrefix(config, ["EMAIL_OTP_PREFIX", "EMAIL_OTP_STORE_PREFIX"], "email-otp:"), EMAIL_OTP_D1_STORE);
270
+ input?.logger?.info(`[email-otp] Using D1 ${label} store`);
271
+ return build.d1(database, scope);
272
+ }
273
+ if (kind && kind !== "in-memory") throw new Error(`[email-otp] Unknown ${kindLabel} store kind: ${kind}`);
274
+ input?.logger?.info(`[email-otp] Using in-memory ${label} store (non-persistent)`);
275
+ return build.inMemory();
322
276
  }
323
- function assertEmailOtpStoreKindKnown(input, storeLabel) {
324
- const kind = normalizeOptionalTrimmedString(getStoreConfig(input).kind);
325
- if (!kind || kind === "in-memory") return;
326
- throw new Error(`[email-otp] Unknown ${storeLabel} store kind: ${kind}`);
277
+ const CHALLENGE_RECORD = {
278
+ label: "Email OTP challenge",
279
+ parse: parseCurrentEmailOtpChallengeRecord,
280
+ id: (record) => record.challengeId,
281
+ orgId: (record) => record.orgId
282
+ };
283
+ const GRANT_RECORD = {
284
+ label: "Email OTP grant",
285
+ parse: parseCurrentEmailOtpGrantRecord,
286
+ id: (record) => record.grantToken,
287
+ orgId: (record) => record.orgId
288
+ };
289
+ const WALLET_ENROLLMENT_RECORD = {
290
+ label: "Email OTP wallet enrollment",
291
+ parse: parseCurrentEmailOtpWalletEnrollmentRecord,
292
+ id: (record) => record.walletId,
293
+ orgId: (record) => record.orgId
294
+ };
295
+ const AUTH_STATE_RECORD = {
296
+ label: "Email OTP auth state",
297
+ parse: parseCurrentEmailOtpAuthStateRecord,
298
+ id: (record) => record.walletId,
299
+ orgId: (record) => record.orgId
300
+ };
301
+ const UNLOCK_CHALLENGE_RECORD = {
302
+ label: "Email OTP unlock challenge",
303
+ parse: parseCurrentEmailOtpUnlockChallengeRecord,
304
+ id: (record) => record.challengeId,
305
+ orgId: (record) => record.orgId
306
+ };
307
+ const REGISTRATION_ATTEMPT_RECORD = {
308
+ label: "Google Email OTP registration attempt",
309
+ parse: parseCurrentGoogleEmailOtpRegistrationAttemptRecord,
310
+ id: (record) => record.attemptId,
311
+ orgId: (record) => record.runtimePolicyScope?.orgId
312
+ };
313
+ function parseEmailOtpRecord(spec, record) {
314
+ const parsed = spec.parse(record);
315
+ if (!parsed) throw new Error(`Invalid ${spec.label} record`);
316
+ return parsed;
327
317
  }
328
318
  function cloneRecord(value) {
329
319
  return JSON.parse(JSON.stringify(value));
330
320
  }
331
- function parseJsonRecord(raw) {
332
- if (typeof raw !== "string") return raw;
333
- try {
334
- return JSON.parse(raw);
335
- } catch {
336
- return raw;
337
- }
338
- }
339
321
  function challengeContextMatches(record, input) {
340
322
  return record.expiresAtMs > input.nowMs && record.challengeSubjectId === input.challengeSubjectId && record.walletId === input.walletId && String(record.orgId || "") === String(input.orgId || "") && record.otpChannel === input.otpChannel && record.ownerProofBindingDigest === input.ownerProofBindingDigest && record.action === input.action && record.operation === input.operation;
341
323
  }
342
- var InMemoryEmailOtpChallengeStore = class {
343
- constructor() {
324
+ /** Keeps copies of parsed records by id, so no caller shares a stored object. */
325
+ var InMemoryEmailOtpStore = class {
326
+ constructor(spec) {
327
+ this.spec = spec;
344
328
  this.map = /* @__PURE__ */ new Map();
345
329
  }
346
330
  async put(record) {
347
- const parsed = parseCurrentEmailOtpChallengeRecord(record);
348
- if (!parsed) throw new Error("Invalid Email OTP challenge record");
349
- this.map.set(parsed.challengeId, cloneRecord(parsed));
331
+ this.set(parseEmailOtpRecord(this.spec, record));
350
332
  }
351
- async get(challengeId) {
352
- const id = normalizeOptionalTrimmedString(challengeId);
353
- if (!id) return null;
354
- const record = this.map.get(id);
333
+ set(record) {
334
+ this.map.set(this.spec.id(record), cloneRecord(record));
335
+ }
336
+ async get(id) {
337
+ const key = normalizeOptionalTrimmedString(id);
338
+ if (!key) return null;
339
+ const record = this.map.get(key);
340
+ return record ? cloneRecord(record) : null;
341
+ }
342
+ /** Reads and deletes, so a one-time record is used at most once. */
343
+ async consume(id) {
344
+ const key = normalizeOptionalTrimmedString(id);
345
+ if (!key) return null;
346
+ const record = this.map.get(key);
347
+ this.map.delete(key);
355
348
  return record ? cloneRecord(record) : null;
356
349
  }
350
+ async del(id) {
351
+ const key = normalizeOptionalTrimmedString(id);
352
+ if (!key) return;
353
+ this.map.delete(key);
354
+ }
355
+ };
356
+ var InMemoryEmailOtpChallengeStore = class extends InMemoryEmailOtpStore {
357
+ constructor() {
358
+ super(CHALLENGE_RECORD);
359
+ }
357
360
  async deleteExpired(nowMs) {
358
361
  const deleted = [];
359
362
  for (const [challengeId, record] of this.map.entries()) {
@@ -397,49 +400,10 @@ var InMemoryEmailOtpChallengeStore = class {
397
400
  }
398
401
  return null;
399
402
  }
400
- async del(challengeId) {
401
- const id = normalizeOptionalTrimmedString(challengeId);
402
- if (!id) return;
403
- this.map.delete(id);
404
- }
405
- };
406
- var InMemoryEmailOtpGrantStore = class {
407
- constructor() {
408
- this.map = /* @__PURE__ */ new Map();
409
- }
410
- async put(record) {
411
- const parsed = parseCurrentEmailOtpGrantRecord(record);
412
- if (!parsed) throw new Error("Invalid Email OTP grant record");
413
- this.map.set(parsed.grantToken, cloneRecord(parsed));
414
- }
415
- async get(grantToken) {
416
- const token = normalizeOptionalTrimmedString(grantToken);
417
- if (!token) return null;
418
- const record = this.map.get(token);
419
- return record ? cloneRecord(record) : null;
420
- }
421
- async consume(grantToken) {
422
- const token = normalizeOptionalTrimmedString(grantToken);
423
- if (!token) return null;
424
- const record = this.map.get(token);
425
- this.map.delete(token);
426
- return record ? cloneRecord(record) : null;
427
- }
428
- async del(grantToken) {
429
- const token = normalizeOptionalTrimmedString(grantToken);
430
- if (!token) return;
431
- this.map.delete(token);
432
- }
433
403
  };
434
- var InMemoryEmailOtpWalletEnrollmentStore = class {
404
+ var InMemoryEmailOtpWalletEnrollmentStore = class extends InMemoryEmailOtpStore {
435
405
  constructor() {
436
- this.map = /* @__PURE__ */ new Map();
437
- }
438
- async get(walletId) {
439
- const key = normalizeOptionalTrimmedString(walletId);
440
- if (!key) return null;
441
- const record = this.map.get(key);
442
- return record ? cloneRecord(record) : null;
406
+ super(WALLET_ENROLLMENT_RECORD);
443
407
  }
444
408
  async getByProviderUserId(input) {
445
409
  const providerUserId = normalizeOptionalTrimmedString(input.providerUserId);
@@ -449,74 +413,14 @@ var InMemoryEmailOtpWalletEnrollmentStore = class {
449
413
  return record ? cloneRecord(record) : null;
450
414
  }
451
415
  async put(record) {
452
- const parsed = parseCurrentEmailOtpWalletEnrollmentRecord(record);
453
- if (!parsed) throw new Error("Invalid Email OTP wallet enrollment record");
416
+ const parsed = parseEmailOtpRecord(this.spec, record);
454
417
  if (Array.from(this.map.values()).find((existing) => existing.walletId !== parsed.walletId && existing.orgId === parsed.orgId && existing.providerUserId === parsed.providerUserId)) throw new Error("Email OTP wallet enrollment already exists for this provider user in org");
455
- this.map.set(parsed.walletId, cloneRecord(parsed));
456
- }
457
- async del(walletId) {
458
- const key = normalizeOptionalTrimmedString(walletId);
459
- if (!key) return;
460
- this.map.delete(key);
461
- }
462
- };
463
- var InMemoryEmailOtpAuthStateStore = class {
464
- constructor() {
465
- this.map = /* @__PURE__ */ new Map();
466
- }
467
- async get(walletId) {
468
- const key = normalizeOptionalTrimmedString(walletId);
469
- if (!key) return null;
470
- const record = this.map.get(key);
471
- return record ? cloneRecord(record) : null;
472
- }
473
- async put(record) {
474
- const parsed = parseCurrentEmailOtpAuthStateRecord(record);
475
- if (!parsed) throw new Error("Invalid Email OTP auth state record");
476
- this.map.set(parsed.walletId, cloneRecord(parsed));
477
- }
478
- async del(walletId) {
479
- const key = normalizeOptionalTrimmedString(walletId);
480
- if (!key) return;
481
- this.map.delete(key);
482
- }
483
- };
484
- var InMemoryEmailOtpUnlockChallengeStore = class {
485
- constructor() {
486
- this.map = /* @__PURE__ */ new Map();
487
- }
488
- async put(record) {
489
- const parsed = parseCurrentEmailOtpUnlockChallengeRecord(record);
490
- if (!parsed) throw new Error("Invalid Email OTP unlock challenge record");
491
- this.map.set(parsed.challengeId, cloneRecord(parsed));
492
- }
493
- async consume(challengeId) {
494
- const id = normalizeOptionalTrimmedString(challengeId);
495
- if (!id) return null;
496
- const record = this.map.get(id);
497
- this.map.delete(id);
498
- return record ? cloneRecord(record) : null;
499
- }
500
- async del(challengeId) {
501
- const id = normalizeOptionalTrimmedString(challengeId);
502
- if (!id) return;
503
- this.map.delete(id);
418
+ this.set(parsed);
504
419
  }
505
420
  };
506
- var InMemoryEmailOtpRegistrationAttemptStore = class {
421
+ var InMemoryEmailOtpRegistrationAttemptStore = class extends InMemoryEmailOtpStore {
507
422
  constructor() {
508
- this.map = /* @__PURE__ */ new Map();
509
- }
510
- async put(record) {
511
- const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRecord(record);
512
- if (!parsed) throw new Error("Invalid Google Email OTP registration attempt record");
513
- this.map.set(parsed.attemptId, cloneRecord(parsed));
514
- }
515
- async get(attemptId) {
516
- const id = normalizeOptionalTrimmedString(attemptId);
517
- if (!id) return null;
518
- const record = this.map.get(id);
519
- return record ? cloneRecord(record) : null;
423
+ super(REGISTRATION_ATTEMPT_RECORD);
520
424
  }
521
425
  async findStartedBySubjectEmail(input) {
522
426
  for (const record of this.map.values()) if (registrationAttemptMatchesStartedScope(record, input)) return cloneRecord(record);
@@ -549,93 +453,135 @@ var InMemoryEmailOtpRegistrationAttemptStore = class {
549
453
  return deleted;
550
454
  }
551
455
  };
552
- var D1EmailOtpStoreBase = class {
553
- constructor(input) {
554
- this.schemaReady = false;
555
- const normalized = normalizeD1EmailOtpStoreOptions(input);
556
- this.database = normalized.database;
557
- this.scope = {
558
- namespace: normalized.namespace,
559
- orgId: normalized.orgId,
560
- projectId: normalized.projectId,
561
- envId: normalized.envId
562
- };
563
- this.ensureSchemaOnUse = normalized.ensureSchema;
456
+ function challengeFromRow(row) {
457
+ return parseCurrentEmailOtpChallengeRow({
458
+ recordJson: parseJsonRecord(row?.record_json),
459
+ expiresAtMs: row?.expires_at_ms
460
+ });
461
+ }
462
+ function grantFromRow(row) {
463
+ return parseCurrentEmailOtpGrantRow({
464
+ recordJson: parseJsonRecord(row?.record_json),
465
+ expiresAtMs: row?.expires_at_ms
466
+ });
467
+ }
468
+ function walletEnrollmentFromRow(row) {
469
+ return parseCurrentEmailOtpWalletEnrollmentRow({
470
+ recordJson: parseJsonRecord(row?.record_json),
471
+ updatedAtMs: row?.updated_at_ms
472
+ });
473
+ }
474
+ function authStateFromRow(row) {
475
+ return parseCurrentEmailOtpAuthStateRow({
476
+ recordJson: parseJsonRecord(row?.record_json),
477
+ updatedAtMs: row?.updated_at_ms
478
+ });
479
+ }
480
+ function unlockChallengeFromRow(row) {
481
+ return parseCurrentEmailOtpUnlockChallengeRow({
482
+ recordJson: parseJsonRecord(row?.record_json),
483
+ expiresAtMs: row?.expires_at_ms
484
+ });
485
+ }
486
+ function registrationAttemptFromRow(row) {
487
+ return parseCurrentGoogleEmailOtpRegistrationAttemptRow({
488
+ recordJson: parseJsonRecord(row?.record_json),
489
+ expiresAtMs: row?.expires_at_ms,
490
+ updatedAtMs: row?.updated_at_ms
491
+ });
492
+ }
493
+ /**
494
+ * A record's store in one D1 tenant scope. The core schema is created on first use, and a row
495
+ * that no longer parses is deleted when it is read.
496
+ */
497
+ var D1EmailOtpStore = class {
498
+ constructor(database, scope, spec, rows) {
499
+ this.spec = spec;
500
+ this.rows = rows;
501
+ this.adapterKind = "d1";
502
+ this.prepare = (sql, values) => this.table.prepare(sql, values);
503
+ this.table = new D1TenantTable({
504
+ database,
505
+ ...scope
506
+ }, EMAIL_OTP_D1_STORE, EMAIL_OTP_STORE_D1_SCHEMA_SQL);
564
507
  }
565
- async ensureSchema() {
566
- if (!this.ensureSchemaOnUse || this.schemaReady) return;
567
- await ensureEmailOtpStoreD1Schema({ database: this.database });
568
- this.schemaReady = true;
508
+ ensureSchema() {
509
+ return this.table.ensureSchema();
569
510
  }
570
- bindScope(statement, values = []) {
571
- return bindD1EmailOtpScope(this.database, this.scope, statement, values);
511
+ async put(record) {
512
+ await this.ensureSchema();
513
+ const parsed = parseEmailOtpRecord(this.spec, record);
514
+ const recordOrgId = this.spec.orgId(parsed);
515
+ if (recordOrgId && recordOrgId !== this.table.scope.orgId) throw new Error(`${this.spec.label} orgId must match D1 Email OTP store orgId`);
516
+ await this.rows.upsert(this.prepare, parsed).run();
572
517
  }
573
- };
574
- var D1EmailOtpChallengeStore = class extends D1EmailOtpStoreBase {
575
- constructor(..._args) {
576
- super(..._args);
577
- this.adapterKind = "d1";
518
+ async getById(id, select) {
519
+ await this.ensureSchema();
520
+ const key = normalizeOptionalTrimmedString(id);
521
+ if (!key) return null;
522
+ const row = await select(this.prepare, key).first();
523
+ return row ? this.recordOrDiscard(row, key) : null;
578
524
  }
579
- async put(record) {
525
+ /** Reads and deletes, so a one-time record is used at most once. */
526
+ async consumeById(id, consume) {
580
527
  await this.ensureSchema();
581
- const parsed = parseCurrentEmailOtpChallengeRecord(record);
582
- if (!parsed) throw new Error("Invalid Email OTP challenge record");
583
- assertD1EmailOtpOrgScope({
584
- recordOrgId: parsed.orgId,
585
- scope: this.scope,
586
- label: "Email OTP challenge"
528
+ const key = normalizeOptionalTrimmedString(id);
529
+ if (!key) return null;
530
+ const row = await consume(this.prepare, key).first();
531
+ const parsed = this.rows.fromRow(row);
532
+ return parsed ? cloneRecord(parsed) : null;
533
+ }
534
+ async deleteById(id, remove) {
535
+ await this.ensureSchema();
536
+ const key = normalizeOptionalTrimmedString(id);
537
+ if (!key) return;
538
+ await remove(this.prepare, key).run();
539
+ }
540
+ /** The row's record; a row that does not parse is deleted by `malformedId` and reads as null. */
541
+ async recordOrDiscard(row, malformedId) {
542
+ const parsed = this.rows.fromRow(row);
543
+ if (parsed) return cloneRecord(parsed);
544
+ const id = normalizeOptionalTrimmedString(malformedId);
545
+ if (id) await this.del(id);
546
+ return null;
547
+ }
548
+ };
549
+ const ACTIVE_CHALLENGE_CONTEXT_SQL = `WHERE namespace = ?
550
+ AND org_id = ?
551
+ AND project_id = ?
552
+ AND env_id = ?
553
+ AND expires_at_ms > ?
554
+ AND challenge_subject_id = ?
555
+ AND wallet_id = ?
556
+ AND record_org_id = ?
557
+ AND otp_channel = ?
558
+ AND owner_proof_binding_digest = ?
559
+ AND action = ?
560
+ AND operation = ?`;
561
+ function challengeContextValues(input) {
562
+ return [
563
+ input.nowMs,
564
+ input.challengeSubjectId,
565
+ input.walletId,
566
+ String(input.orgId || ""),
567
+ input.otpChannel,
568
+ input.ownerProofBindingDigest,
569
+ input.action,
570
+ input.operation
571
+ ];
572
+ }
573
+ var D1EmailOtpChallengeStore = class extends D1EmailOtpStore {
574
+ constructor(database, scope) {
575
+ super(database, scope, CHALLENGE_RECORD, {
576
+ fromRow: challengeFromRow,
577
+ upsert: emailOtpChallengeRows.upsert
587
578
  });
588
- await this.bindScope(`INSERT INTO email_otp_challenges (
589
- namespace,
590
- org_id,
591
- project_id,
592
- env_id,
593
- challenge_id,
594
- challenge_subject_id,
595
- wallet_id,
596
- record_org_id,
597
- otp_channel,
598
- owner_proof_binding_digest,
599
- action,
600
- operation,
601
- otp_code,
602
- record_json,
603
- created_at_ms,
604
- expires_at_ms
605
- )
606
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
607
- ON CONFLICT (namespace, org_id, project_id, env_id, challenge_id)
608
- DO UPDATE SET
609
- challenge_subject_id = EXCLUDED.challenge_subject_id,
610
- wallet_id = EXCLUDED.wallet_id,
611
- record_org_id = EXCLUDED.record_org_id,
612
- otp_channel = EXCLUDED.otp_channel,
613
- owner_proof_binding_digest = EXCLUDED.owner_proof_binding_digest,
614
- action = EXCLUDED.action,
615
- operation = EXCLUDED.operation,
616
- otp_code = EXCLUDED.otp_code,
617
- record_json = EXCLUDED.record_json,
618
- created_at_ms = EXCLUDED.created_at_ms,
619
- expires_at_ms = EXCLUDED.expires_at_ms`, [
620
- parsed.challengeId,
621
- parsed.challengeSubjectId,
622
- parsed.walletId,
623
- parsed.orgId || "",
624
- parsed.otpChannel,
625
- parsed.ownerProofBindingDigest,
626
- parsed.action,
627
- parsed.operation,
628
- parsed.otpCode,
629
- JSON.stringify(parsed),
630
- parsed.createdAtMs,
631
- parsed.expiresAtMs
632
- ]).run();
633
579
  }
634
580
  async get(challengeId) {
635
581
  await this.ensureSchema();
636
582
  const id = normalizeOptionalTrimmedString(challengeId);
637
583
  if (!id) return null;
638
- const row = await this.bindScope(`SELECT record_json, expires_at_ms, challenge_id
584
+ const row = await this.prepare(`SELECT record_json, expires_at_ms, challenge_id
639
585
  FROM email_otp_challenges
640
586
  WHERE namespace = ?
641
587
  AND org_id = ?
@@ -643,96 +589,37 @@ var D1EmailOtpChallengeStore = class extends D1EmailOtpStoreBase {
643
589
  AND env_id = ?
644
590
  AND challenge_id = ?
645
591
  LIMIT 1`, [id]).first();
646
- const parsed = parseCurrentEmailOtpChallengeRow({
647
- recordJson: parseJsonRecord(row?.record_json),
648
- expiresAtMs: row?.expires_at_ms
649
- });
650
- if (!row) return null;
651
- if (!parsed) {
652
- await this.del(id);
653
- return null;
654
- }
655
- return cloneRecord(parsed);
592
+ return row ? this.recordOrDiscard(row, id) : null;
656
593
  }
657
594
  async deleteExpired(nowMs) {
658
595
  await this.ensureSchema();
659
- return ((await this.bindScope(`DELETE FROM email_otp_challenges
596
+ return ((await this.prepare(`DELETE FROM email_otp_challenges
660
597
  WHERE namespace = ?
661
598
  AND org_id = ?
662
599
  AND project_id = ?
663
600
  AND env_id = ?
664
601
  AND expires_at_ms <= ?
665
- RETURNING record_json, expires_at_ms`, [nowMs]).all()).results || []).map((row) => parseCurrentEmailOtpChallengeRow({
666
- recordJson: parseJsonRecord(row.record_json),
667
- expiresAtMs: row.expires_at_ms
668
- })).filter((record) => Boolean(record)).map((record) => cloneRecord(record));
602
+ RETURNING record_json, expires_at_ms`, [nowMs]).all()).results || []).map((row) => challengeFromRow(row)).filter((record) => Boolean(record)).map((record) => cloneRecord(record));
669
603
  }
670
604
  async countActiveByContext(input) {
671
605
  await this.ensureSchema();
672
- const row = await this.bindScope(`SELECT COUNT(*) AS count
606
+ const row = await this.prepare(`SELECT COUNT(*) AS count
673
607
  FROM email_otp_challenges
674
- WHERE namespace = ?
675
- AND org_id = ?
676
- AND project_id = ?
677
- AND env_id = ?
678
- AND expires_at_ms > ?
679
- AND challenge_subject_id = ?
680
- AND wallet_id = ?
681
- AND record_org_id = ?
682
- AND otp_channel = ?
683
- AND owner_proof_binding_digest = ?
684
- AND action = ?
685
- AND operation = ?`, [
686
- input.nowMs,
687
- input.challengeSubjectId,
688
- input.walletId,
689
- String(input.orgId || ""),
690
- input.otpChannel,
691
- input.ownerProofBindingDigest,
692
- input.action,
693
- input.operation
694
- ]).first();
608
+ ${ACTIVE_CHALLENGE_CONTEXT_SQL}`, challengeContextValues(input)).first();
695
609
  return Number(row?.count || 0);
696
610
  }
697
611
  async findLatestActiveByContext(input) {
698
612
  await this.ensureSchema();
699
- const row = await this.bindScope(`SELECT record_json, expires_at_ms, challenge_id
613
+ const row = await this.prepare(`SELECT record_json, expires_at_ms, challenge_id
700
614
  FROM email_otp_challenges
701
- WHERE namespace = ?
702
- AND org_id = ?
703
- AND project_id = ?
704
- AND env_id = ?
705
- AND expires_at_ms > ?
706
- AND challenge_subject_id = ?
707
- AND wallet_id = ?
708
- AND record_org_id = ?
709
- AND otp_channel = ?
710
- AND owner_proof_binding_digest = ?
711
- AND action = ?
712
- AND operation = ?
615
+ ${ACTIVE_CHALLENGE_CONTEXT_SQL}
713
616
  ORDER BY expires_at_ms DESC, created_at_ms DESC
714
- LIMIT 1`, [
715
- input.nowMs,
716
- input.challengeSubjectId,
717
- input.walletId,
718
- String(input.orgId || ""),
719
- input.otpChannel,
720
- input.ownerProofBindingDigest,
721
- input.action,
722
- input.operation
723
- ]).first();
724
- const parsed = parseCurrentEmailOtpChallengeRow({
725
- recordJson: parseJsonRecord(row?.record_json),
726
- expiresAtMs: row?.expires_at_ms
727
- });
728
- if (parsed) return cloneRecord(parsed);
729
- const malformedId = normalizeOptionalTrimmedString(row?.challenge_id);
730
- if (malformedId) await this.del(malformedId);
731
- return null;
617
+ LIMIT 1`, challengeContextValues(input)).first();
618
+ return this.recordOrDiscard(row, row?.challenge_id);
732
619
  }
733
620
  async deleteOldestActiveByContext(input) {
734
621
  await this.ensureSchema();
735
- const row = await this.bindScope(`WITH oldest AS (
622
+ const row = await this.prepare(`WITH oldest AS (
736
623
  SELECT challenge_id
737
624
  FROM email_otp_challenges
738
625
  WHERE namespace = ?
@@ -757,191 +644,57 @@ var D1EmailOtpChallengeStore = class extends D1EmailOtpStoreBase {
757
644
  AND env_id = ?
758
645
  AND challenge_id IN (SELECT challenge_id FROM oldest)
759
646
  RETURNING record_json, expires_at_ms, challenge_id`, [
760
- input.nowMs,
761
- input.challengeSubjectId,
762
- input.walletId,
763
- String(input.orgId || ""),
764
- input.otpChannel,
765
- input.ownerProofBindingDigest,
766
- input.action,
767
- input.operation,
768
- this.scope.namespace,
769
- this.scope.orgId,
770
- this.scope.projectId,
771
- this.scope.envId
647
+ ...challengeContextValues(input),
648
+ this.table.scope.namespace,
649
+ this.table.scope.orgId,
650
+ this.table.scope.projectId,
651
+ this.table.scope.envId
772
652
  ]).first();
773
- const parsed = parseCurrentEmailOtpChallengeRow({
774
- recordJson: parseJsonRecord(row?.record_json),
775
- expiresAtMs: row?.expires_at_ms
776
- });
777
- if (parsed) return cloneRecord(parsed);
778
- const malformedId = normalizeOptionalTrimmedString(row?.challenge_id);
779
- if (malformedId) await this.del(malformedId);
780
- return null;
653
+ return this.recordOrDiscard(row, row?.challenge_id);
781
654
  }
782
655
  async findActiveByContext(input) {
783
656
  await this.ensureSchema();
784
- const row = await this.bindScope(`SELECT record_json, expires_at_ms, challenge_id
657
+ const row = await this.prepare(`SELECT record_json, expires_at_ms, challenge_id
785
658
  FROM email_otp_challenges
786
- WHERE namespace = ?
787
- AND org_id = ?
788
- AND project_id = ?
789
- AND env_id = ?
790
- AND expires_at_ms > ?
791
- AND challenge_subject_id = ?
792
- AND wallet_id = ?
793
- AND record_org_id = ?
794
- AND otp_channel = ?
795
- AND owner_proof_binding_digest = ?
796
- AND action = ?
797
- AND operation = ?
659
+ ${ACTIVE_CHALLENGE_CONTEXT_SQL}
798
660
  AND otp_code = ?
799
661
  ORDER BY expires_at_ms DESC
800
- LIMIT 1`, [
801
- input.nowMs,
802
- input.challengeSubjectId,
803
- input.walletId,
804
- String(input.orgId || ""),
805
- input.otpChannel,
806
- input.ownerProofBindingDigest,
807
- input.action,
808
- input.operation,
809
- input.otpCode
810
- ]).first();
811
- const parsed = parseCurrentEmailOtpChallengeRow({
812
- recordJson: parseJsonRecord(row?.record_json),
813
- expiresAtMs: row?.expires_at_ms
814
- });
815
- if (parsed) return cloneRecord(parsed);
816
- const malformedId = normalizeOptionalTrimmedString(row?.challenge_id);
817
- if (malformedId) await this.del(malformedId);
818
- return null;
662
+ LIMIT 1`, [...challengeContextValues(input), input.otpCode]).first();
663
+ return this.recordOrDiscard(row, row?.challenge_id);
819
664
  }
820
- async del(challengeId) {
821
- await this.ensureSchema();
822
- const id = normalizeOptionalTrimmedString(challengeId);
823
- if (!id) return;
824
- await this.bindScope(`DELETE FROM email_otp_challenges
825
- WHERE namespace = ?
826
- AND org_id = ?
827
- AND project_id = ?
828
- AND env_id = ?
829
- AND challenge_id = ?`, [id]).run();
665
+ del(challengeId) {
666
+ return this.deleteById(challengeId, emailOtpChallengeRows.delete);
830
667
  }
831
668
  };
832
- var D1EmailOtpGrantStore = class extends D1EmailOtpStoreBase {
833
- constructor(..._args2) {
834
- super(..._args2);
835
- this.adapterKind = "d1";
836
- }
837
- async put(record) {
838
- await this.ensureSchema();
839
- const parsed = parseCurrentEmailOtpGrantRecord(record);
840
- if (!parsed) throw new Error("Invalid Email OTP grant record");
841
- assertD1EmailOtpOrgScope({
842
- recordOrgId: parsed.orgId,
843
- scope: this.scope,
844
- label: "Email OTP grant"
669
+ var D1EmailOtpGrantStore = class extends D1EmailOtpStore {
670
+ constructor(database, scope) {
671
+ super(database, scope, GRANT_RECORD, {
672
+ fromRow: grantFromRow,
673
+ upsert: emailOtpGrantRows.upsert
845
674
  });
846
- await this.bindScope(`INSERT INTO email_otp_grants (
847
- namespace,
848
- org_id,
849
- project_id,
850
- env_id,
851
- grant_token,
852
- user_id,
853
- wallet_id,
854
- record_org_id,
855
- challenge_id,
856
- action,
857
- record_json,
858
- issued_at_ms,
859
- expires_at_ms
860
- )
861
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
862
- ON CONFLICT (namespace, org_id, project_id, env_id, grant_token)
863
- DO UPDATE SET
864
- user_id = EXCLUDED.user_id,
865
- wallet_id = EXCLUDED.wallet_id,
866
- record_org_id = EXCLUDED.record_org_id,
867
- challenge_id = EXCLUDED.challenge_id,
868
- action = EXCLUDED.action,
869
- record_json = EXCLUDED.record_json,
870
- issued_at_ms = EXCLUDED.issued_at_ms,
871
- expires_at_ms = EXCLUDED.expires_at_ms`, [
872
- parsed.grantToken,
873
- parsed.userId,
874
- parsed.walletId,
875
- parsed.orgId || "",
876
- parsed.challengeId,
877
- parsed.action,
878
- JSON.stringify(parsed),
879
- parsed.issuedAtMs,
880
- parsed.expiresAtMs
881
- ]).run();
882
675
  }
883
- async get(grantToken) {
884
- await this.ensureSchema();
885
- const token = normalizeOptionalTrimmedString(grantToken);
886
- if (!token) return null;
887
- const row = await this.bindScope(`SELECT record_json, expires_at_ms
888
- FROM email_otp_grants
889
- WHERE namespace = ?
890
- AND org_id = ?
891
- AND project_id = ?
892
- AND env_id = ?
893
- AND grant_token = ?
894
- LIMIT 1`, [token]).first();
895
- const parsed = parseCurrentEmailOtpGrantRow({
896
- recordJson: parseJsonRecord(row?.record_json),
897
- expiresAtMs: row?.expires_at_ms
898
- });
899
- if (!row) return null;
900
- if (!parsed) {
901
- await this.del(token);
902
- return null;
903
- }
904
- return cloneRecord(parsed);
676
+ get(grantToken) {
677
+ return this.getById(grantToken, emailOtpGrantRows.select);
905
678
  }
906
- async consume(grantToken) {
907
- await this.ensureSchema();
908
- const token = normalizeOptionalTrimmedString(grantToken);
909
- if (!token) return null;
910
- const row = await this.bindScope(`DELETE FROM email_otp_grants
911
- WHERE namespace = ?
912
- AND org_id = ?
913
- AND project_id = ?
914
- AND env_id = ?
915
- AND grant_token = ?
916
- RETURNING record_json, expires_at_ms`, [token]).first();
917
- const parsed = parseCurrentEmailOtpGrantRow({
918
- recordJson: parseJsonRecord(row?.record_json),
919
- expiresAtMs: row?.expires_at_ms
920
- });
921
- return parsed ? cloneRecord(parsed) : null;
679
+ consume(grantToken) {
680
+ return this.consumeById(grantToken, emailOtpGrantRows.consume);
922
681
  }
923
- async del(grantToken) {
924
- await this.ensureSchema();
925
- const token = normalizeOptionalTrimmedString(grantToken);
926
- if (!token) return;
927
- await this.bindScope(`DELETE FROM email_otp_grants
928
- WHERE namespace = ?
929
- AND org_id = ?
930
- AND project_id = ?
931
- AND env_id = ?
932
- AND grant_token = ?`, [token]).run();
682
+ del(grantToken) {
683
+ return this.deleteById(grantToken, emailOtpGrantRows.delete);
933
684
  }
934
685
  };
935
- var D1EmailOtpWalletEnrollmentStore = class extends D1EmailOtpStoreBase {
936
- constructor(..._args3) {
937
- super(..._args3);
938
- this.adapterKind = "d1";
686
+ var D1EmailOtpWalletEnrollmentStore = class extends D1EmailOtpStore {
687
+ constructor(database, scope) {
688
+ super(database, scope, WALLET_ENROLLMENT_RECORD, {
689
+ fromRow: walletEnrollmentFromRow,
690
+ upsert: emailOtpWalletEnrollmentRows.upsert
691
+ });
939
692
  }
940
693
  async get(walletId) {
941
694
  await this.ensureSchema();
942
695
  const key = normalizeOptionalTrimmedString(walletId);
943
696
  if (!key) return null;
944
- const row = await this.bindScope(`SELECT record_json, updated_at_ms, wallet_id
697
+ const row = await this.prepare(`SELECT record_json, updated_at_ms, wallet_id
945
698
  FROM email_otp_wallet_enrollments
946
699
  WHERE namespace = ?
947
700
  AND org_id = ?
@@ -949,23 +702,14 @@ var D1EmailOtpWalletEnrollmentStore = class extends D1EmailOtpStoreBase {
949
702
  AND env_id = ?
950
703
  AND wallet_id = ?
951
704
  LIMIT 1`, [key]).first();
952
- const parsed = parseCurrentEmailOtpWalletEnrollmentRow({
953
- recordJson: parseJsonRecord(row?.record_json),
954
- updatedAtMs: row?.updated_at_ms
955
- });
956
- if (!row) return null;
957
- if (!parsed) {
958
- await this.del(key);
959
- return null;
960
- }
961
- return cloneRecord(parsed);
705
+ return row ? this.recordOrDiscard(row, key) : null;
962
706
  }
963
707
  async getByProviderUserId(input) {
964
708
  await this.ensureSchema();
965
709
  const providerUserId = normalizeOptionalTrimmedString(input.providerUserId);
966
710
  const orgId = normalizeOptionalTrimmedString(input.orgId);
967
711
  if (!providerUserId || !orgId) return null;
968
- const row = await this.bindScope(`SELECT record_json, updated_at_ms, wallet_id
712
+ const row = await this.prepare(`SELECT record_json, updated_at_ms, wallet_id
969
713
  FROM email_otp_wallet_enrollments
970
714
  WHERE namespace = ?
971
715
  AND org_id = ?
@@ -975,137 +719,27 @@ var D1EmailOtpWalletEnrollmentStore = class extends D1EmailOtpStoreBase {
975
719
  AND provider_user_id = ?
976
720
  ORDER BY updated_at_ms DESC
977
721
  LIMIT 1`, [orgId, providerUserId]).first();
978
- const parsed = parseCurrentEmailOtpWalletEnrollmentRow({
979
- recordJson: parseJsonRecord(row?.record_json),
980
- updatedAtMs: row?.updated_at_ms
981
- });
982
- if (parsed) return cloneRecord(parsed);
983
- const malformedWalletId = normalizeOptionalTrimmedString(row?.wallet_id);
984
- if (malformedWalletId) await this.del(malformedWalletId);
985
- return null;
722
+ return this.recordOrDiscard(row, row?.wallet_id);
986
723
  }
987
- async put(record) {
988
- await this.ensureSchema();
989
- const parsed = parseCurrentEmailOtpWalletEnrollmentRecord(record);
990
- if (!parsed) throw new Error("Invalid Email OTP wallet enrollment record");
991
- assertD1EmailOtpOrgScope({
992
- recordOrgId: parsed.orgId,
993
- scope: this.scope,
994
- label: "Email OTP wallet enrollment"
995
- });
996
- await this.bindScope(`INSERT INTO email_otp_wallet_enrollments (
997
- namespace,
998
- org_id,
999
- project_id,
1000
- env_id,
1001
- wallet_id,
1002
- provider_user_id,
1003
- record_org_id,
1004
- verified_email,
1005
- record_json,
1006
- created_at_ms,
1007
- updated_at_ms
1008
- )
1009
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1010
- ON CONFLICT (namespace, org_id, project_id, env_id, wallet_id)
1011
- DO UPDATE SET
1012
- provider_user_id = EXCLUDED.provider_user_id,
1013
- record_org_id = EXCLUDED.record_org_id,
1014
- verified_email = EXCLUDED.verified_email,
1015
- record_json = EXCLUDED.record_json,
1016
- created_at_ms = EXCLUDED.created_at_ms,
1017
- updated_at_ms = EXCLUDED.updated_at_ms`, [
1018
- parsed.walletId,
1019
- parsed.providerUserId,
1020
- parsed.orgId,
1021
- parsed.verifiedEmail,
1022
- JSON.stringify(parsed),
1023
- parsed.createdAtMs,
1024
- parsed.updatedAtMs
1025
- ]).run();
1026
- }
1027
- async del(walletId) {
1028
- await this.ensureSchema();
1029
- const key = normalizeOptionalTrimmedString(walletId);
1030
- if (!key) return;
1031
- await this.bindScope(`DELETE FROM email_otp_wallet_enrollments
1032
- WHERE namespace = ?
1033
- AND org_id = ?
1034
- AND project_id = ?
1035
- AND env_id = ?
1036
- AND wallet_id = ?`, [key]).run();
724
+ del(walletId) {
725
+ return this.deleteById(walletId, emailOtpWalletEnrollmentRows.delete);
1037
726
  }
1038
727
  };
1039
- var D1EmailOtpAuthStateStore = class extends D1EmailOtpStoreBase {
1040
- constructor(..._args4) {
1041
- super(..._args4);
1042
- this.adapterKind = "d1";
1043
- }
1044
- async get(walletId) {
1045
- await this.ensureSchema();
1046
- const key = normalizeOptionalTrimmedString(walletId);
1047
- if (!key) return null;
1048
- const row = await this.bindScope(`SELECT record_json, updated_at_ms
1049
- FROM email_otp_auth_states
1050
- WHERE namespace = ?
1051
- AND org_id = ?
1052
- AND project_id = ?
1053
- AND env_id = ?
1054
- AND wallet_id = ?
1055
- LIMIT 1`, [key]).first();
1056
- const parsed = parseCurrentEmailOtpAuthStateRow({
1057
- recordJson: parseJsonRecord(row?.record_json),
1058
- updatedAtMs: row?.updated_at_ms
728
+ var D1EmailOtpAuthStateStore = class extends D1EmailOtpStore {
729
+ constructor(database, scope) {
730
+ super(database, scope, AUTH_STATE_RECORD, {
731
+ fromRow: authStateFromRow,
732
+ upsert: emailOtpAuthStateRows.upsert
1059
733
  });
1060
- if (!row) return null;
1061
- if (!parsed) {
1062
- await this.del(key);
1063
- return null;
1064
- }
1065
- return cloneRecord(parsed);
1066
734
  }
1067
- async put(record) {
1068
- await this.ensureSchema();
1069
- const parsed = parseCurrentEmailOtpAuthStateRecord(record);
1070
- if (!parsed) throw new Error("Invalid Email OTP auth state record");
1071
- assertD1EmailOtpOrgScope({
1072
- recordOrgId: parsed.orgId,
1073
- scope: this.scope,
1074
- label: "Email OTP auth state"
1075
- });
1076
- await this.bindScope(`INSERT INTO email_otp_auth_states (
1077
- namespace,
1078
- org_id,
1079
- project_id,
1080
- env_id,
1081
- wallet_id,
1082
- provider_user_id,
1083
- record_org_id,
1084
- record_json,
1085
- created_at_ms,
1086
- updated_at_ms
1087
- )
1088
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1089
- ON CONFLICT (namespace, org_id, project_id, env_id, wallet_id)
1090
- DO UPDATE SET
1091
- provider_user_id = EXCLUDED.provider_user_id,
1092
- record_org_id = EXCLUDED.record_org_id,
1093
- record_json = EXCLUDED.record_json,
1094
- created_at_ms = EXCLUDED.created_at_ms,
1095
- updated_at_ms = EXCLUDED.updated_at_ms`, [
1096
- parsed.walletId,
1097
- parsed.providerUserId,
1098
- parsed.orgId,
1099
- JSON.stringify(parsed),
1100
- parsed.createdAtMs,
1101
- parsed.updatedAtMs
1102
- ]).run();
735
+ get(walletId) {
736
+ return this.getById(walletId, emailOtpAuthStateRows.select);
1103
737
  }
1104
738
  async del(walletId) {
1105
739
  await this.ensureSchema();
1106
740
  const key = normalizeOptionalTrimmedString(walletId);
1107
741
  if (!key) return;
1108
- await this.bindScope(`DELETE FROM email_otp_auth_states
742
+ await this.prepare(`DELETE FROM email_otp_auth_states
1109
743
  WHERE namespace = ?
1110
744
  AND org_id = ?
1111
745
  AND project_id = ?
@@ -1113,73 +747,21 @@ var D1EmailOtpAuthStateStore = class extends D1EmailOtpStoreBase {
1113
747
  AND wallet_id = ?`, [key]).run();
1114
748
  }
1115
749
  };
1116
- var D1EmailOtpUnlockChallengeStore = class extends D1EmailOtpStoreBase {
1117
- constructor(..._args5) {
1118
- super(..._args5);
1119
- this.adapterKind = "d1";
1120
- }
1121
- async put(record) {
1122
- await this.ensureSchema();
1123
- const parsed = parseCurrentEmailOtpUnlockChallengeRecord(record);
1124
- if (!parsed) throw new Error("Invalid Email OTP unlock challenge record");
1125
- assertD1EmailOtpOrgScope({
1126
- recordOrgId: parsed.orgId,
1127
- scope: this.scope,
1128
- label: "Email OTP unlock challenge"
750
+ var D1EmailOtpUnlockChallengeStore = class extends D1EmailOtpStore {
751
+ constructor(database, scope) {
752
+ super(database, scope, UNLOCK_CHALLENGE_RECORD, {
753
+ fromRow: unlockChallengeFromRow,
754
+ upsert: emailOtpUnlockChallengeRows.upsert
1129
755
  });
1130
- await this.bindScope(`INSERT INTO email_otp_unlock_challenges (
1131
- namespace,
1132
- org_id,
1133
- project_id,
1134
- env_id,
1135
- challenge_id,
1136
- wallet_id,
1137
- user_id,
1138
- record_org_id,
1139
- record_json,
1140
- created_at_ms,
1141
- expires_at_ms
1142
- )
1143
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1144
- ON CONFLICT (namespace, org_id, project_id, env_id, challenge_id)
1145
- DO UPDATE SET
1146
- wallet_id = EXCLUDED.wallet_id,
1147
- user_id = EXCLUDED.user_id,
1148
- record_org_id = EXCLUDED.record_org_id,
1149
- record_json = EXCLUDED.record_json,
1150
- created_at_ms = EXCLUDED.created_at_ms,
1151
- expires_at_ms = EXCLUDED.expires_at_ms`, [
1152
- parsed.challengeId,
1153
- parsed.walletId,
1154
- parsed.userId,
1155
- parsed.orgId || "",
1156
- JSON.stringify(parsed),
1157
- parsed.createdAtMs,
1158
- parsed.expiresAtMs
1159
- ]).run();
1160
756
  }
1161
- async consume(challengeId) {
1162
- await this.ensureSchema();
1163
- const id = normalizeOptionalTrimmedString(challengeId);
1164
- if (!id) return null;
1165
- const row = await this.bindScope(`DELETE FROM email_otp_unlock_challenges
1166
- WHERE namespace = ?
1167
- AND org_id = ?
1168
- AND project_id = ?
1169
- AND env_id = ?
1170
- AND challenge_id = ?
1171
- RETURNING record_json, expires_at_ms`, [id]).first();
1172
- const parsed = parseCurrentEmailOtpUnlockChallengeRow({
1173
- recordJson: parseJsonRecord(row?.record_json),
1174
- expiresAtMs: row?.expires_at_ms
1175
- });
1176
- return parsed ? cloneRecord(parsed) : null;
757
+ consume(challengeId) {
758
+ return this.consumeById(challengeId, emailOtpUnlockChallengeRows.consume);
1177
759
  }
1178
760
  async del(challengeId) {
1179
761
  await this.ensureSchema();
1180
762
  const id = normalizeOptionalTrimmedString(challengeId);
1181
763
  if (!id) return;
1182
- await this.bindScope(`DELETE FROM email_otp_unlock_challenges
764
+ await this.prepare(`DELETE FROM email_otp_unlock_challenges
1183
765
  WHERE namespace = ?
1184
766
  AND org_id = ?
1185
767
  AND project_id = ?
@@ -1187,158 +769,31 @@ var D1EmailOtpUnlockChallengeStore = class extends D1EmailOtpStoreBase {
1187
769
  AND challenge_id = ?`, [id]).run();
1188
770
  }
1189
771
  };
1190
- var D1EmailOtpRegistrationAttemptStore = class extends D1EmailOtpStoreBase {
1191
- constructor(..._args6) {
1192
- super(..._args6);
1193
- this.adapterKind = "d1";
1194
- }
1195
- async put(record) {
1196
- await this.ensureSchema();
1197
- const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRecord(record);
1198
- if (!parsed) throw new Error("Invalid Google Email OTP registration attempt record");
1199
- assertD1EmailOtpOrgScope({
1200
- recordOrgId: parsed.runtimePolicyScope?.orgId,
1201
- scope: this.scope,
1202
- label: "Google Email OTP registration attempt"
772
+ var D1EmailOtpRegistrationAttemptStore = class extends D1EmailOtpStore {
773
+ constructor(database, scope) {
774
+ super(database, scope, REGISTRATION_ATTEMPT_RECORD, {
775
+ fromRow: registrationAttemptFromRow,
776
+ upsert: emailOtpRegistrationAttemptRows.upsert
1203
777
  });
1204
- await this.bindScope(`INSERT INTO email_otp_registration_attempts (
1205
- namespace,
1206
- org_id,
1207
- project_id,
1208
- env_id,
1209
- attempt_id,
1210
- provider_subject,
1211
- email,
1212
- wallet_id,
1213
- state,
1214
- owner_proof_binding_digest,
1215
- runtime_org_id,
1216
- runtime_policy_key,
1217
- offer_wallet_ids_json,
1218
- record_json,
1219
- created_at_ms,
1220
- updated_at_ms,
1221
- expires_at_ms
1222
- )
1223
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1224
- ON CONFLICT (namespace, org_id, project_id, env_id, attempt_id)
1225
- DO UPDATE SET
1226
- provider_subject = EXCLUDED.provider_subject,
1227
- email = EXCLUDED.email,
1228
- wallet_id = EXCLUDED.wallet_id,
1229
- state = EXCLUDED.state,
1230
- owner_proof_binding_digest = EXCLUDED.owner_proof_binding_digest,
1231
- runtime_org_id = EXCLUDED.runtime_org_id,
1232
- runtime_policy_key = EXCLUDED.runtime_policy_key,
1233
- offer_wallet_ids_json = EXCLUDED.offer_wallet_ids_json,
1234
- record_json = EXCLUDED.record_json,
1235
- created_at_ms = EXCLUDED.created_at_ms,
1236
- updated_at_ms = EXCLUDED.updated_at_ms,
1237
- expires_at_ms = EXCLUDED.expires_at_ms`, [
1238
- parsed.attemptId,
1239
- parsed.providerSubject,
1240
- parsed.email,
1241
- parsed.walletId,
1242
- parsed.state,
1243
- parsed.ownerProofBindingDigest,
1244
- parsed.runtimePolicyScope?.orgId || "",
1245
- runtimePolicyScopeKey(parsed.runtimePolicyScope),
1246
- JSON.stringify(parsed.offerCandidates.map((candidate) => candidate.walletId)),
1247
- JSON.stringify(parsed),
1248
- parsed.createdAtMs,
1249
- parsed.updatedAtMs,
1250
- parsed.expiresAtMs
1251
- ]).run();
1252
778
  }
1253
- async get(attemptId) {
1254
- await this.ensureSchema();
1255
- const id = normalizeOptionalTrimmedString(attemptId);
1256
- if (!id) return null;
1257
- const row = await this.bindScope(`SELECT record_json, expires_at_ms, updated_at_ms, attempt_id
1258
- FROM email_otp_registration_attempts
1259
- WHERE namespace = ?
1260
- AND org_id = ?
1261
- AND project_id = ?
1262
- AND env_id = ?
1263
- AND attempt_id = ?
1264
- LIMIT 1`, [id]).first();
1265
- const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRow({
1266
- recordJson: parseJsonRecord(row?.record_json),
1267
- expiresAtMs: row?.expires_at_ms,
1268
- updatedAtMs: row?.updated_at_ms
1269
- });
1270
- if (!row) return null;
1271
- if (!parsed) {
1272
- await this.deleteAttempt(id);
1273
- return null;
1274
- }
1275
- return cloneRecord(parsed);
779
+ get(attemptId) {
780
+ return this.getById(attemptId, emailOtpRegistrationAttemptRows.select);
1276
781
  }
1277
782
  async findStartedBySubjectEmail(input) {
1278
783
  await this.ensureSchema();
1279
- const row = await this.bindScope(`SELECT record_json, expires_at_ms, updated_at_ms, attempt_id
1280
- FROM email_otp_registration_attempts
1281
- WHERE namespace = ?
1282
- AND org_id = ?
1283
- AND project_id = ?
1284
- AND env_id = ?
1285
- AND provider_subject = ?
1286
- AND email = ?
1287
- AND state IN ('started', 'key_finalized')
1288
- AND expires_at_ms > ?
1289
- AND owner_proof_binding_digest = ?
1290
- AND runtime_org_id = ?
1291
- AND runtime_policy_key = ?
1292
- ORDER BY updated_at_ms DESC
1293
- LIMIT 1`, [
1294
- input.providerSubject,
1295
- input.email,
1296
- input.nowMs,
1297
- input.ownerProofBindingDigest,
1298
- input.orgId,
1299
- runtimePolicyScopeKey(input.runtimePolicyScope)
1300
- ]).first();
1301
- const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRow({
1302
- recordJson: parseJsonRecord(row?.record_json),
1303
- expiresAtMs: row?.expires_at_ms,
1304
- updatedAtMs: row?.updated_at_ms
1305
- });
1306
- if (parsed && registrationAttemptMatchesStartedScope(parsed, input)) return cloneRecord(parsed);
1307
- const malformedAttemptId = normalizeOptionalTrimmedString(row?.attempt_id);
1308
- if (row && !parsed && malformedAttemptId) await this.deleteAttempt(malformedAttemptId);
1309
- return null;
784
+ const row = await emailOtpRegistrationAttemptRows.selectStarted(this.prepare, input).first();
785
+ const record = await this.recordOrDiscard(row, row?.attempt_id);
786
+ return record && registrationAttemptMatchesStartedScope(record, input) ? record : null;
1310
787
  }
1311
788
  async abandonStartedBySubjectEmailExceptBinding(input) {
1312
789
  await this.ensureSchema();
1313
- const result = await this.bindScope(`SELECT record_json, expires_at_ms, updated_at_ms, attempt_id
1314
- FROM email_otp_registration_attempts
1315
- WHERE namespace = ?
1316
- AND org_id = ?
1317
- AND project_id = ?
1318
- AND env_id = ?
1319
- AND provider_subject = ?
1320
- AND email = ?
1321
- AND state IN ('started', 'key_finalized')
1322
- AND expires_at_ms > ?`, [
1323
- input.providerSubject,
1324
- input.email,
1325
- input.nowMs
1326
- ]).all();
790
+ const result = await emailOtpRegistrationAttemptRows.selectPending(this.prepare, input).all();
1327
791
  let abandoned = 0;
1328
792
  for (const row of result.results || []) {
1329
- const parsed = parseCurrentGoogleEmailOtpRegistrationAttemptRow({
1330
- recordJson: parseJsonRecord(row.record_json),
1331
- expiresAtMs: row.expires_at_ms,
1332
- updatedAtMs: row.updated_at_ms
1333
- });
1334
- if (!parsed) {
1335
- const attemptId = normalizeOptionalTrimmedString(row.attempt_id);
1336
- if (attemptId) await this.deleteAttempt(attemptId);
1337
- continue;
1338
- }
1339
- if (!registrationAttemptMatchesReplacementScope(parsed, input)) continue;
793
+ const record = await this.recordOrDiscard(row, row.attempt_id);
794
+ if (!record || !registrationAttemptMatchesReplacementScope(record, input)) continue;
1340
795
  await this.put({
1341
- ...parsed,
796
+ ...record,
1342
797
  state: "abandoned",
1343
798
  failureCode: input.failureCode,
1344
799
  updatedAtMs: input.nowMs
@@ -1351,110 +806,54 @@ var D1EmailOtpRegistrationAttemptStore = class extends D1EmailOtpStoreBase {
1351
806
  await this.ensureSchema();
1352
807
  const walletId = normalizeOptionalTrimmedString(input.walletId);
1353
808
  if (!walletId) return false;
1354
- const row = await this.bindScope(`SELECT 1 AS found
1355
- FROM email_otp_registration_attempts
1356
- WHERE namespace = ?
1357
- AND org_id = ?
1358
- AND project_id = ?
1359
- AND env_id = ?
1360
- AND state IN ('started', 'key_finalized')
1361
- AND expires_at_ms > ?
1362
- AND (
1363
- wallet_id = ?
1364
- OR EXISTS (
1365
- SELECT 1
1366
- FROM json_each(offer_wallet_ids_json)
1367
- WHERE value = ?
1368
- )
1369
- )
1370
- LIMIT 1`, [
1371
- input.nowMs,
1372
- walletId,
1373
- walletId
1374
- ]).first();
809
+ const row = await emailOtpRegistrationAttemptRows.selectLiveForWallet(this.prepare, walletId, input.nowMs).first();
1375
810
  return Boolean(row);
1376
811
  }
1377
812
  async deleteExpired(nowMs) {
1378
813
  await this.ensureSchema();
1379
- return d1ChangedRows(await this.bindScope(`DELETE FROM email_otp_registration_attempts
1380
- WHERE namespace = ?
1381
- AND org_id = ?
1382
- AND project_id = ?
1383
- AND env_id = ?
1384
- AND (expires_at_ms <= ? OR state = 'expired')`, [nowMs]).run());
814
+ return d1ChangedRows(await emailOtpRegistrationAttemptRows.deleteExpired(this.prepare, nowMs).run());
1385
815
  }
1386
- async deleteAttempt(attemptId) {
1387
- const id = normalizeOptionalTrimmedString(attemptId);
1388
- if (!id) return;
1389
- await this.bindScope(`DELETE FROM email_otp_registration_attempts
1390
- WHERE namespace = ?
1391
- AND org_id = ?
1392
- AND project_id = ?
1393
- AND env_id = ?
1394
- AND attempt_id = ?`, [id]).run();
816
+ del(attemptId) {
817
+ return this.deleteById(attemptId, emailOtpRegistrationAttemptRows.delete);
1395
818
  }
1396
819
  };
1397
820
  function createEmailOtpChallengeStore(input) {
1398
- const d1 = resolveD1EmailOtpStoreOptions(input, "challenge");
1399
- if (d1) {
1400
- input?.logger?.info("[email-otp] Using D1 challenge store");
1401
- return new D1EmailOtpChallengeStore(d1);
1402
- }
1403
- assertEmailOtpStoreKindKnown(input, "challenge");
1404
- input?.logger?.info("[email-otp] Using in-memory challenge store (non-persistent)");
1405
- return new InMemoryEmailOtpChallengeStore();
821
+ return createEmailOtpStore(input, "challenge", {
822
+ d1: (database, scope) => new D1EmailOtpChallengeStore(database, scope),
823
+ inMemory: () => new InMemoryEmailOtpChallengeStore()
824
+ });
1406
825
  }
1407
826
  function createEmailOtpGrantStore(input) {
1408
- const d1 = resolveD1EmailOtpStoreOptions(input, "grant");
1409
- if (d1) {
1410
- input?.logger?.info("[email-otp] Using D1 grant store");
1411
- return new D1EmailOtpGrantStore(d1);
1412
- }
1413
- assertEmailOtpStoreKindKnown(input, "grant");
1414
- input?.logger?.info("[email-otp] Using in-memory grant store (non-persistent)");
1415
- return new InMemoryEmailOtpGrantStore();
827
+ return createEmailOtpStore(input, "grant", {
828
+ d1: (database, scope) => new D1EmailOtpGrantStore(database, scope),
829
+ inMemory: () => new InMemoryEmailOtpStore(GRANT_RECORD)
830
+ });
1416
831
  }
1417
832
  function createEmailOtpWalletEnrollmentStore(input) {
1418
- const d1 = resolveD1EmailOtpStoreOptions(input, "wallet enrollment");
1419
- if (d1) {
1420
- input?.logger?.info("[email-otp] Using D1 wallet enrollment store");
1421
- return new D1EmailOtpWalletEnrollmentStore(d1);
1422
- }
1423
- assertEmailOtpStoreKindKnown(input, "enrollment");
1424
- input?.logger?.info("[email-otp] Using in-memory wallet enrollment store (non-persistent)");
1425
- return new InMemoryEmailOtpWalletEnrollmentStore();
833
+ return createEmailOtpStore(input, "wallet enrollment", {
834
+ d1: (database, scope) => new D1EmailOtpWalletEnrollmentStore(database, scope),
835
+ inMemory: () => new InMemoryEmailOtpWalletEnrollmentStore()
836
+ }, "enrollment");
1426
837
  }
1427
838
  function createEmailOtpAuthStateStore(input) {
1428
- const d1 = resolveD1EmailOtpStoreOptions(input, "auth state");
1429
- if (d1) {
1430
- input?.logger?.info("[email-otp] Using D1 auth state store");
1431
- return new D1EmailOtpAuthStateStore(d1);
1432
- }
1433
- assertEmailOtpStoreKindKnown(input, "auth state");
1434
- input?.logger?.info("[email-otp] Using in-memory auth state store (non-persistent)");
1435
- return new InMemoryEmailOtpAuthStateStore();
839
+ return createEmailOtpStore(input, "auth state", {
840
+ d1: (database, scope) => new D1EmailOtpAuthStateStore(database, scope),
841
+ inMemory: () => new InMemoryEmailOtpStore(AUTH_STATE_RECORD)
842
+ });
1436
843
  }
1437
844
  function createEmailOtpUnlockChallengeStore(input) {
1438
- const d1 = resolveD1EmailOtpStoreOptions(input, "unlock challenge");
1439
- if (d1) {
1440
- input?.logger?.info("[email-otp] Using D1 unlock challenge store");
1441
- return new D1EmailOtpUnlockChallengeStore(d1);
1442
- }
1443
- assertEmailOtpStoreKindKnown(input, "unlock challenge");
1444
- input?.logger?.info("[email-otp] Using in-memory unlock challenge store (non-persistent)");
1445
- return new InMemoryEmailOtpUnlockChallengeStore();
845
+ return createEmailOtpStore(input, "unlock challenge", {
846
+ d1: (database, scope) => new D1EmailOtpUnlockChallengeStore(database, scope),
847
+ inMemory: () => new InMemoryEmailOtpStore(UNLOCK_CHALLENGE_RECORD)
848
+ });
1446
849
  }
1447
850
  function createEmailOtpRegistrationAttemptStore(input) {
1448
- const d1 = resolveD1EmailOtpStoreOptions(input, "registration attempt");
1449
- if (d1) {
1450
- input?.logger?.info("[email-otp] Using D1 registration attempt store");
1451
- return new D1EmailOtpRegistrationAttemptStore(d1);
1452
- }
1453
- assertEmailOtpStoreKindKnown(input, "registration attempt");
1454
- input?.logger?.info("[email-otp] Using in-memory registration attempt store (non-persistent)");
1455
- return new InMemoryEmailOtpRegistrationAttemptStore();
851
+ return createEmailOtpStore(input, "registration attempt", {
852
+ d1: (database, scope) => new D1EmailOtpRegistrationAttemptStore(database, scope),
853
+ inMemory: () => new InMemoryEmailOtpRegistrationAttemptStore()
854
+ });
1456
855
  }
1457
856
  //#endregion
1458
- export { D1EmailOtpAuthStateStore, D1EmailOtpChallengeStore, D1EmailOtpGrantStore, D1EmailOtpRegistrationAttemptStore, D1EmailOtpUnlockChallengeStore, D1EmailOtpWalletEnrollmentStore, EMAIL_OTP_STORE_D1_SCHEMA_SQL, createEmailOtpAuthStateStore, createEmailOtpChallengeStore, createEmailOtpGrantStore, createEmailOtpRegistrationAttemptStore, createEmailOtpUnlockChallengeStore, createEmailOtpWalletEnrollmentStore, ensureEmailOtpStoreD1Schema, resolveEmailOtpStoreNamespace };
857
+ export { createEmailOtpAuthStateStore, createEmailOtpChallengeStore, createEmailOtpGrantStore, createEmailOtpRegistrationAttemptStore, createEmailOtpUnlockChallengeStore, createEmailOtpWalletEnrollmentStore };
1459
858
 
1460
859
  //# sourceMappingURL=EmailOtpStores.js.map