@intlayer/backend 3.0.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 (464) hide show
  1. package/LICENSE +202 -0
  2. package/dist/cjs/controllers/dictionary.controller.cjs +356 -0
  3. package/dist/cjs/controllers/dictionary.controller.cjs.map +1 -0
  4. package/dist/cjs/controllers/oAuth2.controller.cjs +46 -0
  5. package/dist/cjs/controllers/oAuth2.controller.cjs.map +1 -0
  6. package/dist/cjs/controllers/organization.controller.cjs +354 -0
  7. package/dist/cjs/controllers/organization.controller.cjs.map +1 -0
  8. package/dist/cjs/controllers/project.controller.cjs +298 -0
  9. package/dist/cjs/controllers/project.controller.cjs.map +1 -0
  10. package/dist/cjs/controllers/projectAccessKey.controller.cjs +134 -0
  11. package/dist/cjs/controllers/projectAccessKey.controller.cjs.map +1 -0
  12. package/dist/cjs/controllers/sessionAuth.controller.cjs +616 -0
  13. package/dist/cjs/controllers/sessionAuth.controller.cjs.map +1 -0
  14. package/dist/cjs/controllers/user.controller.cjs +197 -0
  15. package/dist/cjs/controllers/user.controller.cjs.map +1 -0
  16. package/dist/cjs/emails/InviteUserEmail.cjs +297 -0
  17. package/dist/cjs/emails/InviteUserEmail.cjs.map +1 -0
  18. package/dist/cjs/emails/PasswordChangeConfirmation.cjs +148 -0
  19. package/dist/cjs/emails/PasswordChangeConfirmation.cjs.map +1 -0
  20. package/dist/cjs/emails/ResetUserPassword.cjs +209 -0
  21. package/dist/cjs/emails/ResetUserPassword.cjs.map +1 -0
  22. package/dist/cjs/emails/ValidateUserEmail.cjs +230 -0
  23. package/dist/cjs/emails/ValidateUserEmail.cjs.map +1 -0
  24. package/dist/cjs/emails/Welcome.cjs +185 -0
  25. package/dist/cjs/emails/Welcome.cjs.map +1 -0
  26. package/dist/cjs/emails/index.cjs +31 -0
  27. package/dist/cjs/emails/index.cjs.map +1 -0
  28. package/dist/cjs/export.cjs +46 -0
  29. package/dist/cjs/export.cjs.map +1 -0
  30. package/dist/cjs/index.cjs +122 -0
  31. package/dist/cjs/index.cjs.map +1 -0
  32. package/dist/cjs/logger/index.cjs +53 -0
  33. package/dist/cjs/logger/index.cjs.map +1 -0
  34. package/dist/cjs/middlewares/admin.middleware.cjs +44 -0
  35. package/dist/cjs/middlewares/admin.middleware.cjs.map +1 -0
  36. package/dist/cjs/middlewares/oAuth2.middleware.cjs +89 -0
  37. package/dist/cjs/middlewares/oAuth2.middleware.cjs.map +1 -0
  38. package/dist/cjs/middlewares/request.middleware.cjs +41 -0
  39. package/dist/cjs/middlewares/request.middleware.cjs.map +1 -0
  40. package/dist/cjs/middlewares/sessionAuth.middleware.cjs +130 -0
  41. package/dist/cjs/middlewares/sessionAuth.middleware.cjs.map +1 -0
  42. package/dist/cjs/models/dictionary.model.cjs +34 -0
  43. package/dist/cjs/models/dictionary.model.cjs.map +1 -0
  44. package/dist/cjs/models/oAuth2.model.cjs +31 -0
  45. package/dist/cjs/models/oAuth2.model.cjs.map +1 -0
  46. package/dist/cjs/models/organization.model.cjs +34 -0
  47. package/dist/cjs/models/organization.model.cjs.map +1 -0
  48. package/dist/cjs/models/project.model.cjs +31 -0
  49. package/dist/cjs/models/project.model.cjs.map +1 -0
  50. package/dist/cjs/models/user.model.cjs +31 -0
  51. package/dist/cjs/models/user.model.cjs.map +1 -0
  52. package/dist/cjs/routes/dictionary.routes.cjs +156 -0
  53. package/dist/cjs/routes/dictionary.routes.cjs.map +1 -0
  54. package/dist/cjs/routes/organization.routes.cjs +132 -0
  55. package/dist/cjs/routes/organization.routes.cjs.map +1 -0
  56. package/dist/cjs/routes/project.routes.cjs +175 -0
  57. package/dist/cjs/routes/project.routes.cjs.map +1 -0
  58. package/dist/cjs/routes/sessionAuth.routes.cjs +147 -0
  59. package/dist/cjs/routes/sessionAuth.routes.cjs.map +1 -0
  60. package/dist/cjs/routes/user.routes.cjs +96 -0
  61. package/dist/cjs/routes/user.routes.cjs.map +1 -0
  62. package/dist/cjs/schemas/dictionary.schema.cjs +69 -0
  63. package/dist/cjs/schemas/dictionary.schema.cjs.map +1 -0
  64. package/dist/cjs/schemas/oAuth2.schema.cjs +55 -0
  65. package/dist/cjs/schemas/oAuth2.schema.cjs.map +1 -0
  66. package/dist/cjs/schemas/organization.schema.cjs +60 -0
  67. package/dist/cjs/schemas/organization.schema.cjs.map +1 -0
  68. package/dist/cjs/schemas/project.schema.cjs +79 -0
  69. package/dist/cjs/schemas/project.schema.cjs.map +1 -0
  70. package/dist/cjs/schemas/user.schema.cjs +112 -0
  71. package/dist/cjs/schemas/user.schema.cjs.map +1 -0
  72. package/dist/cjs/services/dictionary.service.cjs +166 -0
  73. package/dist/cjs/services/dictionary.service.cjs.map +1 -0
  74. package/dist/cjs/services/email.service.cjs +118 -0
  75. package/dist/cjs/services/email.service.cjs.map +1 -0
  76. package/dist/cjs/services/oAuth2.service.cjs +182 -0
  77. package/dist/cjs/services/oAuth2.service.cjs.map +1 -0
  78. package/dist/cjs/services/organization.service.cjs +95 -0
  79. package/dist/cjs/services/organization.service.cjs.map +1 -0
  80. package/dist/cjs/services/project.service.cjs +87 -0
  81. package/dist/cjs/services/project.service.cjs.map +1 -0
  82. package/dist/cjs/services/projectAccessKey.service.cjs +139 -0
  83. package/dist/cjs/services/projectAccessKey.service.cjs.map +1 -0
  84. package/dist/cjs/services/sessionAuth.service.cjs +386 -0
  85. package/dist/cjs/services/sessionAuth.service.cjs.map +1 -0
  86. package/dist/cjs/services/user.service.cjs +155 -0
  87. package/dist/cjs/services/user.service.cjs.map +1 -0
  88. package/dist/cjs/types/Routes.cjs +17 -0
  89. package/dist/cjs/types/Routes.cjs.map +1 -0
  90. package/dist/cjs/types/dictionary.types.cjs +17 -0
  91. package/dist/cjs/types/dictionary.types.cjs.map +1 -0
  92. package/dist/cjs/types/organization.types.cjs +17 -0
  93. package/dist/cjs/types/organization.types.cjs.map +1 -0
  94. package/dist/cjs/types/project.types.cjs +17 -0
  95. package/dist/cjs/types/project.types.cjs.map +1 -0
  96. package/dist/cjs/types/session.types.cjs +17 -0
  97. package/dist/cjs/types/session.types.cjs.map +1 -0
  98. package/dist/cjs/types/user.types.cjs +17 -0
  99. package/dist/cjs/types/user.types.cjs.map +1 -0
  100. package/dist/cjs/utils/CSRF.cjs +47 -0
  101. package/dist/cjs/utils/CSRF.cjs.map +1 -0
  102. package/dist/cjs/utils/accessControl.cjs +121 -0
  103. package/dist/cjs/utils/accessControl.cjs.map +1 -0
  104. package/dist/cjs/utils/cookies.cjs +59 -0
  105. package/dist/cjs/utils/cookies.cjs.map +1 -0
  106. package/dist/cjs/utils/errors/ErrorHandler.cjs +103 -0
  107. package/dist/cjs/utils/errors/ErrorHandler.cjs.map +1 -0
  108. package/dist/cjs/utils/errors/ErrorsClass.cjs +65 -0
  109. package/dist/cjs/utils/errors/ErrorsClass.cjs.map +1 -0
  110. package/dist/cjs/utils/errors/errorCodes.cjs +837 -0
  111. package/dist/cjs/utils/errors/errorCodes.cjs.map +1 -0
  112. package/dist/cjs/utils/errors/index.cjs +37 -0
  113. package/dist/cjs/utils/errors/index.cjs.map +1 -0
  114. package/dist/cjs/utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs +55 -0
  115. package/dist/cjs/utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs.map +1 -0
  116. package/dist/cjs/utils/filtersAndPagination/getFiltersAndPaginationFromBody.cjs +65 -0
  117. package/dist/cjs/utils/filtersAndPagination/getFiltersAndPaginationFromBody.cjs.map +1 -0
  118. package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs +55 -0
  119. package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs.map +1 -0
  120. package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs +58 -0
  121. package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs.map +1 -0
  122. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs +52 -0
  123. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs.map +1 -0
  124. package/dist/cjs/utils/httpStatusCodes.cjs +93 -0
  125. package/dist/cjs/utils/httpStatusCodes.cjs.map +1 -0
  126. package/dist/cjs/utils/mapper/dictionary.cjs +40 -0
  127. package/dist/cjs/utils/mapper/dictionary.cjs.map +1 -0
  128. package/dist/cjs/utils/mapper/organization.cjs +39 -0
  129. package/dist/cjs/utils/mapper/organization.cjs.map +1 -0
  130. package/dist/cjs/utils/mapper/project.cjs +39 -0
  131. package/dist/cjs/utils/mapper/project.cjs.map +1 -0
  132. package/dist/cjs/utils/mapper/user.cjs +39 -0
  133. package/dist/cjs/utils/mapper/user.cjs.map +1 -0
  134. package/dist/cjs/utils/mongoDB/connectDB.cjs +53 -0
  135. package/dist/cjs/utils/mongoDB/connectDB.cjs.map +1 -0
  136. package/dist/cjs/utils/oAuth2.cjs +50 -0
  137. package/dist/cjs/utils/oAuth2.cjs.map +1 -0
  138. package/dist/cjs/utils/responseData.cjs +66 -0
  139. package/dist/cjs/utils/responseData.cjs.map +1 -0
  140. package/dist/cjs/utils/validation/validateArray.cjs +57 -0
  141. package/dist/cjs/utils/validation/validateArray.cjs.map +1 -0
  142. package/dist/cjs/utils/validation/validateDictionary.cjs +66 -0
  143. package/dist/cjs/utils/validation/validateDictionary.cjs.map +1 -0
  144. package/dist/cjs/utils/validation/validateEmail.cjs +37 -0
  145. package/dist/cjs/utils/validation/validateEmail.cjs.map +1 -0
  146. package/dist/cjs/utils/validation/validateOrganization.cjs +79 -0
  147. package/dist/cjs/utils/validation/validateOrganization.cjs.map +1 -0
  148. package/dist/cjs/utils/validation/validatePhone.cjs +37 -0
  149. package/dist/cjs/utils/validation/validatePhone.cjs.map +1 -0
  150. package/dist/cjs/utils/validation/validateProject.cjs +97 -0
  151. package/dist/cjs/utils/validation/validateProject.cjs.map +1 -0
  152. package/dist/cjs/utils/validation/validateString.cjs +39 -0
  153. package/dist/cjs/utils/validation/validateString.cjs.map +1 -0
  154. package/dist/cjs/utils/validation/validateUser.cjs +73 -0
  155. package/dist/cjs/utils/validation/validateUser.cjs.map +1 -0
  156. package/dist/esm/controllers/dictionary.controller.mjs +321 -0
  157. package/dist/esm/controllers/dictionary.controller.mjs.map +1 -0
  158. package/dist/esm/controllers/oAuth2.controller.mjs +25 -0
  159. package/dist/esm/controllers/oAuth2.controller.mjs.map +1 -0
  160. package/dist/esm/controllers/organization.controller.mjs +317 -0
  161. package/dist/esm/controllers/organization.controller.mjs.map +1 -0
  162. package/dist/esm/controllers/project.controller.mjs +263 -0
  163. package/dist/esm/controllers/project.controller.mjs.map +1 -0
  164. package/dist/esm/controllers/projectAccessKey.controller.mjs +98 -0
  165. package/dist/esm/controllers/projectAccessKey.controller.mjs.map +1 -0
  166. package/dist/esm/controllers/sessionAuth.controller.mjs +570 -0
  167. package/dist/esm/controllers/sessionAuth.controller.mjs.map +1 -0
  168. package/dist/esm/controllers/user.controller.mjs +160 -0
  169. package/dist/esm/controllers/user.controller.mjs.map +1 -0
  170. package/dist/esm/emails/InviteUserEmail.mjs +285 -0
  171. package/dist/esm/emails/InviteUserEmail.mjs.map +1 -0
  172. package/dist/esm/emails/PasswordChangeConfirmation.mjs +134 -0
  173. package/dist/esm/emails/PasswordChangeConfirmation.mjs.map +1 -0
  174. package/dist/esm/emails/ResetUserPassword.mjs +197 -0
  175. package/dist/esm/emails/ResetUserPassword.mjs.map +1 -0
  176. package/dist/esm/emails/ValidateUserEmail.mjs +218 -0
  177. package/dist/esm/emails/ValidateUserEmail.mjs.map +1 -0
  178. package/dist/esm/emails/Welcome.mjs +173 -0
  179. package/dist/esm/emails/Welcome.mjs.map +1 -0
  180. package/dist/esm/emails/index.mjs +6 -0
  181. package/dist/esm/emails/index.mjs.map +1 -0
  182. package/dist/esm/export.mjs +15 -0
  183. package/dist/esm/export.mjs.map +1 -0
  184. package/dist/esm/index.mjs +102 -0
  185. package/dist/esm/index.mjs.map +1 -0
  186. package/dist/esm/logger/index.mjs +29 -0
  187. package/dist/esm/logger/index.mjs.map +1 -0
  188. package/dist/esm/middlewares/admin.middleware.mjs +20 -0
  189. package/dist/esm/middlewares/admin.middleware.mjs.map +1 -0
  190. package/dist/esm/middlewares/oAuth2.middleware.mjs +57 -0
  191. package/dist/esm/middlewares/oAuth2.middleware.mjs.map +1 -0
  192. package/dist/esm/middlewares/request.middleware.mjs +17 -0
  193. package/dist/esm/middlewares/request.middleware.mjs.map +1 -0
  194. package/dist/esm/middlewares/sessionAuth.middleware.mjs +96 -0
  195. package/dist/esm/middlewares/sessionAuth.middleware.mjs.map +1 -0
  196. package/dist/esm/models/dictionary.model.mjs +10 -0
  197. package/dist/esm/models/dictionary.model.mjs.map +1 -0
  198. package/dist/esm/models/oAuth2.model.mjs +7 -0
  199. package/dist/esm/models/oAuth2.model.mjs.map +1 -0
  200. package/dist/esm/models/organization.model.mjs +10 -0
  201. package/dist/esm/models/organization.model.mjs.map +1 -0
  202. package/dist/esm/models/project.model.mjs +7 -0
  203. package/dist/esm/models/project.model.mjs.map +1 -0
  204. package/dist/esm/models/user.model.mjs +7 -0
  205. package/dist/esm/models/user.model.mjs.map +1 -0
  206. package/dist/esm/routes/dictionary.routes.mjs +139 -0
  207. package/dist/esm/routes/dictionary.routes.mjs.map +1 -0
  208. package/dist/esm/routes/organization.routes.mjs +116 -0
  209. package/dist/esm/routes/organization.routes.mjs.map +1 -0
  210. package/dist/esm/routes/project.routes.mjs +162 -0
  211. package/dist/esm/routes/project.routes.mjs.map +1 -0
  212. package/dist/esm/routes/sessionAuth.routes.mjs +134 -0
  213. package/dist/esm/routes/sessionAuth.routes.mjs.map +1 -0
  214. package/dist/esm/routes/user.routes.mjs +78 -0
  215. package/dist/esm/routes/user.routes.mjs.map +1 -0
  216. package/dist/esm/schemas/dictionary.schema.mjs +45 -0
  217. package/dist/esm/schemas/dictionary.schema.mjs.map +1 -0
  218. package/dist/esm/schemas/oAuth2.schema.mjs +31 -0
  219. package/dist/esm/schemas/oAuth2.schema.mjs.map +1 -0
  220. package/dist/esm/schemas/organization.schema.mjs +40 -0
  221. package/dist/esm/schemas/organization.schema.mjs.map +1 -0
  222. package/dist/esm/schemas/project.schema.mjs +59 -0
  223. package/dist/esm/schemas/project.schema.mjs.map +1 -0
  224. package/dist/esm/schemas/user.schema.mjs +81 -0
  225. package/dist/esm/schemas/user.schema.mjs.map +1 -0
  226. package/dist/esm/services/dictionary.service.mjs +134 -0
  227. package/dist/esm/services/dictionary.service.mjs.map +1 -0
  228. package/dist/esm/services/email.service.mjs +114 -0
  229. package/dist/esm/services/email.service.mjs.map +1 -0
  230. package/dist/esm/services/oAuth2.service.mjs +150 -0
  231. package/dist/esm/services/oAuth2.service.mjs.map +1 -0
  232. package/dist/esm/services/organization.service.mjs +68 -0
  233. package/dist/esm/services/organization.service.mjs.map +1 -0
  234. package/dist/esm/services/project.service.mjs +60 -0
  235. package/dist/esm/services/project.service.mjs.map +1 -0
  236. package/dist/esm/services/projectAccessKey.service.mjs +113 -0
  237. package/dist/esm/services/projectAccessKey.service.mjs.map +1 -0
  238. package/dist/esm/services/sessionAuth.service.mjs +337 -0
  239. package/dist/esm/services/sessionAuth.service.mjs.map +1 -0
  240. package/dist/esm/services/user.service.mjs +122 -0
  241. package/dist/esm/services/user.service.mjs.map +1 -0
  242. package/dist/esm/types/Routes.mjs +1 -0
  243. package/dist/esm/types/Routes.mjs.map +1 -0
  244. package/dist/esm/types/dictionary.types.mjs +1 -0
  245. package/dist/esm/types/dictionary.types.mjs.map +1 -0
  246. package/dist/esm/types/organization.types.mjs +1 -0
  247. package/dist/esm/types/organization.types.mjs.map +1 -0
  248. package/dist/esm/types/project.types.mjs +1 -0
  249. package/dist/esm/types/project.types.mjs.map +1 -0
  250. package/dist/esm/types/session.types.mjs +1 -0
  251. package/dist/esm/types/session.types.mjs.map +1 -0
  252. package/dist/esm/types/user.types.mjs +1 -0
  253. package/dist/esm/types/user.types.mjs.map +1 -0
  254. package/dist/esm/utils/CSRF.mjs +21 -0
  255. package/dist/esm/utils/CSRF.mjs.map +1 -0
  256. package/dist/esm/utils/accessControl.mjs +95 -0
  257. package/dist/esm/utils/accessControl.mjs.map +1 -0
  258. package/dist/esm/utils/cookies.mjs +32 -0
  259. package/dist/esm/utils/cookies.mjs.map +1 -0
  260. package/dist/esm/utils/errors/ErrorHandler.mjs +79 -0
  261. package/dist/esm/utils/errors/ErrorHandler.mjs.map +1 -0
  262. package/dist/esm/utils/errors/ErrorsClass.mjs +40 -0
  263. package/dist/esm/utils/errors/ErrorsClass.mjs.map +1 -0
  264. package/dist/esm/utils/errors/errorCodes.mjs +813 -0
  265. package/dist/esm/utils/errors/errorCodes.mjs.map +1 -0
  266. package/dist/esm/utils/errors/index.mjs +10 -0
  267. package/dist/esm/utils/errors/index.mjs.map +1 -0
  268. package/dist/esm/utils/filtersAndPagination/getDictionaryFiltersAndPagination.mjs +33 -0
  269. package/dist/esm/utils/filtersAndPagination/getDictionaryFiltersAndPagination.mjs.map +1 -0
  270. package/dist/esm/utils/filtersAndPagination/getFiltersAndPaginationFromBody.mjs +41 -0
  271. package/dist/esm/utils/filtersAndPagination/getFiltersAndPaginationFromBody.mjs.map +1 -0
  272. package/dist/esm/utils/filtersAndPagination/getOrganizationFiltersAndPagination.mjs +33 -0
  273. package/dist/esm/utils/filtersAndPagination/getOrganizationFiltersAndPagination.mjs.map +1 -0
  274. package/dist/esm/utils/filtersAndPagination/getProjectFiltersAndPagination.mjs +36 -0
  275. package/dist/esm/utils/filtersAndPagination/getProjectFiltersAndPagination.mjs.map +1 -0
  276. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs +30 -0
  277. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs.map +1 -0
  278. package/dist/esm/utils/httpStatusCodes.mjs +69 -0
  279. package/dist/esm/utils/httpStatusCodes.mjs.map +1 -0
  280. package/dist/esm/utils/mapper/dictionary.mjs +16 -0
  281. package/dist/esm/utils/mapper/dictionary.mjs.map +1 -0
  282. package/dist/esm/utils/mapper/organization.mjs +15 -0
  283. package/dist/esm/utils/mapper/organization.mjs.map +1 -0
  284. package/dist/esm/utils/mapper/project.mjs +15 -0
  285. package/dist/esm/utils/mapper/project.mjs.map +1 -0
  286. package/dist/esm/utils/mapper/user.mjs +14 -0
  287. package/dist/esm/utils/mapper/user.mjs.map +1 -0
  288. package/dist/esm/utils/mongoDB/connectDB.mjs +19 -0
  289. package/dist/esm/utils/mongoDB/connectDB.mjs.map +1 -0
  290. package/dist/esm/utils/oAuth2.mjs +29 -0
  291. package/dist/esm/utils/oAuth2.mjs.map +1 -0
  292. package/dist/esm/utils/responseData.mjs +41 -0
  293. package/dist/esm/utils/responseData.mjs.map +1 -0
  294. package/dist/esm/utils/validation/validateArray.mjs +33 -0
  295. package/dist/esm/utils/validation/validateArray.mjs.map +1 -0
  296. package/dist/esm/utils/validation/validateDictionary.mjs +42 -0
  297. package/dist/esm/utils/validation/validateDictionary.mjs.map +1 -0
  298. package/dist/esm/utils/validation/validateEmail.mjs +13 -0
  299. package/dist/esm/utils/validation/validateEmail.mjs.map +1 -0
  300. package/dist/esm/utils/validation/validateOrganization.mjs +52 -0
  301. package/dist/esm/utils/validation/validateOrganization.mjs.map +1 -0
  302. package/dist/esm/utils/validation/validatePhone.mjs +13 -0
  303. package/dist/esm/utils/validation/validatePhone.mjs.map +1 -0
  304. package/dist/esm/utils/validation/validateProject.mjs +70 -0
  305. package/dist/esm/utils/validation/validateProject.mjs.map +1 -0
  306. package/dist/esm/utils/validation/validateString.mjs +15 -0
  307. package/dist/esm/utils/validation/validateString.mjs.map +1 -0
  308. package/dist/esm/utils/validation/validateUser.mjs +47 -0
  309. package/dist/esm/utils/validation/validateUser.mjs.map +1 -0
  310. package/dist/types/controllers/dictionary.controller.d.ts +70 -0
  311. package/dist/types/controllers/dictionary.controller.d.ts.map +1 -0
  312. package/dist/types/controllers/oAuth2.controller.d.ts +14 -0
  313. package/dist/types/controllers/oAuth2.controller.d.ts.map +1 -0
  314. package/dist/types/controllers/organization.controller.d.ts +72 -0
  315. package/dist/types/controllers/organization.controller.d.ts.map +1 -0
  316. package/dist/types/controllers/project.controller.d.ts +59 -0
  317. package/dist/types/controllers/project.controller.d.ts.map +1 -0
  318. package/dist/types/controllers/projectAccessKey.controller.d.ts +27 -0
  319. package/dist/types/controllers/projectAccessKey.controller.d.ts.map +1 -0
  320. package/dist/types/controllers/sessionAuth.controller.d.ts +120 -0
  321. package/dist/types/controllers/sessionAuth.controller.d.ts.map +1 -0
  322. package/dist/types/controllers/user.controller.d.ts +56 -0
  323. package/dist/types/controllers/user.controller.d.ts.map +1 -0
  324. package/dist/types/emails/InviteUserEmail.d.ts +22 -0
  325. package/dist/types/emails/InviteUserEmail.d.ts.map +1 -0
  326. package/dist/types/emails/PasswordChangeConfirmation.d.ts +16 -0
  327. package/dist/types/emails/PasswordChangeConfirmation.d.ts.map +1 -0
  328. package/dist/types/emails/ResetUserPassword.d.ts +17 -0
  329. package/dist/types/emails/ResetUserPassword.d.ts.map +1 -0
  330. package/dist/types/emails/ValidateUserEmail.d.ts +17 -0
  331. package/dist/types/emails/ValidateUserEmail.d.ts.map +1 -0
  332. package/dist/types/emails/Welcome.d.ts +17 -0
  333. package/dist/types/emails/Welcome.d.ts.map +1 -0
  334. package/dist/types/emails/index.d.ts +6 -0
  335. package/dist/types/emails/index.d.ts.map +1 -0
  336. package/dist/types/export.d.ts +19 -0
  337. package/dist/types/export.d.ts.map +1 -0
  338. package/dist/types/index.d.ts +4 -0
  339. package/dist/types/index.d.ts.map +1 -0
  340. package/dist/types/logger/index.d.ts +2 -0
  341. package/dist/types/logger/index.d.ts.map +1 -0
  342. package/dist/types/middlewares/admin.middleware.d.ts +10 -0
  343. package/dist/types/middlewares/admin.middleware.d.ts.map +1 -0
  344. package/dist/types/middlewares/oAuth2.middleware.d.ts +9 -0
  345. package/dist/types/middlewares/oAuth2.middleware.d.ts.map +1 -0
  346. package/dist/types/middlewares/request.middleware.d.ts +4 -0
  347. package/dist/types/middlewares/request.middleware.d.ts.map +1 -0
  348. package/dist/types/middlewares/sessionAuth.middleware.d.ts +20 -0
  349. package/dist/types/middlewares/sessionAuth.middleware.d.ts.map +1 -0
  350. package/dist/types/models/dictionary.model.d.ts +11 -0
  351. package/dist/types/models/dictionary.model.d.ts.map +1 -0
  352. package/dist/types/models/oAuth2.model.d.ts +10 -0
  353. package/dist/types/models/oAuth2.model.d.ts.map +1 -0
  354. package/dist/types/models/organization.model.d.ts +12 -0
  355. package/dist/types/models/organization.model.d.ts.map +1 -0
  356. package/dist/types/models/project.model.d.ts +12 -0
  357. package/dist/types/models/project.model.d.ts.map +1 -0
  358. package/dist/types/models/user.model.d.ts +3 -0
  359. package/dist/types/models/user.model.d.ts.map +1 -0
  360. package/dist/types/routes/dictionary.routes.d.ts +42 -0
  361. package/dist/types/routes/dictionary.routes.d.ts.map +1 -0
  362. package/dist/types/routes/organization.routes.d.ts +47 -0
  363. package/dist/types/routes/organization.routes.d.ts.map +1 -0
  364. package/dist/types/routes/project.routes.d.ts +57 -0
  365. package/dist/types/routes/project.routes.d.ts.map +1 -0
  366. package/dist/types/routes/sessionAuth.routes.d.ts +66 -0
  367. package/dist/types/routes/sessionAuth.routes.d.ts.map +1 -0
  368. package/dist/types/routes/user.routes.d.ts +42 -0
  369. package/dist/types/routes/user.routes.d.ts.map +1 -0
  370. package/dist/types/schemas/dictionary.schema.d.ts +16 -0
  371. package/dist/types/schemas/dictionary.schema.d.ts.map +1 -0
  372. package/dist/types/schemas/oAuth2.schema.d.ts +19 -0
  373. package/dist/types/schemas/oAuth2.schema.d.ts.map +1 -0
  374. package/dist/types/schemas/organization.schema.d.ts +17 -0
  375. package/dist/types/schemas/organization.schema.d.ts.map +1 -0
  376. package/dist/types/schemas/project.schema.d.ts +17 -0
  377. package/dist/types/schemas/project.schema.d.ts.map +1 -0
  378. package/dist/types/schemas/user.schema.d.ts +12 -0
  379. package/dist/types/schemas/user.schema.d.ts.map +1 -0
  380. package/dist/types/services/dictionary.service.d.ts +70 -0
  381. package/dist/types/services/dictionary.service.d.ts.map +1 -0
  382. package/dist/types/services/email.service.d.ts +18 -0
  383. package/dist/types/services/email.service.d.ts.map +1 -0
  384. package/dist/types/services/oAuth2.service.d.ts +85 -0
  385. package/dist/types/services/oAuth2.service.d.ts.map +1 -0
  386. package/dist/types/services/organization.service.d.ts +43 -0
  387. package/dist/types/services/organization.service.d.ts.map +1 -0
  388. package/dist/types/services/project.service.d.ts +43 -0
  389. package/dist/types/services/project.service.d.ts.map +1 -0
  390. package/dist/types/services/projectAccessKey.service.d.ts +16 -0
  391. package/dist/types/services/projectAccessKey.service.d.ts.map +1 -0
  392. package/dist/types/services/sessionAuth.service.d.ts +148 -0
  393. package/dist/types/services/sessionAuth.service.d.ts.map +1 -0
  394. package/dist/types/services/user.service.d.ts +89 -0
  395. package/dist/types/services/user.service.d.ts.map +1 -0
  396. package/dist/types/types/Routes.d.ts +7 -0
  397. package/dist/types/types/Routes.d.ts.map +1 -0
  398. package/dist/types/types/dictionary.types.d.ts +35 -0
  399. package/dist/types/types/dictionary.types.d.ts.map +1 -0
  400. package/dist/types/types/organization.types.d.ts +21 -0
  401. package/dist/types/types/organization.types.d.ts.map +1 -0
  402. package/dist/types/types/project.types.d.ts +40 -0
  403. package/dist/types/types/project.types.d.ts.map +1 -0
  404. package/dist/types/types/session.types.d.ts +22 -0
  405. package/dist/types/types/session.types.d.ts.map +1 -0
  406. package/dist/types/types/user.types.d.ts +28 -0
  407. package/dist/types/types/user.types.d.ts.map +1 -0
  408. package/dist/types/utils/CSRF.d.ts +3 -0
  409. package/dist/types/utils/CSRF.d.ts.map +1 -0
  410. package/dist/types/utils/accessControl.d.ts +58 -0
  411. package/dist/types/utils/accessControl.d.ts.map +1 -0
  412. package/dist/types/utils/cookies.d.ts +12 -0
  413. package/dist/types/utils/cookies.d.ts.map +1 -0
  414. package/dist/types/utils/errors/ErrorHandler.d.ts +32 -0
  415. package/dist/types/utils/errors/ErrorHandler.d.ts.map +1 -0
  416. package/dist/types/utils/errors/ErrorsClass.d.ts +26 -0
  417. package/dist/types/utils/errors/ErrorsClass.d.ts.map +1 -0
  418. package/dist/types/utils/errors/errorCodes.d.ts +811 -0
  419. package/dist/types/utils/errors/errorCodes.d.ts.map +1 -0
  420. package/dist/types/utils/errors/index.d.ts +4 -0
  421. package/dist/types/utils/errors/index.d.ts.map +1 -0
  422. package/dist/types/utils/filtersAndPagination/getDictionaryFiltersAndPagination.d.ts +23 -0
  423. package/dist/types/utils/filtersAndPagination/getDictionaryFiltersAndPagination.d.ts.map +1 -0
  424. package/dist/types/utils/filtersAndPagination/getFiltersAndPaginationFromBody.d.ts +22 -0
  425. package/dist/types/utils/filtersAndPagination/getFiltersAndPaginationFromBody.d.ts.map +1 -0
  426. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts +31 -0
  427. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts.map +1 -0
  428. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts +24 -0
  429. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts.map +1 -0
  430. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts +22 -0
  431. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts.map +1 -0
  432. package/dist/types/utils/httpStatusCodes.d.ts +395 -0
  433. package/dist/types/utils/httpStatusCodes.d.ts.map +1 -0
  434. package/dist/types/utils/mapper/dictionary.d.ts +12 -0
  435. package/dist/types/utils/mapper/dictionary.d.ts.map +1 -0
  436. package/dist/types/utils/mapper/organization.d.ts +9 -0
  437. package/dist/types/utils/mapper/organization.d.ts.map +1 -0
  438. package/dist/types/utils/mapper/project.d.ts +9 -0
  439. package/dist/types/utils/mapper/project.d.ts.map +1 -0
  440. package/dist/types/utils/mapper/user.d.ts +14 -0
  441. package/dist/types/utils/mapper/user.d.ts.map +1 -0
  442. package/dist/types/utils/mongoDB/connectDB.d.ts +3 -0
  443. package/dist/types/utils/mongoDB/connectDB.d.ts.map +1 -0
  444. package/dist/types/utils/oAuth2.d.ts +6 -0
  445. package/dist/types/utils/oAuth2.d.ts.map +1 -0
  446. package/dist/types/utils/responseData.d.ts +53 -0
  447. package/dist/types/utils/responseData.d.ts.map +1 -0
  448. package/dist/types/utils/validation/validateArray.d.ts +13 -0
  449. package/dist/types/utils/validation/validateArray.d.ts.map +1 -0
  450. package/dist/types/utils/validation/validateDictionary.d.ts +12 -0
  451. package/dist/types/utils/validation/validateDictionary.d.ts.map +1 -0
  452. package/dist/types/utils/validation/validateEmail.d.ts +10 -0
  453. package/dist/types/utils/validation/validateEmail.d.ts.map +1 -0
  454. package/dist/types/utils/validation/validateOrganization.d.ts +15 -0
  455. package/dist/types/utils/validation/validateOrganization.d.ts.map +1 -0
  456. package/dist/types/utils/validation/validatePhone.d.ts +10 -0
  457. package/dist/types/utils/validation/validatePhone.d.ts.map +1 -0
  458. package/dist/types/utils/validation/validateProject.d.ts +15 -0
  459. package/dist/types/utils/validation/validateProject.d.ts.map +1 -0
  460. package/dist/types/utils/validation/validateString.d.ts +10 -0
  461. package/dist/types/utils/validation/validateString.d.ts.map +1 -0
  462. package/dist/types/utils/validation/validateUser.d.ts +15 -0
  463. package/dist/types/utils/validation/validateUser.d.ts.map +1 -0
  464. package/package.json +115 -0
