@intlayer/backend 5.6.0 → 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 (508) 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/askDocQuestion.cjs +14 -9
  120. package/dist/cjs/utils/AI/askDocQuestion/askDocQuestion.cjs.map +1 -1
  121. package/dist/cjs/utils/AI/autocomplete/PROMPT.md +18 -2
  122. package/dist/cjs/utils/AI/autocomplete/index.cjs +8 -5
  123. package/dist/cjs/utils/AI/autocomplete/index.cjs.map +1 -1
  124. package/dist/cjs/utils/access.cjs +2 -0
  125. package/dist/cjs/utils/access.cjs.map +1 -0
  126. package/dist/cjs/utils/accessControl.cjs +7 -0
  127. package/dist/cjs/utils/accessControl.cjs.map +1 -1
  128. package/dist/cjs/utils/auth/getAuth.cjs +248 -0
  129. package/dist/cjs/utils/auth/getAuth.cjs.map +1 -0
  130. package/dist/cjs/utils/cors.cjs +55 -0
  131. package/dist/cjs/utils/cors.cjs.map +1 -0
  132. package/dist/cjs/utils/ensureMongoDocumentToObject.cjs.map +1 -1
  133. package/dist/cjs/utils/errors/ErrorHandler.cjs +2 -2
  134. package/dist/cjs/utils/errors/ErrorHandler.cjs.map +1 -1
  135. package/dist/cjs/utils/errors/errorCodes.cjs +114 -153
  136. package/dist/cjs/utils/errors/errorCodes.cjs.map +1 -1
  137. package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs.map +1 -1
  138. package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs.map +1 -1
  139. package/dist/cjs/utils/filtersAndPagination/getTagFiltersAndPagination.cjs.map +1 -1
  140. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs +1 -1
  141. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs.map +1 -1
  142. package/dist/cjs/utils/mapper/dictionary.cjs.map +1 -1
  143. package/dist/cjs/utils/mapper/organization.cjs +10 -8
  144. package/dist/cjs/utils/mapper/organization.cjs.map +1 -1
  145. package/dist/cjs/utils/mapper/project.cjs +5 -18
  146. package/dist/cjs/utils/mapper/project.cjs.map +1 -1
  147. package/dist/cjs/utils/mapper/tag.cjs +4 -2
  148. package/dist/cjs/utils/mapper/tag.cjs.map +1 -1
  149. package/dist/cjs/utils/mapper/user.cjs +6 -3
  150. package/dist/cjs/utils/mapper/user.cjs.map +1 -1
  151. package/dist/cjs/utils/mergeFunctionTypes.cjs +17 -0
  152. package/dist/cjs/utils/mergeFunctionTypes.cjs.map +1 -0
  153. package/dist/cjs/utils/mongoDB/connectDB.cjs +3 -1
  154. package/dist/cjs/utils/mongoDB/connectDB.cjs.map +1 -1
  155. package/dist/cjs/utils/mongoDB/types.cjs +17 -0
  156. package/dist/cjs/utils/mongoDB/types.cjs.map +1 -0
  157. package/dist/cjs/utils/oAuth2.cjs.map +1 -1
  158. package/dist/cjs/utils/permissions.cjs +166 -0
  159. package/dist/cjs/utils/permissions.cjs.map +1 -0
  160. package/dist/cjs/utils/rateLimiter.cjs +88 -0
  161. package/dist/cjs/utils/rateLimiter.cjs.map +1 -0
  162. package/dist/esm/controllers/ai.controller.mjs +10 -7
  163. package/dist/esm/controllers/ai.controller.mjs.map +1 -1
  164. package/dist/esm/controllers/dictionary.controller.mjs +50 -58
  165. package/dist/esm/controllers/dictionary.controller.mjs.map +1 -1
  166. package/dist/esm/controllers/eventListener.controller.mjs +2 -8
  167. package/dist/esm/controllers/eventListener.controller.mjs.map +1 -1
  168. package/dist/esm/controllers/newsletter.controller.mjs +38 -3
  169. package/dist/esm/controllers/newsletter.controller.mjs.map +1 -1
  170. package/dist/esm/controllers/oAuth2.controller.mjs +2 -2
  171. package/dist/esm/controllers/oAuth2.controller.mjs.map +1 -1
  172. package/dist/esm/controllers/organization.controller.mjs +95 -106
  173. package/dist/esm/controllers/organization.controller.mjs.map +1 -1
  174. package/dist/esm/controllers/project.controller.mjs +81 -83
  175. package/dist/esm/controllers/project.controller.mjs.map +1 -1
  176. package/dist/esm/controllers/projectAccessKey.controller.mjs +30 -24
  177. package/dist/esm/controllers/projectAccessKey.controller.mjs.map +1 -1
  178. package/dist/esm/controllers/search.controller.mjs.map +1 -1
  179. package/dist/esm/controllers/stripe.controller.mjs +4 -25
  180. package/dist/esm/controllers/stripe.controller.mjs.map +1 -1
  181. package/dist/esm/controllers/tag.controller.mjs +27 -16
  182. package/dist/esm/controllers/tag.controller.mjs.map +1 -1
  183. package/dist/esm/controllers/user.controller.mjs +85 -22
  184. package/dist/esm/controllers/user.controller.mjs.map +1 -1
  185. package/dist/esm/emails/InviteUserEmail.mjs +32 -14
  186. package/dist/esm/emails/InviteUserEmail.mjs.map +1 -1
  187. package/dist/esm/emails/OAuthTokenCreatedEmail.mjs +254 -0
  188. package/dist/esm/emails/OAuthTokenCreatedEmail.mjs.map +1 -0
  189. package/dist/esm/emails/ResetUserPassword.mjs +29 -17
  190. package/dist/esm/emails/ResetUserPassword.mjs.map +1 -1
  191. package/dist/esm/emails/ValidateUserEmail.mjs +29 -38
  192. package/dist/esm/emails/ValidateUserEmail.mjs.map +1 -1
  193. package/dist/esm/emails/Welcome.mjs +29 -17
  194. package/dist/esm/emails/Welcome.mjs.map +1 -1
  195. package/dist/esm/emails/index.mjs +3 -2
  196. package/dist/esm/emails/index.mjs.map +1 -1
  197. package/dist/esm/export.mjs +1 -3
  198. package/dist/esm/export.mjs.map +1 -1
  199. package/dist/esm/index.mjs +60 -111
  200. package/dist/esm/index.mjs.map +1 -1
  201. package/dist/esm/middlewares/oAuth2.middleware.mjs +27 -36
  202. package/dist/esm/middlewares/oAuth2.middleware.mjs.map +1 -1
  203. package/dist/esm/middlewares/request.middleware.mjs.map +1 -1
  204. package/dist/esm/middlewares/sessionAuth.middleware.mjs +16 -127
  205. package/dist/esm/middlewares/sessionAuth.middleware.mjs.map +1 -1
  206. package/dist/esm/models/dictionary.model.mjs.map +1 -1
  207. package/dist/esm/models/discussion.model.mjs.map +1 -1
  208. package/dist/esm/models/oAuth2.model.mjs +4 -1
  209. package/dist/esm/models/oAuth2.model.mjs.map +1 -1
  210. package/dist/esm/models/organization.model.mjs +1 -4
  211. package/dist/esm/models/organization.model.mjs.map +1 -1
  212. package/dist/esm/models/project.model.mjs +4 -1
  213. package/dist/esm/models/project.model.mjs.map +1 -1
  214. package/dist/esm/models/session.model.mjs +10 -0
  215. package/dist/esm/models/session.model.mjs.map +1 -0
  216. package/dist/esm/models/tag.model.mjs.map +1 -1
  217. package/dist/esm/models/user.model.mjs.map +1 -1
  218. package/dist/esm/routes/ai.routes.mjs +3 -1
  219. package/dist/esm/routes/ai.routes.mjs.map +1 -1
  220. package/dist/esm/routes/dictionary.routes.mjs.map +1 -1
  221. package/dist/esm/routes/eventListener.routes.mjs +1 -1
  222. package/dist/esm/routes/eventListener.routes.mjs.map +1 -1
  223. package/dist/esm/routes/newsletter.routes.mjs.map +1 -1
  224. package/dist/esm/routes/organization.routes.mjs +8 -8
  225. package/dist/esm/routes/organization.routes.mjs.map +1 -1
  226. package/dist/esm/routes/project.routes.mjs +23 -14
  227. package/dist/esm/routes/project.routes.mjs.map +1 -1
  228. package/dist/esm/routes/search.routes.mjs.map +1 -1
  229. package/dist/esm/routes/stripe.routes.mjs.map +1 -1
  230. package/dist/esm/routes/tags.routes.mjs +4 -4
  231. package/dist/esm/routes/tags.routes.mjs.map +1 -1
  232. package/dist/esm/routes/user.routes.mjs +14 -14
  233. package/dist/esm/routes/user.routes.mjs.map +1 -1
  234. package/dist/esm/schemas/dictionary.schema.mjs +18 -1
  235. package/dist/esm/schemas/dictionary.schema.mjs.map +1 -1
  236. package/dist/esm/schemas/discussion.schema.mjs +18 -1
  237. package/dist/esm/schemas/discussion.schema.mjs.map +1 -1
  238. package/dist/esm/schemas/oAuth2.schema.mjs +18 -1
  239. package/dist/esm/schemas/oAuth2.schema.mjs.map +1 -1
  240. package/dist/esm/schemas/organization.schema.mjs +21 -1
  241. package/dist/esm/schemas/organization.schema.mjs.map +1 -1
  242. package/dist/esm/schemas/plans.schema.mjs +18 -1
  243. package/dist/esm/schemas/plans.schema.mjs.map +1 -1
  244. package/dist/esm/schemas/project.schema.mjs +21 -15
  245. package/dist/esm/schemas/project.schema.mjs.map +1 -1
  246. package/dist/esm/schemas/session.schema.mjs +39 -0
  247. package/dist/esm/schemas/session.schema.mjs.map +1 -0
  248. package/dist/esm/schemas/tag.schema.mjs +21 -4
  249. package/dist/esm/schemas/tag.schema.mjs.map +1 -1
  250. package/dist/esm/schemas/user.schema.mjs +18 -48
  251. package/dist/esm/schemas/user.schema.mjs.map +1 -1
  252. package/dist/esm/services/dictionary.service.mjs +6 -5
  253. package/dist/esm/services/dictionary.service.mjs.map +1 -1
  254. package/dist/esm/services/email.service.mjs +33 -16
  255. package/dist/esm/services/email.service.mjs.map +1 -1
  256. package/dist/esm/services/oAuth2.service.mjs +47 -10
  257. package/dist/esm/services/oAuth2.service.mjs.map +1 -1
  258. package/dist/esm/services/organization.service.mjs +16 -14
  259. package/dist/esm/services/organization.service.mjs.map +1 -1
  260. package/dist/esm/services/project.service.mjs +1 -1
  261. package/dist/esm/services/project.service.mjs.map +1 -1
  262. package/dist/esm/services/projectAccessKey.service.mjs +15 -31
  263. package/dist/esm/services/projectAccessKey.service.mjs.map +1 -1
  264. package/dist/esm/services/subscription.service.mjs +10 -10
  265. package/dist/esm/services/subscription.service.mjs.map +1 -1
  266. package/dist/esm/services/tag.service.mjs.map +1 -1
  267. package/dist/esm/services/user.service.mjs +2 -40
  268. package/dist/esm/services/user.service.mjs.map +1 -1
  269. package/dist/esm/types/user.types.mjs.map +1 -1
  270. package/dist/esm/utils/AI/aiSdk.mjs.map +1 -1
  271. package/dist/esm/utils/AI/askDocQuestion/askDocQuestion.mjs +14 -9
  272. package/dist/esm/utils/AI/askDocQuestion/askDocQuestion.mjs.map +1 -1
  273. package/dist/esm/utils/AI/autocomplete/PROMPT.md +18 -2
  274. package/dist/esm/utils/AI/autocomplete/index.mjs +8 -5
  275. package/dist/esm/utils/AI/autocomplete/index.mjs.map +1 -1
  276. package/dist/esm/utils/access.mjs +1 -0
  277. package/dist/esm/utils/access.mjs.map +1 -0
  278. package/dist/esm/utils/accessControl.mjs +7 -0
  279. package/dist/esm/utils/accessControl.mjs.map +1 -1
  280. package/dist/esm/utils/auth/getAuth.mjs +227 -0
  281. package/dist/esm/utils/auth/getAuth.mjs.map +1 -0
  282. package/dist/esm/utils/cors.mjs +31 -0
  283. package/dist/esm/utils/cors.mjs.map +1 -0
  284. package/dist/esm/utils/ensureMongoDocumentToObject.mjs.map +1 -1
  285. package/dist/esm/utils/errors/ErrorHandler.mjs +2 -2
  286. package/dist/esm/utils/errors/ErrorHandler.mjs.map +1 -1
  287. package/dist/esm/utils/errors/errorCodes.mjs +114 -153
  288. package/dist/esm/utils/errors/errorCodes.mjs.map +1 -1
  289. package/dist/esm/utils/filtersAndPagination/getOrganizationFiltersAndPagination.mjs.map +1 -1
  290. package/dist/esm/utils/filtersAndPagination/getProjectFiltersAndPagination.mjs.map +1 -1
  291. package/dist/esm/utils/filtersAndPagination/getTagFiltersAndPagination.mjs.map +1 -1
  292. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs +1 -1
  293. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs.map +1 -1
  294. package/dist/esm/utils/mapper/dictionary.mjs.map +1 -1
  295. package/dist/esm/utils/mapper/organization.mjs +8 -7
  296. package/dist/esm/utils/mapper/organization.mjs.map +1 -1
  297. package/dist/esm/utils/mapper/project.mjs +5 -18
  298. package/dist/esm/utils/mapper/project.mjs.map +1 -1
  299. package/dist/esm/utils/mapper/tag.mjs +4 -2
  300. package/dist/esm/utils/mapper/tag.mjs.map +1 -1
  301. package/dist/esm/utils/mapper/user.mjs +6 -3
  302. package/dist/esm/utils/mapper/user.mjs.map +1 -1
  303. package/dist/esm/utils/mergeFunctionTypes.mjs +1 -0
  304. package/dist/esm/utils/mergeFunctionTypes.mjs.map +1 -0
  305. package/dist/esm/utils/mongoDB/connectDB.mjs +3 -1
  306. package/dist/esm/utils/mongoDB/connectDB.mjs.map +1 -1
  307. package/dist/esm/utils/mongoDB/types.mjs +1 -0
  308. package/dist/esm/utils/mongoDB/types.mjs.map +1 -0
  309. package/dist/esm/utils/oAuth2.mjs +3 -3
  310. package/dist/esm/utils/oAuth2.mjs.map +1 -1
  311. package/dist/esm/utils/permissions.mjs +138 -0
  312. package/dist/esm/utils/permissions.mjs.map +1 -0
  313. package/dist/esm/utils/rateLimiter.mjs +53 -0
  314. package/dist/esm/utils/rateLimiter.mjs.map +1 -0
  315. package/dist/types/controllers/ai.controller.d.ts +12 -10
  316. package/dist/types/controllers/ai.controller.d.ts.map +1 -1
  317. package/dist/types/controllers/dictionary.controller.d.ts +8 -9
  318. package/dist/types/controllers/dictionary.controller.d.ts.map +1 -1
  319. package/dist/types/controllers/eventListener.controller.d.ts +2 -3
  320. package/dist/types/controllers/eventListener.controller.d.ts.map +1 -1
  321. package/dist/types/controllers/newsletter.controller.d.ts +5 -6
  322. package/dist/types/controllers/newsletter.controller.d.ts.map +1 -1
  323. package/dist/types/controllers/oAuth2.controller.d.ts +3 -3
  324. package/dist/types/controllers/oAuth2.controller.d.ts.map +1 -1
  325. package/dist/types/controllers/organization.controller.d.ts +22 -23
  326. package/dist/types/controllers/organization.controller.d.ts.map +1 -1
  327. package/dist/types/controllers/project.controller.d.ts +13 -14
  328. package/dist/types/controllers/project.controller.d.ts.map +1 -1
  329. package/dist/types/controllers/projectAccessKey.controller.d.ts +5 -6
  330. package/dist/types/controllers/projectAccessKey.controller.d.ts.map +1 -1
  331. package/dist/types/controllers/search.controller.d.ts +2 -3
  332. package/dist/types/controllers/search.controller.d.ts.map +1 -1
  333. package/dist/types/controllers/stripe.controller.d.ts +5 -6
  334. package/dist/types/controllers/stripe.controller.d.ts.map +1 -1
  335. package/dist/types/controllers/tag.controller.d.ts +9 -10
  336. package/dist/types/controllers/tag.controller.d.ts.map +1 -1
  337. package/dist/types/controllers/user.controller.d.ts +16 -19
  338. package/dist/types/controllers/user.controller.d.ts.map +1 -1
  339. package/dist/types/emails/InviteUserEmail.d.ts.map +1 -1
  340. package/dist/types/emails/OAuthTokenCreatedEmail.d.ts +21 -0
  341. package/dist/types/emails/OAuthTokenCreatedEmail.d.ts.map +1 -0
  342. package/dist/types/emails/ResetUserPassword.d.ts.map +1 -1
  343. package/dist/types/emails/Welcome.d.ts.map +1 -1
  344. package/dist/types/emails/index.d.ts +3 -2
  345. package/dist/types/emails/index.d.ts.map +1 -1
  346. package/dist/types/export.d.ts +2 -3
  347. package/dist/types/export.d.ts.map +1 -1
  348. package/dist/types/index.d.ts +1 -3
  349. package/dist/types/index.d.ts.map +1 -1
  350. package/dist/types/middlewares/oAuth2.middleware.d.ts +1 -2
  351. package/dist/types/middlewares/oAuth2.middleware.d.ts.map +1 -1
  352. package/dist/types/middlewares/request.middleware.d.ts +3 -3
  353. package/dist/types/middlewares/request.middleware.d.ts.map +1 -1
  354. package/dist/types/middlewares/sessionAuth.middleware.d.ts +3 -25
  355. package/dist/types/middlewares/sessionAuth.middleware.d.ts.map +1 -1
  356. package/dist/types/models/dictionary.model.d.ts +6 -5
  357. package/dist/types/models/dictionary.model.d.ts.map +1 -1
  358. package/dist/types/models/discussion.model.d.ts +7 -2
  359. package/dist/types/models/discussion.model.d.ts.map +1 -1
  360. package/dist/types/models/oAuth2.model.d.ts +3 -2
  361. package/dist/types/models/oAuth2.model.d.ts.map +1 -1
  362. package/dist/types/models/organization.model.d.ts +2 -12
  363. package/dist/types/models/organization.model.d.ts.map +1 -1
  364. package/dist/types/models/project.model.d.ts +2 -11
  365. package/dist/types/models/project.model.d.ts.map +1 -1
  366. package/dist/types/models/session.model.d.ts +3 -0
  367. package/dist/types/models/session.model.d.ts.map +1 -0
  368. package/dist/types/models/tag.model.d.ts.map +1 -1
  369. package/dist/types/models/user.model.d.ts.map +1 -1
  370. package/dist/types/routes/ai.routes.d.ts.map +1 -1
  371. package/dist/types/routes/organization.routes.d.ts +4 -4
  372. package/dist/types/routes/project.routes.d.ts +4 -4
  373. package/dist/types/routes/project.routes.d.ts.map +1 -1
  374. package/dist/types/routes/tags.routes.d.ts +2 -2
  375. package/dist/types/routes/user.routes.d.ts +6 -7
  376. package/dist/types/routes/user.routes.d.ts.map +1 -1
  377. package/dist/types/schemas/dictionary.schema.d.ts +6 -8
  378. package/dist/types/schemas/dictionary.schema.d.ts.map +1 -1
  379. package/dist/types/schemas/discussion.schema.d.ts +7 -5
  380. package/dist/types/schemas/discussion.schema.d.ts.map +1 -1
  381. package/dist/types/schemas/oAuth2.schema.d.ts +4 -3
  382. package/dist/types/schemas/oAuth2.schema.d.ts.map +1 -1
  383. package/dist/types/schemas/organization.schema.d.ts +6 -10
  384. package/dist/types/schemas/organization.schema.d.ts.map +1 -1
  385. package/dist/types/schemas/plans.schema.d.ts +6 -8
  386. package/dist/types/schemas/plans.schema.d.ts.map +1 -1
  387. package/dist/types/schemas/project.schema.d.ts +5 -17
  388. package/dist/types/schemas/project.schema.d.ts.map +1 -1
  389. package/dist/types/schemas/session.schema.d.ts +14 -0
  390. package/dist/types/schemas/session.schema.d.ts.map +1 -0
  391. package/dist/types/schemas/tag.schema.d.ts +6 -8
  392. package/dist/types/schemas/tag.schema.d.ts.map +1 -1
  393. package/dist/types/schemas/user.schema.d.ts +7 -5
  394. package/dist/types/schemas/user.schema.d.ts.map +1 -1
  395. package/dist/types/services/dictionary.service.d.ts +9 -9
  396. package/dist/types/services/dictionary.service.d.ts.map +1 -1
  397. package/dist/types/services/email.service.d.ts +4 -0
  398. package/dist/types/services/email.service.d.ts.map +1 -1
  399. package/dist/types/services/oAuth2.service.d.ts +23 -14
  400. package/dist/types/services/oAuth2.service.d.ts.map +1 -1
  401. package/dist/types/services/organization.service.d.ts +6 -12
  402. package/dist/types/services/organization.service.d.ts.map +1 -1
  403. package/dist/types/services/project.service.d.ts +5 -5
  404. package/dist/types/services/project.service.d.ts.map +1 -1
  405. package/dist/types/services/projectAccessKey.service.d.ts +5 -5
  406. package/dist/types/services/projectAccessKey.service.d.ts.map +1 -1
  407. package/dist/types/services/subscription.service.d.ts +1 -1
  408. package/dist/types/services/subscription.service.d.ts.map +1 -1
  409. package/dist/types/services/tag.service.d.ts +6 -6
  410. package/dist/types/services/tag.service.d.ts.map +1 -1
  411. package/dist/types/services/user.service.d.ts +7 -21
  412. package/dist/types/services/user.service.d.ts.map +1 -1
  413. package/dist/types/types/dictionary.types.d.ts +11 -9
  414. package/dist/types/types/dictionary.types.d.ts.map +1 -1
  415. package/dist/types/types/discussion.types.d.ts +5 -2
  416. package/dist/types/types/discussion.types.d.ts.map +1 -1
  417. package/dist/types/types/oAuth2.types.d.ts +5 -2
  418. package/dist/types/types/oAuth2.types.d.ts.map +1 -1
  419. package/dist/types/types/organization.types.d.ts +11 -8
  420. package/dist/types/types/organization.types.d.ts.map +1 -1
  421. package/dist/types/types/plan.types.d.ts +6 -3
  422. package/dist/types/types/plan.types.d.ts.map +1 -1
  423. package/dist/types/types/project.types.d.ts +25 -25
  424. package/dist/types/types/project.types.d.ts.map +1 -1
  425. package/dist/types/types/session.types.d.ts +31 -17
  426. package/dist/types/types/session.types.d.ts.map +1 -1
  427. package/dist/types/types/tag.types.d.ts +8 -6
  428. package/dist/types/types/tag.types.d.ts.map +1 -1
  429. package/dist/types/types/user.types.d.ts +14 -21
  430. package/dist/types/types/user.types.d.ts.map +1 -1
  431. package/dist/types/utils/AI/aiSdk.d.ts +2 -2
  432. package/dist/types/utils/AI/aiSdk.d.ts.map +1 -1
  433. package/dist/types/utils/AI/askDocQuestion/askDocQuestion.d.ts.map +1 -1
  434. package/dist/types/utils/AI/autocomplete/index.d.ts +4 -1
  435. package/dist/types/utils/AI/autocomplete/index.d.ts.map +1 -1
  436. package/dist/types/utils/access.d.ts +1 -0
  437. package/dist/types/utils/access.d.ts.map +1 -0
  438. package/dist/types/utils/accessControl.d.ts +9 -9
  439. package/dist/types/utils/accessControl.d.ts.map +1 -1
  440. package/dist/types/utils/auth/getAuth.d.ts +7 -0
  441. package/dist/types/utils/auth/getAuth.d.ts.map +1 -0
  442. package/dist/types/utils/cors.d.ts +3 -0
  443. package/dist/types/utils/cors.d.ts.map +1 -0
  444. package/dist/types/utils/ensureMongoDocumentToObject.d.ts +2 -2
  445. package/dist/types/utils/ensureMongoDocumentToObject.d.ts.map +1 -1
  446. package/dist/types/utils/errors/ErrorHandler.d.ts +1 -1
  447. package/dist/types/utils/errors/ErrorHandler.d.ts.map +1 -1
  448. package/dist/types/utils/errors/errorCodes.d.ts +57 -96
  449. package/dist/types/utils/errors/errorCodes.d.ts.map +1 -1
  450. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts +1 -1
  451. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts.map +1 -1
  452. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts +1 -1
  453. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts.map +1 -1
  454. package/dist/types/utils/filtersAndPagination/getTagFiltersAndPagination.d.ts +1 -1
  455. package/dist/types/utils/filtersAndPagination/getTagFiltersAndPagination.d.ts.map +1 -1
  456. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts +1 -1
  457. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts.map +1 -1
  458. package/dist/types/utils/mapper/dictionary.d.ts +1 -1
  459. package/dist/types/utils/mapper/dictionary.d.ts.map +1 -1
  460. package/dist/types/utils/mapper/organization.d.ts +3 -2
  461. package/dist/types/utils/mapper/organization.d.ts.map +1 -1
  462. package/dist/types/utils/mapper/project.d.ts +4 -5
  463. package/dist/types/utils/mapper/project.d.ts.map +1 -1
  464. package/dist/types/utils/mapper/tag.d.ts +1 -1
  465. package/dist/types/utils/mapper/tag.d.ts.map +1 -1
  466. package/dist/types/utils/mapper/user.d.ts +2 -2
  467. package/dist/types/utils/mapper/user.d.ts.map +1 -1
  468. package/dist/types/utils/mergeFunctionTypes.d.ts +18 -0
  469. package/dist/types/utils/mergeFunctionTypes.d.ts.map +1 -0
  470. package/dist/types/utils/mongoDB/connectDB.d.ts +1 -1
  471. package/dist/types/utils/mongoDB/connectDB.d.ts.map +1 -1
  472. package/dist/types/utils/mongoDB/types.d.ts +11 -0
  473. package/dist/types/utils/mongoDB/types.d.ts.map +1 -0
  474. package/dist/types/utils/permissions.d.ts +115 -0
  475. package/dist/types/utils/permissions.d.ts.map +1 -0
  476. package/dist/types/utils/rateLimiter.d.ts +4 -0
  477. package/dist/types/utils/rateLimiter.d.ts.map +1 -0
  478. package/package.json +15 -15
  479. package/dist/cjs/controllers/sessionAuth.controller.cjs +0 -839
  480. package/dist/cjs/controllers/sessionAuth.controller.cjs.map +0 -1
  481. package/dist/cjs/routes/sessionAuth.routes.cjs +0 -154
  482. package/dist/cjs/routes/sessionAuth.routes.cjs.map +0 -1
  483. package/dist/cjs/services/sessionAuth.service.cjs +0 -385
  484. package/dist/cjs/services/sessionAuth.service.cjs.map +0 -1
  485. package/dist/cjs/utils/CSRF.cjs +0 -50
  486. package/dist/cjs/utils/CSRF.cjs.map +0 -1
  487. package/dist/cjs/utils/cookies.cjs +0 -59
  488. package/dist/cjs/utils/cookies.cjs.map +0 -1
  489. package/dist/esm/controllers/sessionAuth.controller.mjs +0 -790
  490. package/dist/esm/controllers/sessionAuth.controller.mjs.map +0 -1
  491. package/dist/esm/routes/sessionAuth.routes.mjs +0 -142
  492. package/dist/esm/routes/sessionAuth.routes.mjs.map +0 -1
  493. package/dist/esm/services/sessionAuth.service.mjs +0 -337
  494. package/dist/esm/services/sessionAuth.service.mjs.map +0 -1
  495. package/dist/esm/utils/CSRF.mjs +0 -24
  496. package/dist/esm/utils/CSRF.mjs.map +0 -1
  497. package/dist/esm/utils/cookies.mjs +0 -32
  498. package/dist/esm/utils/cookies.mjs.map +0 -1
  499. package/dist/types/controllers/sessionAuth.controller.d.ts +0 -140
  500. package/dist/types/controllers/sessionAuth.controller.d.ts.map +0 -1
  501. package/dist/types/routes/sessionAuth.routes.d.ts +0 -77
  502. package/dist/types/routes/sessionAuth.routes.d.ts.map +0 -1
  503. package/dist/types/services/sessionAuth.service.d.ts +0 -141
  504. package/dist/types/services/sessionAuth.service.d.ts.map +0 -1
  505. package/dist/types/utils/CSRF.d.ts +0 -3
  506. package/dist/types/utils/CSRF.d.ts.map +0 -1
  507. package/dist/types/utils/cookies.d.ts +0 -12
  508. package/dist/types/utils/cookies.d.ts.map +0 -1
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var getAuth_exports = {};
20
+ __export(getAuth_exports, {
21
+ formatSession: () => formatSession,
22
+ getAuth: () => getAuth
23
+ });
24
+ module.exports = __toCommonJS(getAuth_exports);
25
+ var import_user = require('./../../controllers/user.controller.cjs');
26
+ var import_logger = require('./../../logger/index.cjs');
27
+ var import_email = require('./../../services/email.service.cjs');
28
+ var import_organization = require('./../../services/organization.service.cjs');
29
+ var import_project = require('./../../services/project.service.cjs');
30
+ var import_user2 = require('./../../services/user.service.cjs');
31
+ var import_organization2 = require('./../../utils/mapper/organization.cjs');
32
+ var import_project2 = require('./../../utils/mapper/project.cjs');
33
+ var import_user3 = require('./../../utils/mapper/user.cjs');
34
+ var import_permissions = require('./../../utils/permissions.cjs');
35
+ var import_better_auth = require("better-auth");
36
+ var import_mongodb = require("better-auth/adapters/mongodb");
37
+ var import_api = require("better-auth/api");
38
+ var import_plugins = require("better-auth/plugins");
39
+ const formatSession = (session) => {
40
+ const roles = (0, import_permissions.getSessionRoles)(session);
41
+ let permissions = (0, import_permissions.computeEffectivePermission)(roles);
42
+ if (session.permissions) {
43
+ permissions = (0, import_permissions.intersectPermissions)(permissions, session.permissions);
44
+ }
45
+ const resultSession = {
46
+ user: (0, import_user3.mapUserToAPI)(session.user),
47
+ organization: (0, import_organization2.mapOrganizationToAPI)(session.organization),
48
+ project: (0, import_project2.mapProjectToAPI)(session.project),
49
+ authType: "session",
50
+ permissions,
51
+ roles
52
+ };
53
+ return resultSession;
54
+ };
55
+ const getAuth = (dbClient) => {
56
+ if (!dbClient) {
57
+ throw new Error("MongoDB connection not established");
58
+ }
59
+ const auth = (0, import_better_auth.betterAuth)({
60
+ appName: "Intlayer",
61
+ database: (0, import_mongodb.mongodbAdapter)(dbClient.db()),
62
+ /**
63
+ * User model
64
+ */
65
+ user: {
66
+ modelName: "users"
67
+ },
68
+ databaseHooks: {
69
+ user: {
70
+ create: {
71
+ // Runs once, immediately after the INSERT
72
+ after: async (user) => {
73
+ if (!user?.emailVerified) return;
74
+ await (0, import_email.sendEmail)({
75
+ type: "welcome",
76
+ to: user.email,
77
+ username: user.name ?? user.email.split("@")[0],
78
+ loginLink: `${process.env.CLIENT_URL}/auth/login`,
79
+ locale: user.lang
80
+ });
81
+ import_logger.logger.info("Welcome e\u2011mail delivered", {
82
+ email: user.email
83
+ });
84
+ }
85
+ }
86
+ }
87
+ },
88
+ hooks: {
89
+ after: (0, import_api.createAuthMiddleware)(async (ctx) => {
90
+ const { path, context } = ctx;
91
+ const newUser = context.newSession?.user;
92
+ const existingUser = context.session?.user;
93
+ const user = newUser ?? existingUser;
94
+ if (!user) return;
95
+ if (["/verify-email"].includes(path)) {
96
+ (0, import_user.sendVerificationUpdate)(user);
97
+ import_logger.logger.info("SSE verification update sent", {
98
+ email: user.email,
99
+ userId: user.id
100
+ });
101
+ await (0, import_email.sendEmail)({
102
+ type: "welcome",
103
+ to: user.email,
104
+ username: user.name ?? user.email.split("@")[0],
105
+ loginLink: `${process.env.CLIENT_URL}/auth/login`,
106
+ locale: user.lang
107
+ });
108
+ import_logger.logger.info("Welcome e\u2011mail delivered", {
109
+ email: user.email
110
+ });
111
+ }
112
+ })
113
+ },
114
+ advanced: {
115
+ // 1️⃣ Change or drop the global prefix
116
+ // cookiePrefix: "intlayer", // => intlayer.session_token
117
+ cookiePrefix: "intlayer",
118
+ // => session_token (no prefix)
119
+ // 2️⃣ Override just the session‑token cookie
120
+ cookies: {
121
+ session_token: {
122
+ // name: 'intlayer_session_token', // final name depends on the prefix above
123
+ // attributes: { sameSite: "lax", maxAge: 60 * 60 * 24 } // optional
124
+ }
125
+ }
126
+ // 3️⃣ (optional) turn off the automatic __Secure‑ prefix in non‑prod
127
+ // useSecureCookies: false,
128
+ },
129
+ session: {
130
+ modelName: "sessions",
131
+ id: "id",
132
+ additionalFields: {
133
+ activeOrganizationId: { type: "string", nullable: true, input: false },
134
+ activeProjectId: { type: "string", nullable: true, input: false }
135
+ }
136
+ },
137
+ plugins: [
138
+ (0, import_plugins.customSession)(async ({ session }) => {
139
+ const typedSession = session;
140
+ let userAPI = null;
141
+ let organizationAPI = null;
142
+ let projectAPI = null;
143
+ if (typedSession.userId) {
144
+ const userData = await (0, import_user2.getUserById)(typedSession.userId);
145
+ if (userData) {
146
+ userAPI = (0, import_user3.mapUserToAPI)(userData);
147
+ }
148
+ }
149
+ if (typedSession.activeOrganizationId) {
150
+ const orgData = await (0, import_organization.getOrganizationById)(
151
+ typedSession.activeOrganizationId
152
+ );
153
+ if (orgData) {
154
+ organizationAPI = (0, import_organization2.mapOrganizationToAPI)(orgData);
155
+ }
156
+ }
157
+ if (typedSession.activeProjectId) {
158
+ const projectData = await (0, import_project.getProjectById)(
159
+ typedSession.activeProjectId
160
+ );
161
+ if (projectData) {
162
+ projectAPI = (0, import_project2.mapProjectToAPI)(projectData);
163
+ }
164
+ }
165
+ const sessionWithNoPermission = {
166
+ session: typedSession,
167
+ user: userAPI,
168
+ organization: organizationAPI ?? null,
169
+ project: projectAPI ?? null,
170
+ authType: "session"
171
+ };
172
+ return formatSession(sessionWithNoPermission);
173
+ })
174
+ ],
175
+ emailAndPassword: {
176
+ enabled: true,
177
+ disableSignUp: false,
178
+ requireEmailVerification: true,
179
+ minPasswordLength: 8,
180
+ maxPasswordLength: 128,
181
+ autoSignIn: true,
182
+ sendResetPassword: async ({ user, url }) => {
183
+ import_logger.logger.info("sending reset password email", { email: user.email });
184
+ await (0, import_email.sendEmail)({
185
+ type: "resetPassword",
186
+ to: user.email,
187
+ username: user.name ?? user.email.split("@")[0],
188
+ resetLink: url
189
+ });
190
+ },
191
+ resetPasswordTokenExpiresIn: 3600
192
+ },
193
+ accountLinking: {
194
+ enabled: true,
195
+ // allow linking in general
196
+ trustedProviders: ["google", "github"]
197
+ // optional: auto‑link when Google verifies the e‑mail
198
+ },
199
+ emailVerification: {
200
+ autoSignInAfterVerification: true,
201
+ sendVerificationEmail: async ({ user, url }) => {
202
+ import_logger.logger.info("sending verification email", { email: user.email });
203
+ await (0, import_email.sendEmail)({
204
+ type: "validate",
205
+ to: user.email,
206
+ username: user.name ?? user.email.split("@")[0],
207
+ validationLink: url
208
+ });
209
+ }
210
+ },
211
+ crossSubDomainCookies: {
212
+ enabled: true,
213
+ additionalCookies: ["session_token"],
214
+ domain: process.env.CLIENT_URL
215
+ },
216
+ cookiePrefix: "intlayer",
217
+ cookies: {
218
+ session_token: {
219
+ name: "session_token",
220
+ attributes: {
221
+ httpOnly: true,
222
+ secure: true
223
+ }
224
+ }
225
+ },
226
+ trustedOrigins: [process.env.CLIENT_URL],
227
+ socialProviders: {
228
+ google: {
229
+ clientId: process.env.GOOGLE_CLIENT_ID,
230
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET
231
+ },
232
+ github: {
233
+ clientId: process.env.GITHUB_CLIENT_ID,
234
+ clientSecret: process.env.GITHUB_CLIENT_SECRET
235
+ }
236
+ },
237
+ logger: {
238
+ log: (level, message, ...args) => import_logger.logger[level](message, ...args)
239
+ }
240
+ });
241
+ return auth;
242
+ };
243
+ // Annotate the CommonJS export names for ESM import in node:
244
+ 0 && (module.exports = {
245
+ formatSession,
246
+ getAuth
247
+ });
248
+ //# sourceMappingURL=getAuth.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/auth/getAuth.ts"],"sourcesContent":["import type { OrganizationAPI } from '@/types/organization.types';\nimport type { ProjectAPI } from '@/types/project.types';\nimport type {\n SessionAPI,\n SessionContext,\n SessionDataApi,\n} from '@/types/session.types';\nimport type { User, UserAPI } from '@/types/user.types';\nimport { sendVerificationUpdate } from '@controllers/user.controller';\nimport { logger } from '@logger';\nimport { sendEmail } from '@services/email.service';\nimport { getOrganizationById } from '@services/organization.service';\nimport { getProjectById } from '@services/project.service';\nimport { getUserById } from '@services/user.service';\nimport { mapOrganizationToAPI } from '@utils/mapper/organization';\nimport { mapProjectToAPI } from '@utils/mapper/project';\nimport { mapUserToAPI } from '@utils/mapper/user';\nimport {\n computeEffectivePermission,\n getSessionRoles,\n intersectPermissions,\n} from '@utils/permissions';\nimport { betterAuth, OmitId } from 'better-auth';\nimport { mongodbAdapter } from 'better-auth/adapters/mongodb';\nimport { createAuthMiddleware } from 'better-auth/api';\nimport { customSession } from 'better-auth/plugins';\nimport type { MongoClient } from 'mongodb';\n\nexport type Auth = ReturnType<typeof betterAuth>;\n\nexport const formatSession = (session: SessionContext): OmitId<SessionAPI> => {\n const roles = getSessionRoles(session);\n let permissions = computeEffectivePermission(roles);\n\n // Intersect in the case a Access Token try to override the permissions\n if (session.permissions) {\n permissions = intersectPermissions(permissions, session.permissions);\n }\n\n const resultSession = {\n user: mapUserToAPI(session.user),\n organization: mapOrganizationToAPI(session.organization),\n project: mapProjectToAPI(session.project),\n authType: 'session',\n permissions,\n roles,\n } as OmitId<SessionAPI>;\n\n return resultSession;\n};\n\nexport const getAuth = (dbClient: MongoClient): Auth => {\n if (!dbClient) {\n throw new Error('MongoDB connection not established');\n }\n\n const auth = betterAuth({\n appName: 'Intlayer',\n\n database: mongodbAdapter(dbClient.db()),\n\n /**\n * User model\n */\n user: {\n modelName: 'users',\n },\n\n databaseHooks: {\n user: {\n create: {\n // Runs once, immediately after the INSERT\n after: async (user) => {\n if (!user?.emailVerified) return;\n\n await sendEmail({\n type: 'welcome',\n to: user.email,\n username: user.name ?? user.email.split('@')[0],\n loginLink: `${process.env.CLIENT_URL}/auth/login`,\n locale: (user as any).lang,\n });\n logger.info('Welcome e‑mail delivered', {\n email: user.email,\n });\n },\n },\n },\n },\n\n hooks: {\n after: createAuthMiddleware(async (ctx) => {\n const { path, context } = ctx;\n\n const newUser = context.newSession?.user;\n const existingUser = context.session?.user;\n const user = newUser ?? existingUser;\n\n if (!user) return;\n\n if (['/verify-email'].includes(path)) {\n sendVerificationUpdate(user as unknown as User);\n logger.info('SSE verification update sent', {\n email: user.email,\n userId: user.id,\n });\n\n await sendEmail({\n type: 'welcome',\n to: user.email,\n username: user.name ?? user.email.split('@')[0],\n loginLink: `${process.env.CLIENT_URL}/auth/login`,\n locale: (user as any).lang,\n });\n logger.info('Welcome e‑mail delivered', {\n email: user.email,\n });\n }\n }),\n },\n\n advanced: {\n // 1️⃣ Change or drop the global prefix\n // cookiePrefix: \"intlayer\", // => intlayer.session_token\n cookiePrefix: 'intlayer', // => session_token (no prefix)\n\n // 2️⃣ Override just the session‑token cookie\n cookies: {\n session_token: {\n // name: 'intlayer_session_token', // final name depends on the prefix above\n // attributes: { sameSite: \"lax\", maxAge: 60 * 60 * 24 } // optional\n },\n },\n\n // 3️⃣ (optional) turn off the automatic __Secure‑ prefix in non‑prod\n // useSecureCookies: false,\n },\n\n session: {\n modelName: 'sessions',\n id: 'id',\n\n additionalFields: {\n activeOrganizationId: { type: 'string', nullable: true, input: false },\n activeProjectId: { type: 'string', nullable: true, input: false },\n },\n },\n\n plugins: [\n customSession(async ({ session }) => {\n const typedSession = session as unknown as SessionDataApi;\n\n let userAPI: UserAPI | null = null;\n let organizationAPI: OrganizationAPI | null = null;\n let projectAPI: ProjectAPI | null = null;\n\n if (typedSession.userId) {\n const userData = await getUserById(typedSession.userId);\n\n if (userData) {\n userAPI = mapUserToAPI(userData);\n }\n }\n\n if (typedSession.activeOrganizationId) {\n const orgData = await getOrganizationById(\n typedSession.activeOrganizationId\n );\n\n if (orgData) {\n organizationAPI = mapOrganizationToAPI(orgData);\n }\n }\n if (typedSession.activeProjectId) {\n const projectData = await getProjectById(\n typedSession.activeProjectId\n );\n\n if (projectData) {\n projectAPI = mapProjectToAPI(projectData);\n }\n }\n\n const sessionWithNoPermission: SessionContext = {\n session: typedSession,\n user: userAPI!,\n organization: organizationAPI ?? null,\n project: projectAPI ?? null,\n authType: 'session',\n };\n\n return formatSession(sessionWithNoPermission);\n }),\n ],\n\n emailAndPassword: {\n enabled: true,\n disableSignUp: false,\n requireEmailVerification: true,\n minPasswordLength: 8,\n maxPasswordLength: 128,\n autoSignIn: true,\n sendResetPassword: async ({ user, url }) => {\n logger.info('sending reset password email', { email: user.email });\n await sendEmail({\n type: 'resetPassword',\n to: user.email,\n username: user.name ?? user.email.split('@')[0],\n resetLink: url,\n });\n },\n resetPasswordTokenExpiresIn: 3600,\n },\n accountLinking: {\n enabled: true, // allow linking in general\n trustedProviders: ['google', 'github'], // optional: auto‑link when Google verifies the e‑mail\n },\n emailVerification: {\n autoSignInAfterVerification: true,\n sendVerificationEmail: async ({ user, url }) => {\n logger.info('sending verification email', { email: user.email });\n await sendEmail({\n type: 'validate',\n to: user.email,\n username: user.name ?? user.email.split('@')[0],\n validationLink: url,\n });\n },\n },\n\n crossSubDomainCookies: {\n enabled: true,\n additionalCookies: ['session_token'],\n domain: process.env.CLIENT_URL as string,\n },\n cookiePrefix: 'intlayer',\n cookies: {\n session_token: {\n name: 'session_token',\n attributes: {\n httpOnly: true,\n secure: true,\n },\n },\n },\n\n trustedOrigins: [process.env.CLIENT_URL as string],\n\n socialProviders: {\n google: {\n clientId: process.env.GOOGLE_CLIENT_ID as string,\n clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,\n },\n github: {\n clientId: process.env.GITHUB_CLIENT_ID as string,\n clientSecret: process.env.GITHUB_CLIENT_SECRET as string,\n },\n },\n\n logger: {\n log: (level, message, ...args) => logger[level](message, ...args),\n },\n });\n\n return auth;\n};\n"],"mappings":"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","names":["import_user","import_organization","import_project"]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var cors_exports = {};
20
+ __export(cors_exports, {
21
+ corsOptions: () => corsOptions
22
+ });
23
+ module.exports = __toCommonJS(cors_exports);
24
+ var import_logger = require('./../logger/index.cjs');
25
+ const whitelist = [process.env.CLIENT_URL];
26
+ const corsOptions = {
27
+ origin: (origin, callback) => {
28
+ if (!origin) return callback(null, true);
29
+ if (whitelist.includes(origin)) {
30
+ import_logger.logger.info("whitelisted origin", origin);
31
+ return callback(null, true);
32
+ }
33
+ import_logger.logger.info("non whitelisted origin", origin);
34
+ callback(null, origin);
35
+ },
36
+ allowedHeaders: [
37
+ "authorization",
38
+ "Content-Type",
39
+ "credentials",
40
+ "cache-control",
41
+ "Access-Control-Allow-Origin",
42
+ "private-state-token-redemption",
43
+ "private-state-token-issuance",
44
+ "browsing-topics"
45
+ ],
46
+ exposedHeaders: [""],
47
+ preflightContinue: false,
48
+ methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
49
+ credentials: true
50
+ };
51
+ // Annotate the CommonJS export names for ESM import in node:
52
+ 0 && (module.exports = {
53
+ corsOptions
54
+ });
55
+ //# sourceMappingURL=cors.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/cors.ts"],"sourcesContent":["import { logger } from '@logger';\nimport { CorsOptions } from 'cors';\n\nconst whitelist = [process.env.CLIENT_URL!];\n\nexport const corsOptions: CorsOptions = {\n origin: (origin, callback) => {\n // Allow requests with no origin (like mobile apps or curl requests)\n if (!origin) return callback(null, true);\n\n if (whitelist.includes(origin)) {\n logger.info('whitelisted origin', origin);\n return callback(null, true);\n }\n\n logger.info('non whitelisted origin', origin);\n // Reflect the request's origin (echo back the origin header)\n callback(null, origin);\n },\n allowedHeaders: [\n 'authorization',\n 'Content-Type',\n 'credentials',\n 'cache-control',\n 'Access-Control-Allow-Origin',\n 'private-state-token-redemption',\n 'private-state-token-issuance',\n 'browsing-topics',\n ],\n exposedHeaders: [''],\n preflightContinue: false,\n methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n credentials: true,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AAGvB,MAAM,YAAY,CAAC,QAAQ,IAAI,UAAW;AAEnC,MAAM,cAA2B;AAAA,EACtC,QAAQ,CAAC,QAAQ,aAAa;AAE5B,QAAI,CAAC,OAAQ,QAAO,SAAS,MAAM,IAAI;AAEvC,QAAI,UAAU,SAAS,MAAM,GAAG;AAC9B,2BAAO,KAAK,sBAAsB,MAAM;AACxC,aAAO,SAAS,MAAM,IAAI;AAAA,IAC5B;AAEA,yBAAO,KAAK,0BAA0B,MAAM;AAE5C,aAAS,MAAM,MAAM;AAAA,EACvB;AAAA,EACA,gBAAgB;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC,EAAE;AAAA,EACnB,mBAAmB;AAAA,EACnB,SAAS;AAAA,EACT,aAAa;AACf;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/ensureMongoDocumentToObject.ts"],"sourcesContent":["import type { Document } from 'mongoose';\n\n/**\n * If the dictionary is a mongoose document, convert it to an object\n * @param potentialDocument - The potential document to convert.\n * @returns The potential document converted to an object.\n */\nexport const ensureMongoDocumentToObject = <T extends object | Document>(\n potentialDocument: T\n): T => {\n let potentialObject: T = potentialDocument as T;\n\n // If the user is a mongoose document, convert it to an object\n if (typeof (potentialDocument as Document).toObject === 'function') {\n potentialObject = (potentialDocument as Document).toObject();\n }\n\n return potentialObject as T;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,MAAM,8BAA8B,CACzC,sBACM;AACN,MAAI,kBAAqB;AAGzB,MAAI,OAAQ,kBAA+B,aAAa,YAAY;AAClE,sBAAmB,kBAA+B,SAAS;AAAA,EAC7D;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/ensureMongoDocumentToObject.ts"],"sourcesContent":["import type { Document, ObjectIdToString } from 'mongoose';\n\n/**\n * If the dictionary is a mongoose document, convert it to an object\n * @param potentialDocument - The potential document to convert.\n * @returns The potential document converted to an object.\n */\nexport const ensureMongoDocumentToObject = <T extends object | Document>(\n potentialDocument: T\n): ObjectIdToString<T> => {\n let potentialObject: T = potentialDocument as T;\n\n // If the user is a mongoose document, convert it to an object\n if (typeof (potentialDocument as Document).toObject === 'function') {\n potentialObject = (potentialDocument as Document).toObject();\n }\n\n return potentialObject as ObjectIdToString<T>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,MAAM,8BAA8B,CACzC,sBACwB;AACxB,MAAI,kBAAqB;AAGzB,MAAI,OAAQ,kBAA+B,aAAa,YAAY;AAClE,sBAAmB,kBAA+B,SAAS;AAAA,EAC7D;AAEA,SAAO;AACT;","names":[]}
@@ -24,9 +24,9 @@ module.exports = __toCommonJS(ErrorHandler_exports);
24
24
  var import_config = require("@intlayer/config");
