@effect-auth/core 0.1.0-alpha.16 → 0.1.0-alpha.19

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 (637) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +307 -133
  3. package/dist/AbuseProtection.d.ts +100 -0
  4. package/dist/AbuseProtection.d.ts.map +1 -0
  5. package/dist/AbuseProtection.js +71 -0
  6. package/dist/AbuseProtection.js.map +1 -0
  7. package/dist/AccessGrant.d.ts +344 -0
  8. package/dist/AccessGrant.d.ts.map +1 -0
  9. package/dist/AccessGrant.js +687 -0
  10. package/dist/AccessGrant.js.map +1 -0
  11. package/dist/ApiKey.d.ts +0 -12
  12. package/dist/ApiKey.d.ts.map +1 -1
  13. package/dist/ApiKey.js +36 -27
  14. package/dist/ApiKey.js.map +1 -1
  15. package/dist/Assurance.d.ts +415 -0
  16. package/dist/Assurance.d.ts.map +1 -0
  17. package/dist/Assurance.js +764 -0
  18. package/dist/Assurance.js.map +1 -0
  19. package/dist/AtomicPlanExecutor.d.ts +28 -0
  20. package/dist/AtomicPlanExecutor.d.ts.map +1 -0
  21. package/dist/AtomicPlanExecutor.js +5 -0
  22. package/dist/AtomicPlanExecutor.js.map +1 -0
  23. package/dist/AuditLog.d.ts +2314 -52
  24. package/dist/AuditLog.d.ts.map +1 -1
  25. package/dist/AuditLog.js +511 -33
  26. package/dist/AuditLog.js.map +1 -1
  27. package/dist/AuthFlow.d.ts +128 -38
  28. package/dist/AuthFlow.d.ts.map +1 -1
  29. package/dist/AuthFlow.js +611 -263
  30. package/dist/AuthFlow.js.map +1 -1
  31. package/dist/AuthRateLimit.d.ts +96 -0
  32. package/dist/AuthRateLimit.d.ts.map +1 -0
  33. package/dist/AuthRateLimit.js +212 -0
  34. package/dist/AuthRateLimit.js.map +1 -0
  35. package/dist/Challenge.d.ts +0 -3
  36. package/dist/Challenge.d.ts.map +1 -1
  37. package/dist/Challenge.js +1 -4
  38. package/dist/Challenge.js.map +1 -1
  39. package/dist/Client.d.ts +205 -10
  40. package/dist/Client.d.ts.map +1 -1
  41. package/dist/Client.js +397 -16
  42. package/dist/Client.js.map +1 -1
  43. package/dist/CloudflareTurnstile.d.ts +28 -0
  44. package/dist/CloudflareTurnstile.d.ts.map +1 -0
  45. package/dist/CloudflareTurnstile.js +205 -0
  46. package/dist/CloudflareTurnstile.js.map +1 -0
  47. package/dist/Crypto.d.ts +0 -3
  48. package/dist/Crypto.d.ts.map +1 -1
  49. package/dist/Crypto.js +1 -4
  50. package/dist/Crypto.js.map +1 -1
  51. package/dist/DelegatedAccessStorageMigrations.d.ts +7 -0
  52. package/dist/DelegatedAccessStorageMigrations.d.ts.map +1 -0
  53. package/dist/DelegatedAccessStorageMigrations.js +159 -0
  54. package/dist/DelegatedAccessStorageMigrations.js.map +1 -0
  55. package/dist/DevEmail.d.ts +44 -0
  56. package/dist/DevEmail.d.ts.map +1 -0
  57. package/dist/DevEmail.js +115 -0
  58. package/dist/DevEmail.js.map +1 -0
  59. package/dist/DevelopmentSeed.d.ts +47 -0
  60. package/dist/DevelopmentSeed.d.ts.map +1 -0
  61. package/dist/DevelopmentSeed.js +337 -0
  62. package/dist/DevelopmentSeed.js.map +1 -0
  63. package/dist/DisposableEmailDomains.d.ts +19 -0
  64. package/dist/DisposableEmailDomains.d.ts.map +1 -0
  65. package/dist/DisposableEmailDomains.js +85 -0
  66. package/dist/DisposableEmailDomains.js.map +1 -0
  67. package/dist/DomainVerification.d.ts +0 -9
  68. package/dist/DomainVerification.d.ts.map +1 -1
  69. package/dist/DomainVerification.js +36 -22
  70. package/dist/DomainVerification.js.map +1 -1
  71. package/dist/DrizzleBunSqliteStorage.d.ts +18 -0
  72. package/dist/DrizzleBunSqliteStorage.d.ts.map +1 -0
  73. package/dist/DrizzleBunSqliteStorage.js +11 -0
  74. package/dist/DrizzleBunSqliteStorage.js.map +1 -0
  75. package/dist/DrizzleD1SqliteStorage.d.ts +4 -4
  76. package/dist/DrizzleD1SqliteStorage.d.ts.map +1 -1
  77. package/dist/DrizzleD1SqliteStorage.js +5 -5
  78. package/dist/DrizzleD1SqliteStorage.js.map +1 -1
  79. package/dist/DrizzleEffectSqliteStorage.d.ts +13 -4
  80. package/dist/DrizzleEffectSqliteStorage.d.ts.map +1 -1
  81. package/dist/DrizzleEffectSqliteStorage.js +71 -4
  82. package/dist/DrizzleEffectSqliteStorage.js.map +1 -1
  83. package/dist/DrizzleNodeSqliteStorage.d.ts +18 -0
  84. package/dist/DrizzleNodeSqliteStorage.d.ts.map +1 -0
  85. package/dist/DrizzleNodeSqliteStorage.js +11 -0
  86. package/dist/DrizzleNodeSqliteStorage.js.map +1 -0
  87. package/dist/DrizzlePostgresStorage.d.ts +26 -0
  88. package/dist/DrizzlePostgresStorage.d.ts.map +1 -0
  89. package/dist/DrizzlePostgresStorage.js +14 -0
  90. package/dist/DrizzlePostgresStorage.js.map +1 -0
  91. package/dist/EffectQbPostgresDelegatedAccessStorage.d.ts +34 -0
  92. package/dist/EffectQbPostgresDelegatedAccessStorage.d.ts.map +1 -0
  93. package/dist/EffectQbPostgresDelegatedAccessStorage.js +499 -0
  94. package/dist/EffectQbPostgresDelegatedAccessStorage.js.map +1 -0
  95. package/dist/EffectQbPostgresStorage.d.ts +178 -0
  96. package/dist/EffectQbPostgresStorage.d.ts.map +1 -0
  97. package/dist/EffectQbPostgresStorage.js +4637 -0
  98. package/dist/EffectQbPostgresStorage.js.map +1 -0
  99. package/dist/EffectQbSqliteDelegatedAccessStorage.d.ts +112 -0
  100. package/dist/EffectQbSqliteDelegatedAccessStorage.d.ts.map +1 -0
  101. package/dist/EffectQbSqliteDelegatedAccessStorage.js +602 -0
  102. package/dist/EffectQbSqliteDelegatedAccessStorage.js.map +1 -0
  103. package/dist/EffectQbSqliteStorage.d.ts +221 -23
  104. package/dist/EffectQbSqliteStorage.d.ts.map +1 -1
  105. package/dist/EffectQbSqliteStorage.js +2064 -135
  106. package/dist/EffectQbSqliteStorage.js.map +1 -1
  107. package/dist/EmailAuth.d.ts +65 -0
  108. package/dist/EmailAuth.d.ts.map +1 -0
  109. package/dist/EmailAuth.js +171 -0
  110. package/dist/EmailAuth.js.map +1 -0
  111. package/dist/EmailIdentityAuth.d.ts +30 -0
  112. package/dist/EmailIdentityAuth.d.ts.map +1 -0
  113. package/dist/EmailIdentityAuth.js +142 -0
  114. package/dist/EmailIdentityAuth.js.map +1 -0
  115. package/dist/EmailOtp.d.ts +10 -11
  116. package/dist/EmailOtp.d.ts.map +1 -1
  117. package/dist/EmailOtp.js +44 -81
  118. package/dist/EmailOtp.js.map +1 -1
  119. package/dist/EmailRisk.d.ts +48 -0
  120. package/dist/EmailRisk.d.ts.map +1 -0
  121. package/dist/EmailRisk.js +33 -0
  122. package/dist/EmailRisk.js.map +1 -0
  123. package/dist/EmailVerification.d.ts +10 -16
  124. package/dist/EmailVerification.d.ts.map +1 -1
  125. package/dist/EmailVerification.js +85 -42
  126. package/dist/EmailVerification.js.map +1 -1
  127. package/dist/Guard.d.ts +11 -0
  128. package/dist/Guard.d.ts.map +1 -0
  129. package/dist/Guard.js +11 -0
  130. package/dist/Guard.js.map +1 -0
  131. package/dist/HibpPwnedPasswords.d.ts +56 -0
  132. package/dist/HibpPwnedPasswords.d.ts.map +1 -0
  133. package/dist/HibpPwnedPasswords.js +232 -0
  134. package/dist/HibpPwnedPasswords.js.map +1 -0
  135. package/dist/HttpApi/AdminPermissionDefinition.d.ts +4 -0
  136. package/dist/HttpApi/AdminPermissionDefinition.d.ts.map +1 -0
  137. package/dist/HttpApi/AdminPermissionDefinition.js +4 -0
  138. package/dist/HttpApi/AdminPermissionDefinition.js.map +1 -0
  139. package/dist/HttpApi/AdminSecurityTimeline.d.ts +4 -0
  140. package/dist/HttpApi/AdminSecurityTimeline.d.ts.map +1 -0
  141. package/dist/HttpApi/AdminSecurityTimeline.js +4 -0
  142. package/dist/HttpApi/AdminSecurityTimeline.js.map +1 -0
  143. package/dist/HttpApi/AdminSession.d.ts +4 -0
  144. package/dist/HttpApi/AdminSession.d.ts.map +1 -0
  145. package/dist/HttpApi/AdminSession.js +4 -0
  146. package/dist/HttpApi/AdminSession.js.map +1 -0
  147. package/dist/HttpApi/AdminTrustedDevice.d.ts +4 -0
  148. package/dist/HttpApi/AdminTrustedDevice.d.ts.map +1 -0
  149. package/dist/HttpApi/AdminTrustedDevice.js +4 -0
  150. package/dist/HttpApi/AdminTrustedDevice.js.map +1 -0
  151. package/dist/HttpApi/Api.d.ts +939 -884
  152. package/dist/HttpApi/Api.d.ts.map +1 -1
  153. package/dist/HttpApi/Api.js +2254 -940
  154. package/dist/HttpApi/Api.js.map +1 -1
  155. package/dist/HttpApi/ApiKey.d.ts +4 -0
  156. package/dist/HttpApi/ApiKey.d.ts.map +1 -0
  157. package/dist/HttpApi/ApiKey.js +4 -0
  158. package/dist/HttpApi/ApiKey.js.map +1 -0
  159. package/dist/HttpApi/Audit.d.ts +6 -0
  160. package/dist/HttpApi/Audit.d.ts.map +1 -0
  161. package/dist/HttpApi/Audit.js +10 -0
  162. package/dist/HttpApi/Audit.js.map +1 -0
  163. package/dist/HttpApi/ClientApi.d.ts +917 -0
  164. package/dist/HttpApi/ClientApi.d.ts.map +1 -0
  165. package/dist/HttpApi/ClientApi.js +101 -0
  166. package/dist/HttpApi/ClientApi.js.map +1 -0
  167. package/dist/HttpApi/EmailAuth.d.ts +6 -0
  168. package/dist/HttpApi/EmailAuth.d.ts.map +1 -0
  169. package/dist/HttpApi/EmailAuth.js +6 -0
  170. package/dist/HttpApi/EmailAuth.js.map +1 -0
  171. package/dist/HttpApi/EmailGuards.d.ts +115 -0
  172. package/dist/HttpApi/EmailGuards.d.ts.map +1 -0
  173. package/dist/HttpApi/EmailGuards.js +191 -0
  174. package/dist/HttpApi/EmailGuards.js.map +1 -0
  175. package/dist/HttpApi/EmailOtp.d.ts +6 -0
  176. package/dist/HttpApi/EmailOtp.d.ts.map +1 -0
  177. package/dist/HttpApi/EmailOtp.js +6 -0
  178. package/dist/HttpApi/EmailOtp.js.map +1 -0
  179. package/dist/HttpApi/EmailVerification.d.ts +6 -0
  180. package/dist/HttpApi/EmailVerification.d.ts.map +1 -0
  181. package/dist/HttpApi/EmailVerification.js +6 -0
  182. package/dist/HttpApi/EmailVerification.js.map +1 -0
  183. package/dist/HttpApi/Endpoints.d.ts +661 -301
  184. package/dist/HttpApi/Endpoints.d.ts.map +1 -1
  185. package/dist/HttpApi/Endpoints.js +207 -120
  186. package/dist/HttpApi/Endpoints.js.map +1 -1
  187. package/dist/HttpApi/Errors.d.ts +37 -10
  188. package/dist/HttpApi/Errors.d.ts.map +1 -1
  189. package/dist/HttpApi/Errors.js +42 -4
  190. package/dist/HttpApi/Errors.js.map +1 -1
  191. package/dist/HttpApi/Identity.d.ts +6 -0
  192. package/dist/HttpApi/Identity.d.ts.map +1 -0
  193. package/dist/HttpApi/Identity.js +6 -0
  194. package/dist/HttpApi/Identity.js.map +1 -0
  195. package/dist/HttpApi/IdentityGuards.d.ts +31 -0
  196. package/dist/HttpApi/IdentityGuards.d.ts.map +1 -0
  197. package/dist/HttpApi/IdentityGuards.js +33 -0
  198. package/dist/HttpApi/IdentityGuards.js.map +1 -0
  199. package/dist/HttpApi/Jwt.d.ts +4 -0
  200. package/dist/HttpApi/Jwt.d.ts.map +1 -0
  201. package/dist/HttpApi/Jwt.js +4 -0
  202. package/dist/HttpApi/Jwt.js.map +1 -0
  203. package/dist/HttpApi/JwtDiscovery.d.ts +4 -0
  204. package/dist/HttpApi/JwtDiscovery.d.ts.map +1 -0
  205. package/dist/HttpApi/JwtDiscovery.js +4 -0
  206. package/dist/HttpApi/JwtDiscovery.js.map +1 -0
  207. package/dist/HttpApi/LoginApproval.d.ts +5 -0
  208. package/dist/HttpApi/LoginApproval.d.ts.map +1 -0
  209. package/dist/HttpApi/LoginApproval.js +5 -0
  210. package/dist/HttpApi/LoginApproval.js.map +1 -0
  211. package/dist/HttpApi/LoginNotification.d.ts +5 -0
  212. package/dist/HttpApi/LoginNotification.d.ts.map +1 -0
  213. package/dist/HttpApi/LoginNotification.js +5 -0
  214. package/dist/HttpApi/LoginNotification.js.map +1 -0
  215. package/dist/HttpApi/MagicLink.d.ts +6 -0
  216. package/dist/HttpApi/MagicLink.d.ts.map +1 -0
  217. package/dist/HttpApi/MagicLink.js +6 -0
  218. package/dist/HttpApi/MagicLink.js.map +1 -0
  219. package/dist/HttpApi/Mfa.d.ts +5 -0
  220. package/dist/HttpApi/Mfa.d.ts.map +1 -0
  221. package/dist/HttpApi/Mfa.js +5 -0
  222. package/dist/HttpApi/Mfa.js.map +1 -0
  223. package/dist/HttpApi/Middleware.d.ts +26 -0
  224. package/dist/HttpApi/Middleware.d.ts.map +1 -0
  225. package/dist/HttpApi/Middleware.js +13 -0
  226. package/dist/HttpApi/Middleware.js.map +1 -0
  227. package/dist/HttpApi/OAuth.d.ts +4 -0
  228. package/dist/HttpApi/OAuth.d.ts.map +1 -0
  229. package/dist/HttpApi/OAuth.js +4 -0
  230. package/dist/HttpApi/OAuth.js.map +1 -0
  231. package/dist/HttpApi/OAuthDeviceAuthorization.d.ts +106 -0
  232. package/dist/HttpApi/OAuthDeviceAuthorization.d.ts.map +1 -0
  233. package/dist/HttpApi/OAuthDeviceAuthorization.js +415 -0
  234. package/dist/HttpApi/OAuthDeviceAuthorization.js.map +1 -0
  235. package/dist/HttpApi/OAuthProviderAuthorization.d.ts +4 -0
  236. package/dist/HttpApi/OAuthProviderAuthorization.d.ts.map +1 -0
  237. package/dist/HttpApi/OAuthProviderAuthorization.js +4 -0
  238. package/dist/HttpApi/OAuthProviderAuthorization.js.map +1 -0
  239. package/dist/HttpApi/OAuthToken.d.ts +4 -0
  240. package/dist/HttpApi/OAuthToken.d.ts.map +1 -0
  241. package/dist/HttpApi/OAuthToken.js +4 -0
  242. package/dist/HttpApi/OAuthToken.js.map +1 -0
  243. package/dist/HttpApi/OidcDiscovery.d.ts +4 -0
  244. package/dist/HttpApi/OidcDiscovery.d.ts.map +1 -0
  245. package/dist/HttpApi/OidcDiscovery.js +4 -0
  246. package/dist/HttpApi/OidcDiscovery.js.map +1 -0
  247. package/dist/HttpApi/Operations/AdminPermissionDefinition.d.ts +28 -0
  248. package/dist/HttpApi/Operations/AdminPermissionDefinition.d.ts.map +1 -0
  249. package/dist/HttpApi/Operations/AdminPermissionDefinition.js +5 -0
  250. package/dist/HttpApi/Operations/AdminPermissionDefinition.js.map +1 -0
  251. package/dist/HttpApi/Operations/AdminSession.d.ts +16 -0
  252. package/dist/HttpApi/Operations/AdminSession.d.ts.map +1 -0
  253. package/dist/HttpApi/Operations/AdminSession.js +5 -0
  254. package/dist/HttpApi/Operations/AdminSession.js.map +1 -0
  255. package/dist/HttpApi/Operations/ApiKey.d.ts +16 -0
  256. package/dist/HttpApi/Operations/ApiKey.d.ts.map +1 -0
  257. package/dist/HttpApi/Operations/ApiKey.js +5 -0
  258. package/dist/HttpApi/Operations/ApiKey.js.map +1 -0
  259. package/dist/HttpApi/Operations/Discovery.d.ts +19 -0
  260. package/dist/HttpApi/Operations/Discovery.d.ts.map +1 -0
  261. package/dist/HttpApi/Operations/Discovery.js +7 -0
  262. package/dist/HttpApi/Operations/Discovery.js.map +1 -0
  263. package/dist/HttpApi/Operations/EmailAuth.d.ts +12 -0
  264. package/dist/HttpApi/Operations/EmailAuth.d.ts.map +1 -0
  265. package/dist/HttpApi/Operations/EmailAuth.js +5 -0
  266. package/dist/HttpApi/Operations/EmailAuth.js.map +1 -0
  267. package/dist/HttpApi/Operations/EmailOtp.d.ts +14 -0
  268. package/dist/HttpApi/Operations/EmailOtp.d.ts.map +1 -0
  269. package/dist/HttpApi/Operations/EmailOtp.js +5 -0
  270. package/dist/HttpApi/Operations/EmailOtp.js.map +1 -0
  271. package/dist/HttpApi/Operations/EmailVerification.d.ts +14 -0
  272. package/dist/HttpApi/Operations/EmailVerification.d.ts.map +1 -0
  273. package/dist/HttpApi/Operations/EmailVerification.js +5 -0
  274. package/dist/HttpApi/Operations/EmailVerification.js.map +1 -0
  275. package/dist/HttpApi/Operations/HttpOperation.d.ts +4 -0
  276. package/dist/HttpApi/Operations/HttpOperation.d.ts.map +1 -0
  277. package/dist/HttpApi/Operations/HttpOperation.js +2 -0
  278. package/dist/HttpApi/Operations/HttpOperation.js.map +1 -0
  279. package/dist/HttpApi/Operations/Identity.d.ts +22 -0
  280. package/dist/HttpApi/Operations/Identity.d.ts.map +1 -0
  281. package/dist/HttpApi/Operations/Identity.js +5 -0
  282. package/dist/HttpApi/Operations/Identity.js.map +1 -0
  283. package/dist/HttpApi/Operations/Jwt.d.ts +14 -0
  284. package/dist/HttpApi/Operations/Jwt.d.ts.map +1 -0
  285. package/dist/HttpApi/Operations/Jwt.js +5 -0
  286. package/dist/HttpApi/Operations/Jwt.js.map +1 -0
  287. package/dist/HttpApi/Operations/LoginApproval.d.ts +16 -0
  288. package/dist/HttpApi/Operations/LoginApproval.d.ts.map +1 -0
  289. package/dist/HttpApi/Operations/LoginApproval.js +5 -0
  290. package/dist/HttpApi/Operations/LoginApproval.js.map +1 -0
  291. package/dist/HttpApi/Operations/MagicLink.d.ts +14 -0
  292. package/dist/HttpApi/Operations/MagicLink.d.ts.map +1 -0
  293. package/dist/HttpApi/Operations/MagicLink.js +5 -0
  294. package/dist/HttpApi/Operations/MagicLink.js.map +1 -0
  295. package/dist/HttpApi/Operations/Mfa.d.ts +24 -0
  296. package/dist/HttpApi/Operations/Mfa.d.ts.map +1 -0
  297. package/dist/HttpApi/Operations/Mfa.js +5 -0
  298. package/dist/HttpApi/Operations/Mfa.js.map +1 -0
  299. package/dist/HttpApi/Operations/OAuth.d.ts +20 -0
  300. package/dist/HttpApi/Operations/OAuth.d.ts.map +1 -0
  301. package/dist/HttpApi/Operations/OAuth.js +5 -0
  302. package/dist/HttpApi/Operations/OAuth.js.map +1 -0
  303. package/dist/HttpApi/Operations/OAuthDeviceAuthorization.d.ts +23 -0
  304. package/dist/HttpApi/Operations/OAuthDeviceAuthorization.d.ts.map +1 -0
  305. package/dist/HttpApi/Operations/OAuthDeviceAuthorization.js +7 -0
  306. package/dist/HttpApi/Operations/OAuthDeviceAuthorization.js.map +1 -0
  307. package/dist/HttpApi/Operations/OAuthProviderAuthorization.d.ts +12 -0
  308. package/dist/HttpApi/Operations/OAuthProviderAuthorization.d.ts.map +1 -0
  309. package/dist/HttpApi/Operations/OAuthProviderAuthorization.js +5 -0
  310. package/dist/HttpApi/Operations/OAuthProviderAuthorization.js.map +1 -0
  311. package/dist/HttpApi/Operations/OAuthToken.d.ts +26 -0
  312. package/dist/HttpApi/Operations/OAuthToken.d.ts.map +1 -0
  313. package/dist/HttpApi/Operations/OAuthToken.js +9 -0
  314. package/dist/HttpApi/Operations/OAuthToken.js.map +1 -0
  315. package/dist/HttpApi/Operations/Passkey.d.ts +22 -0
  316. package/dist/HttpApi/Operations/Passkey.d.ts.map +1 -0
  317. package/dist/HttpApi/Operations/Passkey.js +5 -0
  318. package/dist/HttpApi/Operations/Passkey.js.map +1 -0
  319. package/dist/HttpApi/Operations/Password.d.ts +22 -0
  320. package/dist/HttpApi/Operations/Password.d.ts.map +1 -0
  321. package/dist/HttpApi/Operations/Password.js +5 -0
  322. package/dist/HttpApi/Operations/Password.js.map +1 -0
  323. package/dist/HttpApi/Operations/RecoveryCodes.d.ts +20 -0
  324. package/dist/HttpApi/Operations/RecoveryCodes.d.ts.map +1 -0
  325. package/dist/HttpApi/Operations/RecoveryCodes.js +5 -0
  326. package/dist/HttpApi/Operations/RecoveryCodes.js.map +1 -0
  327. package/dist/HttpApi/Operations/RefreshToken.d.ts +12 -0
  328. package/dist/HttpApi/Operations/RefreshToken.d.ts.map +1 -0
  329. package/dist/HttpApi/Operations/RefreshToken.js +5 -0
  330. package/dist/HttpApi/Operations/RefreshToken.js.map +1 -0
  331. package/dist/HttpApi/Operations/Security.d.ts +12 -0
  332. package/dist/HttpApi/Operations/Security.d.ts.map +1 -0
  333. package/dist/HttpApi/Operations/Security.js +5 -0
  334. package/dist/HttpApi/Operations/Security.js.map +1 -0
  335. package/dist/HttpApi/Operations/SecurityTimeline.d.ts +19 -0
  336. package/dist/HttpApi/Operations/SecurityTimeline.d.ts.map +1 -0
  337. package/dist/HttpApi/Operations/SecurityTimeline.js +7 -0
  338. package/dist/HttpApi/Operations/SecurityTimeline.js.map +1 -0
  339. package/dist/HttpApi/Operations/Session.d.ts +22 -0
  340. package/dist/HttpApi/Operations/Session.d.ts.map +1 -0
  341. package/dist/HttpApi/Operations/Session.js +5 -0
  342. package/dist/HttpApi/Operations/Session.js.map +1 -0
  343. package/dist/HttpApi/Operations/StepUp.d.ts +22 -0
  344. package/dist/HttpApi/Operations/StepUp.d.ts.map +1 -0
  345. package/dist/HttpApi/Operations/StepUp.js +5 -0
  346. package/dist/HttpApi/Operations/StepUp.js.map +1 -0
  347. package/dist/HttpApi/Operations/Totp.d.ts +20 -0
  348. package/dist/HttpApi/Operations/Totp.d.ts.map +1 -0
  349. package/dist/HttpApi/Operations/Totp.js +5 -0
  350. package/dist/HttpApi/Operations/Totp.js.map +1 -0
  351. package/dist/HttpApi/Operations/TrustedDevice.d.ts +23 -0
  352. package/dist/HttpApi/Operations/TrustedDevice.d.ts.map +1 -0
  353. package/dist/HttpApi/Operations/TrustedDevice.js +7 -0
  354. package/dist/HttpApi/Operations/TrustedDevice.js.map +1 -0
  355. package/dist/HttpApi/Operations/index.d.ts +28 -0
  356. package/dist/HttpApi/Operations/index.d.ts.map +1 -0
  357. package/dist/HttpApi/Operations/index.js +28 -0
  358. package/dist/HttpApi/Operations/index.js.map +1 -0
  359. package/dist/HttpApi/Passkey.d.ts +5 -0
  360. package/dist/HttpApi/Passkey.d.ts.map +1 -0
  361. package/dist/HttpApi/Passkey.js +5 -0
  362. package/dist/HttpApi/Passkey.js.map +1 -0
  363. package/dist/HttpApi/Password.d.ts +220 -0
  364. package/dist/HttpApi/Password.d.ts.map +1 -0
  365. package/dist/HttpApi/Password.js +237 -0
  366. package/dist/HttpApi/Password.js.map +1 -0
  367. package/dist/HttpApi/PasswordContract.d.ts +307 -0
  368. package/dist/HttpApi/PasswordContract.d.ts.map +1 -0
  369. package/dist/HttpApi/PasswordContract.js +63 -0
  370. package/dist/HttpApi/PasswordContract.js.map +1 -0
  371. package/dist/HttpApi/PasswordGuards.d.ts +82 -0
  372. package/dist/HttpApi/PasswordGuards.d.ts.map +1 -0
  373. package/dist/HttpApi/PasswordGuards.js +179 -0
  374. package/dist/HttpApi/PasswordGuards.js.map +1 -0
  375. package/dist/HttpApi/RecoveryCodes.d.ts +5 -0
  376. package/dist/HttpApi/RecoveryCodes.d.ts.map +1 -0
  377. package/dist/HttpApi/RecoveryCodes.js +5 -0
  378. package/dist/HttpApi/RecoveryCodes.js.map +1 -0
  379. package/dist/HttpApi/RefreshToken.d.ts +4 -0
  380. package/dist/HttpApi/RefreshToken.d.ts.map +1 -0
  381. package/dist/HttpApi/RefreshToken.js +4 -0
  382. package/dist/HttpApi/RefreshToken.js.map +1 -0
  383. package/dist/HttpApi/RequestGuards.d.ts +42 -0
  384. package/dist/HttpApi/RequestGuards.d.ts.map +1 -0
  385. package/dist/HttpApi/RequestGuards.js +194 -0
  386. package/dist/HttpApi/RequestGuards.js.map +1 -0
  387. package/dist/HttpApi/Schemas.d.ts +399 -84
  388. package/dist/HttpApi/Schemas.d.ts.map +1 -1
  389. package/dist/HttpApi/Schemas.js +225 -27
  390. package/dist/HttpApi/Schemas.js.map +1 -1
  391. package/dist/HttpApi/Security.d.ts +12 -93
  392. package/dist/HttpApi/Security.d.ts.map +1 -1
  393. package/dist/HttpApi/Security.js +65 -356
  394. package/dist/HttpApi/Security.js.map +1 -1
  395. package/dist/HttpApi/SecurityTimeline.d.ts +4 -0
  396. package/dist/HttpApi/SecurityTimeline.d.ts.map +1 -0
  397. package/dist/HttpApi/SecurityTimeline.js +4 -0
  398. package/dist/HttpApi/SecurityTimeline.js.map +1 -0
  399. package/dist/HttpApi/Session.d.ts +5 -0
  400. package/dist/HttpApi/Session.d.ts.map +1 -0
  401. package/dist/HttpApi/Session.js +5 -0
  402. package/dist/HttpApi/Session.js.map +1 -0
  403. package/dist/HttpApi/SessionGuards.d.ts +15 -0
  404. package/dist/HttpApi/SessionGuards.d.ts.map +1 -0
  405. package/dist/HttpApi/SessionGuards.js +37 -0
  406. package/dist/HttpApi/SessionGuards.js.map +1 -0
  407. package/dist/HttpApi/StepUp.d.ts +5 -0
  408. package/dist/HttpApi/StepUp.d.ts.map +1 -0
  409. package/dist/HttpApi/StepUp.js +5 -0
  410. package/dist/HttpApi/StepUp.js.map +1 -0
  411. package/dist/HttpApi/Totp.d.ts +5 -0
  412. package/dist/HttpApi/Totp.d.ts.map +1 -0
  413. package/dist/HttpApi/Totp.js +5 -0
  414. package/dist/HttpApi/Totp.js.map +1 -0
  415. package/dist/HttpApi/Transport.d.ts +4 -6
  416. package/dist/HttpApi/Transport.d.ts.map +1 -1
  417. package/dist/HttpApi/Transport.js +62 -36
  418. package/dist/HttpApi/Transport.js.map +1 -1
  419. package/dist/HttpApi/TrustedDevice.d.ts +4 -0
  420. package/dist/HttpApi/TrustedDevice.d.ts.map +1 -0
  421. package/dist/HttpApi/TrustedDevice.js +4 -0
  422. package/dist/HttpApi/TrustedDevice.js.map +1 -0
  423. package/dist/HttpApi/index.d.ts +11 -3
  424. package/dist/HttpApi/index.d.ts.map +1 -1
  425. package/dist/HttpApi/index.js +10 -2
  426. package/dist/HttpApi/index.js.map +1 -1
  427. package/dist/Identity.d.ts +138 -0
  428. package/dist/Identity.d.ts.map +1 -0
  429. package/dist/Identity.js +105 -0
  430. package/dist/Identity.js.map +1 -0
  431. package/dist/IdentityManagement.d.ts +189 -0
  432. package/dist/IdentityManagement.d.ts.map +1 -0
  433. package/dist/IdentityManagement.js +317 -0
  434. package/dist/IdentityManagement.js.map +1 -0
  435. package/dist/IncidentAction.d.ts +1 -4
  436. package/dist/IncidentAction.d.ts.map +1 -1
  437. package/dist/IncidentAction.js +15 -9
  438. package/dist/IncidentAction.js.map +1 -1
  439. package/dist/Internal.d.ts +2 -0
  440. package/dist/Internal.d.ts.map +1 -1
  441. package/dist/Internal.js +30 -0
  442. package/dist/Internal.js.map +1 -1
  443. package/dist/Invitation.d.ts +362 -0
  444. package/dist/Invitation.d.ts.map +1 -0
  445. package/dist/Invitation.js +633 -0
  446. package/dist/Invitation.js.map +1 -0
  447. package/dist/IpQualityScore.d.ts +38 -0
  448. package/dist/IpQualityScore.d.ts.map +1 -0
  449. package/dist/IpQualityScore.js +215 -0
  450. package/dist/IpQualityScore.js.map +1 -0
  451. package/dist/Jwt.d.ts +8 -29
  452. package/dist/Jwt.d.ts.map +1 -1
  453. package/dist/Jwt.js +67 -56
  454. package/dist/Jwt.js.map +1 -1
  455. package/dist/LoginApproval.d.ts +15 -30
  456. package/dist/LoginApproval.d.ts.map +1 -1
  457. package/dist/LoginApproval.js +47 -41
  458. package/dist/LoginApproval.js.map +1 -1
  459. package/dist/LoginNotification.d.ts +7 -11
  460. package/dist/LoginNotification.d.ts.map +1 -1
  461. package/dist/LoginNotification.js +30 -17
  462. package/dist/LoginNotification.js.map +1 -1
  463. package/dist/LoginRisk.d.ts +11 -13
  464. package/dist/LoginRisk.d.ts.map +1 -1
  465. package/dist/LoginRisk.js +66 -26
  466. package/dist/LoginRisk.js.map +1 -1
  467. package/dist/LoginRiskEnrichment.d.ts +145 -0
  468. package/dist/LoginRiskEnrichment.d.ts.map +1 -0
  469. package/dist/LoginRiskEnrichment.js +220 -0
  470. package/dist/LoginRiskEnrichment.js.map +1 -0
  471. package/dist/MagicLink.d.ts +9 -8
  472. package/dist/MagicLink.d.ts.map +1 -1
  473. package/dist/MagicLink.js +40 -73
  474. package/dist/MagicLink.js.map +1 -1
  475. package/dist/Mailer.d.ts +19 -12
  476. package/dist/Mailer.d.ts.map +1 -1
  477. package/dist/Mailer.js +10 -12
  478. package/dist/Mailer.js.map +1 -1
  479. package/dist/OAuth.d.ts +138 -96
  480. package/dist/OAuth.d.ts.map +1 -1
  481. package/dist/OAuth.js +522 -221
  482. package/dist/OAuth.js.map +1 -1
  483. package/dist/OAuthDeviceAuthorization.d.ts +378 -0
  484. package/dist/OAuthDeviceAuthorization.d.ts.map +1 -0
  485. package/dist/OAuthDeviceAuthorization.js +860 -0
  486. package/dist/OAuthDeviceAuthorization.js.map +1 -0
  487. package/dist/OAuthDeviceClient.d.ts +76 -0
  488. package/dist/OAuthDeviceClient.d.ts.map +1 -0
  489. package/dist/OAuthDeviceClient.js +362 -0
  490. package/dist/OAuthDeviceClient.js.map +1 -0
  491. package/dist/Passkey.d.ts +15 -17
  492. package/dist/Passkey.d.ts.map +1 -1
  493. package/dist/Passkey.js +86 -39
  494. package/dist/Passkey.js.map +1 -1
  495. package/dist/PasskeyBrowser.d.ts +39 -0
  496. package/dist/PasskeyBrowser.d.ts.map +1 -0
  497. package/dist/PasskeyBrowser.js +206 -0
  498. package/dist/PasskeyBrowser.js.map +1 -0
  499. package/dist/PasskeySimpleWebAuthn.d.ts.map +1 -1
  500. package/dist/PasskeySimpleWebAuthn.js +19 -7
  501. package/dist/PasskeySimpleWebAuthn.js.map +1 -1
  502. package/dist/Password.d.ts +71 -37
  503. package/dist/Password.d.ts.map +1 -1
  504. package/dist/Password.js +295 -81
  505. package/dist/Password.js.map +1 -1
  506. package/dist/PasswordRisk.d.ts +63 -0
  507. package/dist/PasswordRisk.d.ts.map +1 -0
  508. package/dist/PasswordRisk.js +37 -0
  509. package/dist/PasswordRisk.js.map +1 -0
  510. package/dist/Permission.d.ts +308 -0
  511. package/dist/Permission.d.ts.map +1 -0
  512. package/dist/Permission.js +827 -0
  513. package/dist/Permission.js.map +1 -0
  514. package/dist/Policy.d.ts +31 -18
  515. package/dist/Policy.d.ts.map +1 -1
  516. package/dist/Policy.js +58 -14
  517. package/dist/Policy.js.map +1 -1
  518. package/dist/PostgresDelegatedAccessStorageMigrations.d.ts +7 -0
  519. package/dist/PostgresDelegatedAccessStorageMigrations.d.ts.map +1 -0
  520. package/dist/PostgresDelegatedAccessStorageMigrations.js +119 -0
  521. package/dist/PostgresDelegatedAccessStorageMigrations.js.map +1 -0
  522. package/dist/PostgresStorageMigrations.d.ts +16 -0
  523. package/dist/PostgresStorageMigrations.d.ts.map +1 -0
  524. package/dist/PostgresStorageMigrations.js +674 -0
  525. package/dist/PostgresStorageMigrations.js.map +1 -0
  526. package/dist/Privacy.d.ts +0 -3
  527. package/dist/Privacy.d.ts.map +1 -1
  528. package/dist/Privacy.js +2 -5
  529. package/dist/Privacy.js.map +1 -1
  530. package/dist/RateLimiter.d.ts +0 -3
  531. package/dist/RateLimiter.d.ts.map +1 -1
  532. package/dist/RateLimiter.js +1 -4
  533. package/dist/RateLimiter.js.map +1 -1
  534. package/dist/RecoveryCode.d.ts +83 -11
  535. package/dist/RecoveryCode.d.ts.map +1 -1
  536. package/dist/RecoveryCode.js +273 -75
  537. package/dist/RecoveryCode.js.map +1 -1
  538. package/dist/RecoveryPolicy.d.ts +81 -0
  539. package/dist/RecoveryPolicy.d.ts.map +1 -0
  540. package/dist/RecoveryPolicy.js +119 -0
  541. package/dist/RecoveryPolicy.js.map +1 -0
  542. package/dist/RefreshToken.d.ts +0 -9
  543. package/dist/RefreshToken.d.ts.map +1 -1
  544. package/dist/RefreshToken.js +31 -22
  545. package/dist/RefreshToken.js.map +1 -1
  546. package/dist/Retention.d.ts +6 -1
  547. package/dist/Retention.d.ts.map +1 -1
  548. package/dist/Retention.js +49 -12
  549. package/dist/Retention.js.map +1 -1
  550. package/dist/SecurityTimeline.d.ts +1 -4
  551. package/dist/SecurityTimeline.d.ts.map +1 -1
  552. package/dist/SecurityTimeline.js +110 -17
  553. package/dist/SecurityTimeline.js.map +1 -1
  554. package/dist/Sessions.d.ts +124 -29
  555. package/dist/Sessions.d.ts.map +1 -1
  556. package/dist/Sessions.js +626 -94
  557. package/dist/Sessions.js.map +1 -1
  558. package/dist/SqliteStorageSchemaData.d.ts +2 -0
  559. package/dist/SqliteStorageSchemaData.d.ts.map +1 -0
  560. package/dist/SqliteStorageSchemaData.js +508 -0
  561. package/dist/SqliteStorageSchemaData.js.map +1 -0
  562. package/dist/StepUp.d.ts +132 -11
  563. package/dist/StepUp.d.ts.map +1 -1
  564. package/dist/StepUp.js +387 -19
  565. package/dist/StepUp.js.map +1 -1
  566. package/dist/Storage.d.ts +89 -23
  567. package/dist/Storage.d.ts.map +1 -1
  568. package/dist/Storage.js +10 -12
  569. package/dist/Storage.js.map +1 -1
  570. package/dist/StorageMigrations.d.ts +7 -1
  571. package/dist/StorageMigrations.d.ts.map +1 -1
  572. package/dist/StorageMigrations.js +256 -0
  573. package/dist/StorageMigrations.js.map +1 -1
  574. package/dist/StorageSchemaGenerator.d.ts +544 -0
  575. package/dist/StorageSchemaGenerator.d.ts.map +1 -0
  576. package/dist/StorageSchemaGenerator.js +1418 -0
  577. package/dist/StorageSchemaGenerator.js.map +1 -0
  578. package/dist/StrongFactor.d.ts +64 -0
  579. package/dist/StrongFactor.d.ts.map +1 -0
  580. package/dist/StrongFactor.js +100 -0
  581. package/dist/StrongFactor.js.map +1 -0
  582. package/dist/Testing.js +2 -2
  583. package/dist/Testing.js.map +1 -1
  584. package/dist/Totp.d.ts +88 -13
  585. package/dist/Totp.d.ts.map +1 -1
  586. package/dist/Totp.js +192 -34
  587. package/dist/Totp.js.map +1 -1
  588. package/dist/TrustedDevice.d.ts +0 -9
  589. package/dist/TrustedDevice.d.ts.map +1 -1
  590. package/dist/TrustedDevice.js +15 -17
  591. package/dist/TrustedDevice.js.map +1 -1
  592. package/dist/WaitUntil.d.ts +0 -3
  593. package/dist/WaitUntil.d.ts.map +1 -1
  594. package/dist/WaitUntil.js +1 -4
  595. package/dist/WaitUntil.js.map +1 -1
  596. package/dist/Webhook.d.ts +42 -12
  597. package/dist/Webhook.d.ts.map +1 -1
  598. package/dist/Webhook.js +165 -26
  599. package/dist/Webhook.js.map +1 -1
  600. package/dist/alchemy/cloudflare/Email.d.ts.map +1 -1
  601. package/dist/alchemy/cloudflare/Email.js +9 -4
  602. package/dist/alchemy/cloudflare/Email.js.map +1 -1
  603. package/dist/cloudflare/Email.js +1 -1
  604. package/dist/cloudflare/Email.js.map +1 -1
  605. package/dist/cloudflare/RequestMetadata.d.ts +49 -0
  606. package/dist/cloudflare/RequestMetadata.d.ts.map +1 -0
  607. package/dist/cloudflare/RequestMetadata.js +71 -0
  608. package/dist/cloudflare/RequestMetadata.js.map +1 -0
  609. package/dist/index.d.ts +0 -35
  610. package/dist/index.d.ts.map +1 -1
  611. package/dist/index.js +0 -35
  612. package/dist/index.js.map +1 -1
  613. package/dist/internal/AuthFlowFinalizer.d.ts +31 -0
  614. package/dist/internal/AuthFlowFinalizer.d.ts.map +1 -0
  615. package/dist/internal/AuthFlowFinalizer.js +182 -0
  616. package/dist/internal/AuthFlowFinalizer.js.map +1 -0
  617. package/migrations/0001_auth_storage.sql +1 -0
  618. package/migrations/0006_auth_totp_factor.sql +1 -0
  619. package/migrations/0024_auth_permission.sql +39 -0
  620. package/migrations/0025_auth_permission_definition.sql +19 -0
  621. package/migrations/0026_auth_user_identity.sql +59 -0
  622. package/migrations/0027_auth_audit_log_storage_order.sql +46 -0
  623. package/migrations/0028_auth_oauth_client_secret_key.sql +39 -0
  624. package/migrations/0029_auth_oauth_device_authorization.sql +28 -0
  625. package/migrations/delegated-access/0001_auth_delegated_access.sql +152 -0
  626. package/migrations/postgres/0001_auth_core.sql +77 -0
  627. package/migrations/postgres/0002_auth_security_oauth.sql +65 -0
  628. package/migrations/postgres/0003_auth_credentials_tokens.sql +43 -0
  629. package/migrations/postgres/0004_auth_security_history.sql +103 -0
  630. package/migrations/postgres/0005_auth_webhooks.sql +29 -0
  631. package/migrations/postgres/0006_auth_domain_timeline.sql +50 -0
  632. package/migrations/postgres/0007_auth_oauth_clients.sql +85 -0
  633. package/migrations/postgres/0008_auth_oauth_tokens.sql +63 -0
  634. package/migrations/postgres/0009_auth_permissions.sql +66 -0
  635. package/migrations/postgres/0010_auth_oauth_device_authorization.sql +50 -0
  636. package/migrations/postgres/delegated-access/0001_auth_delegated_access.sql +112 -0
  637. package/package.json +309 -2