@@ -0,0 +1,98 @@
1
+ import * as projectAccessKeyService from './../services/projectAccessKey.service.mjs';
2
+ import { ErrorHandler } from './../utils/errors/index.mjs';
3
+ import { formatResponse } from './../utils/responseData.mjs';
4
+ const addNewAccessKey = async (req, res, _next) => {
5
+ const { user, project } = res.locals;
6
+ if (!project) {
7
+ ErrorHandler.handleGenericErrorResponse(res, "PROJECT_NOT_FOUND");
8
+ return;
9
+ }
10
+ if (!user) {
11
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
12
+ return;
13
+ }
14
+ try {
15
+ const newAccessKey = await projectAccessKeyService.addNewAccessKey(
16
+ req.body,
17
+ project._id,
18
+ user
19
+ );
20
+ const responseData = formatResponse({
21
+ data: newAccessKey
22
+ });
23
+ res.json(responseData);
24
+ return;
25
+ } catch (error) {
26
+ ErrorHandler.handleAppErrorResponse(res, error);
27
+ return;
28
+ }
29
+ };
30
+ const deleteAccessKey = async (req, res, _next) => {
31
+ const { user, project } = res.locals;
32
+ const { clientId } = req.body;
33
+ if (!project) {
34
+ ErrorHandler.handleGenericErrorResponse(res, "PROJECT_NOT_FOUND");
35
+ return;
36
+ }
37
+ if (!user) {
38
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
39
+ return;
40
+ }
41
+ if (!clientId) {
42
+ ErrorHandler.handleGenericErrorResponse(res, "CLIENT_ID_NOT_FOUND");
43
+ return;
44
+ }
45
+ try {
46
+ const deletedAccessKey = await projectAccessKeyService.deleteAccessKey(
47
+ clientId,
48
+ project
49
+ );
50
+ if (!deletedAccessKey) {
51
+ ErrorHandler.handleGenericErrorResponse(res, "ACCESS_KEY_NOT_FOUND", {
52
+ clientId
53
+ });
54
+ return;
55
+ }
56
+ const responseData = formatResponse({
57
+ data: null
58
+ });
59
+ res.json(responseData);
60
+ return;
61
+ } catch (error) {
62
+ ErrorHandler.handleAppErrorResponse(res, error);
63
+ return;
64
+ }
65
+ };
66
+ const refreshAccessKey = async (req, res, _next) => {
67
+ const { user, project } = res.locals;
68
+ const { clientId } = req.body;
69
+ if (!project) {
70
+ ErrorHandler.handleGenericErrorResponse(res, "PROJECT_NOT_FOUND");
71
+ }
72
+ if (!user) {
73
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
74
+ }
75
+ if (!clientId) {
76
+ ErrorHandler.handleGenericErrorResponse(res, "CLIENT_ID_NOT_FOUND");
77
+ }
78
+ try {
79
+ const newAccessKey = await projectAccessKeyService.refreshAccessKey(
80
+ clientId,
81
+ project._id
82
+ );
83
+ const responseData = formatResponse({
84
+ data: newAccessKey
85
+ });
86
+ res.json(responseData);
87
+ return;
88
+ } catch (error) {
89
+ ErrorHandler.handleAppErrorResponse(res, error);
90
+ return;
91
+ }
92
+ };
93
+ export {
94
+ addNewAccessKey,
95
+ deleteAccessKey,
96
+ refreshAccessKey
97
+ };
98
+ //# sourceMappingURL=projectAccessKey.controller.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/controllers/projectAccessKey.controller.ts"],"sourcesContent":["import type { ResponseWithInformation } from '@middlewares/sessionAuth.middleware';\nimport * as projectAccessKeyService from '@services/projectAccessKey.service';\nimport { AppError, ErrorHandler } from '@utils/errors';\nimport { type ResponseData, formatResponse } from '@utils/responseData';\nimport type { NextFunction, Request } from 'express';\nimport type { AccessKeyData, OAuth2Access } from '@/types/project.types';\n\nexport type AddNewAccessKeyBody = AccessKeyData;\nexport type AddNewAccessKeyResponse = ResponseData<OAuth2Access>;\n\n/**\n * Adds a new access key to a project.\n */\nexport const addNewAccessKey = async (\n req: Request<AddNewAccessKeyBody>,\n res: ResponseWithInformation<AddNewAccessKeyResponse>,\n _next: NextFunction\n): Promise<void> => {\n const { user, project } = res.locals;\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_FOUND');\n return;\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_FOUND');\n return;\n }\n\n try {\n const newAccessKey = await projectAccessKeyService.addNewAccessKey(\n req.body,\n project._id,\n user\n );\n\n const responseData = formatResponse<OAuth2Access>({\n data: newAccessKey,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type DeleteAccessKeyBody = { clientId: string };\nexport type DeleteAccessKeyResponse = ResponseData<null>;\n\n/**\n * Deletes an access key from a project.\n */\nexport const deleteAccessKey = async (\n req: Request,\n res: ResponseWithInformation<AddNewAccessKeyResponse>,\n _next: NextFunction\n): Promise<void> => {\n const { user, project } = res.locals;\n const { clientId } = req.body;\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_FOUND');\n return;\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_FOUND');\n return;\n }\n\n if (!clientId) {\n ErrorHandler.handleGenericErrorResponse(res, 'CLIENT_ID_NOT_FOUND');\n return;\n }\n\n try {\n const deletedAccessKey = await projectAccessKeyService.deleteAccessKey(\n clientId,\n project\n );\n\n if (!deletedAccessKey) {\n ErrorHandler.handleGenericErrorResponse(res, 'ACCESS_KEY_NOT_FOUND', {\n clientId,\n });\n return;\n }\n\n const responseData = formatResponse<null>({\n data: null,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type RefreshAccessKeyBody = { clientId: string };\nexport type RefreshAccessKeyResponse = ResponseData<OAuth2Access>;\n\n/**\n * Refreshes an access key from a project.\n */\nexport const refreshAccessKey = async (\n req: Request<RefreshAccessKeyBody>,\n res: ResponseWithInformation<RefreshAccessKeyResponse>,\n _next: NextFunction\n): Promise<void> => {\n const { user, project } = res.locals;\n const { clientId } = req.body;\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_FOUND');\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_FOUND');\n }\n\n if (!clientId) {\n ErrorHandler.handleGenericErrorResponse(res, 'CLIENT_ID_NOT_FOUND');\n }\n\n try {\n const newAccessKey = await projectAccessKeyService.refreshAccessKey(\n clientId,\n project!._id\n );\n\n const responseData = formatResponse<OAuth2Access>({\n data: newAccessKey,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n"],"mappings":"AACA,YAAY,6BAA6B;AACzC,SAAmB,oBAAoB;AACvC,SAA4B,sBAAsB;AAU3C,MAAM,kBAAkB,OAC7B,KACA,KACA,UACkB;AAClB,QAAM,EAAE,MAAM,QAAQ,IAAI,IAAI;AAE9B,MAAI,CAAC,SAAS;AACZ,iBAAa,2BAA2B,KAAK,mBAAmB;AAChE;AAAA,EACF;AAEA,MAAI,CAAC,MAAM;AACT,iBAAa,2BAA2B,KAAK,gBAAgB;AAC7D;AAAA,EACF;AAEA,MAAI;AACF,UAAM,eAAe,MAAM,wBAAwB;AAAA,MACjD,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR;AAAA,IACF;AAEA,UAAM,eAAe,eAA6B;AAAA,MAChD,MAAM;AAAA,IACR,CAAC;AAED,QAAI,KAAK,YAAY;AACrB;AAAA,EACF,SAAS,OAAO;AACd,iBAAa,uBAAuB,KAAK,KAAiB;AAC1D;AAAA,EACF;AACF;AAQO,MAAM,kBAAkB,OAC7B,KACA,KACA,UACkB;AAClB,QAAM,EAAE,MAAM,QAAQ,IAAI,IAAI;AAC9B,QAAM,EAAE,SAAS,IAAI,IAAI;AAEzB,MAAI,CAAC,SAAS;AACZ,iBAAa,2BAA2B,KAAK,mBAAmB;AAChE;AAAA,EACF;AAEA,MAAI,CAAC,MAAM;AACT,iBAAa,2BAA2B,KAAK,gBAAgB;AAC7D;AAAA,EACF;AAEA,MAAI,CAAC,UAAU;AACb,iBAAa,2BAA2B,KAAK,qBAAqB;AAClE;AAAA,EACF;AAEA,MAAI;AACF,UAAM,mBAAmB,MAAM,wBAAwB;AAAA,MACrD;AAAA,MACA;AAAA,IACF;AAEA,QAAI,CAAC,kBAAkB;AACrB,mBAAa,2BAA2B,KAAK,wBAAwB;AAAA,QACnE;AAAA,MACF,CAAC;AACD;AAAA,IACF;AAEA,UAAM,eAAe,eAAqB;AAAA,MACxC,MAAM;AAAA,IACR,CAAC;AAED,QAAI,KAAK,YAAY;AACrB;AAAA,EACF,SAAS,OAAO;AACd,iBAAa,uBAAuB,KAAK,KAAiB;AAC1D;AAAA,EACF;AACF;AAQO,MAAM,mBAAmB,OAC9B,KACA,KACA,UACkB;AAClB,QAAM,EAAE,MAAM,QAAQ,IAAI,IAAI;AAC9B,QAAM,EAAE,SAAS,IAAI,IAAI;AAEzB,MAAI,CAAC,SAAS;AACZ,iBAAa,2BAA2B,KAAK,mBAAmB;AAAA,EAClE;AAEA,MAAI,CAAC,MAAM;AACT,iBAAa,2BAA2B,KAAK,gBAAgB;AAAA,EAC/D;AAEA,MAAI,CAAC,UAAU;AACb,iBAAa,2BAA2B,KAAK,qBAAqB;AAAA,EACpE;AAEA,MAAI;AACF,UAAM,eAAe,MAAM,wBAAwB;AAAA,MACjD;AAAA,MACA,QAAS;AAAA,IACX;AAEA,UAAM,eAAe,eAA6B;AAAA,MAChD,MAAM;AAAA,IACR,CAAC;AAED,QAAI,KAAK,YAAY;AACrB;AAAA,EACF,SAAS,OAAO;AACd,iBAAa,uBAAuB,KAAK,KAAiB;AAC1D;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,570 @@
1
+ import { logger } from './../logger/index.mjs';
2
+ import { sessionAuthRoutes } from './../routes/sessionAuth.routes.mjs';
3
+ import { sendEmail } from './../services/email.service.mjs';
4
+ import * as sessionAuthService from './../services/sessionAuth.service.mjs';
5
+ import * as userService from './../services/user.service.mjs';
6
+ import { generateToken } from './../utils/CSRF.mjs';
7
+ import { ErrorHandler, GenericError } from './../utils/errors/index.mjs';
8
+ import { HttpStatusCodes } from './../utils/httpStatusCodes.mjs';
9
+ import { mapUserToAPI } from './../utils/mapper/user.mjs';
10
+ import { formatResponse } from './../utils/responseData.mjs';
11
+ import { Types } from "mongoose";
12
+ import { v4 as uuidv4 } from "uuid";
13
+ const setCSRFToken = (req, res, _next) => {
14
+ const csrf_token = generateToken(req, res);
15
+ const responseData = formatResponse({
16
+ data: { csrf_token }
17
+ });
18
+ res.locals.csrf_token = csrf_token;
19
+ res.json(responseData);
20
+ };
21
+ const registerEmailPassword = async (req, res, _next) => {
22
+ const { user } = res.locals;
23
+ if (user) {
24
+ ErrorHandler.handleGenericErrorResponse(res, "USER_ALREADY_LOGGED_IN");
25
+ return;
26
+ }
27
+ const userData = req.body;
28
+ try {
29
+ let user2 = await userService.getUserByEmail(userData.email);
30
+ if (user2) {
31
+ const emailProvider = user2.provider?.find(
32
+ (provider) => provider.provider === "email"
33
+ );
34
+ if (emailProvider) {
35
+ if (emailProvider.emailValidated) {
36
+ ErrorHandler.handleGenericErrorResponse(
37
+ res,
38
+ "EMAIL_ALREADY_VALIDATED"
39
+ );
40
+ return;
41
+ } else {
42
+ user2 = await sessionAuthService.updateUserProvider(
43
+ user2._id,
44
+ "email",
45
+ {
46
+ secret: uuidv4()
47
+ }
48
+ );
49
+ }
50
+ } else {
51
+ user2 = await sessionAuthService.addUserProvider(user2._id, {
52
+ provider: "email",
53
+ emailValidated: void 0,
54
+ secret: uuidv4()
55
+ });
56
+ }
57
+ } else {
58
+ user2 = await userService.createUser(userData);
59
+ logger.info(`New registration: ${user2.name} - ${user2.email}`);
60
+ }
61
+ if (!user2) {
62
+ ErrorHandler.handleGenericErrorResponse(res, "USER_CREATION_FAILED", {
63
+ email: userData.email
64
+ });
65
+ return;
66
+ }
67
+ await sessionAuthService.setUserAuth(res, user2);
68
+ const formattedUser = mapUserToAPI(user2);
69
+ const responseData = formatResponse({ data: formattedUser });
70
+ res.json(responseData);
71
+ return;
72
+ } catch (error) {
73
+ ErrorHandler.handleAppErrorResponse(res, error);
74
+ return;
75
+ }
76
+ };
77
+ const loginEmailPassword = async (req, res, _next) => {
78
+ const { user } = res.locals;
79
+ if (user) {
80
+ ErrorHandler.handleGenericErrorResponse(res, "USER_ALREADY_LOGGED_IN");
81
+ return;
82
+ }
83
+ const { email, password } = req.body;
84
+ try {
85
+ const { user: loggedInUser, error } = await sessionAuthService.testUserPassword(email, password);
86
+ if (error) {
87
+ if (!user) {
88
+ ErrorHandler.handleGenericErrorResponse(res, "LOGIN_FAILED");
89
+ return;
90
+ }
91
+ }
92
+ if (!loggedInUser) {
93
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
94
+ return;
95
+ }
96
+ await sessionAuthService.setUserAuth(res, loggedInUser);
97
+ const formattedUser = mapUserToAPI(loggedInUser);
98
+ const responseData = formatResponse({ data: formattedUser });
99
+ logger.info(`Login: ${loggedInUser.email}`);
100
+ res.json(responseData);
101
+ return;
102
+ } catch (error) {
103
+ ErrorHandler.handleAppErrorResponse(res, error);
104
+ return;
105
+ }
106
+ };
107
+ const logOut = async (_req, res, _next) => {
108
+ const { user } = res.locals;
109
+ if (!user) {
110
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
111
+ return;
112
+ }
113
+ await sessionAuthService.clearUserAuth(res);
114
+ sessionAuthService.clearOrganizationAuth(res);
115
+ sessionAuthService.clearProjectAuth(res);
116
+ logger.info(`Logout: ${user.name} - ${user.email}`);
117
+ const responseData = formatResponse({ data: void 0 });
118
+ res.json(responseData);
119
+ };
120
+ const updatePassword = async (req, res, _next) => {
121
+ const { oldPassword, newPassword } = req.body;
122
+ let { user } = res.locals;
123
+ if (!user) {
124
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
125
+ return;
126
+ }
127
+ try {
128
+ const { error } = await sessionAuthService.testUserPassword(
129
+ user.email,
130
+ oldPassword
131
+ );
132
+ if (error) {
133
+ ErrorHandler.handleGenericErrorResponse(res, "LOGIN_FAILED");
134
+ return;
135
+ }
136
+ user = await sessionAuthService.changeUserPassword(
137
+ user._id,
138
+ oldPassword,
139
+ newPassword
140
+ );
141
+ if (!user || typeof user !== "object") {
142
+ ErrorHandler.handleGenericErrorResponse(res, "USER_DATA_NOT_FOUND");
143
+ return;
144
+ }
145
+ logger.info(
146
+ `Password changed - User : Name : ${user.name}, id : ${String(user._id)}`
147
+ );
148
+ const formattedUser = mapUserToAPI(user);
149
+ const responseData = formatResponse({ data: formattedUser });
150
+ res.json(responseData);
151
+ return;
152
+ } catch (error) {
153
+ ErrorHandler.handleAppErrorResponse(res, error);
154
+ return;
155
+ }
156
+ };
157
+ const validEmail = async (req, res, _next) => {
158
+ const { userId, secret } = req.params;
159
+ const { organization } = res.locals;
160
+ if (!Types.ObjectId.isValid(userId.toString())) {
161
+ ErrorHandler.handleGenericErrorResponse(res, "INVALID_USER_ID");
162
+ return;
163
+ }
164
+ if (!organization) {
165
+ ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
166
+ return;
167
+ }
168
+ const user = await userService.getUserById(userId);
169
+ if (!user) {
170
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND", { userId });
171
+ return;
172
+ }
173
+ await sessionAuthService.activateUser(user._id, secret);
174
+ logger.info(
175
+ `User activated - User: Name: ${user.name}, id: ${String(user._id)}`
176
+ );
177
+ await sendEmail({
178
+ type: "welcome",
179
+ to: user.email,
180
+ username: user.name,
181
+ loginLink: sessionAuthRoutes.loginEmailPassword.url
182
+ });
183
+ const formattedUser = mapUserToAPI(user);
184
+ const responseData = formatResponse({ data: formattedUser });
185
+ res.json(responseData);
186
+ };
187
+ const askResetPassword = async (req, res, _next) => {
188
+ const { email } = req.body;
189
+ if (!email) {
190
+ ErrorHandler.handleGenericErrorResponse(res, "EMAIL_NOT_PROVIDED");
191
+ return;
192
+ }
193
+ try {
194
+ const updatedUser = await sessionAuthService.requestPasswordReset(email);
195
+ if (!updatedUser) {
196
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND", { email });
197
+ return;
198
+ }
199
+ logger.info(
200
+ `Ask changing password - User: Name: ${updatedUser.name}, id: ${String(updatedUser._id)}`
201
+ );
202
+ await sendEmail({
203
+ type: "resetPassword",
204
+ to: updatedUser.email,
205
+ username: updatedUser.name,
206
+ resetLink: sessionAuthRoutes.resetPassword.url({
207
+ userId: String(updatedUser._id),
208
+ secret: updatedUser.provider?.find(
209
+ (provider) => provider.provider === "email"
210
+ )?.secret ?? ""
211
+ })
212
+ });
213
+ const responseData = formatResponse({ data: void 0 });
214
+ res.json(responseData);
215
+ return;
216
+ } catch (error) {
217
+ ErrorHandler.handleAppErrorResponse(res, error);
218
+ return;
219
+ }
220
+ };
221
+ const resetPassword = async (req, res, _next) => {
222
+ const { secret, userId } = req.params;
223
+ const password = req.body.password;
224
+ const userIdString = String(userId);
225
+ if (!userId || !userIdString || !Types.ObjectId.isValid(userIdString)) {
226
+ ErrorHandler.handleGenericErrorResponse(res, "INVALID_USER_ID", { userId });
227
+ return;
228
+ }
229
+ if (!secret) {
230
+ ErrorHandler.handleGenericErrorResponse(res, "SECRET_NOT_PROVIDED");
231
+ return;
232
+ }
233
+ try {
234
+ const updatedUser = await sessionAuthService.resetUserPassword(
235
+ userId,
236
+ secret,
237
+ password
238
+ );
239
+ logger.info(
240
+ `Password changed - User: Name: ${updatedUser.name}, id: ${String(updatedUser._id)}`
241
+ );
242
+ await sendEmail({
243
+ type: "passwordChangeConfirmation",
244
+ to: updatedUser.email,
245
+ username: updatedUser.name
246
+ });
247
+ const formattedUser = mapUserToAPI(updatedUser);
248
+ const responseData = formatResponse({ data: formattedUser });
249
+ res.json(responseData);
250
+ return;
251
+ } catch (error) {
252
+ ErrorHandler.handleAppErrorResponse(res, error);
253
+ return;
254
+ }
255
+ };
256
+ const getSessionInformation = async (req, res, _next) => {
257
+ const { session_token: sessionToken } = req.query;
258
+ let { user } = res.locals;
259
+ const { organization, project } = res.locals;
260
+ try {
261
+ if (sessionToken) {
262
+ user = await userService.getUserBySession(sessionToken);
263
+ }
264
+ if (!user) {
265
+ ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
266
+ return;
267
+ }
268
+ const session = user.session;
269
+ if (!session) {
270
+ ErrorHandler.handleGenericErrorResponse(res, "SESSION_NOT_FOUND");
271
+ return;
272
+ }
273
+ const formattedUser = {
274
+ ...mapUserToAPI(user),
275
+ role: "user"
276
+ };
277
+ const responseData = formatResponse({
278
+ data: { session, user: formattedUser, organization, project }
279
+ });
280
+ res.json(responseData);
281
+ return;
282
+ } catch (error) {
283
+ ErrorHandler.handleAppErrorResponse(res, error);
284
+ return;
285
+ }
286
+ };
287
+ const githubLoginQuery = (req, res, _next) => {
288
+ const { origin } = req.query;
289
+ const { user } = res.locals;
290
+ if (user) {
291
+ ErrorHandler.handleGenericErrorResponse(res, "USER_ALREADY_LOGGED_IN");
292
+ return;
293
+ }
294
+ const encodedOrigin = encodeURIComponent(origin);
295
+ const redirectURI = `${process.env.BACKEND_URL}/api/auth/callback/github?redirect_uri=${encodedOrigin}`;
296
+ const encodedRedirectURI = encodeURIComponent(redirectURI);
297
+ res.redirect(
298
+ `https://github.com/login/oauth/authorize?client_id=${process.env.GITHUB_CLIENT_ID}&redirect_uri=${encodedRedirectURI}`
299
+ );
300
+ };
301
+ const githubCallback = async (req, res, _next) => {
302
+ const { code, redirect_uri } = req.query;
303
+ if (!code) {
304
+ const errorMessage = "Code not provided";
305
+ logger.error(errorMessage);
306
+ res.redirect(redirect_uri);
307
+ return;
308
+ }
309
+ if (!redirect_uri) {
310
+ const errorMessage = "Redirect URI not provided";
311
+ logger.error(errorMessage);
312
+ res.redirect(redirect_uri);
313
+ return;
314
+ }
315
+ try {
316
+ const tokenResponse = await fetch(
317
+ "https://github.com/login/oauth/access_token",
318
+ {
319
+ method: "POST",
320
+ headers: {
321
+ "Content-Type": "application/json",
322
+ Accept: "application/json"
323
+ },
324
+ body: JSON.stringify({
325
+ client_id: process.env.GITHUB_CLIENT_ID,
326
+ client_secret: process.env.GITHUB_CLIENT_SECRET,
327
+ code
328
+ })
329
+ }
330
+ );
331
+ const tokenData = await tokenResponse.json();
332
+ const userResponse = await fetch("https://api.github.com/user", {
333
+ method: "GET",
334
+ headers: {
335
+ Authorization: `Bearer ${tokenData.access_token}`,
336
+ Accept: "application/vnd.github.v3+json"
337
+ }
338
+ });
339
+ if (!userResponse.ok) {
340
+ throw new GenericError("GITHUB_FETCH_USER_DATA_FAILED", { userResponse });
341
+ }
342
+ const userData = await userResponse.json();
343
+ const emailResponse = await fetch("https://api.github.com/user/emails", {
344
+ method: "GET",
345
+ headers: {
346
+ Authorization: `Bearer ${tokenData.access_token}`,
347
+ Accept: "application/vnd.github.v3+json"
348
+ }
349
+ });
350
+ if (!emailResponse.ok) {
351
+ throw new GenericError("GIT_HUB_FETCH_USER_EMAIL_FAILED", {
352
+ emailResponse
353
+ });
354
+ }
355
+ const emails = await emailResponse.json();
356
+ const primaryEmail = emails.find((email) => email.primary)?.email;
357
+ if (!primaryEmail) {
358
+ const errorMessage = "Primary email not found";
359
+ logger.error(errorMessage);
360
+ const responseCode = HttpStatusCodes.NOT_FOUND_404;
361
+ res.redirect(responseCode, redirect_uri);
362
+ return;
363
+ }
364
+ let existingUser = await userService.getUserByEmail(primaryEmail);
365
+ if (existingUser) {
366
+ const existingProvider = await sessionAuthService.getUserProvider(
367
+ existingUser._id,
368
+ "github"
369
+ );
370
+ if (existingProvider?.providerAccountId !== userData.id) {
371
+ const updatedUser2 = await sessionAuthService.updateUserProvider(
372
+ existingUser._id,
373
+ "github",
374
+ {
375
+ providerAccountId: userData.id
376
+ }
377
+ );
378
+ logger.info(
379
+ `GitHub login provider updated - User: Name: ${updatedUser2.name}, id: ${String(updatedUser2._id)}`
380
+ );
381
+ if (updatedUser2) {
382
+ existingUser = updatedUser2;
383
+ }
384
+ }
385
+ const updatedUser = await userService.updateUserById(existingUser._id, {
386
+ name: existingUser.name ?? userData.name
387
+ });
388
+ await sessionAuthService.setUserAuth(res, updatedUser);
389
+ res.redirect(redirect_uri);
390
+ return;
391
+ }
392
+ const userInformation = {
393
+ name: userData.name,
394
+ email: primaryEmail
395
+ };
396
+ const userProvider = {
397
+ provider: "github",
398
+ providerAccountId: userData.id
399
+ };
400
+ const user = await userService.createUser({
401
+ ...userInformation,
402
+ provider: [userProvider]
403
+ });
404
+ await sessionAuthService.setUserAuth(res, user);
405
+ logger.info(
406
+ `GitHub login - User: Name: ${user.name}, id: ${String(user._id)}`
407
+ );
408
+ await sendEmail({
409
+ type: "welcome",
410
+ to: user.email,
411
+ username: user.name,
412
+ loginLink: sessionAuthRoutes.loginEmailPassword.url
413
+ });
414
+ res.redirect(redirect_uri);
415
+ } catch (error) {
416
+ ErrorHandler.handleAppErrorResponse(res, error);
417
+ return;
418
+ }
419
+ };
420
+ const googleLoginQuery = (req, res, _next) => {
421
+ const { origin } = req.query;
422
+ const { user } = res.locals;
423
+ if (user) {
424
+ const errorMessage = `User already logged in - ${user?.email}`;
425
+ logger.error(errorMessage);
426
+ res.redirect(origin);
427
+ return;
428
+ }
429
+ const responseType = "code";
430
+ const scope = [
431
+ "https%3A//www.googleapis.com/auth/userinfo.email",
432
+ "https%3A//www.googleapis.com/auth/userinfo.profile"
433
+ ].join(" ");
434
+ const includeGrantedScopes = "false";
435
+ const encodedOrigin = encodeURIComponent(origin);
436
+ const state = JSON.stringify({ redirect_uri: encodedOrigin });
437
+ const redirectURI = `${process.env.BACKEND_URL}/api/auth/callback/google`;
438
+ res.redirect(
439
+ `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}`
440
+ );
441
+ };
442
+ const googleCallback = async (req, res, _next) => {
443
+ const { code, state } = req.query;
444
+ const decodedState = decodeURIComponent(state);
445
+ const { redirect_uri } = JSON.parse(decodedState);
446
+ if (!code) {
447
+ const errorMessage = "code not provided";
448
+ logger.error(errorMessage);
449
+ const responseCode = HttpStatusCodes.BAD_REQUEST_400;
450
+ res.redirect(responseCode, redirect_uri);
451
+ return;
452
+ }
453
+ if (!redirect_uri) {
454
+ const errorMessage = "Redirect URI not provided";
455
+ logger.error(errorMessage);
456
+ const responseCode = HttpStatusCodes.BAD_REQUEST_400;
457
+ res.redirect(responseCode, redirect_uri);
458
+ return;
459
+ }
460
+ try {
461
+ const tokenResponse = await fetch("https://oauth2.googleapis.com/token", {
462
+ method: "POST",
463
+ headers: {
464
+ "Content-Type": "application/x-www-form-urlencoded"
465
+ },
466
+ body: new URLSearchParams({
467
+ code,
468
+ redirect_uri: `${process.env.BACKEND_URL}/api/auth/callback/google`,
469
+ client_id: process.env.GOOGLE_CLIENT_ID,
470
+ client_secret: process.env.GOOGLE_CLIENT_SECRET,
471
+ grant_type: "authorization_code"
472
+ })
473
+ });
474
+ const responseData = await tokenResponse.json();
475
+ const { access_token: accessToken } = responseData;
476
+ if (!accessToken) {
477
+ const errorMessage = "Failed to fetch access_token";
478
+ logger.error(errorMessage);
479
+ const responseCode = HttpStatusCodes.INTERNAL_SERVER_ERROR_500;
480
+ res.redirect(responseCode, redirect_uri);
481
+ return;
482
+ }
483
+ const userResponse = await fetch(
484
+ "https://www.googleapis.com/oauth2/v3/userinfo",
485
+ {
486
+ method: "GET",
487
+ headers: {
488
+ Authorization: `Bearer ${accessToken}`
489
+ }
490
+ }
491
+ );
492
+ const userData = await userResponse.json();
493
+ if (!userData.email) {
494
+ const errorMessage = "Failed to fetch user data from Google";
495
+ logger.error(errorMessage);
496
+ const responseCode = HttpStatusCodes.INTERNAL_SERVER_ERROR_500;
497
+ res.redirect(responseCode, redirect_uri);
498
+ return;
499
+ }
500
+ let existingUser = await userService.getUserByEmail(userData.email);
501
+ if (existingUser) {
502
+ const existingProvider = await sessionAuthService.getUserProvider(
503
+ existingUser._id,
504
+ "google"
505
+ );
506
+ if (existingProvider?.providerAccountId !== userData.sub) {
507
+ const updatedUser2 = await sessionAuthService.updateUserProvider(
508
+ existingUser._id,
509
+ "google",
510
+ {
511
+ providerAccountId: userData.id
512
+ }
513
+ );
514
+ logger.info(
515
+ `Google login provider updated - User: Name: ${updatedUser2.name}, id: ${String(updatedUser2._id)}`
516
+ );
517
+ if (updatedUser2) {
518
+ existingUser = updatedUser2;
519
+ }
520
+ }
521
+ const updatedUser = await userService.updateUserById(existingUser._id, {
522
+ name: existingUser.name ?? userData.name
523
+ });
524
+ await sessionAuthService.setUserAuth(res, updatedUser);
525
+ res.redirect(redirect_uri);
526
+ return;
527
+ }
528
+ const userInformation = {
529
+ name: userData.name,
530
+ email: userData.email
531
+ };
532
+ const userProvider = {
533
+ provider: "google",
534
+ providerAccountId: userData.id
535
+ };
536
+ const user = await userService.createUser({
537
+ ...userInformation,
538
+ provider: [userProvider]
539
+ });
540
+ await sessionAuthService.setUserAuth(res, user);
541
+ logger.info(
542
+ `Google login - User: Name: ${user.name}, id: ${String(user._id)}`
543
+ );
544
+ await sendEmail({
545
+ type: "welcome",
546
+ to: user.email,
547
+ username: user.name,
548
+ loginLink: sessionAuthRoutes.loginEmailPassword.url
549
+ });
550
+ } catch (error) {
551
+ ErrorHandler.handleAppErrorResponse(res, error);
552
+ return;
553
+ }
554
+ };
555
+ export {
556
+ askResetPassword,
557
+ getSessionInformation,
558
+ githubCallback,
559
+ githubLoginQuery,
560
+ googleCallback,
561
+ googleLoginQuery,
562
+ logOut,
563
+ loginEmailPassword,
564
+ registerEmailPassword,
565
+ resetPassword,
566
+ setCSRFToken,
567
+ updatePassword,
568
+ validEmail
569
+ };
570
+ //# sourceMappingURL=sessionAuth.controller.mjs.map