@carlonicora/nestjs-neo4jsonapi 1.39.0 → 1.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/dist/config/base.config.d.ts.map +1 -1
  2. package/dist/config/base.config.js +9 -0
  3. package/dist/config/base.config.js.map +1 -1
  4. package/dist/config/interfaces/base.config.interface.d.ts +2 -0
  5. package/dist/config/interfaces/base.config.interface.d.ts.map +1 -1
  6. package/dist/config/interfaces/config.two.factor.interface.d.ts +27 -0
  7. package/dist/config/interfaces/config.two.factor.interface.d.ts.map +1 -0
  8. package/dist/config/interfaces/config.two.factor.interface.js +3 -0
  9. package/dist/config/interfaces/config.two.factor.interface.js.map +1 -0
  10. package/dist/config/interfaces/index.d.ts +1 -0
  11. package/dist/config/interfaces/index.d.ts.map +1 -1
  12. package/dist/config/interfaces/index.js +1 -0
  13. package/dist/config/interfaces/index.js.map +1 -1
  14. package/dist/core/jsonapi/services/jsonapi.service.d.ts.map +1 -1
  15. package/dist/core/jsonapi/services/jsonapi.service.js +3 -1
  16. package/dist/core/jsonapi/services/jsonapi.service.js.map +1 -1
  17. package/dist/core/llm/services/vision.llm.service.d.ts.map +1 -1
  18. package/dist/core/llm/services/vision.llm.service.js +0 -1
  19. package/dist/core/llm/services/vision.llm.service.js.map +1 -1
  20. package/dist/core/security/services/security.service.d.ts +27 -0
  21. package/dist/core/security/services/security.service.d.ts.map +1 -1
  22. package/dist/core/security/services/security.service.js +37 -0
  23. package/dist/core/security/services/security.service.js.map +1 -1
  24. package/dist/foundations/auth/auth.module.d.ts.map +1 -1
  25. package/dist/foundations/auth/auth.module.js +6 -0
  26. package/dist/foundations/auth/auth.module.js.map +1 -1
  27. package/dist/foundations/auth/entities/pending-auth.entity.d.ts +16 -0
  28. package/dist/foundations/auth/entities/pending-auth.entity.d.ts.map +1 -0
  29. package/dist/foundations/auth/entities/pending-auth.entity.js +3 -0
  30. package/dist/foundations/auth/entities/pending-auth.entity.js.map +1 -0
  31. package/dist/foundations/auth/entities/pending-auth.map.d.ts +6 -0
  32. package/dist/foundations/auth/entities/pending-auth.map.d.ts.map +1 -0
  33. package/dist/foundations/auth/entities/pending-auth.map.js +20 -0
  34. package/dist/foundations/auth/entities/pending-auth.map.js.map +1 -0
  35. package/dist/foundations/auth/entities/pending-auth.meta.d.ts +3 -0
  36. package/dist/foundations/auth/entities/pending-auth.meta.d.ts.map +1 -0
  37. package/dist/foundations/auth/entities/pending-auth.meta.js +10 -0
  38. package/dist/foundations/auth/entities/pending-auth.meta.js.map +1 -0
  39. package/dist/foundations/auth/entities/pending-auth.model.d.ts +9 -0
  40. package/dist/foundations/auth/entities/pending-auth.model.d.ts.map +1 -0
  41. package/dist/foundations/auth/entities/pending-auth.model.js +19 -0
  42. package/dist/foundations/auth/entities/pending-auth.model.js.map +1 -0
  43. package/dist/foundations/auth/serialisers/pending-auth.serialiser.d.ts +18 -0
  44. package/dist/foundations/auth/serialisers/pending-auth.serialiser.d.ts.map +1 -0
  45. package/dist/foundations/auth/serialisers/pending-auth.serialiser.js +49 -0
  46. package/dist/foundations/auth/serialisers/pending-auth.serialiser.js.map +1 -0
  47. package/dist/foundations/auth/services/auth.service.d.ts +12 -1
  48. package/dist/foundations/auth/services/auth.service.d.ts.map +1 -1
  49. package/dist/foundations/auth/services/auth.service.js +60 -6
  50. package/dist/foundations/auth/services/auth.service.js.map +1 -1
  51. package/dist/foundations/foundations.modules.d.ts.map +1 -1
  52. package/dist/foundations/foundations.modules.js +2 -0
  53. package/dist/foundations/foundations.modules.js.map +1 -1
  54. package/dist/foundations/index.d.ts +1 -0
  55. package/dist/foundations/index.d.ts.map +1 -1
  56. package/dist/foundations/index.js +1 -0
  57. package/dist/foundations/index.js.map +1 -1
  58. package/dist/foundations/stripe/services/billing.service.d.ts +3 -4
  59. package/dist/foundations/stripe/services/billing.service.d.ts.map +1 -1
  60. package/dist/foundations/stripe/services/billing.service.js +1 -1
  61. package/dist/foundations/stripe/services/billing.service.js.map +1 -1
  62. package/dist/foundations/stripe-invoice/services/stripe-invoice-admin.service.d.ts +1 -1
  63. package/dist/foundations/stripe-invoice/services/stripe-invoice-admin.service.js +1 -1
  64. package/dist/foundations/stripe-invoice/services/stripe-invoice-api.service.d.ts +1 -1
  65. package/dist/foundations/stripe-invoice/services/stripe-invoice-api.service.d.ts.map +1 -1
  66. package/dist/foundations/stripe-invoice/services/stripe-invoice-api.service.js +2 -2
  67. package/dist/foundations/stripe-invoice/services/stripe-invoice-api.service.js.map +1 -1
  68. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts.map +1 -1
  69. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js +0 -3
  70. package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js.map +1 -1
  71. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts +1 -1
  72. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts.map +1 -1
  73. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js +1 -3
  74. package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js.map +1 -1
  75. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.d.ts +1 -1
  76. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.d.ts.map +1 -1
  77. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js +1 -5
  78. package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js.map +1 -1
  79. package/dist/foundations/two-factor/controllers/passkey.controller.d.ts +52 -0
  80. package/dist/foundations/two-factor/controllers/passkey.controller.d.ts.map +1 -0
  81. package/dist/foundations/two-factor/controllers/passkey.controller.js +155 -0
  82. package/dist/foundations/two-factor/controllers/passkey.controller.js.map +1 -0
  83. package/dist/foundations/two-factor/controllers/totp.controller.d.ts +47 -0
  84. package/dist/foundations/two-factor/controllers/totp.controller.d.ts.map +1 -0
  85. package/dist/foundations/two-factor/controllers/totp.controller.js +132 -0
  86. package/dist/foundations/two-factor/controllers/totp.controller.js.map +1 -0
  87. package/dist/foundations/two-factor/controllers/two-factor.controller.d.ts +124 -0
  88. package/dist/foundations/two-factor/controllers/two-factor.controller.d.ts.map +1 -0
  89. package/dist/foundations/two-factor/controllers/two-factor.controller.js +352 -0
  90. package/dist/foundations/two-factor/controllers/two-factor.controller.js.map +1 -0
  91. package/dist/foundations/two-factor/dtos/passkey-options.dto.d.ts +42 -0
  92. package/dist/foundations/two-factor/dtos/passkey-options.dto.d.ts.map +1 -0
  93. package/dist/foundations/two-factor/dtos/passkey-options.dto.js +77 -0
  94. package/dist/foundations/two-factor/dtos/passkey-options.dto.js.map +1 -0
  95. package/dist/foundations/two-factor/dtos/passkey-verify.dto.d.ts +120 -0
  96. package/dist/foundations/two-factor/dtos/passkey-verify.dto.d.ts.map +1 -0
  97. package/dist/foundations/two-factor/dtos/passkey-verify.dto.js +226 -0
  98. package/dist/foundations/two-factor/dtos/passkey-verify.dto.js.map +1 -0
  99. package/dist/foundations/two-factor/dtos/totp-setup.dto.d.ts +32 -0
  100. package/dist/foundations/two-factor/dtos/totp-setup.dto.d.ts.map +1 -0
  101. package/dist/foundations/two-factor/dtos/totp-setup.dto.js +67 -0
  102. package/dist/foundations/two-factor/dtos/totp-setup.dto.js.map +1 -0
  103. package/dist/foundations/two-factor/dtos/totp-verify.dto.d.ts +62 -0
  104. package/dist/foundations/two-factor/dtos/totp-verify.dto.d.ts.map +1 -0
  105. package/dist/foundations/two-factor/dtos/totp-verify.dto.js +118 -0
  106. package/dist/foundations/two-factor/dtos/totp-verify.dto.js.map +1 -0
  107. package/dist/foundations/two-factor/dtos/two-factor-verify.dto.d.ts +83 -0
  108. package/dist/foundations/two-factor/dtos/two-factor-verify.dto.d.ts.map +1 -0
  109. package/dist/foundations/two-factor/dtos/two-factor-verify.dto.js +161 -0
  110. package/dist/foundations/two-factor/dtos/two-factor-verify.dto.js.map +1 -0
  111. package/dist/foundations/two-factor/entities/backup-code.d.ts +22 -0
  112. package/dist/foundations/two-factor/entities/backup-code.d.ts.map +1 -0
  113. package/dist/foundations/two-factor/entities/backup-code.js +25 -0
  114. package/dist/foundations/two-factor/entities/backup-code.js.map +1 -0
  115. package/dist/foundations/two-factor/entities/backup-code.meta.d.ts +3 -0
  116. package/dist/foundations/two-factor/entities/backup-code.meta.d.ts.map +1 -0
  117. package/dist/foundations/two-factor/entities/backup-code.meta.js +10 -0
  118. package/dist/foundations/two-factor/entities/backup-code.meta.js.map +1 -0
  119. package/dist/foundations/two-factor/entities/backup-codes-count.d.ts +18 -0
  120. package/dist/foundations/two-factor/entities/backup-codes-count.d.ts.map +1 -0
  121. package/dist/foundations/two-factor/entities/backup-codes-count.js +19 -0
  122. package/dist/foundations/two-factor/entities/backup-codes-count.js.map +1 -0
  123. package/dist/foundations/two-factor/entities/backup-codes-count.meta.d.ts +3 -0
  124. package/dist/foundations/two-factor/entities/backup-codes-count.meta.d.ts.map +1 -0
  125. package/dist/foundations/two-factor/entities/backup-codes-count.meta.js +10 -0
  126. package/dist/foundations/two-factor/entities/backup-codes-count.meta.js.map +1 -0
  127. package/dist/foundations/two-factor/entities/backup-codes-generation.d.ts +19 -0
  128. package/dist/foundations/two-factor/entities/backup-codes-generation.d.ts.map +1 -0
  129. package/dist/foundations/two-factor/entities/backup-codes-generation.js +20 -0
  130. package/dist/foundations/two-factor/entities/backup-codes-generation.js.map +1 -0
  131. package/dist/foundations/two-factor/entities/backup-codes-generation.meta.d.ts +3 -0
  132. package/dist/foundations/two-factor/entities/backup-codes-generation.meta.d.ts.map +1 -0
  133. package/dist/foundations/two-factor/entities/backup-codes-generation.meta.js +10 -0
  134. package/dist/foundations/two-factor/entities/backup-codes-generation.meta.js.map +1 -0
  135. package/dist/foundations/two-factor/entities/passkey-authentication-options.d.ts +19 -0
  136. package/dist/foundations/two-factor/entities/passkey-authentication-options.d.ts.map +1 -0
  137. package/dist/foundations/two-factor/entities/passkey-authentication-options.js +20 -0
  138. package/dist/foundations/two-factor/entities/passkey-authentication-options.js.map +1 -0
  139. package/dist/foundations/two-factor/entities/passkey-authentication-options.meta.d.ts +3 -0
  140. package/dist/foundations/two-factor/entities/passkey-authentication-options.meta.d.ts.map +1 -0
  141. package/dist/foundations/two-factor/entities/passkey-authentication-options.meta.js +10 -0
  142. package/dist/foundations/two-factor/entities/passkey-authentication-options.meta.js.map +1 -0
  143. package/dist/foundations/two-factor/entities/passkey-registration-options.d.ts +19 -0
  144. package/dist/foundations/two-factor/entities/passkey-registration-options.d.ts.map +1 -0
  145. package/dist/foundations/two-factor/entities/passkey-registration-options.js +20 -0
  146. package/dist/foundations/two-factor/entities/passkey-registration-options.js.map +1 -0
  147. package/dist/foundations/two-factor/entities/passkey-registration-options.meta.d.ts +3 -0
  148. package/dist/foundations/two-factor/entities/passkey-registration-options.meta.d.ts.map +1 -0
  149. package/dist/foundations/two-factor/entities/passkey-registration-options.meta.js +10 -0
  150. package/dist/foundations/two-factor/entities/passkey-registration-options.meta.js.map +1 -0
  151. package/dist/foundations/two-factor/entities/passkey.d.ts +27 -0
  152. package/dist/foundations/two-factor/entities/passkey.d.ts.map +1 -0
  153. package/dist/foundations/two-factor/entities/passkey.js +30 -0
  154. package/dist/foundations/two-factor/entities/passkey.js.map +1 -0
  155. package/dist/foundations/two-factor/entities/passkey.meta.d.ts +3 -0
  156. package/dist/foundations/two-factor/entities/passkey.meta.d.ts.map +1 -0
  157. package/dist/foundations/two-factor/entities/passkey.meta.js +10 -0
  158. package/dist/foundations/two-factor/entities/passkey.meta.js.map +1 -0
  159. package/dist/foundations/two-factor/entities/pending-two-factor.d.ts +24 -0
  160. package/dist/foundations/two-factor/entities/pending-two-factor.d.ts.map +1 -0
  161. package/dist/foundations/two-factor/entities/pending-two-factor.js +27 -0
  162. package/dist/foundations/two-factor/entities/pending-two-factor.js.map +1 -0
  163. package/dist/foundations/two-factor/entities/pending-two-factor.meta.d.ts +3 -0
  164. package/dist/foundations/two-factor/entities/pending-two-factor.meta.d.ts.map +1 -0
  165. package/dist/foundations/two-factor/entities/pending-two-factor.meta.js +10 -0
  166. package/dist/foundations/two-factor/entities/pending-two-factor.meta.js.map +1 -0
  167. package/dist/foundations/two-factor/entities/totp-authenticator.d.ts +24 -0
  168. package/dist/foundations/two-factor/entities/totp-authenticator.d.ts.map +1 -0
  169. package/dist/foundations/two-factor/entities/totp-authenticator.js +27 -0
  170. package/dist/foundations/two-factor/entities/totp-authenticator.js.map +1 -0
  171. package/dist/foundations/two-factor/entities/totp-authenticator.meta.d.ts +3 -0
  172. package/dist/foundations/two-factor/entities/totp-authenticator.meta.d.ts.map +1 -0
  173. package/dist/foundations/two-factor/entities/totp-authenticator.meta.js +10 -0
  174. package/dist/foundations/two-factor/entities/totp-authenticator.meta.js.map +1 -0
  175. package/dist/foundations/two-factor/entities/totp-setup.d.ts +20 -0
  176. package/dist/foundations/two-factor/entities/totp-setup.d.ts.map +1 -0
  177. package/dist/foundations/two-factor/entities/totp-setup.js +21 -0
  178. package/dist/foundations/two-factor/entities/totp-setup.js.map +1 -0
  179. package/dist/foundations/two-factor/entities/totp-setup.meta.d.ts +3 -0
  180. package/dist/foundations/two-factor/entities/totp-setup.meta.d.ts.map +1 -0
  181. package/dist/foundations/two-factor/entities/totp-setup.meta.js +10 -0
  182. package/dist/foundations/two-factor/entities/totp-setup.meta.js.map +1 -0
  183. package/dist/foundations/two-factor/entities/two-factor-challenge.d.ts +21 -0
  184. package/dist/foundations/two-factor/entities/two-factor-challenge.d.ts.map +1 -0
  185. package/dist/foundations/two-factor/entities/two-factor-challenge.js +22 -0
  186. package/dist/foundations/two-factor/entities/two-factor-challenge.js.map +1 -0
  187. package/dist/foundations/two-factor/entities/two-factor-challenge.meta.d.ts +3 -0
  188. package/dist/foundations/two-factor/entities/two-factor-challenge.meta.d.ts.map +1 -0
  189. package/dist/foundations/two-factor/entities/two-factor-challenge.meta.js +10 -0
  190. package/dist/foundations/two-factor/entities/two-factor-challenge.meta.js.map +1 -0
  191. package/dist/foundations/two-factor/entities/two-factor-config.d.ts +21 -0
  192. package/dist/foundations/two-factor/entities/two-factor-config.d.ts.map +1 -0
  193. package/dist/foundations/two-factor/entities/two-factor-config.js +23 -0
  194. package/dist/foundations/two-factor/entities/two-factor-config.js.map +1 -0
  195. package/dist/foundations/two-factor/entities/two-factor-config.meta.d.ts +3 -0
  196. package/dist/foundations/two-factor/entities/two-factor-config.meta.d.ts.map +1 -0
  197. package/dist/foundations/two-factor/entities/two-factor-config.meta.js +10 -0
  198. package/dist/foundations/two-factor/entities/two-factor-config.meta.js.map +1 -0
  199. package/dist/foundations/two-factor/entities/two-factor-status.d.ts +25 -0
  200. package/dist/foundations/two-factor/entities/two-factor-status.d.ts.map +1 -0
  201. package/dist/foundations/two-factor/entities/two-factor-status.js +22 -0
  202. package/dist/foundations/two-factor/entities/two-factor-status.js.map +1 -0
  203. package/dist/foundations/two-factor/entities/two-factor-status.meta.d.ts +3 -0
  204. package/dist/foundations/two-factor/entities/two-factor-status.meta.d.ts.map +1 -0
  205. package/dist/foundations/two-factor/entities/two-factor-status.meta.js +10 -0
  206. package/dist/foundations/two-factor/entities/two-factor-status.meta.js.map +1 -0
  207. package/dist/foundations/two-factor/entities/two-factor-verification.d.ts +19 -0
  208. package/dist/foundations/two-factor/entities/two-factor-verification.d.ts.map +1 -0
  209. package/dist/foundations/two-factor/entities/two-factor-verification.js +20 -0
  210. package/dist/foundations/two-factor/entities/two-factor-verification.js.map +1 -0
  211. package/dist/foundations/two-factor/entities/two-factor-verification.meta.d.ts +3 -0
  212. package/dist/foundations/two-factor/entities/two-factor-verification.meta.d.ts.map +1 -0
  213. package/dist/foundations/two-factor/entities/two-factor-verification.meta.js +10 -0
  214. package/dist/foundations/two-factor/entities/two-factor-verification.meta.js.map +1 -0
  215. package/dist/foundations/two-factor/guards/pending-auth.guard.d.ts +35 -0
  216. package/dist/foundations/two-factor/guards/pending-auth.guard.d.ts.map +1 -0
  217. package/dist/foundations/two-factor/guards/pending-auth.guard.js +70 -0
  218. package/dist/foundations/two-factor/guards/pending-auth.guard.js.map +1 -0
  219. package/dist/foundations/two-factor/index.d.ts +47 -0
  220. package/dist/foundations/two-factor/index.d.ts.map +1 -0
  221. package/dist/foundations/two-factor/index.js +134 -0
  222. package/dist/foundations/two-factor/index.js.map +1 -0
  223. package/dist/foundations/two-factor/repositories/backup-code.repository.d.ts +34 -0
  224. package/dist/foundations/two-factor/repositories/backup-code.repository.d.ts.map +1 -0
  225. package/dist/foundations/two-factor/repositories/backup-code.repository.js +107 -0
  226. package/dist/foundations/two-factor/repositories/backup-code.repository.js.map +1 -0
  227. package/dist/foundations/two-factor/repositories/passkey.repository.d.ts +51 -0
  228. package/dist/foundations/two-factor/repositories/passkey.repository.d.ts.map +1 -0
  229. package/dist/foundations/two-factor/repositories/passkey.repository.js +159 -0
  230. package/dist/foundations/two-factor/repositories/passkey.repository.js.map +1 -0
  231. package/dist/foundations/two-factor/repositories/pending-two-factor.repository.d.ts +47 -0
  232. package/dist/foundations/two-factor/repositories/pending-two-factor.repository.d.ts.map +1 -0
  233. package/dist/foundations/two-factor/repositories/pending-two-factor.repository.js +159 -0
  234. package/dist/foundations/two-factor/repositories/pending-two-factor.repository.js.map +1 -0
  235. package/dist/foundations/two-factor/repositories/totp-authenticator.repository.d.ts +51 -0
  236. package/dist/foundations/two-factor/repositories/totp-authenticator.repository.d.ts.map +1 -0
  237. package/dist/foundations/two-factor/repositories/totp-authenticator.repository.js +156 -0
  238. package/dist/foundations/two-factor/repositories/totp-authenticator.repository.js.map +1 -0
  239. package/dist/foundations/two-factor/repositories/two-factor-config.repository.d.ts +32 -0
  240. package/dist/foundations/two-factor/repositories/two-factor-config.repository.d.ts.map +1 -0
  241. package/dist/foundations/two-factor/repositories/two-factor-config.repository.js +105 -0
  242. package/dist/foundations/two-factor/repositories/two-factor-config.repository.js.map +1 -0
  243. package/dist/foundations/two-factor/services/backup-code.service.d.ts +95 -0
  244. package/dist/foundations/two-factor/services/backup-code.service.d.ts.map +1 -0
  245. package/dist/foundations/two-factor/services/backup-code.service.js +216 -0
  246. package/dist/foundations/two-factor/services/backup-code.service.js.map +1 -0
  247. package/dist/foundations/two-factor/services/index.d.ts +6 -0
  248. package/dist/foundations/two-factor/services/index.d.ts.map +1 -0
  249. package/dist/foundations/two-factor/services/index.js +14 -0
  250. package/dist/foundations/two-factor/services/index.js.map +1 -0
  251. package/dist/foundations/two-factor/services/passkey.service.d.ts +132 -0
  252. package/dist/foundations/two-factor/services/passkey.service.d.ts.map +1 -0
  253. package/dist/foundations/two-factor/services/passkey.service.js +400 -0
  254. package/dist/foundations/two-factor/services/passkey.service.js.map +1 -0
  255. package/dist/foundations/two-factor/services/totp-encryption.service.d.ts +42 -0
  256. package/dist/foundations/two-factor/services/totp-encryption.service.d.ts.map +1 -0
  257. package/dist/foundations/two-factor/services/totp-encryption.service.js +136 -0
  258. package/dist/foundations/two-factor/services/totp-encryption.service.js.map +1 -0
  259. package/dist/foundations/two-factor/services/totp.service.d.ts +132 -0
  260. package/dist/foundations/two-factor/services/totp.service.d.ts.map +1 -0
  261. package/dist/foundations/two-factor/services/totp.service.js +324 -0
  262. package/dist/foundations/two-factor/services/totp.service.js.map +1 -0
  263. package/dist/foundations/two-factor/services/two-factor.service.d.ts +165 -0
  264. package/dist/foundations/two-factor/services/two-factor.service.d.ts.map +1 -0
  265. package/dist/foundations/two-factor/services/two-factor.service.js +468 -0
  266. package/dist/foundations/two-factor/services/two-factor.service.js.map +1 -0
  267. package/dist/foundations/two-factor/two-factor.module.d.ts +23 -0
  268. package/dist/foundations/two-factor/two-factor.module.d.ts.map +1 -0
  269. package/dist/foundations/two-factor/two-factor.module.js +132 -0
  270. package/dist/foundations/two-factor/two-factor.module.js.map +1 -0
  271. package/dist/foundations/user/repositories/user.repository.d.ts +8 -0
  272. package/dist/foundations/user/repositories/user.repository.d.ts.map +1 -1
  273. package/dist/foundations/user/repositories/user.repository.js +28 -1
  274. package/dist/foundations/user/repositories/user.repository.js.map +1 -1
  275. package/dist/foundations/waitlist/controllers/waitlist.controller.d.ts.map +1 -1
  276. package/dist/foundations/waitlist/controllers/waitlist.controller.js +0 -4
  277. package/dist/foundations/waitlist/controllers/waitlist.controller.js.map +1 -1
  278. package/dist/foundations/waitlist/repositories/waitlist.repository.d.ts.map +1 -1
  279. package/dist/foundations/waitlist/repositories/waitlist.repository.js +0 -2
  280. package/dist/foundations/waitlist/repositories/waitlist.repository.js.map +1 -1
  281. package/dist/foundations/waitlist/services/waitlist.service.d.ts +1 -0
  282. package/dist/foundations/waitlist/services/waitlist.service.d.ts.map +1 -1
  283. package/dist/foundations/waitlist/services/waitlist.service.js +6 -7
  284. package/dist/foundations/waitlist/services/waitlist.service.js.map +1 -1
  285. package/dist/scripts/generate-module/generator.js +13 -13
  286. package/dist/scripts/generate-module/generator.js.map +1 -1
  287. package/dist/scripts/generate-module/index.js +6 -6
  288. package/dist/scripts/generate-module/index.js.map +1 -1
  289. package/dist/scripts/generate-module/utils/file-writer.js +2 -2
  290. package/dist/scripts/generate-module/utils/file-writer.js.map +1 -1
  291. package/dist/scripts/generate-module/utils/module-registrar.js +7 -7
  292. package/dist/scripts/generate-module/utils/module-registrar.js.map +1 -1
  293. package/dist/tools/migrate-entity/index.js +3 -3
  294. package/dist/tools/migrate-entity/lib/descriptor-generator.js +6 -6
  295. package/dist/tools/migrate-entity/lib/entity-migrator.js +13 -13
  296. package/package.json +5 -1