@@ -0,0 +1,145 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import type { CryptoError, CryptoKey, CryptoService } from "./Crypto.js";
3
+ import { Crypto } from "./Crypto.js";
4
+ import type { UnixMillis } from "./Identifiers.js";
5
+ import type { LoginRequestContext, LoginRiskLevel, LoginRiskMetadata } from "./LoginRisk.js";
6
+ export type GeoIpOperation = "lookup";
7
+ declare const GeoIpError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
8
+ readonly _tag: "GeoIpError";
9
+ } & Readonly<A>;
10
+ export declare class GeoIpError extends GeoIpError_base<{
11
+ readonly operation: GeoIpOperation;
12
+ readonly message: string;
13
+ readonly cause?: unknown;
14
+ }> {
15
+ }
16
+ export type GeoIpCacheOperation = "get" | "set";
17
+ declare const GeoIpCacheError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
18
+ readonly _tag: "GeoIpCacheError";
19
+ } & Readonly<A>;
20
+ export declare class GeoIpCacheError extends GeoIpCacheError_base<{
21
+ readonly operation: GeoIpCacheOperation;
22
+ readonly message: string;
23
+ readonly cause?: unknown;
24
+ }> {
25
+ }
26
+ declare const LoginRiskEnrichmentError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
27
+ readonly _tag: "LoginRiskEnrichmentError";
28
+ } & Readonly<A>;
29
+ export declare class LoginRiskEnrichmentError extends LoginRiskEnrichmentError_base<{
30
+ readonly message: string;
31
+ readonly cause?: unknown;
32
+ }> {
33
+ }
34
+ export interface GeoIpLookupInput {
35
+ readonly ip: string;
36
+ readonly request?: Omit<LoginRequestContext, "ip">;
37
+ readonly metadata?: LoginRiskMetadata;
38
+ }
39
+ export interface GeoIpLookupResult {
40
+ readonly country?: string;
41
+ readonly region?: string;
42
+ readonly city?: string;
43
+ readonly latitude?: number;
44
+ readonly longitude?: number;
45
+ readonly anonymousProxy?: boolean;
46
+ readonly hostingProvider?: boolean;
47
+ readonly riskLevel?: LoginRiskLevel;
48
+ readonly reasons?: readonly string[];
49
+ }
50
+ export interface GeoIpService {
51
+ readonly lookup: (input: GeoIpLookupInput) => Effect.Effect<GeoIpLookupResult, GeoIpError>;
52
+ }
53
+ declare const GeoIp_base: Context.ServiceClass<GeoIp, "auth/GeoIp", GeoIpService>;
54
+ export declare class GeoIp extends GeoIp_base {
55
+ }
56
+ export interface GeoIpCacheEntry {
57
+ readonly value: GeoIpLookupResult;
58
+ readonly expiresAt: UnixMillis;
59
+ }
60
+ export interface GeoIpCacheService {
61
+ readonly get: (key: string) => Effect.Effect<GeoIpCacheEntry | undefined, GeoIpCacheError>;
62
+ readonly set: (key: string, entry: GeoIpCacheEntry) => Effect.Effect<void, GeoIpCacheError>;
63
+ }
64
+ declare const GeoIpCache_base: Context.ServiceClass<GeoIpCache, "auth/GeoIpCache", GeoIpCacheService>;
65
+ export declare class GeoIpCache extends GeoIpCache_base {
66
+ }
67
+ export type LoginRiskKeyNamespace = "geoip-cache" | "risk-device" | "risk-location" | (string & {});
68
+ export interface LoginRiskKeyInput {
69
+ readonly namespace: LoginRiskKeyNamespace;
70
+ readonly value: string;
71
+ }
72
+ export type LoginRiskKeyFactory = (input: LoginRiskKeyInput) => Effect.Effect<string, unknown>;
73
+ export interface DeviceFingerprintParts {
74
+ readonly userAgentFamily?: string;
75
+ readonly platform?: string;
76
+ readonly timezone?: string;
77
+ readonly locale?: string;
78
+ readonly screenClass?: "small" | "medium" | "large";
79
+ readonly appDeviceId?: string;
80
+ }
81
+ export interface LoginRiskEnrichmentInput {
82
+ readonly request?: LoginRequestContext;
83
+ readonly deviceFingerprint?: DeviceFingerprintParts;
84
+ readonly deviceKey?: string;
85
+ readonly locationKey?: string;
86
+ readonly metadata?: LoginRiskMetadata;
87
+ readonly now?: UnixMillis;
88
+ }
89
+ export interface LoginRiskEnrichmentResult {
90
+ readonly request?: LoginRequestContext;
91
+ readonly deviceKey?: string;
92
+ readonly locationKey?: string;
93
+ readonly metadata?: LoginRiskMetadata;
94
+ readonly geo?: GeoIpLookupResult;
95
+ }
96
+ export type GeoIpLookupFailureMode = "ignore" | "fail";
97
+ export interface LoginRiskEnricherOptions {
98
+ readonly coordinatePrecision?: number;
99
+ readonly geoIpTtlMillis?: number;
100
+ readonly geoIpLookupFailure?: GeoIpLookupFailureMode;
101
+ readonly cacheKey?: LoginRiskKeyFactory;
102
+ }
103
+ export interface LoginRiskEnricherDependencies {
104
+ readonly geoIp?: GeoIpService;
105
+ readonly geoIpCache?: GeoIpCacheService;
106
+ readonly options?: LoginRiskEnricherOptions;
107
+ }
108
+ export interface LoginRiskEnricherService {
109
+ readonly enrich: (input: LoginRiskEnrichmentInput) => Effect.Effect<LoginRiskEnrichmentResult, LoginRiskEnrichmentError>;
110
+ }
111
+ declare const LoginRiskEnricher_base: Context.ServiceClass<LoginRiskEnricher, "auth/LoginRiskEnricher", LoginRiskEnricherService>;
112
+ export declare class LoginRiskEnricher extends LoginRiskEnricher_base {
113
+ }
114
+ export declare const coarseCoordinate: (value: number | undefined, precision?: number) => number | undefined;
115
+ export declare const safeGeoReasonCodes: (reasons: readonly string[] | undefined) => readonly string[] | undefined;
116
+ export declare const locationKeyFromGeo: (geo: Pick<GeoIpLookupResult, "country" | "region"> | undefined) => string | undefined;
117
+ export declare const locationKeyFromRequestContext: (request: Pick<LoginRequestContext, "country" | "region"> | undefined) => string | undefined;
118
+ export declare const loginRequestContextFromGeo: (input: {
119
+ readonly request?: LoginRequestContext;
120
+ readonly geo?: GeoIpLookupResult;
121
+ readonly coordinatePrecision?: number;
122
+ }) => LoginRequestContext | undefined;
123
+ export declare const mergeLoginRequestContext: (base: LoginRequestContext | undefined, override: LoginRequestContext | undefined) => LoginRequestContext | undefined;
124
+ export declare const safeGeoMetadata: (geo: GeoIpLookupResult | undefined) => LoginRiskMetadata | undefined;
125
+ export declare const deviceFingerprintMaterial: (input: DeviceFingerprintParts) => string;
126
+ export declare const makeLoginRiskKeyFactory: (dependencies: {
127
+ readonly crypto: CryptoService;
128
+ readonly key: CryptoKey;
129
+ }) => LoginRiskKeyFactory;
130
+ export declare const loginRiskKey: (input: {
131
+ readonly key: CryptoKey;
132
+ } & LoginRiskKeyInput) => Effect.Effect<string, CryptoError, Crypto>;
133
+ export declare const deviceKeyFromFingerprint: (input: {
134
+ readonly fingerprint: DeviceFingerprintParts;
135
+ readonly cacheKey: LoginRiskKeyFactory;
136
+ }) => Effect.Effect<string, unknown>;
137
+ export declare const makeGeoIpCacheMemory: () => GeoIpCacheService;
138
+ export declare const GeoIpCacheMemoryLive: Layer.Layer<GeoIpCache, never, never>;
139
+ export declare const makeGeoIpNoop: () => GeoIpService;
140
+ export declare const GeoIpNoopLive: Layer.Layer<GeoIp, never, never>;
141
+ export declare const makeLoginRiskEnricher: (dependencies?: LoginRiskEnricherDependencies) => LoginRiskEnricherService;
142
+ export declare const LoginRiskEnricherLive: (options?: LoginRiskEnricherOptions) => Layer.Layer<LoginRiskEnricher, never, never>;
143
+ export declare const enrichLoginRisk: (input: LoginRiskEnrichmentInput) => Effect.Effect<LoginRiskEnrichmentResult, LoginRiskEnrichmentError, LoginRiskEnricher>;
144
+ export {};
145
+ //# sourceMappingURL=LoginRiskEnrichment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginRiskEnrichment.d.ts","sourceRoot":"","sources":["../src/LoginRiskEnrichment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ import { Context, Data, Effect, Layer, Option } from "effect";
2
+ import { Crypto } from "./Crypto.js";
3
+ import { UnixMillis as makeUnixMillis } from "./Identifiers.js";
4
+ import { currentUnixMillis } from "./Internal.js";
5
+ export class GeoIpError extends Data.TaggedError("GeoIpError") {
6
+ }
7
+ export class GeoIpCacheError extends Data.TaggedError("GeoIpCacheError") {
8
+ }
9
+ export class LoginRiskEnrichmentError extends Data.TaggedError("LoginRiskEnrichmentError") {
10
+ }
11
+ export class GeoIp extends Context.Service()("auth/GeoIp") {
12
+ }
13
+ export class GeoIpCache extends Context.Service()("auth/GeoIpCache") {
14
+ }
15
+ export class LoginRiskEnricher extends Context.Service()("auth/LoginRiskEnricher") {
16
+ }
17
+ const defaultGeoIpTtlMillis = 15 * 60 * 1000;
18
+ const safeReasonPattern = /^[a-z0-9_.-]{1,64}$/;
19
+ const compactMetadata = (input) => {
20
+ const entries = Object.entries(input).filter(([, value]) => value !== undefined && (!Array.isArray(value) || value.length > 0));
21
+ return entries.length === 0 ? undefined : Object.fromEntries(entries);
22
+ };
23
+ const compactLoginRequestContext = (input) => {
24
+ const entries = Object.entries(input).filter(([, value]) => value !== undefined);
25
+ return entries.length === 0
26
+ ? undefined
27
+ : Object.fromEntries(entries);
28
+ };
29
+ const mergeMetadata = (left, right) => {
30
+ const merged = {
31
+ ...left,
32
+ ...right,
33
+ };
34
+ return Object.keys(merged).length === 0 ? undefined : merged;
35
+ };
36
+ const finiteNumber = (value) => value === undefined || !Number.isFinite(value) ? undefined : value;
37
+ const normalizedPrecision = (precision) => precision === undefined || !Number.isInteger(precision)
38
+ ? 1
39
+ : Math.min(6, Math.max(0, precision));
40
+ export const coarseCoordinate = (value, precision) => {
41
+ const finite = finiteNumber(value);
42
+ if (finite === undefined) {
43
+ return undefined;
44
+ }
45
+ const factor = 10 ** normalizedPrecision(precision);
46
+ return Math.round(finite * factor) / factor;
47
+ };
48
+ export const safeGeoReasonCodes = (reasons) => {
49
+ const safe = reasons?.filter((reason) => safeReasonPattern.test(reason));
50
+ return safe === undefined || safe.length === 0 ? undefined : safe;
51
+ };
52
+ export const locationKeyFromGeo = (geo) => geo?.country === undefined
53
+ ? undefined
54
+ : ["geo", geo.country, geo.region ?? "_"].join(":");
55
+ export const locationKeyFromRequestContext = (request) => request?.country === undefined
56
+ ? undefined
57
+ : ["geo", request.country, request.region ?? "_"].join(":");
58
+ export const loginRequestContextFromGeo = (input) => {
59
+ const { coordinatePrecision, geo, request } = input;
60
+ const latitude = coarseCoordinate(geo?.latitude ?? request?.latitude, coordinatePrecision);
61
+ const longitude = coarseCoordinate(geo?.longitude ?? request?.longitude, coordinatePrecision);
62
+ return compactLoginRequestContext({
63
+ ip: request?.ip,
64
+ userAgent: request?.userAgent,
65
+ country: geo?.country ?? request?.country,
66
+ region: geo?.region ?? request?.region,
67
+ city: geo?.city ?? request?.city,
68
+ latitude,
69
+ longitude,
70
+ });
71
+ };
72
+ export const mergeLoginRequestContext = (base, override) => {
73
+ const merged = {
74
+ ...base,
75
+ ...override,
76
+ };
77
+ return Object.keys(merged).length === 0 ? undefined : merged;
78
+ };
79
+ export const safeGeoMetadata = (geo) => {
80
+ if (geo === undefined) {
81
+ return undefined;
82
+ }
83
+ return compactMetadata({
84
+ geoRiskLevel: geo.riskLevel,
85
+ anonymousProxy: geo.anonymousProxy,
86
+ hostingProvider: geo.hostingProvider,
87
+ geoReasons: safeGeoReasonCodes(geo.reasons),
88
+ });
89
+ };
90
+ const fingerprintPart = (value, fallback) => {
91
+ const normalized = value
92
+ ?.trim()
93
+ .toLowerCase()
94
+ .replaceAll(/[^a-z0-9_.:-]/g, "_")
95
+ .slice(0, 64);
96
+ return normalized === undefined || normalized === "" ? fallback : normalized;
97
+ };
98
+ export const deviceFingerprintMaterial = (input) => [
99
+ fingerprintPart(input.userAgentFamily, "ua_unknown"),
100
+ fingerprintPart(input.platform, "platform_unknown"),
101
+ fingerprintPart(input.timezone, "tz_unknown"),
102
+ fingerprintPart(input.locale, "locale_unknown"),
103
+ input.screenClass ?? "screen_unknown",
104
+ fingerprintPart(input.appDeviceId, "app_device_unknown"),
105
+ ].join("|");
106
+ export const makeLoginRiskKeyFactory = (dependencies) => (input) => dependencies.crypto.hmacSha256({
107
+ key: dependencies.key,
108
+ data: `${input.namespace}:${input.value}`,
109
+ });
110
+ export const loginRiskKey = (input) => Crypto.use((crypto) => crypto.hmacSha256({
111
+ key: input.key,
112
+ data: `${input.namespace}:${input.value}`,
113
+ }));
114
+ export const deviceKeyFromFingerprint = (input) => input.cacheKey({
115
+ namespace: "risk-device",
116
+ value: deviceFingerprintMaterial(input.fingerprint),
117
+ });
118
+ export const makeGeoIpCacheMemory = () => {
119
+ const entries = new Map();
120
+ return GeoIpCache.of({
121
+ get: (key) => Effect.sync(() => entries.get(key)),
122
+ set: (key, entry) => Effect.sync(() => {
123
+ entries.set(key, entry);
124
+ }),
125
+ });
126
+ };
127
+ export const GeoIpCacheMemoryLive = Layer.sync(GeoIpCache)(makeGeoIpCacheMemory);
128
+ export const makeGeoIpNoop = () => GeoIp.of({
129
+ lookup: () => Effect.succeed({}),
130
+ });
131
+ export const GeoIpNoopLive = Layer.succeed(GeoIp)(makeGeoIpNoop());
132
+ const enrichmentError = (message, cause) => new LoginRiskEnrichmentError({ message, cause });
133
+ const lookupGeoIp = (dependencies, input, now) => {
134
+ const { geoIp, geoIpCache } = dependencies;
135
+ const options = dependencies.options ?? {};
136
+ const failureMode = options.geoIpLookupFailure ?? "ignore";
137
+ const { ip } = input;
138
+ if (ip === undefined || geoIp === undefined) {
139
+ return Effect.succeed(undefined);
140
+ }
141
+ const cache = geoIpCache;
142
+ const lookup = Effect.gen(function* () {
143
+ const cacheKey = cache === undefined || options.cacheKey === undefined
144
+ ? undefined
145
+ : yield* options
146
+ .cacheKey({ namespace: "geoip-cache", value: ip })
147
+ .pipe(Effect.mapError((cause) => enrichmentError("Failed to calculate GeoIP cache key", cause)));
148
+ const cached = cacheKey === undefined || cache === undefined
149
+ ? undefined
150
+ : yield* cache
151
+ .get(cacheKey)
152
+ .pipe(Effect.mapError((cause) => enrichmentError("Failed to load GeoIP cache entry", cause)));
153
+ if (cached !== undefined && Number(cached.expiresAt) > Number(now)) {
154
+ return cached.value;
155
+ }
156
+ const { ip: _ip, ...request } = input;
157
+ const geo = yield* geoIp
158
+ .lookup({
159
+ ip,
160
+ request,
161
+ })
162
+ .pipe(Effect.mapError((cause) => enrichmentError("GeoIP lookup failed", cause)));
163
+ if (cacheKey !== undefined && cache !== undefined) {
164
+ const ttlMillis = options.geoIpTtlMillis ?? defaultGeoIpTtlMillis;
165
+ yield* cache
166
+ .set(cacheKey, {
167
+ value: geo,
168
+ expiresAt: makeUnixMillis(Number(now) + Math.max(0, ttlMillis)),
169
+ })
170
+ .pipe(Effect.mapError((cause) => enrichmentError("Failed to store GeoIP cache entry", cause)));
171
+ }
172
+ return geo;
173
+ });
174
+ return failureMode === "fail"
175
+ ? lookup
176
+ : lookup.pipe(Effect.catchCause(() => Effect.succeed(undefined)));
177
+ };
178
+ export const makeLoginRiskEnricher = (dependencies = {}) => LoginRiskEnricher.of({
179
+ enrich: Effect.fn("auth.login_risk.enrich")(function* (input) {
180
+ const now = input.now ?? (yield* currentUnixMillis);
181
+ const options = dependencies.options ?? {};
182
+ const geo = input.request === undefined
183
+ ? undefined
184
+ : yield* lookupGeoIp(dependencies, input.request, now);
185
+ const request = loginRequestContextFromGeo({
186
+ request: input.request,
187
+ geo,
188
+ coordinatePrecision: options.coordinatePrecision,
189
+ });
190
+ const deviceKey = input.deviceKey ??
191
+ (input.deviceFingerprint === undefined || options.cacheKey === undefined
192
+ ? undefined
193
+ : yield* deviceKeyFromFingerprint({
194
+ fingerprint: input.deviceFingerprint,
195
+ cacheKey: options.cacheKey,
196
+ }).pipe(Effect.mapError((cause) => enrichmentError("Failed to calculate device key", cause))));
197
+ const locationKey = input.locationKey ??
198
+ locationKeyFromGeo(geo) ??
199
+ locationKeyFromRequestContext(request);
200
+ const metadata = mergeMetadata(input.metadata, safeGeoMetadata(geo));
201
+ return {
202
+ ...(request === undefined ? {} : { request }),
203
+ ...(deviceKey === undefined ? {} : { deviceKey }),
204
+ ...(locationKey === undefined ? {} : { locationKey }),
205
+ ...(metadata === undefined ? {} : { metadata }),
206
+ ...(geo === undefined ? {} : { geo }),
207
+ };
208
+ }),
209
+ });
210
+ export const LoginRiskEnricherLive = (options) => Layer.effect(LoginRiskEnricher)(Effect.gen(function* () {
211
+ const geoIp = yield* Effect.serviceOption(GeoIp);
212
+ const geoIpCache = yield* Effect.serviceOption(GeoIpCache);
213
+ return makeLoginRiskEnricher({
214
+ ...(Option.isSome(geoIp) ? { geoIp: geoIp.value } : {}),
215
+ ...(Option.isSome(geoIpCache) ? { geoIpCache: geoIpCache.value } : {}),
216
+ ...(options === undefined ? {} : { options }),
217
+ });
218
+ }));
219
+ export const enrichLoginRisk = (input) => LoginRiskEnricher.use((service) => service.enrich(input));
220
+ //# sourceMappingURL=LoginRiskEnrichment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginRiskEnrichment.js","sourceRoot":"","sources":["../src/LoginRiskEnrichment.ts"],"names":[],"mappings":"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"}
@@ -7,13 +7,15 @@ import { Crypto } from "./Crypto.js";
7
7
  import type { CryptoService } from "./Crypto.js";
