@nauth-toolkit/core 0.1.14 → 0.1.17

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 (623) hide show
  1. package/dist/adapters/database-columns.d.ts +70 -0
  2. package/dist/adapters/database-columns.d.ts.map +1 -1
  3. package/dist/adapters/database-columns.js +76 -2
  4. package/dist/adapters/database-columns.js.map +1 -1
  5. package/dist/adapters/express.adapter.d.ts +66 -0
  6. package/dist/adapters/express.adapter.d.ts.map +1 -1
  7. package/dist/adapters/express.adapter.js +80 -0
  8. package/dist/adapters/express.adapter.js.map +1 -1
  9. package/dist/adapters/fastify.adapter.d.ts +42 -0
  10. package/dist/adapters/fastify.adapter.d.ts.map +1 -1
  11. package/dist/adapters/fastify.adapter.js +86 -0
  12. package/dist/adapters/fastify.adapter.js.map +1 -1
  13. package/dist/adapters/index.d.ts +5 -0
  14. package/dist/adapters/index.d.ts.map +1 -1
  15. package/dist/adapters/index.js +9 -0
  16. package/dist/adapters/index.js.map +1 -1
  17. package/dist/adapters/storage.factory.d.ts +107 -0
  18. package/dist/adapters/storage.factory.d.ts.map +1 -1
  19. package/dist/adapters/storage.factory.js +114 -0
  20. package/dist/adapters/storage.factory.js.map +1 -1
  21. package/dist/adapters.d.ts +8 -0
  22. package/dist/adapters.d.ts.map +1 -1
  23. package/dist/adapters.js +8 -0
  24. package/dist/adapters.js.map +1 -1
  25. package/dist/bootstrap.d.ts +82 -0
  26. package/dist/bootstrap.d.ts.map +1 -1
  27. package/dist/bootstrap.js +106 -0
  28. package/dist/bootstrap.js.map +1 -1
  29. package/dist/dto/admin-set-password.dto.d.ts +90 -0
  30. package/dist/dto/admin-set-password.dto.d.ts.map +1 -1
  31. package/dist/dto/admin-set-password.dto.js +91 -0
  32. package/dist/dto/admin-set-password.dto.js.map +1 -1
  33. package/dist/dto/auth-challenge.dto.d.ts +170 -0
  34. package/dist/dto/auth-challenge.dto.d.ts.map +1 -1
  35. package/dist/dto/auth-challenge.dto.js +170 -0
  36. package/dist/dto/auth-challenge.dto.js.map +1 -1
  37. package/dist/dto/auth-response.dto.d.ts +196 -0
  38. package/dist/dto/auth-response.dto.d.ts.map +1 -1
  39. package/dist/dto/auth-response.dto.js +149 -0
  40. package/dist/dto/auth-response.dto.js.map +1 -1
  41. package/dist/dto/challenge-response.dto.d.ts +155 -0
  42. package/dist/dto/challenge-response.dto.d.ts.map +1 -1
  43. package/dist/dto/challenge-response.dto.js +8 -0
  44. package/dist/dto/challenge-response.dto.js.map +1 -1
  45. package/dist/dto/change-password-request.dto.d.ts +35 -0
  46. package/dist/dto/change-password-request.dto.d.ts.map +1 -1
  47. package/dist/dto/change-password-request.dto.js +35 -0
  48. package/dist/dto/change-password-request.dto.js.map +1 -1
  49. package/dist/dto/change-password-response.dto.d.ts +25 -0
  50. package/dist/dto/change-password-response.dto.d.ts.map +1 -1
  51. package/dist/dto/change-password-response.dto.js +25 -0
  52. package/dist/dto/change-password-response.dto.js.map +1 -1
  53. package/dist/dto/change-password.dto.d.ts +45 -0
  54. package/dist/dto/change-password.dto.d.ts.map +1 -1
  55. package/dist/dto/change-password.dto.js +45 -0
  56. package/dist/dto/change-password.dto.js.map +1 -1
  57. package/dist/dto/confirm-forgot-password.dto.d.ts +59 -0
  58. package/dist/dto/confirm-forgot-password.dto.d.ts.map +1 -1
  59. package/dist/dto/confirm-forgot-password.dto.js +59 -0
  60. package/dist/dto/confirm-forgot-password.dto.js.map +1 -1
  61. package/dist/dto/error-response.dto.d.ts +103 -0
  62. package/dist/dto/error-response.dto.d.ts.map +1 -1
  63. package/dist/dto/error-response.dto.js +103 -0
  64. package/dist/dto/error-response.dto.js.map +1 -1
  65. package/dist/dto/forgot-password.dto.d.ts +58 -0
  66. package/dist/dto/forgot-password.dto.d.ts.map +1 -1
  67. package/dist/dto/forgot-password.dto.js +58 -0
  68. package/dist/dto/forgot-password.dto.js.map +1 -1
  69. package/dist/dto/get-available-methods.dto.d.ts +37 -0
  70. package/dist/dto/get-available-methods.dto.d.ts.map +1 -1
  71. package/dist/dto/get-available-methods.dto.js +37 -0
  72. package/dist/dto/get-available-methods.dto.js.map +1 -1
  73. package/dist/dto/get-challenge-data-response.dto.d.ts +24 -0
  74. package/dist/dto/get-challenge-data-response.dto.d.ts.map +1 -1
  75. package/dist/dto/get-challenge-data-response.dto.js +24 -0
  76. package/dist/dto/get-challenge-data-response.dto.js.map +1 -1
  77. package/dist/dto/get-challenge-data.dto.d.ts +46 -0
  78. package/dist/dto/get-challenge-data.dto.d.ts.map +1 -1
  79. package/dist/dto/get-challenge-data.dto.js +46 -0
  80. package/dist/dto/get-challenge-data.dto.js.map +1 -1
  81. package/dist/dto/get-client-info.dto.d.ts +74 -0
  82. package/dist/dto/get-client-info.dto.d.ts.map +1 -1
  83. package/dist/dto/get-client-info.dto.js +74 -0
  84. package/dist/dto/get-client-info.dto.js.map +1 -1
  85. package/dist/dto/get-device-token-response.dto.d.ts +21 -0
  86. package/dist/dto/get-device-token-response.dto.d.ts.map +1 -1
  87. package/dist/dto/get-device-token-response.dto.js +21 -0
  88. package/dist/dto/get-device-token-response.dto.js.map +1 -1
  89. package/dist/dto/get-events-by-type.dto.d.ts +50 -0
  90. package/dist/dto/get-events-by-type.dto.d.ts.map +1 -1
  91. package/dist/dto/get-events-by-type.dto.js +50 -0
  92. package/dist/dto/get-events-by-type.dto.js.map +1 -1
  93. package/dist/dto/get-ip-address-response.dto.d.ts +20 -0
  94. package/dist/dto/get-ip-address-response.dto.d.ts.map +1 -1
  95. package/dist/dto/get-ip-address-response.dto.js +20 -0
  96. package/dist/dto/get-ip-address-response.dto.js.map +1 -1
  97. package/dist/dto/get-mfa-status.dto.d.ts +59 -0
  98. package/dist/dto/get-mfa-status.dto.d.ts.map +1 -1
  99. package/dist/dto/get-mfa-status.dto.js +59 -0
  100. package/dist/dto/get-mfa-status.dto.js.map +1 -1
  101. package/dist/dto/get-risk-assessment-history.dto.d.ts +28 -0
  102. package/dist/dto/get-risk-assessment-history.dto.d.ts.map +1 -1
  103. package/dist/dto/get-risk-assessment-history.dto.js +28 -0
  104. package/dist/dto/get-risk-assessment-history.dto.js.map +1 -1
  105. package/dist/dto/get-session-id-response.dto.d.ts +21 -0
  106. package/dist/dto/get-session-id-response.dto.d.ts.map +1 -1
  107. package/dist/dto/get-session-id-response.dto.js +21 -0
  108. package/dist/dto/get-session-id-response.dto.js.map +1 -1
  109. package/dist/dto/get-setup-data-response.dto.d.ts +27 -0
  110. package/dist/dto/get-setup-data-response.dto.d.ts.map +1 -1
  111. package/dist/dto/get-setup-data-response.dto.js +27 -0
  112. package/dist/dto/get-setup-data-response.dto.js.map +1 -1
  113. package/dist/dto/get-setup-data.dto.d.ts +51 -0
  114. package/dist/dto/get-setup-data.dto.d.ts.map +1 -1
  115. package/dist/dto/get-setup-data.dto.js +51 -0
  116. package/dist/dto/get-setup-data.dto.js.map +1 -1
  117. package/dist/dto/get-suspicious-activity.dto.d.ts +31 -0
  118. package/dist/dto/get-suspicious-activity.dto.d.ts.map +1 -1
  119. package/dist/dto/get-suspicious-activity.dto.js +31 -0
  120. package/dist/dto/get-suspicious-activity.dto.js.map +1 -1
  121. package/dist/dto/get-user-agent-response.dto.d.ts +19 -0
  122. package/dist/dto/get-user-agent-response.dto.d.ts.map +1 -1
  123. package/dist/dto/get-user-agent-response.dto.js +19 -0
  124. package/dist/dto/get-user-agent-response.dto.js.map +1 -1
  125. package/dist/dto/get-user-auth-history.dto.d.ts +64 -0
  126. package/dist/dto/get-user-auth-history.dto.d.ts.map +1 -1
  127. package/dist/dto/get-user-auth-history.dto.js +64 -0
  128. package/dist/dto/get-user-auth-history.dto.js.map +1 -1
  129. package/dist/dto/get-user-by-email.dto.d.ts +42 -0
  130. package/dist/dto/get-user-by-email.dto.d.ts.map +1 -1
  131. package/dist/dto/get-user-by-email.dto.js +42 -0
  132. package/dist/dto/get-user-by-email.dto.js.map +1 -1
  133. package/dist/dto/get-user-by-id.dto.d.ts +32 -0
  134. package/dist/dto/get-user-by-id.dto.d.ts.map +1 -1
  135. package/dist/dto/get-user-by-id.dto.js +32 -0
  136. package/dist/dto/get-user-by-id.dto.js.map +1 -1
  137. package/dist/dto/get-user-devices.dto.d.ts +34 -0
  138. package/dist/dto/get-user-devices.dto.d.ts.map +1 -1
  139. package/dist/dto/get-user-devices.dto.js +34 -0
  140. package/dist/dto/get-user-devices.dto.js.map +1 -1
  141. package/dist/dto/get-user-response.dto.d.ts +14 -0
  142. package/dist/dto/get-user-response.dto.d.ts.map +1 -1
  143. package/dist/dto/get-user-response.dto.js +15 -0
  144. package/dist/dto/get-user-response.dto.js.map +1 -1
  145. package/dist/dto/has-provider.dto.d.ts +33 -0
  146. package/dist/dto/has-provider.dto.d.ts.map +1 -1
  147. package/dist/dto/has-provider.dto.js +33 -0
  148. package/dist/dto/has-provider.dto.js.map +1 -1
  149. package/dist/dto/index.js +5 -0
  150. package/dist/dto/index.js.map +1 -1
  151. package/dist/dto/is-trusted-device-response.dto.d.ts +28 -0
  152. package/dist/dto/is-trusted-device-response.dto.d.ts.map +1 -1
  153. package/dist/dto/is-trusted-device-response.dto.js +28 -0
  154. package/dist/dto/is-trusted-device-response.dto.js.map +1 -1
  155. package/dist/dto/list-providers-response.dto.d.ts +19 -0
  156. package/dist/dto/list-providers-response.dto.d.ts.map +1 -1
  157. package/dist/dto/list-providers-response.dto.js +19 -0
  158. package/dist/dto/list-providers-response.dto.js.map +1 -1
  159. package/dist/dto/login.dto.d.ts +48 -0
  160. package/dist/dto/login.dto.d.ts.map +1 -1
  161. package/dist/dto/login.dto.js +50 -1
  162. package/dist/dto/login.dto.js.map +1 -1
  163. package/dist/dto/logout-all-response.dto.d.ts +20 -0
  164. package/dist/dto/logout-all-response.dto.d.ts.map +1 -1
  165. package/dist/dto/logout-all-response.dto.js +20 -0
  166. package/dist/dto/logout-all-response.dto.js.map +1 -1
  167. package/dist/dto/logout-all.dto.d.ts +42 -0
  168. package/dist/dto/logout-all.dto.d.ts.map +1 -1
  169. package/dist/dto/logout-all.dto.js +42 -0
  170. package/dist/dto/logout-all.dto.js.map +1 -1
  171. package/dist/dto/logout-response.dto.d.ts +21 -0
  172. package/dist/dto/logout-response.dto.d.ts.map +1 -1
  173. package/dist/dto/logout-response.dto.js +21 -0
  174. package/dist/dto/logout-response.dto.js.map +1 -1
  175. package/dist/dto/logout.dto.d.ts +45 -0
  176. package/dist/dto/logout.dto.d.ts.map +1 -1
  177. package/dist/dto/logout.dto.js +45 -0
  178. package/dist/dto/logout.dto.js.map +1 -1
  179. package/dist/dto/refresh-token.dto.d.ts +28 -0
  180. package/dist/dto/refresh-token.dto.d.ts.map +1 -1
  181. package/dist/dto/refresh-token.dto.js +28 -0
  182. package/dist/dto/refresh-token.dto.js.map +1 -1
  183. package/dist/dto/remove-devices.dto.d.ts +51 -0
  184. package/dist/dto/remove-devices.dto.d.ts.map +1 -1
  185. package/dist/dto/remove-devices.dto.js +51 -0
  186. package/dist/dto/remove-devices.dto.js.map +1 -1
  187. package/dist/dto/resend-code-response.dto.d.ts +28 -0
  188. package/dist/dto/resend-code-response.dto.d.ts.map +1 -1
  189. package/dist/dto/resend-code-response.dto.js +28 -0
  190. package/dist/dto/resend-code-response.dto.js.map +1 -1
  191. package/dist/dto/resend-code.dto.d.ts +37 -0
  192. package/dist/dto/resend-code.dto.d.ts.map +1 -1
  193. package/dist/dto/resend-code.dto.js +37 -0
  194. package/dist/dto/resend-code.dto.js.map +1 -1
  195. package/dist/dto/reset-password.dto.d.ts +74 -0
  196. package/dist/dto/reset-password.dto.d.ts.map +1 -1
  197. package/dist/dto/reset-password.dto.js +76 -1
  198. package/dist/dto/reset-password.dto.js.map +1 -1
  199. package/dist/dto/respond-challenge.dto.d.ts +147 -0
  200. package/dist/dto/respond-challenge.dto.d.ts.map +1 -1
  201. package/dist/dto/respond-challenge.dto.js +162 -0
  202. package/dist/dto/respond-challenge.dto.js.map +1 -1
  203. package/dist/dto/set-mfa-exemption.dto.d.ts +65 -0
  204. package/dist/dto/set-mfa-exemption.dto.d.ts.map +1 -1
  205. package/dist/dto/set-mfa-exemption.dto.js +65 -0
  206. package/dist/dto/set-mfa-exemption.dto.js.map +1 -1
  207. package/dist/dto/set-must-change-password-response.dto.d.ts +23 -0
  208. package/dist/dto/set-must-change-password-response.dto.d.ts.map +1 -1
  209. package/dist/dto/set-must-change-password-response.dto.js +23 -0
  210. package/dist/dto/set-must-change-password-response.dto.js.map +1 -1
  211. package/dist/dto/set-must-change-password.dto.d.ts +32 -0
  212. package/dist/dto/set-must-change-password.dto.d.ts.map +1 -1
  213. package/dist/dto/set-must-change-password.dto.js +32 -0
  214. package/dist/dto/set-must-change-password.dto.js.map +1 -1
  215. package/dist/dto/set-preferred-method.dto.d.ts +48 -0
  216. package/dist/dto/set-preferred-method.dto.d.ts.map +1 -1
  217. package/dist/dto/set-preferred-method.dto.js +48 -0
  218. package/dist/dto/set-preferred-method.dto.js.map +1 -1
  219. package/dist/dto/setup-mfa.dto.d.ts +62 -0
  220. package/dist/dto/setup-mfa.dto.d.ts.map +1 -1
  221. package/dist/dto/setup-mfa.dto.js +62 -0
  222. package/dist/dto/setup-mfa.dto.js.map +1 -1
  223. package/dist/dto/signup.dto.d.ts +92 -0
  224. package/dist/dto/signup.dto.d.ts.map +1 -1
  225. package/dist/dto/signup.dto.js +93 -0
  226. package/dist/dto/signup.dto.js.map +1 -1
  227. package/dist/dto/social-auth.dto.d.ts +234 -0
  228. package/dist/dto/social-auth.dto.d.ts.map +1 -1
  229. package/dist/dto/social-auth.dto.js +234 -0
  230. package/dist/dto/social-auth.dto.js.map +1 -1
  231. package/dist/dto/trust-device-response.dto.d.ts +26 -0
  232. package/dist/dto/trust-device-response.dto.d.ts.map +1 -1
  233. package/dist/dto/trust-device-response.dto.js +26 -0
  234. package/dist/dto/trust-device-response.dto.js.map +1 -1
  235. package/dist/dto/trust-device.dto.d.ts +9 -0
  236. package/dist/dto/trust-device.dto.d.ts.map +1 -1
  237. package/dist/dto/trust-device.dto.js +9 -0
  238. package/dist/dto/trust-device.dto.js.map +1 -1
  239. package/dist/dto/update-user-attributes-request.dto.d.ts +36 -0
  240. package/dist/dto/update-user-attributes-request.dto.d.ts.map +1 -1
  241. package/dist/dto/update-user-attributes-request.dto.js +36 -0
  242. package/dist/dto/update-user-attributes-request.dto.js.map +1 -1
  243. package/dist/dto/user-response.dto.d.ts +81 -0
  244. package/dist/dto/user-response.dto.d.ts.map +1 -1
  245. package/dist/dto/user-response.dto.js +84 -2
  246. package/dist/dto/user-response.dto.js.map +1 -1
  247. package/dist/dto/user-update.dto.d.ts +132 -0
  248. package/dist/dto/user-update.dto.d.ts.map +1 -1
  249. package/dist/dto/user-update.dto.js +133 -0
  250. package/dist/dto/user-update.dto.js.map +1 -1
  251. package/dist/dto/verify-email.dto.d.ts +171 -0
  252. package/dist/dto/verify-email.dto.d.ts.map +1 -1
  253. package/dist/dto/verify-email.dto.js +173 -1
  254. package/dist/dto/verify-email.dto.js.map +1 -1
  255. package/dist/dto/verify-mfa-code.dto.d.ts +65 -0
  256. package/dist/dto/verify-mfa-code.dto.d.ts.map +1 -1
  257. package/dist/dto/verify-mfa-code.dto.js +65 -0
  258. package/dist/dto/verify-mfa-code.dto.js.map +1 -1
  259. package/dist/dto/verify-phone-by-sub.dto.d.ts +49 -0
  260. package/dist/dto/verify-phone-by-sub.dto.d.ts.map +1 -1
  261. package/dist/dto/verify-phone-by-sub.dto.js +49 -0
  262. package/dist/dto/verify-phone-by-sub.dto.js.map +1 -1
  263. package/dist/dto/verify-phone.dto.d.ts +139 -0
  264. package/dist/dto/verify-phone.dto.d.ts.map +1 -1
  265. package/dist/dto/verify-phone.dto.js +142 -1
  266. package/dist/dto/verify-phone.dto.js.map +1 -1
  267. package/dist/dto.d.ts +10 -0
  268. package/dist/dto.d.ts.map +1 -1
  269. package/dist/dto.js +10 -0
  270. package/dist/dto.js.map +1 -1
  271. package/dist/entities/auth-audit.entity.d.ts +159 -0
  272. package/dist/entities/auth-audit.entity.d.ts.map +1 -1
  273. package/dist/entities/auth-audit.entity.js +166 -0
  274. package/dist/entities/auth-audit.entity.js.map +1 -1
  275. package/dist/entities/challenge-session.entity.d.ts +87 -0
  276. package/dist/entities/challenge-session.entity.d.ts.map +1 -1
  277. package/dist/entities/challenge-session.entity.js +87 -0
  278. package/dist/entities/challenge-session.entity.js.map +1 -1
  279. package/dist/entities/index.d.ts +18 -0
  280. package/dist/entities/index.d.ts.map +1 -1
  281. package/dist/entities/index.js +18 -0
  282. package/dist/entities/index.js.map +1 -1
  283. package/dist/entities/login-attempt.entity.d.ts +43 -0
  284. package/dist/entities/login-attempt.entity.d.ts.map +1 -1
  285. package/dist/entities/login-attempt.entity.js +43 -0
  286. package/dist/entities/login-attempt.entity.js.map +1 -1
  287. package/dist/entities/mfa-device.entity.d.ts +112 -0
  288. package/dist/entities/mfa-device.entity.d.ts.map +1 -1
  289. package/dist/entities/mfa-device.entity.js +112 -0
  290. package/dist/entities/mfa-device.entity.js.map +1 -1
  291. package/dist/entities/rate-limit.entity.d.ts +31 -0
  292. package/dist/entities/rate-limit.entity.d.ts.map +1 -1
  293. package/dist/entities/rate-limit.entity.js +31 -0
  294. package/dist/entities/rate-limit.entity.js.map +1 -1
  295. package/dist/entities/session.entity.d.ts +121 -0
  296. package/dist/entities/session.entity.d.ts.map +1 -1
  297. package/dist/entities/session.entity.js +121 -0
  298. package/dist/entities/session.entity.js.map +1 -1
  299. package/dist/entities/social-account.entity.d.ts +75 -0
  300. package/dist/entities/social-account.entity.d.ts.map +1 -1
  301. package/dist/entities/social-account.entity.js +75 -0
  302. package/dist/entities/social-account.entity.js.map +1 -1
  303. package/dist/entities/storage-lock.entity.d.ts +28 -0
  304. package/dist/entities/storage-lock.entity.d.ts.map +1 -1
  305. package/dist/entities/storage-lock.entity.js +28 -0
  306. package/dist/entities/storage-lock.entity.js.map +1 -1
  307. package/dist/entities/trusted-device.entity.d.ts +83 -0
  308. package/dist/entities/trusted-device.entity.d.ts.map +1 -1
  309. package/dist/entities/trusted-device.entity.js +83 -0
  310. package/dist/entities/trusted-device.entity.js.map +1 -1
  311. package/dist/entities/user.entity.d.ts +166 -0
  312. package/dist/entities/user.entity.d.ts.map +1 -1
  313. package/dist/entities/user.entity.js +166 -0
  314. package/dist/entities/user.entity.js.map +1 -1
  315. package/dist/entities/verification-token.entity.d.ts +102 -0
  316. package/dist/entities/verification-token.entity.d.ts.map +1 -1
  317. package/dist/entities/verification-token.entity.js +102 -0
  318. package/dist/entities/verification-token.entity.js.map +1 -1
  319. package/dist/entities.d.ts +8 -0
  320. package/dist/entities.d.ts.map +1 -1
  321. package/dist/entities.js +8 -0
  322. package/dist/entities.js.map +1 -1
  323. package/dist/enums/auth-audit-event-type.enum.d.ts +211 -0
  324. package/dist/enums/auth-audit-event-type.enum.d.ts.map +1 -1
  325. package/dist/enums/auth-audit-event-type.enum.js +244 -0
  326. package/dist/enums/auth-audit-event-type.enum.js.map +1 -1
  327. package/dist/enums/error-codes.enum.d.ts +296 -0
  328. package/dist/enums/error-codes.enum.d.ts.map +1 -1
  329. package/dist/enums/error-codes.enum.js +332 -0
  330. package/dist/enums/error-codes.enum.js.map +1 -1
  331. package/dist/enums/mfa-method.enum.d.ts +74 -0
  332. package/dist/enums/mfa-method.enum.d.ts.map +1 -1
  333. package/dist/enums/mfa-method.enum.js +64 -0
  334. package/dist/enums/mfa-method.enum.js.map +1 -1
  335. package/dist/enums/risk-factor.enum.d.ts +91 -0
  336. package/dist/enums/risk-factor.enum.d.ts.map +1 -1
  337. package/dist/enums/risk-factor.enum.js +97 -0
  338. package/dist/enums/risk-factor.enum.js.map +1 -1
  339. package/dist/exceptions/nauth.exception.d.ts +149 -0
  340. package/dist/exceptions/nauth.exception.d.ts.map +1 -1
  341. package/dist/exceptions/nauth.exception.js +159 -0
  342. package/dist/exceptions/nauth.exception.js.map +1 -1
  343. package/dist/handlers/auth.handler.d.ts +32 -0
  344. package/dist/handlers/auth.handler.d.ts.map +1 -1
  345. package/dist/handlers/auth.handler.js +47 -1
  346. package/dist/handlers/auth.handler.js.map +1 -1
  347. package/dist/handlers/client-info.handler.d.ts +25 -0
  348. package/dist/handlers/client-info.handler.d.ts.map +1 -1
  349. package/dist/handlers/client-info.handler.js +36 -2
  350. package/dist/handlers/client-info.handler.js.map +1 -1
  351. package/dist/handlers/csrf.handler.d.ts +32 -0
  352. package/dist/handlers/csrf.handler.d.ts.map +1 -1
  353. package/dist/handlers/csrf.handler.js +49 -1
  354. package/dist/handlers/csrf.handler.js.map +1 -1
  355. package/dist/handlers/token-delivery.handler.d.ts +16 -0
  356. package/dist/handlers/token-delivery.handler.d.ts.map +1 -1
  357. package/dist/handlers/token-delivery.handler.js +22 -1
  358. package/dist/handlers/token-delivery.handler.js.map +1 -1
  359. package/dist/index.d.ts +34 -0
  360. package/dist/index.d.ts.map +1 -1
  361. package/dist/index.js +67 -0
  362. package/dist/index.js.map +1 -1
  363. package/dist/interfaces/client-info.interface.d.ts +58 -0
  364. package/dist/interfaces/client-info.interface.d.ts.map +1 -1
  365. package/dist/interfaces/config.interface.d.ts +1774 -0
  366. package/dist/interfaces/config.interface.d.ts.map +1 -1
  367. package/dist/interfaces/config.interface.js +16 -0
  368. package/dist/interfaces/config.interface.js.map +1 -1
  369. package/dist/interfaces/entities.interface.d.ts +48 -0
  370. package/dist/interfaces/entities.interface.d.ts.map +1 -1
  371. package/dist/interfaces/entities.interface.js +8 -0
  372. package/dist/interfaces/entities.interface.js.map +1 -1
  373. package/dist/interfaces/index.js +5 -0
  374. package/dist/interfaces/index.js.map +1 -1
  375. package/dist/interfaces/logger.interface.d.ts +213 -0
  376. package/dist/interfaces/logger.interface.d.ts.map +1 -1
  377. package/dist/interfaces/logger.interface.js +35 -0
  378. package/dist/interfaces/logger.interface.js.map +1 -1
  379. package/dist/interfaces/mfa-provider.interface.d.ts +134 -0
  380. package/dist/interfaces/mfa-provider.interface.d.ts.map +1 -1
  381. package/dist/interfaces/oauth.interface.d.ts +110 -0
  382. package/dist/interfaces/oauth.interface.d.ts.map +1 -1
  383. package/dist/interfaces/provider.interface.d.ts +83 -0
  384. package/dist/interfaces/provider.interface.d.ts.map +1 -1
  385. package/dist/interfaces/sms-template.interface.d.ts +246 -0
  386. package/dist/interfaces/sms-template.interface.d.ts.map +1 -1
  387. package/dist/interfaces/sms-template.interface.js +26 -0
  388. package/dist/interfaces/sms-template.interface.js.map +1 -1
  389. package/dist/interfaces/social-auth-provider.interface.d.ts +115 -0
  390. package/dist/interfaces/social-auth-provider.interface.d.ts.map +1 -1
  391. package/dist/interfaces/storage-adapter.interface.d.ts +37 -0
  392. package/dist/interfaces/storage-adapter.interface.d.ts.map +1 -1
  393. package/dist/interfaces/template.interface.d.ts +351 -0
  394. package/dist/interfaces/template.interface.d.ts.map +1 -1
  395. package/dist/interfaces/template.interface.js +13 -0
  396. package/dist/interfaces/template.interface.js.map +1 -1
  397. package/dist/interfaces/token-verifier.interface.d.ts +101 -0
  398. package/dist/interfaces/token-verifier.interface.d.ts.map +1 -1
  399. package/dist/interfaces.d.ts +8 -0
  400. package/dist/interfaces.d.ts.map +1 -1
  401. package/dist/interfaces.js +8 -0
  402. package/dist/interfaces.js.map +1 -1
  403. package/dist/internal.d.ts +120 -0
  404. package/dist/internal.d.ts.map +1 -1
  405. package/dist/internal.js +138 -0
  406. package/dist/internal.js.map +1 -1
  407. package/dist/platform/interfaces.d.ts +187 -0
  408. package/dist/platform/interfaces.d.ts.map +1 -1
  409. package/dist/platform/interfaces.js +11 -0
  410. package/dist/platform/interfaces.js.map +1 -1
  411. package/dist/schemas/auth-config.schema.d.ts +48 -0
  412. package/dist/schemas/auth-config.schema.d.ts.map +1 -1
  413. package/dist/schemas/auth-config.schema.js +188 -9
  414. package/dist/schemas/auth-config.schema.js.map +1 -1
  415. package/dist/services/adaptive-mfa-decision.service.d.ts +144 -0
  416. package/dist/services/adaptive-mfa-decision.service.d.ts.map +1 -1
  417. package/dist/services/adaptive-mfa-decision.service.js +151 -5
  418. package/dist/services/adaptive-mfa-decision.service.js.map +1 -1
  419. package/dist/services/auth-audit.service.d.ts +195 -0
  420. package/dist/services/auth-audit.service.d.ts.map +1 -1
  421. package/dist/services/auth-audit.service.js +228 -1
  422. package/dist/services/auth-audit.service.js.map +1 -1
  423. package/dist/services/auth-challenge-helper.service.d.ts +144 -1
  424. package/dist/services/auth-challenge-helper.service.d.ts.map +1 -1
  425. package/dist/services/auth-challenge-helper.service.js +295 -16
  426. package/dist/services/auth-challenge-helper.service.js.map +1 -1
  427. package/dist/services/auth-flow-context-builder.service.d.ts +120 -1
  428. package/dist/services/auth-flow-context-builder.service.d.ts.map +1 -1
  429. package/dist/services/auth-flow-context-builder.service.js +184 -5
  430. package/dist/services/auth-flow-context-builder.service.js.map +1 -1
  431. package/dist/services/auth-flow-rules.d.ts +136 -0
  432. package/dist/services/auth-flow-rules.d.ts.map +1 -1
  433. package/dist/services/auth-flow-rules.js +137 -0
  434. package/dist/services/auth-flow-rules.js.map +1 -1
  435. package/dist/services/auth-flow-state-definitions.d.ts +40 -0
  436. package/dist/services/auth-flow-state-definitions.d.ts.map +1 -1
  437. package/dist/services/auth-flow-state-definitions.js +98 -0
  438. package/dist/services/auth-flow-state-definitions.js.map +1 -1
  439. package/dist/services/auth-flow-state-machine.service.d.ts +91 -0
  440. package/dist/services/auth-flow-state-machine.service.d.ts.map +1 -1
  441. package/dist/services/auth-flow-state-machine.service.js +102 -0
  442. package/dist/services/auth-flow-state-machine.service.js.map +1 -1
  443. package/dist/services/auth-flow-state-machine.types.d.ts +221 -0
  444. package/dist/services/auth-flow-state-machine.types.d.ts.map +1 -1
  445. package/dist/services/auth-flow-state-machine.types.js +47 -0
  446. package/dist/services/auth-flow-state-machine.types.js.map +1 -1
  447. package/dist/services/auth.service.d.ts +397 -1
  448. package/dist/services/auth.service.d.ts.map +1 -1
  449. package/dist/services/auth.service.js +943 -27
  450. package/dist/services/auth.service.js.map +1 -1
  451. package/dist/services/challenge.service.d.ts +255 -1
  452. package/dist/services/challenge.service.d.ts.map +1 -1
  453. package/dist/services/challenge.service.js +327 -3
  454. package/dist/services/challenge.service.js.map +1 -1
  455. package/dist/services/client-info.service.d.ts +143 -0
  456. package/dist/services/client-info.service.d.ts.map +1 -1
  457. package/dist/services/client-info.service.js +161 -0
  458. package/dist/services/client-info.service.js.map +1 -1
  459. package/dist/services/csrf.service.d.ts +15 -0
  460. package/dist/services/csrf.service.d.ts.map +1 -1
  461. package/dist/services/csrf.service.js +16 -0
  462. package/dist/services/csrf.service.js.map +1 -1
  463. package/dist/services/email-verification.service.d.ts +52 -0
  464. package/dist/services/email-verification.service.d.ts.map +1 -1
  465. package/dist/services/email-verification.service.js +149 -10
  466. package/dist/services/email-verification.service.js.map +1 -1
  467. package/dist/services/geo-location.service.d.ts +105 -0
  468. package/dist/services/geo-location.service.d.ts.map +1 -1
  469. package/dist/services/geo-location.service.js +188 -2
  470. package/dist/services/geo-location.service.js.map +1 -1
  471. package/dist/services/jwt.service.d.ts +257 -0
  472. package/dist/services/jwt.service.d.ts.map +1 -1
  473. package/dist/services/jwt.service.js +284 -1
  474. package/dist/services/jwt.service.js.map +1 -1
  475. package/dist/services/mfa-base.service.d.ts +179 -1
  476. package/dist/services/mfa-base.service.d.ts.map +1 -1
  477. package/dist/services/mfa-base.service.js +256 -2
  478. package/dist/services/mfa-base.service.js.map +1 -1
  479. package/dist/services/mfa.service.d.ts +304 -0
  480. package/dist/services/mfa.service.d.ts.map +1 -1
  481. package/dist/services/mfa.service.js +380 -0
  482. package/dist/services/mfa.service.js.map +1 -1
  483. package/dist/services/password-reset.service.d.ts +46 -0
  484. package/dist/services/password-reset.service.d.ts.map +1 -1
  485. package/dist/services/password-reset.service.js +79 -0
  486. package/dist/services/password-reset.service.js.map +1 -1
  487. package/dist/services/password.service.d.ts +139 -0
  488. package/dist/services/password.service.d.ts.map +1 -1
  489. package/dist/services/password.service.js +167 -9
  490. package/dist/services/password.service.js.map +1 -1
  491. package/dist/services/phone-verification.service.d.ts +75 -0
  492. package/dist/services/phone-verification.service.d.ts.map +1 -1
  493. package/dist/services/phone-verification.service.js +188 -6
  494. package/dist/services/phone-verification.service.js.map +1 -1
  495. package/dist/services/risk-detection.service.d.ts +198 -0
  496. package/dist/services/risk-detection.service.d.ts.map +1 -1
  497. package/dist/services/risk-detection.service.js +358 -11
  498. package/dist/services/risk-detection.service.js.map +1 -1
  499. package/dist/services/risk-scoring.service.d.ts +84 -0
  500. package/dist/services/risk-scoring.service.d.ts.map +1 -1
  501. package/dist/services/risk-scoring.service.js +87 -0
  502. package/dist/services/risk-scoring.service.js.map +1 -1
  503. package/dist/services/session.service.d.ts +204 -0
  504. package/dist/services/session.service.d.ts.map +1 -1
  505. package/dist/services/session.service.js +289 -4
  506. package/dist/services/session.service.js.map +1 -1
  507. package/dist/services/social-auth-base.service.d.ts +123 -1
  508. package/dist/services/social-auth-base.service.d.ts.map +1 -1
  509. package/dist/services/social-auth-base.service.js +155 -2
  510. package/dist/services/social-auth-base.service.js.map +1 -1
  511. package/dist/services/social-auth.service.d.ts +191 -0
  512. package/dist/services/social-auth.service.d.ts.map +1 -1
  513. package/dist/services/social-auth.service.js +215 -2
  514. package/dist/services/social-auth.service.js.map +1 -1
  515. package/dist/services/social-provider-registry.service.d.ts +86 -0
  516. package/dist/services/social-provider-registry.service.d.ts.map +1 -1
  517. package/dist/services/social-provider-registry.service.js +86 -0
  518. package/dist/services/social-provider-registry.service.js.map +1 -1
  519. package/dist/services/trusted-device.service.d.ts +105 -0
  520. package/dist/services/trusted-device.service.d.ts.map +1 -1
  521. package/dist/services/trusted-device.service.js +133 -4
  522. package/dist/services/trusted-device.service.js.map +1 -1
  523. package/dist/storage/account-lockout-storage.service.d.ts +35 -0
  524. package/dist/storage/account-lockout-storage.service.d.ts.map +1 -1
  525. package/dist/storage/account-lockout-storage.service.js +35 -0
  526. package/dist/storage/account-lockout-storage.service.js.map +1 -1
  527. package/dist/storage/memory-storage.adapter.d.ts +148 -0
  528. package/dist/storage/memory-storage.adapter.d.ts.map +1 -1
  529. package/dist/storage/memory-storage.adapter.js +201 -6
  530. package/dist/storage/memory-storage.adapter.js.map +1 -1
  531. package/dist/storage/rate-limit-storage.service.d.ts +3 -0
  532. package/dist/storage/rate-limit-storage.service.d.ts.map +1 -1
  533. package/dist/storage/rate-limit-storage.service.js +4 -0
  534. package/dist/storage/rate-limit-storage.service.js.map +1 -1
  535. package/dist/storage.d.ts +8 -0
  536. package/dist/storage.d.ts.map +1 -1
  537. package/dist/storage.js +8 -0
  538. package/dist/storage.js.map +1 -1
  539. package/dist/templates/html-template.engine.d.ts +110 -0
  540. package/dist/templates/html-template.engine.d.ts.map +1 -1
  541. package/dist/templates/html-template.engine.js +147 -0
  542. package/dist/templates/html-template.engine.js.map +1 -1
  543. package/dist/templates/index.d.ts +5 -0
  544. package/dist/templates/index.d.ts.map +1 -1
  545. package/dist/templates/index.js +5 -0
  546. package/dist/templates/index.js.map +1 -1
  547. package/dist/templates/sms-template.engine.d.ts +151 -0
  548. package/dist/templates/sms-template.engine.d.ts.map +1 -1
  549. package/dist/templates/sms-template.engine.js +171 -0
  550. package/dist/templates/sms-template.engine.js.map +1 -1
  551. package/dist/templates.d.ts +8 -0
  552. package/dist/templates.d.ts.map +1 -1
  553. package/dist/templates.js +8 -0
  554. package/dist/templates.js.map +1 -1
  555. package/dist/utils/common-passwords.d.ts +42 -0
  556. package/dist/utils/common-passwords.d.ts.map +1 -1
  557. package/dist/utils/common-passwords.js +88 -0
  558. package/dist/utils/common-passwords.js.map +1 -1
  559. package/dist/utils/context-storage.d.ts +129 -0
  560. package/dist/utils/context-storage.d.ts.map +1 -1
  561. package/dist/utils/context-storage.js +129 -0
  562. package/dist/utils/context-storage.js.map +1 -1
  563. package/dist/utils/cookie-names.util.d.ts +35 -0
  564. package/dist/utils/cookie-names.util.d.ts.map +1 -1
  565. package/dist/utils/cookie-names.util.js +37 -0
  566. package/dist/utils/cookie-names.util.js.map +1 -1
  567. package/dist/utils/cookies.util.d.ts +19 -0
  568. package/dist/utils/cookies.util.d.ts.map +1 -1
  569. package/dist/utils/cookies.util.js +30 -3
  570. package/dist/utils/cookies.util.js.map +1 -1
  571. package/dist/utils/index.d.ts +3 -0
  572. package/dist/utils/index.d.ts.map +1 -1
  573. package/dist/utils/index.js +4 -0
  574. package/dist/utils/index.js.map +1 -1
  575. package/dist/utils/ip-extractor.d.ts +88 -0
  576. package/dist/utils/ip-extractor.d.ts.map +1 -1
  577. package/dist/utils/ip-extractor.js +109 -16
  578. package/dist/utils/ip-extractor.js.map +1 -1
  579. package/dist/utils/nauth-logger.d.ts +70 -0
  580. package/dist/utils/nauth-logger.d.ts.map +1 -1
  581. package/dist/utils/nauth-logger.js +82 -4
  582. package/dist/utils/nauth-logger.js.map +1 -1
  583. package/dist/utils/pii-redactor.d.ts +70 -0
  584. package/dist/utils/pii-redactor.d.ts.map +1 -1
  585. package/dist/utils/pii-redactor.js +102 -0
  586. package/dist/utils/pii-redactor.js.map +1 -1
  587. package/dist/utils/setup/get-repositories.d.ts +16 -0
  588. package/dist/utils/setup/get-repositories.d.ts.map +1 -1
  589. package/dist/utils/setup/get-repositories.js +21 -0
  590. package/dist/utils/setup/get-repositories.js.map +1 -1
  591. package/dist/utils/setup/init-services.d.ts +40 -1
  592. package/dist/utils/setup/init-services.d.ts.map +1 -1
  593. package/dist/utils/setup/init-services.js +98 -0
  594. package/dist/utils/setup/init-services.js.map +1 -1
  595. package/dist/utils/setup/init-social.d.ts +27 -0
  596. package/dist/utils/setup/init-social.d.ts.map +1 -1
  597. package/dist/utils/setup/init-social.js +49 -0
  598. package/dist/utils/setup/init-social.js.map +1 -1
  599. package/dist/utils/setup/init-storage.d.ts +22 -0
  600. package/dist/utils/setup/init-storage.d.ts.map +1 -1
  601. package/dist/utils/setup/init-storage.js +36 -0
  602. package/dist/utils/setup/init-storage.js.map +1 -1
  603. package/dist/utils/setup/register-mfa.d.ts +22 -0
  604. package/dist/utils/setup/register-mfa.d.ts.map +1 -1
  605. package/dist/utils/setup/register-mfa.js +41 -0
  606. package/dist/utils/setup/register-mfa.js.map +1 -1
  607. package/dist/utils/setup/run-nauth-migrations.d.ts +7 -0
  608. package/dist/utils/setup/run-nauth-migrations.d.ts.map +1 -1
  609. package/dist/utils/setup/run-nauth-migrations.js +8 -0
  610. package/dist/utils/setup/run-nauth-migrations.js.map +1 -1
  611. package/dist/utils/token-delivery-policy.d.ts +17 -0
  612. package/dist/utils/token-delivery-policy.d.ts.map +1 -1
  613. package/dist/utils/token-delivery-policy.js +17 -0
  614. package/dist/utils/token-delivery-policy.js.map +1 -1
  615. package/dist/utils.d.ts +8 -0
  616. package/dist/utils.d.ts.map +1 -1
  617. package/dist/utils.js +8 -0
  618. package/dist/utils.js.map +1 -1
  619. package/dist/validators/template.validator.d.ts +80 -0
  620. package/dist/validators/template.validator.d.ts.map +1 -1
  621. package/dist/validators/template.validator.js +94 -0
  622. package/dist/validators/template.validator.js.map +1 -1
  623. package/package.json +7 -2