@@ -0,0 +1,132 @@
1
+ import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
2
+ import { TotpAuthenticatorRepository } from "../repositories/totp-authenticator.repository";
3
+ import { TotpEncryptionService } from "./totp-encryption.service";
4
+ export interface TotpSetupResponse {
5
+ authenticatorId: string;
6
+ secret: string;
7
+ qrCodeUri: string;
8
+ qrCodeDataUrl: string;
9
+ }
10
+ export interface TotpAuthenticatorInfo {
11
+ id: string;
12
+ name: string;
13
+ verified: boolean;
14
+ lastUsedAt?: Date;
15
+ createdAt: Date;
16
+ }
17
+ /**
18
+ * TOTP Service
19
+ *
20
+ * Manages TOTP (Time-based One-Time Password) authenticators for two-factor authentication.
21
+ * Provides secret generation, QR code creation, code verification, and authenticator management.
22
+ */
23
+ export declare class TotpService {
24
+ private readonly jsonApiService;
25
+ private readonly totpAuthenticatorRepository;
26
+ private readonly totpEncryptionService;
27
+ private readonly logger;
28
+ private readonly issuer;
29
+ private readonly algorithm;
30
+ private readonly digits;
31
+ private readonly period;
32
+ constructor(jsonApiService: JsonApiService, totpAuthenticatorRepository: TotpAuthenticatorRepository, totpEncryptionService: TotpEncryptionService);
33
+ /**
34
+ * Generate a new TOTP secret and return setup information.
35
+ *
36
+ * @param params.userId - The user's ID
37
+ * @param params.name - A friendly name for this authenticator (e.g., "Google Authenticator")
38
+ * @param params.accountName - The account name to display in authenticator apps (typically email)
39
+ * @returns JSON:API response with setup info (QR code, secret)
40
+ */
41
+ generateSecret(params: {
42
+ userId: string;
43
+ name: string;
44
+ accountName: string;
45
+ }): Promise<any>;
46
+ /**
47
+ * Generate QR code URI for an existing authenticator.
48
+ * Only works for unverified authenticators.
49
+ *
50
+ * @param params.authenticatorId - The authenticator ID
51
+ * @param params.accountName - The account name for the QR code
52
+ * @returns QR code URI and data URL
53
+ */
54
+ generateQRCodeUri(params: {
55
+ authenticatorId: string;
56
+ accountName: string;
57
+ }): Promise<{
58
+ qrCodeUri: string;
59
+ qrCodeDataUrl: string;
60
+ }>;
61
+ /**
62
+ * Verify a TOTP code against an authenticator.
63
+ *
64
+ * @param params.authenticatorId - The authenticator ID
65
+ * @param params.code - The 6-digit TOTP code
66
+ * @returns true if the code is valid
67
+ */
68
+ verifyCode(params: {
69
+ authenticatorId: string;
70
+ code: string;
71
+ }): Promise<boolean>;
72
+ /**
73
+ * Verify a TOTP code for any verified authenticator belonging to a user.
74
+ *
75
+ * @param params.userId - The user's ID
76
+ * @param params.code - The 6-digit TOTP code
77
+ * @returns The authenticator ID if verification succeeds, null otherwise
78
+ */
79
+ verifyCodeForUser(params: {
80
+ userId: string;
81
+ code: string;
82
+ }): Promise<string | null>;
83
+ /**
84
+ * Add (verify) an authenticator by validating a TOTP code.
85
+ * This marks the authenticator as verified and ready for use.
86
+ *
87
+ * @param params.authenticatorId - The authenticator ID from generateSecret
88
+ * @param params.code - The 6-digit TOTP code from the authenticator app
89
+ * @returns JSON:API response with verified authenticator, or null if verification failed
90
+ */
91
+ addAuthenticator(params: {
92
+ authenticatorId: string;
93
+ code: string;
94
+ }): Promise<any>;
95
+ /**
96
+ * Remove an authenticator.
97
+ *
98
+ * @param params.authenticatorId - The authenticator ID to remove
99
+ */
100
+ removeAuthenticator(params: {
101
+ authenticatorId: string;
102
+ }): Promise<void>;
103
+ /**
104
+ * List all authenticators for a user.
105
+ *
106
+ * @param params.userId - The user's ID
107
+ * @param params.verifiedOnly - If true, only return verified authenticators
108
+ * @returns JSON:API response with list of authenticators
109
+ */
110
+ listAuthenticators(params: {
111
+ userId: string;
112
+ verifiedOnly?: boolean;
113
+ }): Promise<any>;
114
+ /**
115
+ * Check if a user has any verified TOTP authenticators.
116
+ *
117
+ * @param params.userId - The user's ID
118
+ * @returns true if the user has at least one verified authenticator
119
+ */
120
+ hasVerifiedAuthenticator(params: {
121
+ userId: string;
122
+ }): Promise<boolean>;
123
+ /**
124
+ * Delete an unverified authenticator (cleanup for abandoned setup).
125
+ *
126
+ * @param params.authenticatorId - The authenticator ID
127
+ */
128
+ deleteUnverifiedAuthenticator(params: {
129
+ authenticatorId: string;
130
+ }): Promise<void>;
131
+ }
132
+ //# sourceMappingURL=totp.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"totp.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/two-factor/services/totp.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAGhF,OAAO,EAAE,2BAA2B,EAAE,MAAM,+CAA+C,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,qBACa,WAAW;IAQpB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,2BAA2B;IAC5C,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IATxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;gBAGV,cAAc,EAAE,cAAc,EAC9B,2BAA2B,EAAE,2BAA2B,EACxD,qBAAqB,EAAE,qBAAqB;IAG/D;;;;;;;OAOG;IACG,cAAc,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAyCjG;;;;;;;OAOG;IACG,iBAAiB,CAAC,MAAM,EAAE;QAC9B,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAgCzD;;;;;;OAMG;IACG,UAAU,CAAC,MAAM,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCrF;;;;;;OAMG;IACG,iBAAiB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuCzF;;;;;;;OAOG;IACG,gBAAgB,CAAC,MAAM,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAgCvF;;;;OAIG;IACG,mBAAmB,CAAC,MAAM,EAAE;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7E;;;;;;OAMG;IACG,kBAAkB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAQ1F;;;;;OAKG;IACG,wBAAwB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5E;;;;OAIG;IACG,6BAA6B,CAAC,MAAM,EAAE;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBxF"}
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var TotpService_1;
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.TotpService = void 0;
47
+ const common_1 = require("@nestjs/common");
48
+ const crypto = __importStar(require("crypto"));
49
+ const OTPAuth = __importStar(require("otpauth"));
50
+ const QRCode = __importStar(require("qrcode"));
51
+ const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
52
+ const totp_authenticator_1 = require("../entities/totp-authenticator");
53
+ const totp_setup_1 = require("../entities/totp-setup");
54
+ const totp_authenticator_repository_1 = require("../repositories/totp-authenticator.repository");
55
+ const totp_encryption_service_1 = require("./totp-encryption.service");
56
+ /**
57
+ * TOTP Service
58
+ *
59
+ * Manages TOTP (Time-based One-Time Password) authenticators for two-factor authentication.
60
+ * Provides secret generation, QR code creation, code verification, and authenticator management.
61
+ */
62
+ let TotpService = TotpService_1 = class TotpService {
63
+ constructor(jsonApiService, totpAuthenticatorRepository, totpEncryptionService) {
64
+ this.jsonApiService = jsonApiService;
65
+ this.totpAuthenticatorRepository = totpAuthenticatorRepository;
66
+ this.totpEncryptionService = totpEncryptionService;
67
+ this.logger = new common_1.Logger(TotpService_1.name);
68
+ this.issuer = "Only35";
69
+ this.algorithm = "SHA1";
70
+ this.digits = 6;
71
+ this.period = 30; // seconds
72
+ }
73
+ /**
74
+ * Generate a new TOTP secret and return setup information.
75
+ *
76
+ * @param params.userId - The user's ID
77
+ * @param params.name - A friendly name for this authenticator (e.g., "Google Authenticator")
78
+ * @param params.accountName - The account name to display in authenticator apps (typically email)
79
+ * @returns JSON:API response with setup info (QR code, secret)
80
+ */
81
+ async generateSecret(params) {
82
+ // Generate a new TOTP secret
83
+ const secret = new OTPAuth.Secret({ size: 20 });
84
+ // Create TOTP instance for URI generation
85
+ const totp = new OTPAuth.TOTP({
86
+ issuer: this.issuer,
87
+ label: params.accountName,
88
+ algorithm: this.algorithm,
89
+ digits: this.digits,
90
+ period: this.period,
91
+ secret: secret,
92
+ });
93
+ // Get the otpauth:// URI for QR code
94
+ const qrCodeUri = totp.toString();
95
+ // Generate QR code as data URL
96
+ const qrCodeDataUrl = await QRCode.toDataURL(qrCodeUri);
97
+ // Encrypt the secret before storing
98
+ const encryptedSecret = this.totpEncryptionService.encrypt(secret.base32);
99
+ // Create the authenticator in pending (unverified) state
100
+ const authenticatorId = crypto.randomUUID();
101
+ await this.totpAuthenticatorRepository.createForUser({
102
+ authenticatorId,
103
+ userId: params.userId,
104
+ name: params.name,
105
+ secret: encryptedSecret,
106
+ verified: false,
107
+ });
108
+ return this.jsonApiService.buildSingle(totp_setup_1.TotpSetupDescriptor.model, {
109
+ id: authenticatorId,
110
+ secret: secret.base32,
111
+ qrCodeUri,
112
+ qrCodeDataUrl,
113
+ });
114
+ }
115
+ /**
116
+ * Generate QR code URI for an existing authenticator.
117
+ * Only works for unverified authenticators.
118
+ *
119
+ * @param params.authenticatorId - The authenticator ID
120
+ * @param params.accountName - The account name for the QR code
121
+ * @returns QR code URI and data URL
122
+ */
123
+ async generateQRCodeUri(params) {
124
+ const authenticator = await this.totpAuthenticatorRepository.findByIdWithSecret({
125
+ authenticatorId: params.authenticatorId,
126
+ });
127
+ if (!authenticator) {
128
+ throw new common_1.NotFoundException("Authenticator not found");
129
+ }
130
+ if (authenticator.verified) {
131
+ throw new common_1.BadRequestException("Cannot regenerate QR code for verified authenticator");
132
+ }
133
+ // Decrypt the secret
134
+ const decryptedSecret = this.totpEncryptionService.decrypt(authenticator.secret);
135
+ // Create TOTP instance for URI generation
136
+ const totp = new OTPAuth.TOTP({
137
+ issuer: this.issuer,
138
+ label: params.accountName,
139
+ algorithm: this.algorithm,
140
+ digits: this.digits,
141
+ period: this.period,
142
+ secret: OTPAuth.Secret.fromBase32(decryptedSecret),
143
+ });
144
+ const qrCodeUri = totp.toString();
145
+ const qrCodeDataUrl = await QRCode.toDataURL(qrCodeUri);
146
+ return { qrCodeUri, qrCodeDataUrl };
147
+ }
148
+ /**
149
+ * Verify a TOTP code against an authenticator.
150
+ *
151
+ * @param params.authenticatorId - The authenticator ID
152
+ * @param params.code - The 6-digit TOTP code
153
+ * @returns true if the code is valid
154
+ */
155
+ async verifyCode(params) {
156
+ const authenticator = await this.totpAuthenticatorRepository.findByIdWithSecret({
157
+ authenticatorId: params.authenticatorId,
158
+ });
159
+ if (!authenticator) {
160
+ throw new common_1.NotFoundException("Authenticator not found");
161
+ }
162
+ // Decrypt the secret
163
+ const decryptedSecret = this.totpEncryptionService.decrypt(authenticator.secret);
164
+ // Create TOTP instance
165
+ const totp = new OTPAuth.TOTP({
166
+ issuer: this.issuer,
167
+ algorithm: this.algorithm,
168
+ digits: this.digits,
169
+ period: this.period,
170
+ secret: OTPAuth.Secret.fromBase32(decryptedSecret),
171
+ });
172
+ // Validate with 1 period window (allows for time drift)
173
+ const delta = totp.validate({ token: params.code, window: 1 });
174
+ if (delta !== null) {
175
+ // Update last used time
176
+ await this.totpAuthenticatorRepository.updateAuthenticator({
177
+ authenticatorId: params.authenticatorId,
178
+ lastUsedAt: new Date(),
179
+ });
180
+ return true;
181
+ }
182
+ return false;
183
+ }
184
+ /**
185
+ * Verify a TOTP code for any verified authenticator belonging to a user.
186
+ *
187
+ * @param params.userId - The user's ID
188
+ * @param params.code - The 6-digit TOTP code
189
+ * @returns The authenticator ID if verification succeeds, null otherwise
190
+ */
191
+ async verifyCodeForUser(params) {
192
+ const authenticators = await this.totpAuthenticatorRepository.findAllByUserIdWithSecrets({
193
+ userId: params.userId,
194
+ });
195
+ for (const authenticator of authenticators) {
196
+ // Skip unverified authenticators
197
+ if (!authenticator.verified) {
198
+ continue;
199
+ }
200
+ // Decrypt the secret
201
+ const decryptedSecret = this.totpEncryptionService.decrypt(authenticator.secret);
202
+ // Create TOTP instance
203
+ const totp = new OTPAuth.TOTP({
204
+ issuer: this.issuer,
205
+ algorithm: this.algorithm,
206
+ digits: this.digits,
207
+ period: this.period,
208
+ secret: OTPAuth.Secret.fromBase32(decryptedSecret),
209
+ });
210
+ // Validate with 1 period window
211
+ const delta = totp.validate({ token: params.code, window: 1 });
212
+ if (delta !== null) {
213
+ // Update last used time
214
+ await this.totpAuthenticatorRepository.updateAuthenticator({
215
+ authenticatorId: authenticator.id,
216
+ lastUsedAt: new Date(),
217
+ });
218
+ return authenticator.id;
219
+ }
220
+ }
221
+ return null;
222
+ }
223
+ /**
224
+ * Add (verify) an authenticator by validating a TOTP code.
225
+ * This marks the authenticator as verified and ready for use.
226
+ *
227
+ * @param params.authenticatorId - The authenticator ID from generateSecret
228
+ * @param params.code - The 6-digit TOTP code from the authenticator app
229
+ * @returns JSON:API response with verified authenticator, or null if verification failed
230
+ */
231
+ async addAuthenticator(params) {
232
+ const authenticator = await this.totpAuthenticatorRepository.findByIdWithSecret({
233
+ authenticatorId: params.authenticatorId,
234
+ });
235
+ if (!authenticator) {
236
+ throw new common_1.NotFoundException("Authenticator not found");
237
+ }
238
+ if (authenticator.verified) {
239
+ throw new common_1.BadRequestException("Authenticator is already verified");
240
+ }
241
+ // Verify the code
242
+ const isValid = await this.verifyCode({
243
+ authenticatorId: params.authenticatorId,
244
+ code: params.code,
245
+ });
246
+ if (!isValid) {
247
+ return null;
248
+ }
249
+ // Mark as verified and get updated authenticator
250
+ const verifiedAuthenticator = await this.totpAuthenticatorRepository.updateAuthenticator({
251
+ authenticatorId: params.authenticatorId,
252
+ verified: true,
253
+ });
254
+ return this.jsonApiService.buildSingle(totp_authenticator_1.TotpAuthenticatorDescriptor.model, verifiedAuthenticator);
255
+ }
256
+ /**
257
+ * Remove an authenticator.
258
+ *
259
+ * @param params.authenticatorId - The authenticator ID to remove
260
+ */
261
+ async removeAuthenticator(params) {
262
+ const authenticator = await this.totpAuthenticatorRepository.findByIdForUser({
263
+ authenticatorId: params.authenticatorId,
264
+ });
265
+ if (!authenticator) {
266
+ throw new common_1.NotFoundException("Authenticator not found");
267
+ }
268
+ await this.totpAuthenticatorRepository.deleteAuthenticator({
269
+ authenticatorId: params.authenticatorId,
270
+ });
271
+ }
272
+ /**
273
+ * List all authenticators for a user.
274
+ *
275
+ * @param params.userId - The user's ID
276
+ * @param params.verifiedOnly - If true, only return verified authenticators
277
+ * @returns JSON:API response with list of authenticators
278
+ */
279
+ async listAuthenticators(params) {
280
+ const authenticators = params.verifiedOnly
281
+ ? await this.totpAuthenticatorRepository.findVerifiedByUserId({ userId: params.userId })
282
+ : await this.totpAuthenticatorRepository.findAllByUserIdWithSecrets({ userId: params.userId });
283
+ return this.jsonApiService.buildList(totp_authenticator_1.TotpAuthenticatorDescriptor.model, authenticators);
284
+ }
285
+ /**
286
+ * Check if a user has any verified TOTP authenticators.
287
+ *
288
+ * @param params.userId - The user's ID
289
+ * @returns true if the user has at least one verified authenticator
290
+ */
291
+ async hasVerifiedAuthenticator(params) {
292
+ const count = await this.totpAuthenticatorRepository.countVerifiedByUserId({
293
+ userId: params.userId,
294
+ });
295
+ return count > 0;
296
+ }
297
+ /**
298
+ * Delete an unverified authenticator (cleanup for abandoned setup).
299
+ *
300
+ * @param params.authenticatorId - The authenticator ID
301
+ */
302
+ async deleteUnverifiedAuthenticator(params) {
303
+ const authenticator = await this.totpAuthenticatorRepository.findByIdForUser({
304
+ authenticatorId: params.authenticatorId,
305
+ });
306
+ if (!authenticator) {
307
+ throw new common_1.NotFoundException("Authenticator not found");
308
+ }
309
+ if (authenticator.verified) {
310
+ throw new common_1.BadRequestException("Cannot delete a verified authenticator using this method");
311
+ }
312
+ await this.totpAuthenticatorRepository.deleteAuthenticator({
313
+ authenticatorId: params.authenticatorId,
314
+ });
315
+ }
316
+ };
317
+ exports.TotpService = TotpService;
318
+ exports.TotpService = TotpService = TotpService_1 = __decorate([
319
+ (0, common_1.Injectable)(),
320
+ __metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
321
+ totp_authenticator_repository_1.TotpAuthenticatorRepository,
322
+ totp_encryption_service_1.TotpEncryptionService])
323
+ ], TotpService);
324
+ //# sourceMappingURL=totp.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"totp.service.js","sourceRoot":"","sources":["../../../../src/foundations/two-factor/services/totp.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
2
+ import { PendingTwoFactor } from "../entities/pending-two-factor";
3
+ import { TwoFactorConfig } from "../entities/two-factor-config";
4
+ import { PendingTwoFactorRepository } from "../repositories/pending-two-factor.repository";
5
+ import { TwoFactorConfigRepository } from "../repositories/two-factor-config.repository";
6
+ import { BackupCodeService } from "./backup-code.service";
7
+ import { PasskeyService } from "./passkey.service";
8
+ import { TotpService } from "./totp.service";
9
+ export type TwoFactorMethod = "totp" | "passkey" | "backup";
10
+ export interface TwoFactorStatus {
11
+ isEnabled: boolean;
12
+ preferredMethod: TwoFactorMethod;
13
+ methods: {
14
+ totp: boolean;
15
+ passkey: boolean;
16
+ backup: boolean;
17
+ };
18
+ backupCodesCount: number;
19
+ }
20
+ export interface PendingSession {
21
+ pendingId: string;
22
+ expiration: Date;
23
+ }
24
+ export interface VerificationResult {
25
+ success: boolean;
26
+ userId?: string;
27
+ }
28
+ /**
29
+ * Two-Factor Orchestration Service
30
+ *
31
+ * Coordinates all 2FA functionality including status management, method verification,
32
+ * and pending session handling. This service is the main entry point for 2FA operations
33
+ * and delegates to specialized services (TOTP, Passkey, BackupCode) for specific tasks.
34
+ */
35
+ export declare class TwoFactorService {
36
+ private readonly jsonApiService;
37
+ private readonly twoFactorConfigRepository;
38
+ private readonly pendingTwoFactorRepository;
39
+ private readonly totpService;
40
+ private readonly passkeyService;
41
+ private readonly backupCodeService;
42
+ private readonly pendingTtlSeconds;
43
+ private readonly maxTotpAttempts;
44
+ private readonly maxPasskeyAttempts;
45
+ private readonly maxBackupAttempts;
46
+ constructor(jsonApiService: JsonApiService, twoFactorConfigRepository: TwoFactorConfigRepository, pendingTwoFactorRepository: PendingTwoFactorRepository, totpService: TotpService, passkeyService: PasskeyService, backupCodeService: BackupCodeService);
47
+ /**
48
+ * Get the 2FA configuration for a user.
49
+ *
50
+ * @param userId - The user's ID
51
+ * @returns The user's TwoFactorConfig, or null if not configured
52
+ */
53
+ getConfig(userId: string): Promise<TwoFactorConfig | null>;
54
+ /**
55
+ * Get the full 2FA status for a user including available methods.
56
+ *
57
+ * @param userId - The user's ID
58
+ * @returns JSON:API response with 2FA status
59
+ */
60
+ getStatus(userId: string): Promise<any>;
61
+ /**
62
+ * Enable 2FA for a user.
63
+ * Requires at least one 2FA method to be configured.
64
+ *
65
+ * @param userId - The user's ID
66
+ * @param preferredMethod - The preferred 2FA method (default: 'totp')
67
+ * @throws BadRequestException if no 2FA methods are configured
68
+ * @returns JSON:API response with the 2FA config
69
+ */
70
+ enable(userId: string, preferredMethod?: TwoFactorMethod): Promise<any>;
71
+ /**
72
+ * Disable 2FA for a user.
73
+ *
74
+ * @param userId - The user's ID
75
+ */
76
+ disable(userId: string): Promise<TwoFactorConfig | null>;
77
+ /**
78
+ * Set the preferred 2FA method for a user.
79
+ *
80
+ * @param userId - The user's ID
81
+ * @param method - The preferred method
82
+ * @throws BadRequestException if the method is not available
83
+ */
84
+ setPreferredMethod(userId: string, method: TwoFactorMethod): Promise<TwoFactorConfig>;
85
+ /**
86
+ * Create a pending 2FA session after successful password validation.
87
+ * This is called by the auth service when a user with 2FA enabled logs in.
88
+ *
89
+ * @param userId - The user's ID
90
+ * @returns The pending session info
91
+ */
92
+ createPendingSession(userId: string): Promise<PendingSession>;
93
+ /**
94
+ * Get available 2FA methods for a user during login.
95
+ *
96
+ * @param userId - The user's ID
97
+ * @returns Array of available method names
98
+ */
99
+ getAvailableMethods(userId: string): Promise<TwoFactorMethod[]>;
100
+ /**
101
+ * Verify a TOTP code for 2FA login.
102
+ *
103
+ * @param pendingId - The pending session ID from createPendingSession
104
+ * @param code - The 6-digit TOTP code
105
+ * @returns JSON:API response with verification result
106
+ */
107
+ verifyTotp(pendingId: string, code: string): Promise<any>;
108
+ /**
109
+ * Verify a passkey for 2FA login.
110
+ *
111
+ * @param pendingId - The pending session ID
112
+ * @param response - The WebAuthn authentication response
113
+ * @returns JSON:API response with verification result
114
+ */
115
+ verifyPasskey(pendingId: string, response: Parameters<typeof PasskeyService.prototype.verifyAuthentication>[0]["response"]): Promise<any>;
116
+ /**
117
+ * Verify a backup code for 2FA login.
118
+ *
119
+ * @param pendingId - The pending session ID
120
+ * @param code - The backup code
121
+ * @returns JSON:API response with verification result
122
+ */
123
+ verifyBackupCode(pendingId: string, code: string): Promise<any>;
124
+ /**
125
+ * Get pending session info by ID.
126
+ *
127
+ * @param pendingId - The pending session ID
128
+ * @returns The pending session data if found
129
+ */
130
+ getPendingSession(pendingId: string): Promise<{
131
+ pending: PendingTwoFactor;
132
+ userId: string;
133
+ } | null>;
134
+ /**
135
+ * Delete a pending session.
136
+ *
137
+ * @param pendingId - The pending session ID
138
+ */
139
+ deletePendingSession(pendingId: string): Promise<void>;
140
+ /**
141
+ * Update backup codes count in the config.
142
+ * Called after generating or using backup codes.
143
+ *
144
+ * @param userId - The user's ID
145
+ */
146
+ updateBackupCodesCount(userId: string): Promise<void>;
147
+ /**
148
+ * Check if 2FA should be automatically disabled due to no methods remaining.
149
+ * Called when removing the last TOTP authenticator or passkey.
150
+ *
151
+ * @param userId - The user's ID
152
+ * @returns true if 2FA was disabled
153
+ */
154
+ checkAndDisableIfNoMethods(userId: string): Promise<boolean>;
155
+ /**
156
+ * Validate a pending session and return its data.
157
+ *
158
+ * @param pendingId - The pending session ID
159
+ * @param expectedType - The expected challenge type
160
+ * @throws NotFoundException if session not found
161
+ * @throws BadRequestException if session expired or wrong type
162
+ */
163
+ private validateAndGetPending;
164
+ }
165
+ //# sourceMappingURL=two-factor.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two-factor.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/two-factor/services/two-factor.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,eAAe,EAA6B,MAAM,+BAA+B,CAAC;AAG3F,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,qBACa,gBAAgB;IAOzB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAXpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAK;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAK;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;gBAGpB,cAAc,EAAE,cAAc,EAC9B,yBAAyB,EAAE,yBAAyB,EACpD,0BAA0B,EAAE,0BAA0B,EACtD,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB;IAKvD;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAKhE;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB7C;;;;;;;;OAQG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,GAAE,eAAwB,GAAG,OAAO,CAAC,GAAG,CAAC;IAwCrF;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAa9D;;;;;;OAMG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IA+B3F;;;;;;OAMG;IACG,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsBnE;;;;;OAKG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAgBrE;;;;;;OAMG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAiC/D;;;;;;OAMG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GACxF,OAAO,CAAC,GAAG,CAAC;IAkDf;;;;;;OAMG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAwCrE;;;;;OAKG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAIzG;;;;OAIG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D;;;;;OAKG;IACG,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3D;;;;;;OAMG;IACG,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlE;;;;;;;OAOG;YACW,qBAAqB;CAyBpC"}