8
8
  import type { ChallengeId, UnixMillis } from "./Identifiers.js";
9
9
  import { Email } from "./Identifiers.js";
10
+ import type { LoginIdentityInput, IdentityKindRegistryService } from "./Identity.js";
11
+ import { IdentityKindRegistry } from "./Identity.js";
10
12
  import type { LoginRequestContext } from "./LoginRisk.js";
11
13
  import { AuthMailer } from "./Mailer.js";
12
14
  import type { AuthMailerService } from "./Mailer.js";
13
- import { UserStore } from "./Storage.js";
14
- import type { UserStoreService } from "./Storage.js";
15
+ import { IdentityStore, RegistrationStore, UserStore } from "./Storage.js";
16
+ import type { IdentityStoreService, RegistrationStoreService, UserStoreService } from "./Storage.js";
15
17
  export interface MagicLinkStartInput {
16
- readonly email: Email;
18
+ readonly identity: LoginIdentityInput;
17
19
  readonly secret?: Redacted.Redacted<string>;
18
20
  readonly ttl?: Duration.Duration;
19
21
  readonly locale?: string;
@@ -60,9 +62,6 @@ export interface MagicLinkLoginService {
60
62
  declare const MagicLinkLogin_base: Context.ServiceClass<MagicLinkLogin, "auth/login/MagicLink", MagicLinkLoginService>;
61
63
  export declare class MagicLinkLogin extends MagicLinkLogin_base {
62
64
  }
63
- export declare namespace MagicLinkLogin {
64
- const make: (service: MagicLinkLoginService) => MagicLinkLoginService;
65
- }
66
65
  export interface MagicLinkOptions {
67
66
  readonly ttl?: Duration.Duration;
68
67
  readonly secretBytes?: number;
@@ -72,6 +71,9 @@ export interface MagicLinkOptions {
72
71
  export interface MagicLinkDependencies extends MagicLinkOptions {
73
72
  readonly challenge: ChallengeService;
74
73
  readonly users: UserStoreService;
74
+ readonly identities: IdentityStoreService;
75
+ readonly registration: RegistrationStoreService;
76
+ readonly identityKinds: IdentityKindRegistryService;
75
77
  readonly crypto: CryptoService;
76
78
  readonly authFlow: AuthFlowService;
77
79
  readonly authMailer: AuthMailerService;
@@ -79,7 +81,6 @@ export interface MagicLinkDependencies extends MagicLinkOptions {
79
81
  export declare const defaultMagicLinkTtl: Duration.Duration;
80
82
  export declare const defaultMagicLinkSecretBytes = 32;
81
83
  export declare const makeMagicLinkLogin: (dependencies: MagicLinkDependencies) => MagicLinkLoginService;
82
- export declare const MagicLinkLoginLive: (options: MagicLinkOptions) => Layer.Layer<MagicLinkLogin, never, AuthFlow | AuthMailer | Challenge | Crypto | UserStore>;
83
- export declare const MagicLinkFeatureLive: (options: MagicLinkOptions) => Layer.Layer<MagicLinkLogin, never, AuthFlow | AuthMailer | Challenge | Crypto | UserStore>;
84
+ export declare const MagicLinkLoginLive: (options: MagicLinkOptions) => Layer.Layer<MagicLinkLogin, never, AuthFlow | AuthMailer | Challenge | Crypto | IdentityKindRegistry | IdentityStore | RegistrationStore | UserStore>;
84
85
  export {};
85
86
  //# sourceMappingURL=MagicLink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MagicLink.d.ts","sourceRoot":"","sources":["../src/MagicLink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MagicLink.d.ts","sourceRoot":"","sources":["../src/MagicLink.ts"],"names":[],"mappings":"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"}