25
25
  var import_logger = require('./../../logger/index.cjs');
26
26
  var import_responseData = require('./../../utils/responseData.cjs');
27
+ var import_export = require('./../../export.cjs');
27
28
  var import_express_intlayer = require("express-intlayer");
28
29
  var import_errorCodes = require('./errorCodes.cjs');
29
- var import_export = require('./../../export.cjs');
30
30
  class ErrorHandler {
31
31
  /**
32
32
  * Handles generic error responses by formatting and sending a JSON response.
@@ -72,7 +72,7 @@ class ErrorHandler {
72
72
  res,
73
73
  error.errorKey,
74
74
  isMultilingual ? error.multilingualTitle : error.title,
75
- isMultilingual ? error.multilingualMessage : error.multilingualMessage,
75
+ isMultilingual ? error.multilingualMessage : error.message,
76
76
  error.messageDetails ?? messageDetails,
77
77
  error.httpStatusCode,
78
78
  isPaginatedResponse
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/errors/ErrorHandler.ts"],"sourcesContent":["// Import required modules and types from their respective locations.\nimport { Locales } from '@intlayer/config';\nimport { logger } from '@logger';\nimport { formatPaginatedResponse, formatResponse } from '@utils/responseData';\nimport type { Response } from 'express';\n// @ts-ignore express-intlayer not build yet\nimport type { LanguageContent } from 'express-intlayer';\nimport { t } from 'express-intlayer';\nimport { type ErrorCodes, errorData } from './errorCodes';\nimport type { AppError } from './ErrorsClass';\nimport { type UserAPI, HttpStatusCodes } from '@/export';\n\n// Define a class named 'ErrorHandler' to encapsulate error handling logic.\nexport class ErrorHandler {\n /**\n * Handles generic error responses by formatting and sending a JSON response.\n * @param res - The response object provided by Express.js.\n * @param errorKey - A key representing the specific error.\n * @param statusCode - (Optional) A specific HTTP status code to use for the response.\n * @param isPaginatedResponse - Flag to determine if the response should be paginated.\n */\n static handleGenericErrorResponse(\n res: Response,\n errorKey: ErrorCodes,\n errorDetails?: object,\n statusCode?: HttpStatusCodes,\n isPaginatedResponse: boolean = false\n ) {\n const error = errorData[errorKey];\n const status = statusCode ?? error.statusCode; // Use the provided status code or default to the one in errorData.\n\n // Delegate to a more customizable error response handler.\n this.handleCustomErrorResponse(\n res,\n errorKey,\n error.title,\n error.message,\n errorDetails,\n status,\n isPaginatedResponse\n );\n }\n\n /**\n * Handles application-specific error responses by formatting and sending a JSON response.\n * @param res - The response object provided by Express.js.\n * @param error - The error object.\n * @param messageDetails - (Optional) Additional message details to include in the response.\n * @param isPaginatedResponse - (Optional) Flag to determine if the response should be paginated.\n */\n static handleAppErrorResponse(\n res: Response,\n error: AppError,\n messageDetails?: object,\n isPaginatedResponse: boolean = false\n ) {\n if (!error.isAppError) {\n this.handleCustomErrorResponse(\n res,\n error.errorKey ?? 'UNKNOWN_ERROR',\n 'Error',\n error.message ?? JSON.stringify(error),\n undefined,\n error.httpStatusCode ?? HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n isPaginatedResponse\n );\n }\n\n const isMultilingual = error.isMultilingual ?? false;\n // Delegate to a more customizable error response handler.\n this.handleCustomErrorResponse(\n res,\n error.errorKey,\n isMultilingual ? error.multilingualTitle : error.title,\n isMultilingual ? error.multilingualMessage : error.multilingualMessage,\n error.messageDetails ?? messageDetails,\n error.httpStatusCode,\n isPaginatedResponse\n );\n }\n\n /**\n * Handles more customizable error responses with detailed error messages and codes.\n * @param res - The response object.\n * @param errorKey - Error code key used to fetch the corresponding message and default status.\n * @param message - The localized error message object.\n * @param messageDetails - (Optional) Additional message details to include in the response.\n * @param statusCode - (Optional) HTTP status code, defaults to 500 if not specified.\n * @param isPaginatedResponse - Determines if the error should be part of a paginated response.\n */\n static handleCustomErrorResponse<T>(\n res: Response,\n errorKey: ErrorCodes | string,\n title: LanguageContent<string> | string,\n message: LanguageContent<string> | string,\n messageDetails?: object,\n statusCode?: HttpStatusCodes,\n isPaginatedResponse: boolean = false\n ) {\n const errorTitle = t(title as LanguageContent<string>, Locales.ENGLISH);\n const errorMessage = t(message as LanguageContent<string>, Locales.ENGLISH);\n logger.error(errorMessage, messageDetails); // Log the English version of the error message.\n const status = statusCode ?? HttpStatusCodes.INTERNAL_SERVER_ERROR_500; // Default to 500 if no status code is provided.\n\n if (isPaginatedResponse) {\n // Format the response as a paginated error response if requested.\n const responseData = formatPaginatedResponse<T>({\n error: {\n code: errorKey,\n title: errorTitle,\n message: errorMessage,\n },\n status,\n });\n res.status(status).json(responseData);\n return;\n }\n\n // Format the response as a standard non-paginated error response.\n const responseData = formatResponse<UserAPI>({\n error: {\n code: errorKey,\n title: errorTitle,\n message: errorMessage,\n ...messageDetails,\n },\n status,\n });\n\n res.status(status).json(responseData);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAwB;AACxB,oBAAuB;AACvB,0BAAwD;AAIxD,8BAAkB;AAClB,wBAA2C;AAE3C,oBAA8C;AAGvC,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxB,OAAO,2BACL,KACA,UACA,cACA,YACA,sBAA+B,OAC/B;AACA,UAAM,QAAQ,4BAAU,QAAQ;AAChC,UAAM,SAAS,cAAc,MAAM;AAGnC,SAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,uBACL,KACA,OACA,gBACA,sBAA+B,OAC/B;AACA,QAAI,CAAC,MAAM,YAAY;AACrB,WAAK;AAAA,QACH;AAAA,QACA,MAAM,YAAY;AAAA,QAClB;AAAA,QACA,MAAM,WAAW,KAAK,UAAU,KAAK;AAAA,QACrC;AAAA,QACA,MAAM,kBAAkB,8BAAgB;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,iBAAiB,MAAM,kBAAkB;AAE/C,SAAK;AAAA,MACH;AAAA,MACA,MAAM;AAAA,MACN,iBAAiB,MAAM,oBAAoB,MAAM;AAAA,MACjD,iBAAiB,MAAM,sBAAsB,MAAM;AAAA,MACnD,MAAM,kBAAkB;AAAA,MACxB,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,0BACL,KACA,UACA,OACA,SACA,gBACA,YACA,sBAA+B,OAC/B;AACA,UAAM,iBAAa,2BAAE,OAAkC,sBAAQ,OAAO;AACtE,UAAM,mBAAe,2BAAE,SAAoC,sBAAQ,OAAO;AAC1E,yBAAO,MAAM,cAAc,cAAc;AACzC,UAAM,SAAS,cAAc,8BAAgB;AAE7C,QAAI,qBAAqB;AAEvB,YAAMA,oBAAe,6CAA2B;AAAA,QAC9C,OAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,OAAO,MAAM,EAAE,KAAKA,aAAY;AACpC;AAAA,IACF;AAGA,UAAM,mBAAe,oCAAwB;AAAA,MAC3C,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,QACT,GAAG;AAAA,MACL;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,OAAO,MAAM,EAAE,KAAK,YAAY;AAAA,EACtC;AACF;","names":["responseData"]}
1
+ {"version":3,"sources":["../../../../src/utils/errors/ErrorHandler.ts"],"sourcesContent":["// Import required modules and types from their respective locations.\nimport { Locales } from '@intlayer/config';\nimport { logger } from '@logger';\nimport { formatPaginatedResponse, formatResponse } from '@utils/responseData';\nimport type { Response } from 'express';\n// @ts-ignore express-intlayer not build yet\nimport { type UserAPI, HttpStatusCodes } from '@/export';\nimport type { LanguageContent } from 'express-intlayer';\nimport { t } from 'express-intlayer';\nimport { type ErrorCodes, errorData } from './errorCodes';\nimport type { AppError } from './ErrorsClass';\n\n// Define a class named 'ErrorHandler' to encapsulate error handling logic.\nexport class ErrorHandler {\n /**\n * Handles generic error responses by formatting and sending a JSON response.\n * @param res - The response object provided by Express.js.\n * @param errorKey - A key representing the specific error.\n * @param statusCode - (Optional) A specific HTTP status code to use for the response.\n * @param isPaginatedResponse - Flag to determine if the response should be paginated.\n */\n static handleGenericErrorResponse(\n res: Response,\n errorKey: ErrorCodes,\n errorDetails?: object,\n statusCode?: HttpStatusCodes,\n isPaginatedResponse: boolean = false\n ) {\n const error = errorData[errorKey];\n const status = statusCode ?? error.statusCode; // Use the provided status code or default to the one in errorData.\n\n // Delegate to a more customizable error response handler.\n this.handleCustomErrorResponse(\n res,\n errorKey,\n error.title,\n error.message,\n errorDetails,\n status,\n isPaginatedResponse\n );\n }\n\n /**\n * Handles application-specific error responses by formatting and sending a JSON response.\n * @param res - The response object provided by Express.js.\n * @param error - The error object.\n * @param messageDetails - (Optional) Additional message details to include in the response.\n * @param isPaginatedResponse - (Optional) Flag to determine if the response should be paginated.\n */\n static handleAppErrorResponse(\n res: Response,\n error: AppError,\n messageDetails?: object,\n isPaginatedResponse: boolean = false\n ) {\n if (!error.isAppError) {\n this.handleCustomErrorResponse(\n res,\n error.errorKey ?? 'UNKNOWN_ERROR',\n 'Error',\n error.message ?? JSON.stringify(error),\n undefined,\n error.httpStatusCode ?? HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n isPaginatedResponse\n );\n }\n\n const isMultilingual = error.isMultilingual ?? false;\n // Delegate to a more customizable error response handler.\n this.handleCustomErrorResponse(\n res,\n error.errorKey,\n isMultilingual ? error.multilingualTitle : error.title,\n isMultilingual ? error.multilingualMessage : error.message,\n error.messageDetails ?? messageDetails,\n error.httpStatusCode,\n isPaginatedResponse\n );\n }\n\n /**\n * Handles more customizable error responses with detailed error messages and codes.\n * @param res - The response object.\n * @param errorKey - Error code key used to fetch the corresponding message and default status.\n * @param message - The localized error message object.\n * @param messageDetails - (Optional) Additional message details to include in the response.\n * @param statusCode - (Optional) HTTP status code, defaults to 500 if not specified.\n * @param isPaginatedResponse - Determines if the error should be part of a paginated response.\n */\n static handleCustomErrorResponse<T>(\n res: Response,\n errorKey: ErrorCodes | string,\n title: LanguageContent<string> | string,\n message: LanguageContent<string> | string,\n messageDetails?: object,\n statusCode?: HttpStatusCodes,\n isPaginatedResponse: boolean = false\n ) {\n const errorTitle = t(title as LanguageContent<string>, Locales.ENGLISH);\n const errorMessage = t(message as LanguageContent<string>, Locales.ENGLISH);\n logger.error(errorMessage, messageDetails); // Log the English version of the error message.\n const status = statusCode ?? HttpStatusCodes.INTERNAL_SERVER_ERROR_500; // Default to 500 if no status code is provided.\n\n if (isPaginatedResponse) {\n // Format the response as a paginated error response if requested.\n const responseData = formatPaginatedResponse<T>({\n error: {\n code: errorKey,\n title: errorTitle,\n message: errorMessage,\n },\n status,\n });\n res.status(status).json(responseData);\n return;\n }\n\n // Format the response as a standard non-paginated error response.\n const responseData = formatResponse<UserAPI>({\n error: {\n code: errorKey,\n title: errorTitle,\n message: errorMessage,\n ...messageDetails,\n },\n status,\n });\n\n res.status(status).json(responseData);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAwB;AACxB,oBAAuB;AACvB,0BAAwD;AAGxD,oBAA8C;AAE9C,8BAAkB;AAClB,wBAA2C;AAIpC,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxB,OAAO,2BACL,KACA,UACA,cACA,YACA,sBAA+B,OAC/B;AACA,UAAM,QAAQ,4BAAU,QAAQ;AAChC,UAAM,SAAS,cAAc,MAAM;AAGnC,SAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,uBACL,KACA,OACA,gBACA,sBAA+B,OAC/B;AACA,QAAI,CAAC,MAAM,YAAY;AACrB,WAAK;AAAA,QACH;AAAA,QACA,MAAM,YAAY;AAAA,QAClB;AAAA,QACA,MAAM,WAAW,KAAK,UAAU,KAAK;AAAA,QACrC;AAAA,QACA,MAAM,kBAAkB,8BAAgB;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,iBAAiB,MAAM,kBAAkB;AAE/C,SAAK;AAAA,MACH;AAAA,MACA,MAAM;AAAA,MACN,iBAAiB,MAAM,oBAAoB,MAAM;AAAA,MACjD,iBAAiB,MAAM,sBAAsB,MAAM;AAAA,MACnD,MAAM,kBAAkB;AAAA,MACxB,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,0BACL,KACA,UACA,OACA,SACA,gBACA,YACA,sBAA+B,OAC/B;AACA,UAAM,iBAAa,2BAAE,OAAkC,sBAAQ,OAAO;AACtE,UAAM,mBAAe,2BAAE,SAAoC,sBAAQ,OAAO;AAC1E,yBAAO,MAAM,cAAc,cAAc;AACzC,UAAM,SAAS,cAAc,8BAAgB;AAE7C,QAAI,qBAAqB;AAEvB,YAAMA,oBAAe,6CAA2B;AAAA,QAC9C,OAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,OAAO,MAAM,EAAE,KAAKA,aAAY;AACpC;AAAA,IACF;AAGA,UAAM,mBAAe,oCAAwB;AAAA,MAC3C,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,QACT,GAAG;AAAA,MACL;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,OAAO,MAAM,EAAE,KAAK,YAAY;AAAA,EACtC;AACF;","names":["responseData"]}