@intlayer/backend 5.5.11 → 5.7.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 (513) hide show
  1. package/README.md +3 -0
  2. package/dist/cjs/controllers/ai.controller.cjs +10 -7
  3. package/dist/cjs/controllers/ai.controller.cjs.map +1 -1
  4. package/dist/cjs/controllers/dictionary.controller.cjs +50 -58
  5. package/dist/cjs/controllers/dictionary.controller.cjs.map +1 -1
  6. package/dist/cjs/controllers/eventListener.controller.cjs +2 -18
  7. package/dist/cjs/controllers/eventListener.controller.cjs.map +1 -1
  8. package/dist/cjs/controllers/newsletter.controller.cjs +38 -3
  9. package/dist/cjs/controllers/newsletter.controller.cjs.map +1 -1
  10. package/dist/cjs/controllers/oAuth2.controller.cjs +3 -3
  11. package/dist/cjs/controllers/oAuth2.controller.cjs.map +1 -1
  12. package/dist/cjs/controllers/organization.controller.cjs +92 -106
  13. package/dist/cjs/controllers/organization.controller.cjs.map +1 -1
  14. package/dist/cjs/controllers/project.controller.cjs +81 -83
  15. package/dist/cjs/controllers/project.controller.cjs.map +1 -1
  16. package/dist/cjs/controllers/projectAccessKey.controller.cjs +30 -24
  17. package/dist/cjs/controllers/projectAccessKey.controller.cjs.map +1 -1
  18. package/dist/cjs/controllers/search.controller.cjs.map +1 -1
  19. package/dist/cjs/controllers/stripe.controller.cjs +4 -25
  20. package/dist/cjs/controllers/stripe.controller.cjs.map +1 -1
  21. package/dist/cjs/controllers/tag.controller.cjs +27 -16
  22. package/dist/cjs/controllers/tag.controller.cjs.map +1 -1
  23. package/dist/cjs/controllers/user.controller.cjs +88 -24
  24. package/dist/cjs/controllers/user.controller.cjs.map +1 -1
  25. package/dist/cjs/emails/InviteUserEmail.cjs +30 -12
  26. package/dist/cjs/emails/InviteUserEmail.cjs.map +1 -1
  27. package/dist/cjs/emails/OAuthTokenCreatedEmail.cjs +266 -0
  28. package/dist/cjs/emails/OAuthTokenCreatedEmail.cjs.map +1 -0
  29. package/dist/cjs/emails/ResetUserPassword.cjs +27 -15
  30. package/dist/cjs/emails/ResetUserPassword.cjs.map +1 -1
  31. package/dist/cjs/emails/ValidateUserEmail.cjs +27 -36
  32. package/dist/cjs/emails/ValidateUserEmail.cjs.map +1 -1
  33. package/dist/cjs/emails/Welcome.cjs +27 -15
  34. package/dist/cjs/emails/Welcome.cjs.map +1 -1
  35. package/dist/cjs/emails/index.cjs +7 -5
  36. package/dist/cjs/emails/index.cjs.map +1 -1
  37. package/dist/cjs/export.cjs +2 -5
  38. package/dist/cjs/export.cjs.map +1 -1
  39. package/dist/cjs/index.cjs +61 -111
  40. package/dist/cjs/index.cjs.map +1 -1
  41. package/dist/cjs/middlewares/oAuth2.middleware.cjs +26 -38
  42. package/dist/cjs/middlewares/oAuth2.middleware.cjs.map +1 -1
  43. package/dist/cjs/middlewares/request.middleware.cjs.map +1 -1
  44. package/dist/cjs/middlewares/sessionAuth.middleware.cjs +17 -138
  45. package/dist/cjs/middlewares/sessionAuth.middleware.cjs.map +1 -1
  46. package/dist/cjs/models/dictionary.model.cjs.map +1 -1
  47. package/dist/cjs/models/discussion.model.cjs.map +1 -1
  48. package/dist/cjs/models/oAuth2.model.cjs +4 -1
  49. package/dist/cjs/models/oAuth2.model.cjs.map +1 -1
  50. package/dist/cjs/models/organization.model.cjs +1 -4
  51. package/dist/cjs/models/organization.model.cjs.map +1 -1
  52. package/dist/cjs/models/project.model.cjs +4 -1
  53. package/dist/cjs/models/project.model.cjs.map +1 -1
  54. package/dist/cjs/models/session.model.cjs +34 -0
  55. package/dist/cjs/models/session.model.cjs.map +1 -0
  56. package/dist/cjs/models/tag.model.cjs.map +1 -1
  57. package/dist/cjs/models/user.model.cjs.map +1 -1
  58. package/dist/cjs/routes/ai.routes.cjs +3 -1
  59. package/dist/cjs/routes/ai.routes.cjs.map +1 -1
  60. package/dist/cjs/routes/dictionary.routes.cjs.map +1 -1
  61. package/dist/cjs/routes/eventListener.routes.cjs +1 -1
  62. package/dist/cjs/routes/eventListener.routes.cjs.map +1 -1
  63. package/dist/cjs/routes/newsletter.routes.cjs.map +1 -1
  64. package/dist/cjs/routes/organization.routes.cjs +8 -8
  65. package/dist/cjs/routes/organization.routes.cjs.map +1 -1
  66. package/dist/cjs/routes/project.routes.cjs +23 -14
  67. package/dist/cjs/routes/project.routes.cjs.map +1 -1
  68. package/dist/cjs/routes/search.routes.cjs.map +1 -1
  69. package/dist/cjs/routes/stripe.routes.cjs.map +1 -1
  70. package/dist/cjs/routes/tags.routes.cjs +4 -4
  71. package/dist/cjs/routes/tags.routes.cjs.map +1 -1
  72. package/dist/cjs/routes/user.routes.cjs +12 -12
  73. package/dist/cjs/routes/user.routes.cjs.map +1 -1
  74. package/dist/cjs/schemas/dictionary.schema.cjs +18 -1
  75. package/dist/cjs/schemas/dictionary.schema.cjs.map +1 -1
  76. package/dist/cjs/schemas/discussion.schema.cjs +18 -1
  77. package/dist/cjs/schemas/discussion.schema.cjs.map +1 -1
  78. package/dist/cjs/schemas/oAuth2.schema.cjs +18 -1
  79. package/dist/cjs/schemas/oAuth2.schema.cjs.map +1 -1
  80. package/dist/cjs/schemas/organization.schema.cjs +21 -1
  81. package/dist/cjs/schemas/organization.schema.cjs.map +1 -1
  82. package/dist/cjs/schemas/plans.schema.cjs +18 -1
  83. package/dist/cjs/schemas/plans.schema.cjs.map +1 -1
  84. package/dist/cjs/schemas/project.schema.cjs +19 -14
  85. package/dist/cjs/schemas/project.schema.cjs.map +1 -1
  86. package/dist/cjs/schemas/session.schema.cjs +63 -0
  87. package/dist/cjs/schemas/session.schema.cjs.map +1 -0
  88. package/dist/cjs/schemas/tag.schema.cjs +18 -1
  89. package/dist/cjs/schemas/tag.schema.cjs.map +1 -1
  90. package/dist/cjs/schemas/user.schema.cjs +18 -48
  91. package/dist/cjs/schemas/user.schema.cjs.map +1 -1
  92. package/dist/cjs/services/dictionary.service.cjs +6 -5
  93. package/dist/cjs/services/dictionary.service.cjs.map +1 -1
  94. package/dist/cjs/services/email.service.cjs +13 -0
  95. package/dist/cjs/services/email.service.cjs.map +1 -1
  96. package/dist/cjs/services/oAuth2.service.cjs +49 -10
  97. package/dist/cjs/services/oAuth2.service.cjs.map +1 -1
  98. package/dist/cjs/services/organization.service.cjs +16 -15
  99. package/dist/cjs/services/organization.service.cjs.map +1 -1
  100. package/dist/cjs/services/project.service.cjs +1 -1
  101. package/dist/cjs/services/project.service.cjs.map +1 -1
  102. package/dist/cjs/services/projectAccessKey.service.cjs +17 -33
  103. package/dist/cjs/services/projectAccessKey.service.cjs.map +1 -1
  104. package/dist/cjs/services/subscription.service.cjs +10 -10
  105. package/dist/cjs/services/subscription.service.cjs.map +1 -1
  106. package/dist/cjs/services/tag.service.cjs.map +1 -1
  107. package/dist/cjs/services/user.service.cjs +2 -42
  108. package/dist/cjs/services/user.service.cjs.map +1 -1
  109. package/dist/cjs/types/dictionary.types.cjs.map +1 -1
  110. package/dist/cjs/types/discussion.types.cjs.map +1 -1
  111. package/dist/cjs/types/oAuth2.types.cjs.map +1 -1
  112. package/dist/cjs/types/organization.types.cjs.map +1 -1
  113. package/dist/cjs/types/plan.types.cjs.map +1 -1
  114. package/dist/cjs/types/project.types.cjs.map +1 -1
  115. package/dist/cjs/types/session.types.cjs.map +1 -1
  116. package/dist/cjs/types/tag.types.cjs.map +1 -1
  117. package/dist/cjs/types/user.types.cjs.map +1 -1
  118. package/dist/cjs/utils/AI/aiSdk.cjs.map +1 -1
  119. package/dist/cjs/utils/AI/askDocQuestion/PROMPT.md +7 -1
  120. package/dist/cjs/utils/AI/askDocQuestion/askDocQuestion.cjs +32 -14
  121. package/dist/cjs/utils/AI/askDocQuestion/askDocQuestion.cjs.map +1 -1
  122. package/dist/cjs/utils/AI/askDocQuestion/embeddings.json +88086 -76800
  123. package/dist/cjs/utils/AI/autocomplete/PROMPT.md +18 -2
  124. package/dist/cjs/utils/AI/autocomplete/index.cjs +8 -5
  125. package/dist/cjs/utils/AI/autocomplete/index.cjs.map +1 -1
  126. package/dist/cjs/utils/access.cjs +2 -0
  127. package/dist/cjs/utils/access.cjs.map +1 -0
  128. package/dist/cjs/utils/accessControl.cjs +7 -0
  129. package/dist/cjs/utils/accessControl.cjs.map +1 -1
  130. package/dist/cjs/utils/auth/getAuth.cjs +248 -0
  131. package/dist/cjs/utils/auth/getAuth.cjs.map +1 -0
  132. package/dist/cjs/utils/cors.cjs +55 -0
  133. package/dist/cjs/utils/cors.cjs.map +1 -0
  134. package/dist/cjs/utils/ensureMongoDocumentToObject.cjs.map +1 -1
  135. package/dist/cjs/utils/errors/ErrorHandler.cjs +2 -2
  136. package/dist/cjs/utils/errors/ErrorHandler.cjs.map +1 -1
  137. package/dist/cjs/utils/errors/errorCodes.cjs +114 -153
  138. package/dist/cjs/utils/errors/errorCodes.cjs.map +1 -1
  139. package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs.map +1 -1
  140. package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs.map +1 -1
  141. package/dist/cjs/utils/filtersAndPagination/getTagFiltersAndPagination.cjs.map +1 -1
  142. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs +1 -1
  143. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs.map +1 -1
  144. package/dist/cjs/utils/mapper/dictionary.cjs.map +1 -1
  145. package/dist/cjs/utils/mapper/organization.cjs +10 -8
  146. package/dist/cjs/utils/mapper/organization.cjs.map +1 -1
  147. package/dist/cjs/utils/mapper/project.cjs +5 -18
  148. package/dist/cjs/utils/mapper/project.cjs.map +1 -1
  149. package/dist/cjs/utils/mapper/tag.cjs +4 -2
  150. package/dist/cjs/utils/mapper/tag.cjs.map +1 -1
  151. package/dist/cjs/utils/mapper/user.cjs +6 -3
  152. package/dist/cjs/utils/mapper/user.cjs.map +1 -1
  153. package/dist/cjs/utils/mergeFunctionTypes.cjs +17 -0
  154. package/dist/cjs/utils/mergeFunctionTypes.cjs.map +1 -0
  155. package/dist/cjs/utils/mongoDB/connectDB.cjs +3 -1
  156. package/dist/cjs/utils/mongoDB/connectDB.cjs.map +1 -1
  157. package/dist/cjs/utils/mongoDB/types.cjs +17 -0
  158. package/dist/cjs/utils/mongoDB/types.cjs.map +1 -0
  159. package/dist/cjs/utils/oAuth2.cjs.map +1 -1
  160. package/dist/cjs/utils/permissions.cjs +166 -0
  161. package/dist/cjs/utils/permissions.cjs.map +1 -0
  162. package/dist/cjs/utils/rateLimiter.cjs +88 -0
  163. package/dist/cjs/utils/rateLimiter.cjs.map +1 -0
  164. package/dist/esm/controllers/ai.controller.mjs +10 -7
  165. package/dist/esm/controllers/ai.controller.mjs.map +1 -1
  166. package/dist/esm/controllers/dictionary.controller.mjs +50 -58
  167. package/dist/esm/controllers/dictionary.controller.mjs.map +1 -1
  168. package/dist/esm/controllers/eventListener.controller.mjs +2 -8
  169. package/dist/esm/controllers/eventListener.controller.mjs.map +1 -1
  170. package/dist/esm/controllers/newsletter.controller.mjs +38 -3
  171. package/dist/esm/controllers/newsletter.controller.mjs.map +1 -1
  172. package/dist/esm/controllers/oAuth2.controller.mjs +2 -2
  173. package/dist/esm/controllers/oAuth2.controller.mjs.map +1 -1
  174. package/dist/esm/controllers/organization.controller.mjs +95 -106
  175. package/dist/esm/controllers/organization.controller.mjs.map +1 -1
  176. package/dist/esm/controllers/project.controller.mjs +81 -83
  177. package/dist/esm/controllers/project.controller.mjs.map +1 -1
  178. package/dist/esm/controllers/projectAccessKey.controller.mjs +30 -24
  179. package/dist/esm/controllers/projectAccessKey.controller.mjs.map +1 -1
  180. package/dist/esm/controllers/search.controller.mjs.map +1 -1
  181. package/dist/esm/controllers/stripe.controller.mjs +4 -25
  182. package/dist/esm/controllers/stripe.controller.mjs.map +1 -1
  183. package/dist/esm/controllers/tag.controller.mjs +27 -16
  184. package/dist/esm/controllers/tag.controller.mjs.map +1 -1
  185. package/dist/esm/controllers/user.controller.mjs +85 -22
  186. package/dist/esm/controllers/user.controller.mjs.map +1 -1
  187. package/dist/esm/emails/InviteUserEmail.mjs +32 -14
  188. package/dist/esm/emails/InviteUserEmail.mjs.map +1 -1
  189. package/dist/esm/emails/OAuthTokenCreatedEmail.mjs +254 -0
  190. package/dist/esm/emails/OAuthTokenCreatedEmail.mjs.map +1 -0
  191. package/dist/esm/emails/ResetUserPassword.mjs +29 -17
  192. package/dist/esm/emails/ResetUserPassword.mjs.map +1 -1
  193. package/dist/esm/emails/ValidateUserEmail.mjs +29 -38
  194. package/dist/esm/emails/ValidateUserEmail.mjs.map +1 -1
  195. package/dist/esm/emails/Welcome.mjs +29 -17
  196. package/dist/esm/emails/Welcome.mjs.map +1 -1
  197. package/dist/esm/emails/index.mjs +3 -2
  198. package/dist/esm/emails/index.mjs.map +1 -1
  199. package/dist/esm/export.mjs +1 -3
  200. package/dist/esm/export.mjs.map +1 -1
  201. package/dist/esm/index.mjs +60 -111
  202. package/dist/esm/index.mjs.map +1 -1
  203. package/dist/esm/middlewares/oAuth2.middleware.mjs +27 -36
  204. package/dist/esm/middlewares/oAuth2.middleware.mjs.map +1 -1
  205. package/dist/esm/middlewares/request.middleware.mjs.map +1 -1
  206. package/dist/esm/middlewares/sessionAuth.middleware.mjs +16 -127
  207. package/dist/esm/middlewares/sessionAuth.middleware.mjs.map +1 -1
  208. package/dist/esm/models/dictionary.model.mjs.map +1 -1
  209. package/dist/esm/models/discussion.model.mjs.map +1 -1
  210. package/dist/esm/models/oAuth2.model.mjs +4 -1
  211. package/dist/esm/models/oAuth2.model.mjs.map +1 -1
  212. package/dist/esm/models/organization.model.mjs +1 -4
  213. package/dist/esm/models/organization.model.mjs.map +1 -1
  214. package/dist/esm/models/project.model.mjs +4 -1
  215. package/dist/esm/models/project.model.mjs.map +1 -1
  216. package/dist/esm/models/session.model.mjs +10 -0
  217. package/dist/esm/models/session.model.mjs.map +1 -0
  218. package/dist/esm/models/tag.model.mjs.map +1 -1
  219. package/dist/esm/models/user.model.mjs.map +1 -1
  220. package/dist/esm/routes/ai.routes.mjs +3 -1
  221. package/dist/esm/routes/ai.routes.mjs.map +1 -1
  222. package/dist/esm/routes/dictionary.routes.mjs.map +1 -1
  223. package/dist/esm/routes/eventListener.routes.mjs +1 -1
  224. package/dist/esm/routes/eventListener.routes.mjs.map +1 -1
  225. package/dist/esm/routes/newsletter.routes.mjs.map +1 -1
  226. package/dist/esm/routes/organization.routes.mjs +8 -8
  227. package/dist/esm/routes/organization.routes.mjs.map +1 -1
  228. package/dist/esm/routes/project.routes.mjs +23 -14
  229. package/dist/esm/routes/project.routes.mjs.map +1 -1
  230. package/dist/esm/routes/search.routes.mjs.map +1 -1
  231. package/dist/esm/routes/stripe.routes.mjs.map +1 -1
  232. package/dist/esm/routes/tags.routes.mjs +4 -4
  233. package/dist/esm/routes/tags.routes.mjs.map +1 -1
  234. package/dist/esm/routes/user.routes.mjs +14 -14
  235. package/dist/esm/routes/user.routes.mjs.map +1 -1
  236. package/dist/esm/schemas/dictionary.schema.mjs +18 -1
  237. package/dist/esm/schemas/dictionary.schema.mjs.map +1 -1
  238. package/dist/esm/schemas/discussion.schema.mjs +18 -1
  239. package/dist/esm/schemas/discussion.schema.mjs.map +1 -1
  240. package/dist/esm/schemas/oAuth2.schema.mjs +18 -1
  241. package/dist/esm/schemas/oAuth2.schema.mjs.map +1 -1
  242. package/dist/esm/schemas/organization.schema.mjs +21 -1
  243. package/dist/esm/schemas/organization.schema.mjs.map +1 -1
  244. package/dist/esm/schemas/plans.schema.mjs +18 -1
  245. package/dist/esm/schemas/plans.schema.mjs.map +1 -1
  246. package/dist/esm/schemas/project.schema.mjs +21 -15
  247. package/dist/esm/schemas/project.schema.mjs.map +1 -1
  248. package/dist/esm/schemas/session.schema.mjs +39 -0
  249. package/dist/esm/schemas/session.schema.mjs.map +1 -0
  250. package/dist/esm/schemas/tag.schema.mjs +21 -4
  251. package/dist/esm/schemas/tag.schema.mjs.map +1 -1
  252. package/dist/esm/schemas/user.schema.mjs +18 -48
  253. package/dist/esm/schemas/user.schema.mjs.map +1 -1
  254. package/dist/esm/services/dictionary.service.mjs +6 -5
  255. package/dist/esm/services/dictionary.service.mjs.map +1 -1
  256. package/dist/esm/services/email.service.mjs +33 -16
  257. package/dist/esm/services/email.service.mjs.map +1 -1
  258. package/dist/esm/services/oAuth2.service.mjs +47 -10
  259. package/dist/esm/services/oAuth2.service.mjs.map +1 -1
  260. package/dist/esm/services/organization.service.mjs +16 -14
  261. package/dist/esm/services/organization.service.mjs.map +1 -1
  262. package/dist/esm/services/project.service.mjs +1 -1
  263. package/dist/esm/services/project.service.mjs.map +1 -1
  264. package/dist/esm/services/projectAccessKey.service.mjs +15 -31
  265. package/dist/esm/services/projectAccessKey.service.mjs.map +1 -1
  266. package/dist/esm/services/subscription.service.mjs +10 -10
  267. package/dist/esm/services/subscription.service.mjs.map +1 -1
  268. package/dist/esm/services/tag.service.mjs.map +1 -1
  269. package/dist/esm/services/user.service.mjs +2 -40
  270. package/dist/esm/services/user.service.mjs.map +1 -1
  271. package/dist/esm/types/user.types.mjs.map +1 -1
  272. package/dist/esm/utils/AI/aiSdk.mjs.map +1 -1
  273. package/dist/esm/utils/AI/askDocQuestion/PROMPT.md +7 -1
  274. package/dist/esm/utils/AI/askDocQuestion/askDocQuestion.mjs +32 -14
  275. package/dist/esm/utils/AI/askDocQuestion/askDocQuestion.mjs.map +1 -1
  276. package/dist/esm/utils/AI/askDocQuestion/embeddings.json +88086 -76800
  277. package/dist/esm/utils/AI/autocomplete/PROMPT.md +18 -2
  278. package/dist/esm/utils/AI/autocomplete/index.mjs +8 -5
  279. package/dist/esm/utils/AI/autocomplete/index.mjs.map +1 -1
  280. package/dist/esm/utils/access.mjs +1 -0
  281. package/dist/esm/utils/access.mjs.map +1 -0
  282. package/dist/esm/utils/accessControl.mjs +7 -0
  283. package/dist/esm/utils/accessControl.mjs.map +1 -1
  284. package/dist/esm/utils/auth/getAuth.mjs +227 -0
  285. package/dist/esm/utils/auth/getAuth.mjs.map +1 -0
  286. package/dist/esm/utils/cors.mjs +31 -0
  287. package/dist/esm/utils/cors.mjs.map +1 -0
  288. package/dist/esm/utils/ensureMongoDocumentToObject.mjs.map +1 -1
  289. package/dist/esm/utils/errors/ErrorHandler.mjs +2 -2
  290. package/dist/esm/utils/errors/ErrorHandler.mjs.map +1 -1
  291. package/dist/esm/utils/errors/errorCodes.mjs +114 -153
  292. package/dist/esm/utils/errors/errorCodes.mjs.map +1 -1
  293. package/dist/esm/utils/filtersAndPagination/getOrganizationFiltersAndPagination.mjs.map +1 -1
  294. package/dist/esm/utils/filtersAndPagination/getProjectFiltersAndPagination.mjs.map +1 -1
  295. package/dist/esm/utils/filtersAndPagination/getTagFiltersAndPagination.mjs.map +1 -1
  296. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs +1 -1
  297. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs.map +1 -1
  298. package/dist/esm/utils/mapper/dictionary.mjs.map +1 -1
  299. package/dist/esm/utils/mapper/organization.mjs +8 -7
  300. package/dist/esm/utils/mapper/organization.mjs.map +1 -1
  301. package/dist/esm/utils/mapper/project.mjs +5 -18
  302. package/dist/esm/utils/mapper/project.mjs.map +1 -1
  303. package/dist/esm/utils/mapper/tag.mjs +4 -2
  304. package/dist/esm/utils/mapper/tag.mjs.map +1 -1
  305. package/dist/esm/utils/mapper/user.mjs +6 -3
  306. package/dist/esm/utils/mapper/user.mjs.map +1 -1
  307. package/dist/esm/utils/mergeFunctionTypes.mjs +1 -0
  308. package/dist/esm/utils/mergeFunctionTypes.mjs.map +1 -0
  309. package/dist/esm/utils/mongoDB/connectDB.mjs +3 -1
  310. package/dist/esm/utils/mongoDB/connectDB.mjs.map +1 -1
  311. package/dist/esm/utils/mongoDB/types.mjs +1 -0
  312. package/dist/esm/utils/mongoDB/types.mjs.map +1 -0
  313. package/dist/esm/utils/oAuth2.mjs +3 -3
  314. package/dist/esm/utils/oAuth2.mjs.map +1 -1
  315. package/dist/esm/utils/permissions.mjs +138 -0
  316. package/dist/esm/utils/permissions.mjs.map +1 -0
  317. package/dist/esm/utils/rateLimiter.mjs +53 -0
  318. package/dist/esm/utils/rateLimiter.mjs.map +1 -0
  319. package/dist/types/controllers/ai.controller.d.ts +12 -10
  320. package/dist/types/controllers/ai.controller.d.ts.map +1 -1
  321. package/dist/types/controllers/dictionary.controller.d.ts +8 -9
  322. package/dist/types/controllers/dictionary.controller.d.ts.map +1 -1
  323. package/dist/types/controllers/eventListener.controller.d.ts +2 -3
  324. package/dist/types/controllers/eventListener.controller.d.ts.map +1 -1
  325. package/dist/types/controllers/newsletter.controller.d.ts +5 -6
  326. package/dist/types/controllers/newsletter.controller.d.ts.map +1 -1
  327. package/dist/types/controllers/oAuth2.controller.d.ts +3 -3
  328. package/dist/types/controllers/oAuth2.controller.d.ts.map +1 -1
  329. package/dist/types/controllers/organization.controller.d.ts +22 -23
  330. package/dist/types/controllers/organization.controller.d.ts.map +1 -1
  331. package/dist/types/controllers/project.controller.d.ts +13 -14
  332. package/dist/types/controllers/project.controller.d.ts.map +1 -1
  333. package/dist/types/controllers/projectAccessKey.controller.d.ts +5 -6
  334. package/dist/types/controllers/projectAccessKey.controller.d.ts.map +1 -1
  335. package/dist/types/controllers/search.controller.d.ts +2 -3
  336. package/dist/types/controllers/search.controller.d.ts.map +1 -1
  337. package/dist/types/controllers/stripe.controller.d.ts +5 -6
  338. package/dist/types/controllers/stripe.controller.d.ts.map +1 -1
  339. package/dist/types/controllers/tag.controller.d.ts +9 -10
  340. package/dist/types/controllers/tag.controller.d.ts.map +1 -1
  341. package/dist/types/controllers/user.controller.d.ts +16 -19
  342. package/dist/types/controllers/user.controller.d.ts.map +1 -1
  343. package/dist/types/emails/InviteUserEmail.d.ts.map +1 -1
  344. package/dist/types/emails/OAuthTokenCreatedEmail.d.ts +21 -0
  345. package/dist/types/emails/OAuthTokenCreatedEmail.d.ts.map +1 -0
  346. package/dist/types/emails/ResetUserPassword.d.ts.map +1 -1
  347. package/dist/types/emails/Welcome.d.ts.map +1 -1
  348. package/dist/types/emails/index.d.ts +3 -2
  349. package/dist/types/emails/index.d.ts.map +1 -1
  350. package/dist/types/export.d.ts +2 -3
  351. package/dist/types/export.d.ts.map +1 -1
  352. package/dist/types/index.d.ts +1 -3
  353. package/dist/types/index.d.ts.map +1 -1
  354. package/dist/types/middlewares/oAuth2.middleware.d.ts +1 -2
  355. package/dist/types/middlewares/oAuth2.middleware.d.ts.map +1 -1
  356. package/dist/types/middlewares/request.middleware.d.ts +3 -3
  357. package/dist/types/middlewares/request.middleware.d.ts.map +1 -1
  358. package/dist/types/middlewares/sessionAuth.middleware.d.ts +3 -25
  359. package/dist/types/middlewares/sessionAuth.middleware.d.ts.map +1 -1
  360. package/dist/types/models/dictionary.model.d.ts +6 -5
  361. package/dist/types/models/dictionary.model.d.ts.map +1 -1
  362. package/dist/types/models/discussion.model.d.ts +7 -2
  363. package/dist/types/models/discussion.model.d.ts.map +1 -1
  364. package/dist/types/models/oAuth2.model.d.ts +3 -2
  365. package/dist/types/models/oAuth2.model.d.ts.map +1 -1
  366. package/dist/types/models/organization.model.d.ts +2 -12
  367. package/dist/types/models/organization.model.d.ts.map +1 -1
  368. package/dist/types/models/project.model.d.ts +2 -11
  369. package/dist/types/models/project.model.d.ts.map +1 -1
  370. package/dist/types/models/session.model.d.ts +3 -0
  371. package/dist/types/models/session.model.d.ts.map +1 -0
  372. package/dist/types/models/tag.model.d.ts.map +1 -1
  373. package/dist/types/models/user.model.d.ts.map +1 -1
  374. package/dist/types/routes/ai.routes.d.ts.map +1 -1
  375. package/dist/types/routes/organization.routes.d.ts +4 -4
  376. package/dist/types/routes/project.routes.d.ts +4 -4
  377. package/dist/types/routes/project.routes.d.ts.map +1 -1
  378. package/dist/types/routes/tags.routes.d.ts +2 -2
  379. package/dist/types/routes/user.routes.d.ts +6 -7
  380. package/dist/types/routes/user.routes.d.ts.map +1 -1
  381. package/dist/types/schemas/dictionary.schema.d.ts +6 -8
  382. package/dist/types/schemas/dictionary.schema.d.ts.map +1 -1
  383. package/dist/types/schemas/discussion.schema.d.ts +7 -5
  384. package/dist/types/schemas/discussion.schema.d.ts.map +1 -1
  385. package/dist/types/schemas/oAuth2.schema.d.ts +4 -3
  386. package/dist/types/schemas/oAuth2.schema.d.ts.map +1 -1
  387. package/dist/types/schemas/organization.schema.d.ts +6 -10
  388. package/dist/types/schemas/organization.schema.d.ts.map +1 -1
  389. package/dist/types/schemas/plans.schema.d.ts +6 -8
  390. package/dist/types/schemas/plans.schema.d.ts.map +1 -1
  391. package/dist/types/schemas/project.schema.d.ts +5 -17
  392. package/dist/types/schemas/project.schema.d.ts.map +1 -1
  393. package/dist/types/schemas/session.schema.d.ts +14 -0
  394. package/dist/types/schemas/session.schema.d.ts.map +1 -0
  395. package/dist/types/schemas/tag.schema.d.ts +6 -8
  396. package/dist/types/schemas/tag.schema.d.ts.map +1 -1
  397. package/dist/types/schemas/user.schema.d.ts +7 -5
  398. package/dist/types/schemas/user.schema.d.ts.map +1 -1
  399. package/dist/types/services/dictionary.service.d.ts +9 -9
  400. package/dist/types/services/dictionary.service.d.ts.map +1 -1
  401. package/dist/types/services/email.service.d.ts +4 -0
  402. package/dist/types/services/email.service.d.ts.map +1 -1
  403. package/dist/types/services/oAuth2.service.d.ts +23 -14
  404. package/dist/types/services/oAuth2.service.d.ts.map +1 -1
  405. package/dist/types/services/organization.service.d.ts +6 -12
  406. package/dist/types/services/organization.service.d.ts.map +1 -1
  407. package/dist/types/services/project.service.d.ts +5 -5
  408. package/dist/types/services/project.service.d.ts.map +1 -1
  409. package/dist/types/services/projectAccessKey.service.d.ts +5 -5
  410. package/dist/types/services/projectAccessKey.service.d.ts.map +1 -1
  411. package/dist/types/services/subscription.service.d.ts +1 -1
  412. package/dist/types/services/subscription.service.d.ts.map +1 -1
  413. package/dist/types/services/tag.service.d.ts +6 -6
  414. package/dist/types/services/tag.service.d.ts.map +1 -1
  415. package/dist/types/services/user.service.d.ts +7 -21
  416. package/dist/types/services/user.service.d.ts.map +1 -1
  417. package/dist/types/types/dictionary.types.d.ts +11 -9
  418. package/dist/types/types/dictionary.types.d.ts.map +1 -1
  419. package/dist/types/types/discussion.types.d.ts +5 -2
  420. package/dist/types/types/discussion.types.d.ts.map +1 -1
  421. package/dist/types/types/oAuth2.types.d.ts +5 -2
  422. package/dist/types/types/oAuth2.types.d.ts.map +1 -1
  423. package/dist/types/types/organization.types.d.ts +11 -8
  424. package/dist/types/types/organization.types.d.ts.map +1 -1
  425. package/dist/types/types/plan.types.d.ts +6 -3
  426. package/dist/types/types/plan.types.d.ts.map +1 -1
  427. package/dist/types/types/project.types.d.ts +25 -25
  428. package/dist/types/types/project.types.d.ts.map +1 -1
  429. package/dist/types/types/session.types.d.ts +31 -17
  430. package/dist/types/types/session.types.d.ts.map +1 -1
  431. package/dist/types/types/tag.types.d.ts +8 -6
  432. package/dist/types/types/tag.types.d.ts.map +1 -1
  433. package/dist/types/types/user.types.d.ts +14 -21
  434. package/dist/types/types/user.types.d.ts.map +1 -1
  435. package/dist/types/utils/AI/aiSdk.d.ts +2 -2
  436. package/dist/types/utils/AI/aiSdk.d.ts.map +1 -1
  437. package/dist/types/utils/AI/askDocQuestion/askDocQuestion.d.ts +2 -0
  438. package/dist/types/utils/AI/askDocQuestion/askDocQuestion.d.ts.map +1 -1
  439. package/dist/types/utils/AI/autocomplete/index.d.ts +4 -1
  440. package/dist/types/utils/AI/autocomplete/index.d.ts.map +1 -1
  441. package/dist/types/utils/access.d.ts +1 -0
  442. package/dist/types/utils/access.d.ts.map +1 -0
  443. package/dist/types/utils/accessControl.d.ts +9 -9
  444. package/dist/types/utils/accessControl.d.ts.map +1 -1
  445. package/dist/types/utils/auth/getAuth.d.ts +7 -0
  446. package/dist/types/utils/auth/getAuth.d.ts.map +1 -0
  447. package/dist/types/utils/cors.d.ts +3 -0
  448. package/dist/types/utils/cors.d.ts.map +1 -0
  449. package/dist/types/utils/ensureMongoDocumentToObject.d.ts +2 -2
  450. package/dist/types/utils/ensureMongoDocumentToObject.d.ts.map +1 -1
  451. package/dist/types/utils/errors/ErrorHandler.d.ts +1 -1
  452. package/dist/types/utils/errors/ErrorHandler.d.ts.map +1 -1
  453. package/dist/types/utils/errors/errorCodes.d.ts +57 -96
  454. package/dist/types/utils/errors/errorCodes.d.ts.map +1 -1
  455. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts +1 -1
  456. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts.map +1 -1
  457. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts +1 -1
  458. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts.map +1 -1
  459. package/dist/types/utils/filtersAndPagination/getTagFiltersAndPagination.d.ts +1 -1
  460. package/dist/types/utils/filtersAndPagination/getTagFiltersAndPagination.d.ts.map +1 -1
  461. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts +1 -1
  462. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts.map +1 -1
  463. package/dist/types/utils/mapper/dictionary.d.ts +1 -1
  464. package/dist/types/utils/mapper/dictionary.d.ts.map +1 -1
  465. package/dist/types/utils/mapper/organization.d.ts +3 -2
  466. package/dist/types/utils/mapper/organization.d.ts.map +1 -1
  467. package/dist/types/utils/mapper/project.d.ts +4 -5
  468. package/dist/types/utils/mapper/project.d.ts.map +1 -1
  469. package/dist/types/utils/mapper/tag.d.ts +1 -1
  470. package/dist/types/utils/mapper/tag.d.ts.map +1 -1
  471. package/dist/types/utils/mapper/user.d.ts +2 -2
  472. package/dist/types/utils/mapper/user.d.ts.map +1 -1
  473. package/dist/types/utils/mergeFunctionTypes.d.ts +18 -0
  474. package/dist/types/utils/mergeFunctionTypes.d.ts.map +1 -0
  475. package/dist/types/utils/mongoDB/connectDB.d.ts +1 -1
  476. package/dist/types/utils/mongoDB/connectDB.d.ts.map +1 -1
  477. package/dist/types/utils/mongoDB/types.d.ts +11 -0
  478. package/dist/types/utils/mongoDB/types.d.ts.map +1 -0
  479. package/dist/types/utils/permissions.d.ts +115 -0
  480. package/dist/types/utils/permissions.d.ts.map +1 -0
  481. package/dist/types/utils/rateLimiter.d.ts +4 -0
  482. package/dist/types/utils/rateLimiter.d.ts.map +1 -0
  483. package/package.json +16 -14
  484. package/dist/cjs/controllers/sessionAuth.controller.cjs +0 -839
  485. package/dist/cjs/controllers/sessionAuth.controller.cjs.map +0 -1
  486. package/dist/cjs/routes/sessionAuth.routes.cjs +0 -154
  487. package/dist/cjs/routes/sessionAuth.routes.cjs.map +0 -1
  488. package/dist/cjs/services/sessionAuth.service.cjs +0 -385
  489. package/dist/cjs/services/sessionAuth.service.cjs.map +0 -1
  490. package/dist/cjs/utils/CSRF.cjs +0 -50
  491. package/dist/cjs/utils/CSRF.cjs.map +0 -1
  492. package/dist/cjs/utils/cookies.cjs +0 -59
  493. package/dist/cjs/utils/cookies.cjs.map +0 -1
  494. package/dist/esm/controllers/sessionAuth.controller.mjs +0 -790
  495. package/dist/esm/controllers/sessionAuth.controller.mjs.map +0 -1
  496. package/dist/esm/routes/sessionAuth.routes.mjs +0 -142
  497. package/dist/esm/routes/sessionAuth.routes.mjs.map +0 -1
  498. package/dist/esm/services/sessionAuth.service.mjs +0 -337
  499. package/dist/esm/services/sessionAuth.service.mjs.map +0 -1
  500. package/dist/esm/utils/CSRF.mjs +0 -24
  501. package/dist/esm/utils/CSRF.mjs.map +0 -1
  502. package/dist/esm/utils/cookies.mjs +0 -32
  503. package/dist/esm/utils/cookies.mjs.map +0 -1
  504. package/dist/types/controllers/sessionAuth.controller.d.ts +0 -140
  505. package/dist/types/controllers/sessionAuth.controller.d.ts.map +0 -1
  506. package/dist/types/routes/sessionAuth.routes.d.ts +0 -77
  507. package/dist/types/routes/sessionAuth.routes.d.ts.map +0 -1
  508. package/dist/types/services/sessionAuth.service.d.ts +0 -141
  509. package/dist/types/services/sessionAuth.service.d.ts.map +0 -1
  510. package/dist/types/utils/CSRF.d.ts +0 -3
  511. package/dist/types/utils/CSRF.d.ts.map +0 -1
  512. package/dist/types/utils/cookies.d.ts +0 -12
  513. package/dist/types/utils/cookies.d.ts.map +0 -1