@@ -7,24 +7,105 @@ const auth_challenge_dto_1 = require("../dto/auth-challenge.dto");
7
7
  const auth_audit_event_type_enum_1 = require("../enums/auth-audit-event-type.enum");
8
8
  const nauth_exception_1 = require("../exceptions/nauth.exception");
9
9
  const error_codes_enum_1 = require("../enums/error-codes.enum");
10
+ /**
11
+ * Challenge Session Service
12
+ *
13
+ * Manages authentication challenge sessions for the challenge-response flow.
14
+ * Challenge sessions are temporary, short-lived sessions (typically 15 minutes)
15
+ * that track pending authentication challenges similar to AWS Cognito.
16
+ *
17
+ * Handles:
18
+ * - Challenge session creation and validation
19
+ * - Session expiration and cleanup
20
+ * - Attempt tracking and rate limiting
21
+ * - Secure session token generation
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * // Create a challenge session
26
+ * const session = await challengeService.createChallengeSession(
27
+ * user,
28
+ * AuthChallenge.VERIFY_EMAIL,
29
+ * { email: user.email }
30
+ * );
31
+ *
32
+ * // Validate and consume a challenge session
33
+ * const validSession = await challengeService.validateAndConsumeSession(
34
+ * sessionToken,
35
+ * AuthChallenge.VERIFY_EMAIL
36
+ * );
37
+ * ```
38
+ */
10
39
  class ChallengeService {
11
40
  challengeSessionRepository;
12
41
  clientInfoService;
13
42
  logger;
14
43
  auditService;
15
44
  config;
45
+ /**
46
+ * Default challenge session expiration time (15 minutes)
47
+ */
16
48
  DEFAULT_EXPIRATION_MINUTES = 15;
49
+ /**
50
+ * Default maximum attempts per challenge session
51
+ */
17
52
  DEFAULT_MAX_ATTEMPTS = 3;
18
- constructor(challengeSessionRepository, clientInfoService, logger, auditService, config) {
53
+ constructor(challengeSessionRepository, clientInfoService, logger, auditService, // Optional - audit trail service (enabled via config.auditLogs.enabled)
54
+ config) {
19
55
  this.challengeSessionRepository = challengeSessionRepository;
20
56
  this.clientInfoService = clientInfoService;
21
57
  this.logger = logger;
22
58
  this.auditService = auditService;
23
59
  this.config = config;
24
60
  }
61
+ /**
62
+ * Per-user cleanup throttle map to avoid frequent cleanup writes
63
+ */
25
64
  lastCleanupByUserId = new Map();
65
+ // ============================================================================
66
+ // Challenge Session Creation
67
+ // ============================================================================
68
+ /**
69
+ * Create a new challenge session
70
+ *
71
+ * Generates a unique session token and stores challenge metadata.
72
+ * The session token is returned to the client and must be submitted
73
+ * when responding to the challenge.
74
+ *
75
+ * **Deduplication:**
76
+ * If an active (non-completed, non-expired) session already exists for the same user
77
+ * and challenge type, this method returns the existing session instead of creating
78
+ * a duplicate. This prevents:
79
+ * - Excessive `CHALLENGE_CREATED` audit events
80
+ * - Database bloat from duplicate sessions
81
+ * - User confusion from multiple active sessions for the same challenge
82
+ *
83
+ * @param user - User the challenge session belongs to
84
+ * @param challengeName - Type of challenge (VERIFY_EMAIL, VERIFY_PHONE, etc.)
85
+ * @param metadata - Challenge-specific data
86
+ * @returns Challenge session with session token (new or existing)
87
+ * @remarks Client info (ipAddress, userAgent) is automatically extracted from ClientInfoService context
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const session = await challengeService.createChallengeSession(
92
+ * user,
93
+ * AuthChallenge.VERIFY_EMAIL,
94
+ * { email: user.email, verificationTokenId: tokenId }
95
+ * );
96
+ * // Returns: { sessionToken: 'uuid-here', expiresAt: Date, ... }
97
+ * // If called again before completion, returns same session (no duplicate audit event)
98
+ * ```
99
+ */
26
100
  async createChallengeSession(user, challengeName, metadata) {
101
+ // Get client info from context (transparent access)
27
102
  const clientInfo = this.clientInfoService.get();
103
+ // ============================================================================
104
+ // DEDUPLICATION: Check for existing active challenge session
105
+ // ============================================================================
106
+ // If an active (non-completed, non-expired) session already exists for this
107
+ // user and challenge type, return it instead of creating a duplicate.
108
+ // This prevents excessive audit logging and database bloat.
28
109
  const existingSession = await this.challengeSessionRepository.findOne({
29
110
  where: {
30
111
  userId: user.id,
@@ -36,16 +117,23 @@ class ChallengeService {
36
117
  });
37
118
  if (existingSession) {
38
119
  const session = existingSession;
120
+ // Get current maxAttempts from config
39
121
  const currentMaxAttempts = this.config?.challenge?.maxAttempts ?? this.DEFAULT_MAX_ATTEMPTS;
122
+ // Check if session is still valid (not expired and not max attempts exceeded)
40
123
  const isExpired = session.expiresAt <= new Date();
41
124
  const isMaxAttemptsExceeded = session.attempts >= session.maxAttempts;
42
125
  if (!isExpired && !isMaxAttemptsExceeded) {
126
+ // Update maxAttempts to match current config if different
127
+ // This ensures sessions created with old config values are updated
43
128
  if (session.maxAttempts !== currentMaxAttempts) {
44
129
  session.maxAttempts = currentMaxAttempts;
45
130
  await this.challengeSessionRepository.save(session);
46
131
  this.logger?.debug?.(`Updated maxAttempts for existing session: user=${user.sub}, old=${session.maxAttempts}, new=${currentMaxAttempts}`);
47
132
  }
48
133
  this.logger?.debug?.(`Reusing existing challenge session: user=${user.sub}, challenge=${challengeName}, session=${session.sessionToken}`);
134
+ // ============================================================================
135
+ // Audit: Record challenge reuse for complete audit trail
136
+ // ============================================================================
49
137
  try {
50
138
  await this.auditService?.recordEvent({
51
139
  userId: user.id,
@@ -55,11 +143,12 @@ class ChallengeService {
55
143
  metadata: {
56
144
  challengeName,
57
145
  sessionToken: session.sessionToken,
58
- reused: true,
146
+ reused: true, // Indicate this was an existing session
59
147
  },
60
148
  });
61
149
  }
62
150
  catch (auditError) {
151
+ // Non-blocking: Log but continue
63
152
  const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
64
153
  this.logger?.error?.(`Failed to record CHALLENGE_CREATED (reused) audit event: ${errorMessage}`, {
65
154
  error: auditError,
@@ -69,18 +158,22 @@ class ChallengeService {
69
158
  }
70
159
  return session;
71
160
  }
161
+ // If expired or max attempts exceeded, delete it and create a new one
72
162
  const reason = isExpired ? 'expired' : 'max attempts exceeded';
73
163
  this.logger?.debug?.(`Existing challenge session ${reason}, creating new one: user=${user.sub}, challenge=${challengeName}`);
74
164
  await this.challengeSessionRepository.delete({ id: session.id });
75
165
  }
166
+ // Clean up any expired or completed sessions for this user (throttled)
76
167
  const now = Date.now();
77
168
  const lastCleanup = this.lastCleanupByUserId.get(user.id) || 0;
169
+ // Run at most once per 5 minutes per user to reduce write load
78
170
  if (now - lastCleanup > 5 * 60 * 1000) {
79
171
  await this.cleanupExpiredSessions(user.id);
80
172
  this.lastCleanupByUserId.set(user.id, now);
81
173
  }
82
174
  const sessionToken = (0, crypto_1.randomUUID)();
83
175
  const expiresAt = new Date(Date.now() + this.DEFAULT_EXPIRATION_MINUTES * 60 * 1000);
176
+ // Get maxAttempts from config or use default
84
177
  const maxAttempts = this.config?.challenge?.maxAttempts ?? this.DEFAULT_MAX_ATTEMPTS;
85
178
  const challengeSession = this.challengeSessionRepository.create({
86
179
  userId: user.id,
@@ -88,19 +181,24 @@ class ChallengeService {
88
181
  sessionToken,
89
182
  expiresAt,
90
183
  metadata,
184
+ // Client info automatically extracted from ClientInfoService (transparent access)
91
185
  ipAddress: clientInfo.ipAddress || null,
92
186
  userAgent: clientInfo.userAgent || null,
93
- attempts: 0,
187
+ attempts: 0, // Explicitly initialize attempts to 0
94
188
  maxAttempts,
95
189
  });
96
190
  await this.challengeSessionRepository.save(challengeSession);
97
191
  this.logger?.log?.(`Challenge session created: user=${user.sub}, challenge=${challengeName}, maxAttempts=${maxAttempts}`);
192
+ // ============================================================================
193
+ // Audit: Record challenge creation
194
+ // ============================================================================
98
195
  try {
99
196
  await this.auditService?.recordEvent({
100
197
  userId: user.id,
101
198
  eventType: auth_audit_event_type_enum_1.AuthAuditEventType.CHALLENGE_CREATED,
102
199
  eventStatus: 'INFO',
103
200
  challengeSessionId: challengeSession.id,
201
+ // Client info automatically included from context (no need to pass explicitly)
104
202
  metadata: {
105
203
  challengeName,
106
204
  sessionToken: challengeSession.sessionToken,
@@ -108,6 +206,7 @@ class ChallengeService {
108
206
  });
109
207
  }
110
208
  catch (auditError) {
209
+ // Non-blocking: Log but continue
111
210
  const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
112
211
  this.logger?.error?.(`Failed to record CHALLENGE_CREATED audit event: ${errorMessage}`, {
113
212
  error: auditError,
@@ -117,13 +216,72 @@ class ChallengeService {
117
216
  }
118
217
  return challengeSession;
119
218
  }
219
+ // ============================================================================
220
+ // Challenge Session Validation
221
+ // ============================================================================
222
+ /**
223
+ * Validate a challenge session token for code requests
224
+ *
225
+ * Validates session for requesting new verification codes (SMS, email, etc.).
226
+ * Skips max attempts check since requesting a new code is not a verification attempt.
227
+ * This method is used internally by nauth when sending verification codes.
228
+ *
229
+ * @param sessionToken - Session token to validate
230
+ * @param expectedChallenge - Expected challenge type (optional, for additional verification)
231
+ * @returns Valid challenge session
232
+ * @throws {UnauthorizedException} If session is invalid, expired, or already completed
233
+ *
234
+ * @example
235
+ * ```typescript
236
+ * // Used internally by nauth when sending verification codes
237
+ * const session = await challengeService.validateSessionForCodeRequest(
238
+ * 'session-token-123',
239
+ * AuthChallenge.MFA_REQUIRED
240
+ * );
241
+ * ```
242
+ */
120
243
  async validateSessionForCodeRequest(sessionToken, expectedChallenge) {
121
244
  return this.validateSessionInternal(sessionToken, expectedChallenge, true);
122
245
  }
246
+ /**
247
+ * Validate a challenge session token
248
+ *
249
+ * Checks if the session token is valid, not expired, not completed,
250
+ * and matches the expected challenge type. Does NOT consume the session.
251
+ * Enforces max attempts check for verification attempts.
252
+ *
253
+ * @param sessionToken - Session token to validate
254
+ * @param expectedChallenge - Expected challenge type (optional, for additional verification)
255
+ * @returns Valid challenge session
256
+ * @throws {UnauthorizedException} If session is invalid, expired, or already completed
257
+ *
258
+ * @example
259
+ * ```typescript
260
+ * try {
261
+ * const session = await challengeService.validateSession(
262
+ * 'session-token-123',
263
+ * AuthChallenge.VERIFY_EMAIL
264
+ * );
265
+ * // Session is valid, proceed with verification
266
+ * } catch (error) {
267
+ * // Session is invalid
268
+ * }
269
+ * ```
270
+ */
123
271
  async validateSession(sessionToken, expectedChallenge) {
124
272
  return this.validateSessionInternal(sessionToken, expectedChallenge, false);
125
273
  }
274
+ /**
275
+ * Internal method to validate challenge session
276
+ *
277
+ * @param sessionToken - Session token to validate
278
+ * @param expectedChallenge - Expected challenge type (optional)
279
+ * @param skipMaxAttemptsCheck - If true, skip max attempts check (for code requests)
280
+ * @returns Valid challenge session
281
+ * @private
282
+ */
126
283
  async validateSessionInternal(sessionToken, expectedChallenge, skipMaxAttemptsCheck = false) {
284
+ // Load session with ALL user fields (needed for challenge determination and MFA setup)
127
285
  const session = await this.challengeSessionRepository.findOne({
128
286
  where: { sessionToken },
129
287
  relations: ['user'],
@@ -132,28 +290,57 @@ class ChallengeService {
132
290
  this.logger?.warn?.('Invalid challenge session token');
133
291
  throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_INVALID, 'Invalid or expired challenge session');
134
292
  }
293
+ // Check expiration
135
294
  const challengeSession = session;
136
295
  if (challengeSession.expiresAt < new Date()) {
137
296
  this.logger?.warn?.(`Expired challenge session: user=${challengeSession.user?.sub}`);
138
297
  throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_EXPIRED, 'Challenge session has expired');
139
298
  }
299
+ // Check if already completed
140
300
  if (session.isCompleted) {
141
301
  this.logger?.warn?.(`Already completed challenge session: user=${challengeSession.user?.sub}`);
142
302
  throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_ALREADY_COMPLETED, 'Challenge has already been completed');
143
303
  }
304
+ // Check max attempts (skip if requesting new code, but enforce for verification attempts)
305
+ // Ensure attempts is initialized (should be 0, but handle edge cases)
144
306
  const currentAttempts = challengeSession.attempts ?? 0;
145
307
  if (!skipMaxAttemptsCheck && currentAttempts >= challengeSession.maxAttempts) {
146
308
  this.logger?.warn?.(`Max attempts exceeded for challenge session: user=${challengeSession.user?.sub}, attempts=${currentAttempts}/${challengeSession.maxAttempts}`);
147
309
  throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_MAX_ATTEMPTS, 'Maximum challenge attempts exceeded');
148
310
  }
311
+ // Verify challenge type if specified
149
312
  if (expectedChallenge && session.challengeName !== expectedChallenge) {
150
313
  this.logger?.warn?.(`Challenge type mismatch: expected=${expectedChallenge}, actual=${session.challengeName}`);
151
314
  throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_TYPE_MISMATCH, 'Invalid challenge type');
152
315
  }
153
316
  return session;
154
317
  }
318
+ /**
319
+ * Increment attempt counter for a challenge session
320
+ *
321
+ * Tracks failed attempts to complete a challenge.
322
+ * Used to prevent brute-force attacks on verification codes.
323
+ *
324
+ * @param session - Challenge session to increment
325
+ * @returns Updated session
326
+ *
327
+ * @example
328
+ * ```typescript
329
+ * await challengeService.incrementAttempts(session);
330
+ * ```
331
+ */
155
332
  async incrementAttempts(session) {
333
+ // ============================================================================
334
+ // CRITICAL: Atomic Increment to Prevent Race Conditions
335
+ // ============================================================================
336
+ // Use TypeORM's increment() for atomic UPDATE attempts = attempts + 1
337
+ // This is concurrency-safe even under high load:
338
+ // - Database executes: UPDATE challenge_session SET attempts = attempts + 1 WHERE id = ?
339
+ // - No read-modify-write race condition
340
+ // - Single database round-trip (better performance than SELECT + UPDATE)
341
+ // - Works across all databases (MySQL, PostgreSQL, SQLite)
156
342
  await this.challengeSessionRepository.increment({ id: session.id }, 'attempts', 1);
343
+ // Reload session to get updated attempts count and user for audit logging
157
344
  const freshSession = await this.challengeSessionRepository.findOne({
158
345
  where: { id: session.id },
159
346
  relations: ['user'],
@@ -164,6 +351,9 @@ class ChallengeService {
164
351
  }
165
352
  const freshChallengeSession = freshSession;
166
353
  this.logger?.debug?.(`Challenge attempt incremented: session=${freshChallengeSession.sessionToken}, attempts=${freshChallengeSession.attempts}/${freshChallengeSession.maxAttempts}`);
354
+ // ============================================================================
355
+ // Audit: Record challenge attempt failure if max attempts exceeded
356
+ // ============================================================================
167
357
  if (freshChallengeSession.attempts >= freshChallengeSession.maxAttempts) {
168
358
  try {
169
359
  const user = freshChallengeSession.user;
@@ -174,6 +364,7 @@ class ChallengeService {
174
364
  eventStatus: 'FAILURE',
175
365
  challengeSessionId: freshChallengeSession.id,
176
366
  reason: 'max_attempts_exceeded',
367
+ // Client info (ipAddress, userAgent, etc.) automatically included from context
177
368
  description: `Challenge attempt failed - maximum attempts (${freshChallengeSession.maxAttempts}) exceeded`,
178
369
  metadata: {
179
370
  challengeName: freshChallengeSession.challengeName,
@@ -184,6 +375,7 @@ class ChallengeService {
184
375
  }
185
376
  }
186
377
  catch (auditError) {
378
+ // Non-blocking: Log but continue
187
379
  const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
188
380
  const sessionUser = freshChallengeSession.user;
189
381
  this.logger?.error?.(`Failed to record CHALLENGE_ATTEMPT_FAILED audit event: ${errorMessage}`, {
@@ -195,8 +387,29 @@ class ChallengeService {
195
387
  }
196
388
  return freshChallengeSession;
197
389
  }
390
+ /**
391
+ * Validate and consume a challenge session
392
+ *
393
+ * Validates the session and marks it as completed if validation succeeds.
394
+ * This method should be called only after successful challenge completion.
395
+ *
396
+ * @param sessionToken - Session token to validate and consume
397
+ * @param expectedChallenge - Expected challenge type
398
+ * @returns Valid, completed challenge session with user
399
+ * @throws {UnauthorizedException} If session is invalid
400
+ *
401
+ * @example
402
+ * ```typescript
403
+ * const session = await challengeService.validateAndConsumeSession(
404
+ * 'session-token-123',
405
+ * AuthChallenge.VERIFY_EMAIL
406
+ * );
407
+ * // Session is now marked complete and cannot be reused
408
+ * ```
409
+ */
198
410
  async validateAndConsumeSession(sessionToken, expectedChallenge) {
199
411
  const session = await this.validateSession(sessionToken, expectedChallenge);
412
+ // Mark session as completed
200
413
  session.isCompleted = true;
201
414
  session.completedAt = new Date();
202
415
  await this.challengeSessionRepository.save(session);
@@ -205,10 +418,16 @@ class ChallengeService {
205
418
  throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.NOT_FOUND, 'User not found in challenge session');
206
419
  }
207
420
  this.logger?.log?.(`Challenge session completed: user=${user.sub}, challenge=${session.challengeName}`);
421
+ // ============================================================================
422
+ // Audit: Record challenge completion
423
+ // ============================================================================
208
424
  try {
425
+ // Build metadata with challenge name and MFA method (if applicable)
209
426
  const auditMetadata = {
427
+ // Client info automatically included from context
210
428
  challengeName: session.challengeName,
211
429
  };
430
+ // For MFA challenges, include the MFA method used
212
431
  if ((session.challengeName === auth_challenge_dto_1.AuthChallenge.MFA_REQUIRED ||
213
432
  session.challengeName === auth_challenge_dto_1.AuthChallenge.MFA_SETUP_REQUIRED) &&
214
433
  session.metadata?.mfaMethod) {
@@ -219,10 +438,12 @@ class ChallengeService {
219
438
  eventType: auth_audit_event_type_enum_1.AuthAuditEventType.CHALLENGE_COMPLETED,
220
439
  eventStatus: 'SUCCESS',
221
440
  challengeSessionId: session.id,
441
+ // Client info (ipAddress, userAgent, etc.) automatically included from context
222
442
  metadata: auditMetadata,
223
443
  });
224
444
  }
225
445
  catch (auditError) {
446
+ // Non-blocking: Log but continue
226
447
  const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
227
448
  this.logger?.error?.(`Failed to record CHALLENGE_COMPLETED audit event: ${errorMessage}`, {
228
449
  error: auditError,
@@ -232,11 +453,32 @@ class ChallengeService {
232
453
  }
233
454
  return session;
234
455
  }
456
+ /**
457
+ * Update challenge session metadata
458
+ *
459
+ * Updates the metadata field of an existing challenge session.
460
+ * Used to store additional challenge-specific data (e.g., passkey challenge).
461
+ *
462
+ * @param sessionToken - Session token to update
463
+ * @param metadata - Metadata to merge into existing metadata
464
+ * @returns Updated challenge session
465
+ * @throws {NAuthException} If session not found or invalid
466
+ *
467
+ * @example
468
+ * ```typescript
469
+ * await challengeService.updateMetadata('session-token-123', {
470
+ * passkeyChallenge: 'base64-challenge-string'
471
+ * });
472
+ * ```
473
+ */
235
474
  async updateMetadata(sessionToken, metadata) {
236
475
  const session = await this.validateSession(sessionToken);
476
+ // Merge new metadata with existing metadata
237
477
  const existingMetadata = session.metadata || {};
238
478
  const updatedMetadata = { ...existingMetadata, ...metadata };
479
+ // Update session metadata
239
480
  await this.challengeSessionRepository.update({ sessionToken }, { metadata: updatedMetadata });
481
+ // Return updated session
240
482
  const updatedSession = await this.challengeSessionRepository.findOne({
241
483
  where: { sessionToken },
242
484
  relations: ['user'],
@@ -246,6 +488,22 @@ class ChallengeService {
246
488
  }
247
489
  return updatedSession;
248
490
  }
491
+ // ============================================================================
492
+ // Challenge Session Cleanup
493
+ // ============================================================================
494
+ /**
495
+ * Clean up expired or completed challenge sessions for a user
496
+ *
497
+ * Removes old sessions to prevent database bloat.
498
+ * Called automatically when creating new challenge sessions.
499
+ *
500
+ * @param userId - User ID to clean up sessions for
501
+ *
502
+ * @example
503
+ * ```typescript
504
+ * await challengeService.cleanupExpiredSessions(user.id);
505
+ * ```
506
+ */
249
507
  async cleanupExpiredSessions(userId) {
250
508
  await this.challengeSessionRepository.delete({
251
509
  userId,
@@ -256,6 +514,21 @@ class ChallengeService {
256
514
  isCompleted: true,
257
515
  });
258
516
  }
517
+ /**
518
+ * Clean up all expired challenge sessions (for all users)
519
+ *
520
+ * Should be called periodically (e.g., via cron job) to maintain
521
+ * database health.
522
+ *
523
+ * @returns Number of sessions deleted
524
+ *
525
+ * @example
526
+ * ```typescript
527
+ * // In a scheduled job
528
+ * const deleted = await challengeService.cleanupAllExpiredSessions();
529
+ * logger.log(`Cleaned up ${deleted} expired challenge sessions`);
530
+ * ```
531
+ */
259
532
  async cleanupAllExpiredSessions() {
260
533
  const result = await this.challengeSessionRepository.delete({
261
534
  expiresAt: (0, typeorm_1.LessThan)(new Date()),
@@ -264,6 +537,26 @@ class ChallengeService {
264
537
  this.logger?.log?.(`Cleaned up ${deletedCount} expired challenge sessions`);
265
538
  return deletedCount;
266
539
  }
540
+ /**
541
+ * Delete challenge sessions by challenge name for a user
542
+ *
543
+ * Removes all active (not completed, not expired) challenge sessions
544
+ * of the specified type for a user. Used to clean up phantom challenges
545
+ * when user completes the requirement (e.g., sets up MFA).
546
+ *
547
+ * @param userId - Internal user ID
548
+ * @param challengeName - Challenge type to delete
549
+ * @returns Number of sessions deleted
550
+ *
551
+ * @example
552
+ * ```typescript
553
+ * // Clear MFA_SETUP_REQUIRED challenge when user sets up MFA
554
+ * const deleted = await challengeService.deleteUserChallengeSessions(
555
+ * user.id,
556
+ * AuthChallenge.MFA_SETUP_REQUIRED
557
+ * );
558
+ * ```
559
+ */
267
560
  async deleteUserChallengeSessions(userId, challengeName) {
268
561
  const result = await this.challengeSessionRepository.delete({
269
562
  userId,
@@ -276,12 +569,43 @@ class ChallengeService {
276
569
  }
277
570
  return deletedCount;
278
571
  }
572
+ // ============================================================================
573
+ // Helper Methods
574
+ // ============================================================================
575
+ /**
576
+ * Mask email address for display in challenge parameters
577
+ *
578
+ * Shows first character and domain, hides the rest.
579
+ *
580
+ * @param email - Email to mask
581
+ * @returns Masked email
582
+ *
583
+ * @example
584
+ * ```typescript
585
+ * maskEmail('john.doe@example.com')
586
+ * // Returns: 'j***@example.com'
587
+ * ```
588
+ */
279
589
  maskEmail(email) {
280
590
  const [localPart, domain] = email.split('@');
281
591
  if (!domain)
282
592
  return email;
283
593
  return `${localPart[0]}***@${domain}`;
284
594
  }
595
+ /**
596
+ * Mask phone number for display in challenge parameters
597
+ *
598
+ * Shows last 4 digits, hides the rest.
599
+ *
600
+ * @param phone - Phone to mask
601
+ * @returns Masked phone
602
+ *
603
+ * @example
604
+ * ```typescript
605
+ * maskPhone('+1234567890')
606
+ * // Returns: '***-***-7890'
607
+ * ```
608
+ */
285
609
  maskPhone(phone) {
286
610
  const digits = phone.replace(/\D/g, '');
287
611
  if (digits.length < 4)
@@ -1 +1 @@
1
- {"version":3,"file":"challenge.service.js","sourceRoot":"","sources":["../../src/services/challenge.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"challenge.service.js","sourceRoot":"","sources":["../../src/services/challenge.service.ts"],"names":[],"mappings":"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"}