@@ -1,790 +0,0 @@
1
- import crypto from "crypto";
2
- import { logger } from "./../logger/index.mjs";
3
- import { getSessionAuthRoutes } from "./../routes/sessionAuth.routes.mjs";
4
- import { sendEmail } from "./../services/email.service.mjs";
5
- import * as sessionAuthService from "./../services/sessionAuth.service.mjs";
6
- import * as userService from "./../services/user.service.mjs";
7
- import { generateToken } from "./../utils/CSRF.mjs";
8
- import { ErrorHandler, GenericError } from "./../utils/errors/index.mjs";
9
- import { HttpStatusCodes } from "./../utils/httpStatusCodes.mjs";
10
- import { mapOrganizationToAPI } from "./../utils/mapper/organization.mjs";
11
- import { mapProjectToAPI } from "./../utils/mapper/project.mjs";
12
- import { mapUserToAPI } from "./../utils/mapper/user.mjs";
13
- import { formatResponse } from "./../utils/responseData.mjs";
14
- import { t } from "express-intlayer";
15
- import { Types } from "mongoose";
16
- import { v4 as uuidv4 } from "uuid";
17
- const setCSRFToken = (req, res, _next) => {
18
- const csrf_token = generateToken(req, res);
19
- const responseData = formatResponse({
20
- data: { csrf_token }
21
- });
22
- res.locals.csrf_token = csrf_token;
23
- res.json(responseData);
24
- };
25
- const registerEmailPassword = async (req, res, _next) => {
26
- const { user } = res.locals;
27
- const { callBack_url } = req.query;
28
- if (user) {
29
- ErrorHandler.handleGenericErrorResponse(res, "USER_ALREADY_LOGGED_IN");
30
- return;
31
- }
32
- if (callBack_url && !callBack_url.startsWith(process.env.CLIENT_URL ?? "")) {
33
- ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
34
- return;
35
- }
36
- const userData = req.body;
37
- try {
38
- let user2 = await userService.getUserByEmail(userData.email);
39
- if (user2) {
40
- const emailProvider = user2.provider?.find(
41
- (provider) => provider.provider === "email"
42
- );
43
- if (emailProvider?.emailValidated) {
44
- ErrorHandler.handleGenericErrorResponse(
45
- res,
46
- "EMAIL_ALREADY_REGISTERED"
47
- );
48
- return;
49
- } else if (emailProvider) {
50
- user2 = await sessionAuthService.updateUserProvider(user2._id, "email", {
51
- provider: "email",
52
- emailValidated: void 0,
53
- secret: uuidv4()
54
- });
55
- } else {
56
- user2 = await sessionAuthService.addUserProvider(user2._id, {
57
- provider: "email",
58
- emailValidated: void 0,
59
- secret: uuidv4()
60
- });
61
- }
62
- } else {
63
- user2 = await userService.createUser({
64
- ...userData,
65
- provider: [
66
- {
67
- provider: "email",
68
- emailValidated: void 0,
69
- secret: uuidv4()
70
- }
71
- ]
72
- });
73
- logger.info(`New registration: ${user2.name} - ${user2.email}`);
74
- }
75
- if (!user2) {
76
- ErrorHandler.handleGenericErrorResponse(res, "USER_CREATION_FAILED", {
77
- email: userData.email
78
- });
79
- return;
80
- }
81
- await sendEmail({
82
- type: "validate",
83
- to: user2.email,
84
- username: user2.name ?? user2.email.split("@")[0],
85
- validationLink: getSessionAuthRoutes().validEmail.url({
86
- userId: String(user2._id),
87
- secret: user2.provider?.find((provider) => provider.provider === "email")?.secret ?? "",
88
- callBack_url
89
- })
90
- });
91
- const formattedUser = mapUserToAPI(user2);
92
- const responseData = formatResponse({
93
- message: t({
94
- en: "User registered successfully",
95
- fr: "Utilisateur enregistr\xE9 avec succ\xE8s",
96
- es: "Usuario registrado con \xE9xito"
97
- }),
98
- description: t({
99
- en: "Your user has been registered successfully. Please check your email to validate your account.",
100
- fr: "Votre utilisateur a \xE9t\xE9 enregistr\xE9 avec succ\xE8s. Veuillez v\xE9rifier votre e-mail pour valider votre compte.",
101
- es: "Su usuario ha sido registrado con \xE9xito. Por favor, revise su correo electr\xF3nico para validar su cuenta."
102
- }),
103
- data: formattedUser
104
- });
105
- res.json(responseData);
106
- return;
107
- } catch (error) {
108
- ErrorHandler.handleAppErrorResponse(res, error);
109
- return;
110
- }
111
- };
112
- const loginEmailPassword = async (req, res, _next) => {
113
- const { user } = res.locals;
114
- if (user) {
115
- ErrorHandler.handleGenericErrorResponse(res, "USER_ALREADY_LOGGED_IN");
116
- return;
117
- }
118
- const { email, password } = req.body;
119
- try {
120
- const { user: loggedInUser, error } = await sessionAuthService.testUserPassword(email, password);
121
- if (error) {
122
- if (!user) {
123
- ErrorHandler.handleGenericErrorResponse(res, "LOGIN_FAILED");
124
- return;
125
- }
126
- }
127
- if (!loggedInUser) {
128
- ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
129
- return;
130
- }
131
- await sessionAuthService.setUserAuth(res, loggedInUser);
132
- const formattedUser = mapUserToAPI(loggedInUser);
133
- const responseData = formatResponse({
134
- message: t({
135
- en: "User logged in successfully",
136
- fr: "Utilisateur connect\xE9 avec succ\xE8s",
137
- es: "Usuario conectado con \xE9xito"
138
- }),
139
- description: t({
140
- en: "Your user has been logged in successfully",
141
- fr: "Votre utilisateur a \xE9t\xE9 connect\xE9 avec succ\xE8s",
142
- es: "Su usuario ha sido conectado con \xE9xito"
143
- }),
144
- data: formattedUser
145
- });
146
- logger.info(`Login: ${loggedInUser.email}`);
147
- res.json(responseData);
148
- return;
149
- } catch (error) {
150
- ErrorHandler.handleAppErrorResponse(res, error);
151
- return;
152
- }
153
- };
154
- const logOut = async (_req, res, _next) => {
155
- const { user } = res.locals;
156
- if (!user) {
157
- ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_DEFINED");
158
- return;
159
- }
160
- await sessionAuthService.clearUserAuth(res);
161
- sessionAuthService.clearOrganizationAuth(res);
162
- sessionAuthService.clearProjectAuth(res);
163
- logger.info(`Logout: ${user.name} - ${user.email}`);
164
- const responseData = formatResponse({
165
- message: t({
166
- en: "User logged out successfully",
167
- fr: "Utilisateur d\xE9connect\xE9 avec succ\xE8s",
168
- es: "Usuario desconectado con \xE9xito"
169
- }),
170
- description: t({
171
- en: "Your user has been logged out successfully",
172
- fr: "Votre utilisateur a \xE9t\xE9 d\xE9connect\xE9 avec succ\xE8s",
173
- es: "Su usuario ha sido desconectado con \xE9xito"
174
- }),
175
- data: void 0
176
- });
177
- res.json(responseData);
178
- };
179
- const updatePassword = async (req, res, _next) => {
180
- const { oldPassword, newPassword } = req.body;
181
- let { user } = res.locals;
182
- if (!user) {
183
- ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_DEFINED");
184
- return;
185
- }
186
- const userEmailProvider = user.provider?.find(
187
- (provider) => provider.provider === "email"
188
- );
189
- if (!userEmailProvider) {
190
- ErrorHandler.handleGenericErrorResponse(res, "USER_PROVIDER_NOT_FOUND", {
191
- provider: "email"
192
- });
193
- return;
194
- }
195
- if (userEmailProvider.passwordHash && !oldPassword) {
196
- ErrorHandler.handleGenericErrorResponse(
197
- res,
198
- "USER_PREVIOUS_PASSWORD_NOT_PROVIDED"
199
- );
200
- return;
201
- }
202
- try {
203
- if (oldPassword) {
204
- const { error } = await sessionAuthService.testUserPassword(
205
- user.email,
206
- oldPassword
207
- );
208
- if (error) {
209
- ErrorHandler.handleGenericErrorResponse(res, "LOGIN_FAILED");
210
- return;
211
- }
212
- }
213
- user = await sessionAuthService.changeUserPassword(user._id, newPassword);
214
- if (!user || typeof user !== "object") {
215
- ErrorHandler.handleGenericErrorResponse(res, "USER_DATA_NOT_FOUND");
216
- return;
217
- }
218
- logger.info(
219
- `Password changed - User : Name : ${user.name}, id : ${String(user._id)}`
220
- );
221
- const formattedUser = mapUserToAPI(user);
222
- const responseData = formatResponse({
223
- message: t({
224
- en: "Password changed successfully",
225
- fr: "Mot de passe modifi\xE9 avec succ\xE8s",
226
- es: "Contrase\xF1a cambiada con \xE9xito"
227
- }),
228
- description: t({
229
- en: "Your password has been changed successfully",
230
- fr: "Votre mot de passe a \xE9t\xE9 modifi\xE9 avec succ\xE8s",
231
- es: "Su contrase\xF1a ha sido cambiada con \xE9xito"
232
- }),
233
- data: formattedUser
234
- });
235
- res.json(responseData);
236
- return;
237
- } catch (error) {
238
- ErrorHandler.handleAppErrorResponse(res, error);
239
- return;
240
- }
241
- };
242
- let clients = [];
243
- const sendVerificationUpdate = (user) => {
244
- const filteredClients = clients.filter(
245
- (client) => String(client.userId) === String(user._id)
246
- );
247
- for (const client of filteredClients) {
248
- const provider = user.provider?.find(
249
- (provider2) => provider2.provider === "email"
250
- );
251
- if (provider?.emailValidated) {
252
- client.res.write(
253
- `data: ${JSON.stringify({ userId: user._id, status: "verified" })}
254
-
255
- `
256
- );
257
- continue;
258
- }
259
- client.res.write(
260
- `data: ${JSON.stringify({ userId: user._id, status: "waiting" })}
261
-
262
- `
263
- );
264
- }
265
- };
266
- const checkIfUserHasPassword = async (_req, res, _next) => {
267
- const { user } = res.locals;
268
- if (!user) {
269
- ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_DEFINED");
270
- return;
271
- }
272
- try {
273
- const userProvider = user.provider?.find(
274
- (provider) => provider.provider === "email"
275
- );
276
- const responseData = formatResponse({
277
- data: {
278
- hasPassword: Boolean(userProvider?.passwordHash)
279
- }
280
- });
281
- res.json(responseData);
282
- return;
283
- } catch (error) {
284
- ErrorHandler.handleAppErrorResponse(res, error);
285
- return;
286
- }
287
- };
288
- const validEmail = async (req, res, _next) => {
289
- const { userId, secret } = req.params;
290
- const callBack_url = `${req.query.callBack_url ?? `${process.env.CLIENT_URL}/auth/login`}?userId=${userId}`;
291
- if (!Types.ObjectId.isValid(userId.toString())) {
292
- ErrorHandler.handleGenericErrorResponse(res, "INVALID_USER_ID");
293
- return;
294
- }
295
- const user = await userService.getUserById(userId);
296
- if (!user) {
297
- ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_DEFINED", {
298
- userId
299
- });
300
- return;
301
- }
302
- if (callBack_url && !callBack_url.startsWith(process.env.CLIENT_URL ?? "")) {
303
- ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
304
- return;
305
- }
306
- const provider = user.provider?.find(
307
- (provider2) => provider2.provider === "email"
308
- );
309
- if (provider?.emailValidated) {
310
- res.redirect(callBack_url);
311
- }
312
- if (!provider?.secret) {
313
- throw new GenericError("USER_PROVIDER_SECRET_NOT_DEFINED", { userId });
314
- }
315
- if (!crypto.timingSafeEqual(Buffer.from(provider.secret), Buffer.from(secret))) {
316
- throw new GenericError("USER_PROVIDER_SECRET_NOT_VALID", { userId });
317
- }
318
- await sessionAuthService.updateUserProvider(userId, "email", {
319
- secret: void 0,
320
- emailValidated: /* @__PURE__ */ new Date()
321
- });
322
- logger.info(
323
- `User activated - User: Name: ${user.name}, id: ${String(user._id)}`
324
- );
325
- sendVerificationUpdate(user);
326
- await sessionAuthService.setUserAuth(res, user);
327
- await sendEmail({
328
- type: "welcome",
329
- to: user.email,
330
- username: user.name,
331
- loginLink: callBack_url
332
- });
333
- res.redirect(callBack_url);
334
- };
335
- const verifyEmailStatusSSE = async (req, res) => {
336
- res.setHeader("Content-Type", "text/event-stream;charset=utf-8");
337
- res.setHeader("Cache-Control", "no-cache, no-transform");
338
- res.setHeader("Connection", "keep-alive");
339
- res.setHeader("X-Accel-Buffering", "no");
340
- res.write(":\n\n");
341
- res.flushHeaders();
342
- const { userId } = req.params;
343
- const clientId = Date.now();
344
- const user = await userService.getUserById(userId);
345
- if (!user) {
346
- logger.error(`User not found - User ID: ${userId}`);
347
- res.write(`data: ${JSON.stringify({ userId, status: "error" })}
348
-
349
- `);
350
- res.end();
351
- return;
352
- }
353
- const newClient = { id: clientId, userId, res };
354
- clients.push(newClient);
355
- sendVerificationUpdate(user);
356
- req.on("close", () => {
357
- clients = clients.filter((client) => client.id !== clientId);
358
- });
359
- };
360
- const askResetPassword = async (req, res, _next) => {
361
- const { email } = req.body;
362
- if (!email) {
363
- ErrorHandler.handleGenericErrorResponse(res, "EMAIL_NOT_PROVIDED");
364
- return;
365
- }
366
- try {
367
- const updatedUser = await sessionAuthService.requestPasswordReset(email);
368
- if (!updatedUser) {
369
- ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND", { email });
370
- return;
371
- }
372
- logger.info(
373
- `Ask changing password - User: Name: ${updatedUser.name}, id: ${String(updatedUser._id)}`
374
- );
375
- await sendEmail({
376
- type: "resetPassword",
377
- to: updatedUser.email,
378
- username: updatedUser.name,
379
- resetLink: `${process.env.CLIENT_URL}/auth/password/reset/${String(updatedUser._id)}/${updatedUser.provider?.find((provider) => provider.provider === "email")?.secret ?? ""}`
380
- });
381
- const responseData = formatResponse({
382
- message: t({
383
- en: "Password reset request sent successfully",
384
- fr: "Demande de r\xE9initialisation de mot de passe envoy\xE9e avec succ\xE8s",
385
- es: "Solicitud de restablecimiento de contrase\xF1a enviada con \xE9xito"
386
- }),
387
- description: t({
388
- en: "Your password reset request has been sent successfully. Please check your email to reset your password.",
389
- fr: "Votre demande de r\xE9initialisation de mot de passe a \xE9t\xE9 envoy\xE9e avec succ\xE8s. Veuillez v\xE9rifier votre e-mail pour r\xE9initialiser votre mot de passe.",
390
- es: "Su solicitud de restablecimiento de contrase\xF1a ha sido enviada con \xE9xito. Por favor, revise su correo electr\xF3nico para restablecer su contrase\xF1a."
391
- }),
392
- data: void 0
393
- });
394
- res.json(responseData);
395
- return;
396
- } catch (error) {
397
- ErrorHandler.handleAppErrorResponse(res, error);
398
- return;
399
- }
400
- };
401
- const definePassword = async (req, res, _next) => {
402
- const { secret, userId, password } = req.body;
403
- const userIdString = String(userId);
404
- if (!userId || !userIdString || !Types.ObjectId.isValid(userIdString)) {
405
- ErrorHandler.handleGenericErrorResponse(res, "INVALID_USER_ID", { userId });
406
- return;
407
- }
408
- if (!secret) {
409
- ErrorHandler.handleGenericErrorResponse(res, "SECRET_NOT_PROVIDED");
410
- return;
411
- }
412
- try {
413
- const updatedUser = await sessionAuthService.resetUserPassword(
414
- userId,
415
- secret,
416
- password
417
- );
418
- logger.info(
419
- `Password changed - User: Name: ${updatedUser.name}, id: ${String(updatedUser._id)}`
420
- );
421
- await sendEmail({
422
- type: "passwordChangeConfirmation",
423
- to: updatedUser.email,
424
- username: updatedUser.name
425
- });
426
- const formattedUser = mapUserToAPI(updatedUser);
427
- const responseData = formatResponse({
428
- message: t({
429
- en: "Password reset successfully",
430
- fr: "R\xE9initialisation du mot de passe r\xE9ussie",
431
- es: "Restablecimiento de contrase\xF1a exitoso"
432
- }),
433
- description: t({
434
- en: "Your password has been reset successfully. You can now log in with your new password",
435
- fr: "Votre mot de passe a \xE9t\xE9 r\xE9initialis\xE9 avec succ\xE8s. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe",
436
- es: "Su contrase\xF1a ha sido restablecida con \xE9xito. Ahora puede iniciar sesi\xF3n con su nueva contrase\xF1a"
437
- }),
438
- data: formattedUser
439
- });
440
- res.json(responseData);
441
- return;
442
- } catch (error) {
443
- ErrorHandler.handleAppErrorResponse(res, error);
444
- return;
445
- }
446
- };
447
- const getSessionInformation = async (req, res, _next) => {
448
- const { session_token: sessionToken } = req.query;
449
- let { user } = res.locals;
450
- const { organization, project, isOrganizationAdmin, isProjectAdmin } = res.locals;
451
- try {
452
- if (sessionToken) {
453
- user = await userService.getUserBySession(sessionToken);
454
- }
455
- if (!user || !user?.session) {
456
- const responseData2 = formatResponse({
457
- data: {
458
- session: null,
459
- user: null,
460
- organization: organization?._id ? mapOrganizationToAPI(organization, isOrganizationAdmin) : null,
461
- project: project?._id ? mapProjectToAPI(project, user, isProjectAdmin) : null
462
- }
463
- });
464
- res.json(responseData2);
465
- return;
466
- }
467
- const session = user.session;
468
- const formattedUser = {
469
- ...mapUserToAPI(user),
470
- role: "user"
471
- };
472
- const responseData = formatResponse({
473
- data: {
474
- session,
475
- user: formattedUser,
476
- organization: organization?._id ? mapOrganizationToAPI(organization, isOrganizationAdmin) : null,
477
- project: project?._id ? mapProjectToAPI(project, user, isProjectAdmin) : null
478
- }
479
- });
480
- res.json(responseData);
481
- return;
482
- } catch (error) {
483
- ErrorHandler.handleAppErrorResponse(res, error);
484
- return;
485
- }
486
- };
487
- const githubLoginQuery = (req, res, _next) => {
488
- const { origin } = req.query;
489
- const { user } = res.locals;
490
- if (user) {
491
- ErrorHandler.handleGenericErrorResponse(res, "USER_ALREADY_LOGGED_IN");
492
- return;
493
- }
494
- if (origin && !origin.startsWith(process.env.CLIENT_URL ?? "")) {
495
- ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
496
- return;
497
- }
498
- const encodedOrigin = encodeURIComponent(origin);
499
- const redirectURI = `${process.env.BACKEND_URL}/api/auth/callback/github?redirect_uri=${encodedOrigin}`;
500
- const encodedRedirectURI = encodeURIComponent(redirectURI);
501
- res.redirect(
502
- `https://github.com/login/oauth/authorize?client_id=${process.env.GITHUB_CLIENT_ID}&redirect_uri=${encodedRedirectURI}&scope=user:email`
503
- );
504
- };
505
- const githubCallback = async (req, res, _next) => {
506
- const { code, redirect_uri } = req.query;
507
- if (!code) {
508
- const errorMessage = "Code not provided";
509
- logger.error(errorMessage);
510
- res.redirect(redirect_uri);
511
- return;
512
- }
513
- if (!redirect_uri) {
514
- const errorMessage = "Redirect URI not provided";
515
- logger.error(errorMessage);
516
- res.redirect(redirect_uri);
517
- return;
518
- }
519
- if (redirect_uri && !redirect_uri.startsWith(process.env.CLIENT_URL ?? "")) {
520
- ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
521
- return;
522
- }
523
- try {
524
- const tokenResponse = await fetch(
525
- "https://github.com/login/oauth/access_token",
526
- {
527
- method: "POST",
528
- headers: {
529
- "Content-Type": "application/json",
530
- Accept: "application/json"
531
- },
532
- body: JSON.stringify({
533
- client_id: process.env.GITHUB_CLIENT_ID,
534
- client_secret: process.env.GITHUB_CLIENT_SECRET,
535
- code
536
- })
537
- }
538
- );
539
- const tokenData = await tokenResponse.json();
540
- const userResponse = await fetch("https://api.github.com/user", {
541
- method: "GET",
542
- headers: {
543
- Authorization: `Bearer ${tokenData.access_token}`,
544
- Accept: "application/vnd.github.v3+json"
545
- }
546
- });
547
- if (!userResponse.ok) {
548
- throw new GenericError("GITHUB_FETCH_USER_DATA_FAILED", { userResponse });
549
- }
550
- const userData = await userResponse.json();
551
- const emailResponse = await fetch("https://api.github.com/user/emails", {
552
- method: "GET",
553
- headers: {
554
- Authorization: `Bearer ${tokenData.access_token}`,
555
- Accept: "application/vnd.github.v3+json"
556
- }
557
- });
558
- if (!emailResponse.ok) {
559
- throw new GenericError("GIT_HUB_FETCH_USER_EMAIL_FAILED", {
560
- emailResponse
561
- });
562
- }
563
- const emails = await emailResponse.json();
564
- const primaryEmail = emails.find((email) => email.primary)?.email;
565
- if (!primaryEmail) {
566
- const errorMessage = "Primary email not found";
567
- logger.error(errorMessage);
568
- const responseCode = HttpStatusCodes.NOT_FOUND_404;
569
- res.redirect(responseCode, redirect_uri);
570
- return;
571
- }
572
- let existingUser = await userService.getUserByEmail(primaryEmail);
573
- if (existingUser) {
574
- const existingProvider = await sessionAuthService.getUserProvider(
575
- existingUser._id,
576
- "github"
577
- );
578
- if (existingProvider?.providerAccountId !== userData.id) {
579
- const updatedUser2 = await sessionAuthService.updateUserProvider(
580
- existingUser._id,
581
- "github",
582
- {
583
- providerAccountId: userData.id
584
- }
585
- );
586
- logger.info(
587
- `GitHub login provider updated - User: Name: ${updatedUser2.name}, id: ${String(updatedUser2._id)}`
588
- );
589
- if (updatedUser2) {
590
- existingUser = updatedUser2;
591
- }
592
- }
593
- const updatedUser = await userService.updateUserById(existingUser._id, {
594
- name: existingUser.name ?? userData.name
595
- });
596
- await sessionAuthService.setUserAuth(res, updatedUser);
597
- res.redirect(redirect_uri);
598
- return;
599
- }
600
- const userInformation = {
601
- name: userData.name,
602
- email: primaryEmail
603
- };
604
- const userProvider = {
605
- provider: "github",
606
- providerAccountId: userData.id
607
- };
608
- const user = await userService.createUser({
609
- ...userInformation,
610
- provider: [userProvider]
611
- });
612
- await sessionAuthService.setUserAuth(res, user);
613
- logger.info(
614
- `GitHub login - User: Name: ${user.name}, id: ${String(user._id)}`
615
- );
616
- await sendEmail({
617
- type: "welcome",
618
- to: user.email,
619
- username: user.name,
620
- loginLink: `${process.env.CLIENT_URL}/auth/login`
621
- });
622
- res.redirect(redirect_uri);
623
- } catch (error) {
624
- ErrorHandler.handleAppErrorResponse(res, error);
625
- return;
626
- }
627
- };
628
- const googleLoginQuery = (req, res, _next) => {
629
- const { origin } = req.query;
630
- const { user } = res.locals;
631
- if (user) {
632
- const errorMessage = `User already logged in - ${user?.email}`;
633
- logger.error(errorMessage);
634
- res.redirect(origin);
635
- return;
636
- }
637
- if (origin && !origin.startsWith(process.env.CLIENT_URL ?? "")) {
638
- ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
639
- return;
640
- }
641
- const responseType = "code";
642
- const scope = [
643
- "https%3A//www.googleapis.com/auth/userinfo.email",
644
- "https%3A//www.googleapis.com/auth/userinfo.profile"
645
- ].join(" ");
646
- const includeGrantedScopes = "false";
647
- const encodedOrigin = encodeURIComponent(origin);
648
- const state = JSON.stringify({ redirect_uri: encodedOrigin });
649
- const redirectURI = `${process.env.BACKEND_URL}/api/auth/callback/google`;
650
- res.redirect(
651
- `https://accounts.google.com/o/oauth2/v2/auth?client_id=${process.env.GOOGLE_CLIENT_ID}&redirect_uri=${redirectURI}&response_type=${responseType}&scope=${scope}&include_granted_scopes=${includeGrantedScopes}&state=${state}`
652
- );
653
- };
654
- const googleCallback = async (req, res, _next) => {
655
- const { code, state } = req.query;
656
- const decodedState = decodeURIComponent(state);
657
- const { redirect_uri } = JSON.parse(decodedState);
658
- if (!code) {
659
- const errorMessage = "code not provided";
660
- logger.error(errorMessage);
661
- const responseCode = HttpStatusCodes.BAD_REQUEST_400;
662
- res.redirect(responseCode, redirect_uri);
663
- return;
664
- }
665
- if (!redirect_uri) {
666
- const errorMessage = "Redirect URI not provided";
667
- logger.error(errorMessage);
668
- const responseCode = HttpStatusCodes.BAD_REQUEST_400;
669
- res.redirect(responseCode, redirect_uri);
670
- return;
671
- }
672
- if (redirect_uri && !redirect_uri.startsWith(process.env.CLIENT_URL ?? "")) {
673
- ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
674
- return;
675
- }
676
- try {
677
- const tokenResponse = await fetch("https://oauth2.googleapis.com/token", {
678
- method: "POST",
679
- headers: {
680
- "Content-Type": "application/x-www-form-urlencoded"
681
- },
682
- body: new URLSearchParams({
683
- code,
684
- redirect_uri: `${process.env.BACKEND_URL}/api/auth/callback/google`,
685
- client_id: process.env.GOOGLE_CLIENT_ID,
686
- client_secret: process.env.GOOGLE_CLIENT_SECRET,
687
- grant_type: "authorization_code"
688
- })
689
- });
690
- const responseData = await tokenResponse.json();
691
- const { access_token: accessToken } = responseData;
692
- if (!accessToken) {
693
- const errorMessage = "Failed to fetch access_token";
694
- logger.error(errorMessage);
695
- const responseCode = HttpStatusCodes.INTERNAL_SERVER_ERROR_500;
696
- res.redirect(responseCode, redirect_uri);
697
- return;
698
- }
699
- const userResponse = await fetch(
700
- "https://www.googleapis.com/oauth2/v3/userinfo",
701
- {
702
- method: "GET",
703
- headers: {
704
- Authorization: `Bearer ${accessToken}`
705
- }
706
- }
707
- );
708
- const userData = await userResponse.json();
709
- if (!userData.email) {
710
- const errorMessage = "Failed to fetch user data from Google";
711
- logger.error(errorMessage);
712
- const responseCode = HttpStatusCodes.INTERNAL_SERVER_ERROR_500;
713
- res.redirect(responseCode, redirect_uri);
714
- return;
715
- }
716
- let existingUser = await userService.getUserByEmail(userData.email);
717
- if (existingUser) {
718
- const existingProvider = await sessionAuthService.getUserProvider(
719
- existingUser._id,
720
- "google"
721
- );
722
- if (existingProvider?.providerAccountId !== userData.sub) {
723
- const updatedUser2 = await sessionAuthService.updateUserProvider(
724
- existingUser._id,
725
- "google",
726
- {
727
- providerAccountId: userData.id
728
- }
729
- );
730
- logger.info(
731
- `Google login provider updated - User: Name: ${updatedUser2.name}, id: ${String(updatedUser2._id)}`
732
- );
733
- if (updatedUser2) {
734
- existingUser = updatedUser2;
735
- }
736
- }
737
- const updatedUser = await userService.updateUserById(existingUser._id, {
738
- name: existingUser.name ?? userData.name
739
- });
740
- await sessionAuthService.setUserAuth(res, updatedUser);
741
- res.redirect(redirect_uri);
742
- return;
743
- }
744
- const userInformation = {
745
- name: userData.name,
746
- email: userData.email
747
- };
748
- const userProvider = {
749
- provider: "google",
750
- providerAccountId: userData.id
751
- };
752
- const user = await userService.createUser({
753
- ...userInformation,
754
- provider: [userProvider]
755
- });
756
- await sessionAuthService.setUserAuth(res, user);
757
- logger.info(
758
- `Google login - User: Name: ${user.name}, id: ${String(user._id)}`
759
- );
760
- await sendEmail({
761
- type: "welcome",
762
- to: user.email,
763
- username: user.name,
764
- loginLink: `${process.env.CLIENT_URL}/auth/login`
765
- });
766
- res.redirect(redirect_uri);
767
- } catch (error) {
768
- ErrorHandler.handleAppErrorResponse(res, error);
769
- return;
770
- }
771
- };
772
- export {
773
- askResetPassword,
774
- checkIfUserHasPassword,
775
- definePassword,
776
- getSessionInformation,
777
- githubCallback,
778
- githubLoginQuery,
779
- googleCallback,
780
- googleLoginQuery,
781
- logOut,
782
- loginEmailPassword,
783
- registerEmailPassword,
784
- sendVerificationUpdate,
785
- setCSRFToken,
786
- updatePassword,
787
- validEmail,
788
- verifyEmailStatusSSE
789
- };
790
- //# sourceMappingURL=sessionAuth.controller.mjs.map