arkos 0.1.27-beta.1 → 0.2.0-beta.1

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 (234) hide show
  1. package/README.md +195 -199
  2. package/dist/cjs/app.js +1 -127
  3. package/dist/cjs/app.js.map +1 -1
  4. package/dist/cjs/exports/auth/index.js +6 -0
  5. package/dist/cjs/exports/auth/index.js.map +1 -0
  6. package/dist/cjs/exports/error-handler/index.js +0 -5
  7. package/dist/cjs/exports/error-handler/index.js.map +1 -1
  8. package/dist/cjs/exports/index.js +0 -18
  9. package/dist/cjs/exports/index.js.map +1 -1
  10. package/dist/cjs/exports/prisma/index.js +3 -0
  11. package/dist/cjs/exports/prisma/index.js.map +1 -0
  12. package/dist/cjs/exports/services/index.js.map +1 -1
  13. package/dist/cjs/exports/utils/change-case.js +18 -0
  14. package/dist/cjs/exports/utils/change-case.js.map +1 -0
  15. package/dist/cjs/exports/utils/index.js +1 -8
  16. package/dist/cjs/exports/utils/index.js.map +1 -1
  17. package/dist/cjs/exports/validation/index.js +1 -5
  18. package/dist/cjs/exports/validation/index.js.map +1 -1
  19. package/dist/cjs/modules/auth/__tests__/auth.controller.test.js +514 -0
  20. package/dist/cjs/modules/auth/__tests__/auth.controller.test.js.map +1 -0
  21. package/dist/cjs/modules/auth/auth.controller.js +100 -211
  22. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  23. package/dist/cjs/modules/auth/auth.router.js +57 -49
  24. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  25. package/dist/cjs/modules/auth/auth.service.js +94 -64
  26. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  27. package/dist/cjs/modules/auth/utils/helpers/__tests__/auth.helpers.test.js +45 -0
  28. package/dist/cjs/modules/auth/utils/helpers/__tests__/auth.helpers.test.js.map +1 -0
  29. package/dist/cjs/modules/auth/utils/helpers/auth.helpers.js +13 -0
  30. package/dist/cjs/modules/auth/utils/helpers/auth.helpers.js.map +1 -0
  31. package/dist/cjs/modules/base/base.controller.js +116 -244
  32. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  33. package/dist/cjs/modules/base/base.middlewares.js +18 -21
  34. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  35. package/dist/cjs/modules/base/base.router.js +42 -35
  36. package/dist/cjs/modules/base/base.router.js.map +1 -1
  37. package/dist/cjs/modules/base/base.service.js +126 -115
  38. package/dist/cjs/modules/base/base.service.js.map +1 -1
  39. package/dist/cjs/modules/base/utils/helpers/__tests__/base.helpers.test.js +478 -0
  40. package/dist/cjs/modules/base/utils/helpers/__tests__/base.helpers.test.js.map +1 -0
  41. package/dist/cjs/modules/base/utils/helpers/base.helpers.js +156 -0
  42. package/dist/cjs/modules/base/utils/helpers/base.helpers.js.map +1 -0
  43. package/dist/cjs/modules/email/email.service.js +21 -14
  44. package/dist/cjs/modules/email/email.service.js.map +1 -1
  45. package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -3
  46. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  47. package/dist/cjs/modules/error-handler/utils/app-error.js.map +1 -1
  48. package/dist/cjs/modules/error-handler/utils/catch-async.js +16 -4
  49. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +1 -1
  50. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +31 -17
  51. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  52. package/dist/cjs/modules/file-uploader/file-uploader.controller.js +164 -0
  53. package/dist/cjs/modules/file-uploader/file-uploader.controller.js.map +1 -0
  54. package/dist/cjs/modules/file-uploader/file-uploader.router.js +35 -0
  55. package/dist/cjs/modules/file-uploader/file-uploader.router.js.map +1 -0
  56. package/dist/cjs/modules/file-uploader/file-uploader.service.js +17 -8
  57. package/dist/cjs/modules/file-uploader/file-uploader.service.js.map +1 -1
  58. package/dist/cjs/paths.js +1 -9
  59. package/dist/cjs/paths.js.map +1 -1
  60. package/dist/cjs/scripts/create-test.js +35 -0
  61. package/dist/cjs/scripts/create-test.js.map +1 -0
  62. package/dist/cjs/server.js +1 -43
  63. package/dist/cjs/server.js.map +1 -1
  64. package/dist/cjs/utils/arkos-env.js +1 -0
  65. package/dist/cjs/utils/arkos-env.js.map +1 -1
  66. package/dist/cjs/utils/features/api.features.js +56 -60
  67. package/dist/cjs/utils/features/api.features.js.map +1 -1
  68. package/dist/cjs/utils/features/change-case.features.js +67 -0
  69. package/dist/cjs/utils/features/change-case.features.js.map +1 -0
  70. package/dist/cjs/utils/helpers/api.features.helpers.js +2 -1
  71. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  72. package/dist/cjs/utils/helpers/base.controller.helpers.js +39 -0
  73. package/dist/cjs/utils/helpers/base.controller.helpers.js.map +1 -0
  74. package/dist/cjs/utils/helpers/change-case.helpers.js +185 -0
  75. package/dist/cjs/utils/helpers/change-case.helpers.js.map +1 -0
  76. package/dist/cjs/utils/helpers/deepmerge.helper.js +119 -0
  77. package/dist/cjs/utils/helpers/deepmerge.helper.js.map +1 -0
  78. package/dist/cjs/utils/helpers/fs.helpers.js +28 -3
  79. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  80. package/dist/cjs/utils/helpers/models.helpers.js +152 -120
  81. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  82. package/dist/cjs/utils/helpers/pluralize.helpers.js +3 -0
  83. package/dist/cjs/utils/helpers/pluralize.helpers.js.map +1 -0
  84. package/dist/cjs/utils/helpers/prisma.helpers.js +20 -41
  85. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  86. package/dist/cjs/utils/helpers/query-parser.helpers.js +45 -0
  87. package/dist/cjs/utils/helpers/query-parser.helpers.js.map +1 -0
  88. package/dist/cjs/utils/helpers/text.helpers.js.map +1 -1
  89. package/dist/cjs/utils/scripts/export-prisma-types.js +33 -33
  90. package/dist/cjs/utils/scripts/export-prisma-types.js.map +1 -1
  91. package/dist/cjs/utils/scripts/generate-zod-schemas.js +107 -94
  92. package/dist/cjs/utils/scripts/generate-zod-schemas.js.map +1 -1
  93. package/dist/cjs/utils/scripts/prisma-db-push.js.map +1 -1
  94. package/dist/cjs/utils/validate-dto.js +16 -12
  95. package/dist/cjs/utils/validate-dto.js.map +1 -1
  96. package/dist/cjs/utils/validate-schema.js +26 -0
  97. package/dist/cjs/utils/validate-schema.js.map +1 -0
  98. package/dist/es2020/app.js +1 -88
  99. package/dist/es2020/app.js.map +1 -1
  100. package/dist/es2020/exports/auth/index.js +6 -0
  101. package/dist/es2020/exports/auth/index.js.map +1 -0
  102. package/dist/es2020/exports/error-handler/index.js +9 -7
  103. package/dist/es2020/exports/error-handler/index.js.map +1 -1
  104. package/dist/es2020/exports/index.js +5 -7
  105. package/dist/es2020/exports/index.js.map +1 -1
  106. package/dist/es2020/exports/prisma/index.js +3 -0
  107. package/dist/es2020/exports/prisma/index.js.map +1 -0
  108. package/dist/es2020/exports/services/index.js +52 -8
  109. package/dist/es2020/exports/services/index.js.map +1 -1
  110. package/dist/es2020/exports/utils/change-case.js +18 -0
  111. package/dist/es2020/exports/utils/change-case.js.map +1 -0
  112. package/dist/es2020/exports/utils/index.js +5 -8
  113. package/dist/es2020/exports/utils/index.js.map +1 -1
  114. package/dist/es2020/exports/validation/index.js +7 -5
  115. package/dist/es2020/exports/validation/index.js.map +1 -1
  116. package/dist/es2020/modules/auth/auth.controller.js +101 -214
  117. package/dist/es2020/modules/auth/auth.controller.js.map +1 -1
  118. package/dist/es2020/modules/auth/auth.router.js +48 -46
  119. package/dist/es2020/modules/auth/auth.router.js.map +1 -1
  120. package/dist/es2020/modules/auth/auth.service.js +64 -46
  121. package/dist/es2020/modules/auth/auth.service.js.map +1 -1
  122. package/dist/es2020/modules/auth/utils/helpers/auth.helpers.js +13 -0
  123. package/dist/es2020/modules/auth/utils/helpers/auth.helpers.js.map +1 -0
  124. package/dist/es2020/modules/base/base.controller.js +53 -184
  125. package/dist/es2020/modules/base/base.controller.js.map +1 -1
  126. package/dist/es2020/modules/base/base.middlewares.js +30 -23
  127. package/dist/es2020/modules/base/base.middlewares.js.map +1 -1
  128. package/dist/es2020/modules/base/base.router.js +54 -51
  129. package/dist/es2020/modules/base/base.router.js.map +1 -1
  130. package/dist/es2020/modules/base/base.service.js +72 -53
  131. package/dist/es2020/modules/base/base.service.js.map +1 -1
  132. package/dist/es2020/modules/base/utils/helpers/base.helpers.js +151 -0
  133. package/dist/es2020/modules/base/utils/helpers/base.helpers.js.map +1 -0
  134. package/dist/es2020/modules/email/email.service.js +14 -8
  135. package/dist/es2020/modules/email/email.service.js.map +1 -1
  136. package/dist/es2020/modules/error-handler/error-handler.controller.js +43 -6
  137. package/dist/es2020/modules/error-handler/error-handler.controller.js.map +1 -1
  138. package/dist/es2020/modules/error-handler/utils/app-error.js +3 -1
  139. package/dist/es2020/modules/error-handler/utils/app-error.js.map +1 -1
  140. package/dist/es2020/modules/error-handler/utils/catch-async.js +10 -5
  141. package/dist/es2020/modules/error-handler/utils/catch-async.js.map +1 -1
  142. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +145 -91
  143. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  144. package/dist/es2020/modules/file-uploader/file-uploader.controller.js +155 -0
  145. package/dist/es2020/modules/file-uploader/file-uploader.controller.js.map +1 -0
  146. package/dist/es2020/modules/file-uploader/file-uploader.router.js +26 -0
  147. package/dist/es2020/modules/file-uploader/file-uploader.router.js.map +1 -0
  148. package/dist/es2020/modules/file-uploader/file-uploader.service.js +33 -23
  149. package/dist/es2020/modules/file-uploader/file-uploader.service.js.map +1 -1
  150. package/dist/es2020/paths.js +1 -3
  151. package/dist/es2020/paths.js.map +1 -1
  152. package/dist/es2020/scripts/create-test.js +35 -0
  153. package/dist/es2020/scripts/create-test.js.map +1 -0
  154. package/dist/es2020/server.js +1 -38
  155. package/dist/es2020/server.js.map +1 -1
  156. package/dist/es2020/utils/arkos-env.js +4 -1
  157. package/dist/es2020/utils/arkos-env.js.map +1 -1
  158. package/dist/es2020/utils/features/api.features.js +39 -29
  159. package/dist/es2020/utils/features/api.features.js.map +1 -1
  160. package/dist/es2020/utils/features/change-case.features.js +67 -0
  161. package/dist/es2020/utils/features/change-case.features.js.map +1 -0
  162. package/dist/es2020/utils/helpers/api.features.helpers.js +6 -2
  163. package/dist/es2020/utils/helpers/api.features.helpers.js.map +1 -1
  164. package/dist/es2020/utils/helpers/base.controller.helpers.js +28 -0
  165. package/dist/es2020/utils/helpers/base.controller.helpers.js.map +1 -0
  166. package/dist/es2020/utils/helpers/change-case.helpers.js +185 -0
  167. package/dist/es2020/utils/helpers/change-case.helpers.js.map +1 -0
  168. package/dist/es2020/utils/helpers/deepmerge.helper.js +119 -0
  169. package/dist/es2020/utils/helpers/deepmerge.helper.js.map +1 -0
  170. package/dist/es2020/utils/helpers/fs.helpers.js +31 -3
  171. package/dist/es2020/utils/helpers/fs.helpers.js.map +1 -1
  172. package/dist/es2020/utils/helpers/models.helpers.js +112 -47
  173. package/dist/es2020/utils/helpers/models.helpers.js.map +1 -1
  174. package/dist/es2020/utils/helpers/pluralize.helpers.js +3 -0
  175. package/dist/es2020/utils/helpers/pluralize.helpers.js.map +1 -0
  176. package/dist/es2020/utils/helpers/prisma.helpers.js +17 -6
  177. package/dist/es2020/utils/helpers/prisma.helpers.js.map +1 -1
  178. package/dist/es2020/utils/helpers/query-parser.helpers.js +45 -0
  179. package/dist/es2020/utils/helpers/query-parser.helpers.js.map +1 -0
  180. package/dist/es2020/utils/helpers/text.helpers.js +4 -1
  181. package/dist/es2020/utils/helpers/text.helpers.js.map +1 -1
  182. package/dist/es2020/utils/scripts/export-prisma-types.js +70 -35
  183. package/dist/es2020/utils/scripts/export-prisma-types.js.map +1 -1
  184. package/dist/es2020/utils/scripts/generate-zod-schemas.js +9 -4
  185. package/dist/es2020/utils/scripts/generate-zod-schemas.js.map +1 -1
  186. package/dist/es2020/utils/scripts/prisma-db-push.js +13 -8
  187. package/dist/es2020/utils/scripts/prisma-db-push.js.map +1 -1
  188. package/dist/es2020/utils/validate-dto.js +13 -14
  189. package/dist/es2020/utils/validate-dto.js.map +1 -1
  190. package/dist/es2020/utils/validate-schema.js +15 -0
  191. package/dist/es2020/utils/validate-schema.js.map +1 -0
  192. package/dist/types/app.d.ts +2 -12
  193. package/dist/types/exports/auth/index.d.ts +3 -0
  194. package/dist/types/exports/error-handler/index.d.ts +0 -5
  195. package/dist/types/exports/index.d.ts +2 -4
  196. package/dist/types/exports/prisma/index.d.ts +2 -0
  197. package/dist/types/exports/utils/change-case.d.ts +1 -0
  198. package/dist/types/exports/utils/index.d.ts +1 -7
  199. package/dist/types/exports/validation/index.d.ts +0 -4
  200. package/dist/types/modules/auth/auth.controller.d.ts +14 -16
  201. package/dist/types/modules/auth/auth.service.d.ts +7 -6
  202. package/dist/types/modules/auth/utils/helpers/auth.helpers.d.ts +2 -0
  203. package/dist/types/modules/base/base.controller.d.ts +11 -14
  204. package/dist/types/modules/base/base.middlewares.d.ts +2 -2
  205. package/dist/types/modules/base/base.service.d.ts +1 -3
  206. package/dist/types/modules/base/utils/helpers/base.helpers.d.ts +4 -0
  207. package/dist/types/modules/error-handler/utils/catch-async.d.ts +2 -2
  208. package/dist/types/modules/file-uploader/file-uploader.controller.d.ts +3 -0
  209. package/dist/types/modules/file-uploader/file-uploader.router.d.ts +3 -0
  210. package/dist/types/scripts/create-test.d.ts +1 -0
  211. package/dist/types/server.d.ts +2 -2
  212. package/dist/types/utils/arkos-env.d.ts +1 -0
  213. package/dist/types/utils/features/change-case.features.d.ts +12 -0
  214. package/dist/types/utils/helpers/base.controller.helpers.d.ts +2 -0
  215. package/dist/types/utils/helpers/change-case.helpers.d.ts +26 -0
  216. package/dist/types/utils/helpers/deepmerge.helper.d.ts +19 -0
  217. package/dist/types/utils/helpers/fs.helpers.d.ts +1 -0
  218. package/dist/types/utils/helpers/models.helpers.d.ts +21 -9
  219. package/dist/types/utils/helpers/pluralize.helpers.d.ts +1 -0
  220. package/dist/types/utils/helpers/prisma.helpers.d.ts +2 -2
  221. package/dist/types/utils/helpers/query-parser.helpers.d.ts +11 -0
  222. package/dist/types/utils/validate-schema.d.ts +2 -0
  223. package/package.json +175 -163
  224. package/dist/cjs/modules/base/utils/base.helpers.js +0 -82
  225. package/dist/cjs/modules/base/utils/base.helpers.js.map +0 -1
  226. package/dist/cjs/package.json +0 -1
  227. package/dist/cjs/utils/permissions/index.js +0 -17
  228. package/dist/cjs/utils/permissions/index.js.map +0 -1
  229. package/dist/es2020/modules/base/utils/base.helpers.js +0 -79
  230. package/dist/es2020/modules/base/utils/base.helpers.js.map +0 -1
  231. package/dist/es2020/utils/permissions/index.js +0 -14
  232. package/dist/es2020/utils/permissions/index.js.map +0 -1
  233. package/dist/types/modules/base/utils/base.helpers.d.ts +0 -4
  234. package/dist/types/utils/permissions/index.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sCAAoC;AAQpC,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,gBAAO;CACd,CAAC;AAOF,6CAA2B;AAC3B,0CAAwB;AACxB,+CAA6B;AAC7B,kDAAgC;AAEhC,kBAAe,KAAK,CAAC","sourcesContent":["import { initApp } from \"../server\";\r\n\r\n/**\r\n * Initializes the Arkos application.\r\n *\r\n * @module arkos\r\n * @property {Function} init - Function to initialize the app.\r\n */\r\nconst arkos = {\r\n init: initApp,\r\n};\r\n\r\n/**\r\n * Main entry point for the Arkos module.\r\n *\r\n * @module arkos\r\n */\r\nexport * from \"./services\";\r\nexport * from \"./utils\";\r\nexport * from \"./validation\";\r\nexport * from \"./error-handler\";\r\n\r\nexport default arkos;\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AAcpC,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,gBAAO;CACd,CAAC;AASF,kBAAe,KAAK,CAAC","sourcesContent":["import { initApp } from \"../server\";\nimport {\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n} from \"../types\";\n\n/**\n * Initializes the Arkos application.\n *\n * @module arkos\n * @property {Function} init - Function to initialize the app.\n */\nconst arkos = {\n init: initApp,\n};\n\nexport { ArkosRequest, ArkosResponse, ArkosNextFunction, ArkosRequestHandler };\n\n/**\n * Main entry point for the Arkos module.\n *\n * @module arkos\n */\nexport default arkos;\n\n// export * from \"./services\";\n// export * from \"./utils\";\n// export * from \"./validation\";\n// export * from \"./error-handler\";\n"]}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/prisma/index.ts"],"names":[],"mappings":"","sourcesContent":["import { PrismaQueryOptions } from \"./../../types/index.d\";\n\nexport { PrismaQueryOptions };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mFAA0D;AAajD,sBAbF,sBAAW,CAaE;AAZpB,mFAA+E;AAsBtE,uBAtBF,uBAAY,CAsBE;AAAE,6FAtBA,4BAAY,OAsBA;AArBnC,6FAK2D;AAsBzD,qGA1BA,4CAAoB,OA0BA;AACpB,wGA1BA,+CAAuB,OA0BA;AACvB,qGA1BA,4CAAoB,OA0BA;AACpB,oGA1BA,2CAAmB,OA0BA;AAxBrB,kEAA+E;AAUtE,4FAVA,0BAAW,OAUA;AAAE,gGAVA,8BAAe,OAUA","sourcesContent":["import { EmailOptions } from \"../../modules/email/email.service\";\r\nimport authService from \"../../modules/auth/auth.service\";\r\nimport emailService, { EmailService } from \"../../modules/email/email.service\";\r\nimport {\r\n imageUploaderService,\r\n documentUploaderService,\r\n videoUploaderService,\r\n fileUploaderService,\r\n} from \"../../modules/file-uploader/file-uploader.service\";\r\nimport { BaseService, getBaseServices } from \"../../modules/base/base.service\";\r\n\r\n/**\r\n * Authentication service.\r\n */\r\nexport { authService };\r\n\r\n/**\r\n * Base service.\r\n */\r\nexport { BaseService, getBaseServices };\r\n\r\n/**\r\n * Email service.\r\n */\r\nexport { emailService, EmailService, EmailOptions };\r\n\r\n/**\r\n * File upload services.\r\n */\r\nexport {\r\n imageUploaderService,\r\n documentUploaderService,\r\n videoUploaderService,\r\n fileUploaderService,\r\n};\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mFAA0D;AAajD,sBAbF,sBAAW,CAaE;AAZpB,mFAA+E;AAsBtE,uBAtBF,uBAAY,CAsBE;AAAE,6FAtBA,4BAAY,OAsBA;AArBnC,6FAK2D;AAsBzD,qGA1BA,4CAAoB,OA0BA;AACpB,wGA1BA,+CAAuB,OA0BA;AACvB,qGA1BA,4CAAoB,OA0BA;AACpB,oGA1BA,2CAAmB,OA0BA;AAxBrB,kEAA+E;AAUtE,4FAVA,0BAAW,OAUA;AAAE,gGAVA,8BAAe,OAUA","sourcesContent":["import { EmailOptions } from \"../../modules/email/email.service\";\nimport authService from \"../../modules/auth/auth.service\";\nimport emailService, { EmailService } from \"../../modules/email/email.service\";\nimport {\n imageUploaderService,\n documentUploaderService,\n videoUploaderService,\n fileUploaderService,\n} from \"../../modules/file-uploader/file-uploader.service\";\nimport { BaseService, getBaseServices } from \"../../modules/base/base.service\";\n\n/**\n * Authentication service.\n */\nexport { authService };\n\n/**\n * Base service.\n */\nexport { BaseService, getBaseServices };\n\n/**\n * Email service.\n */\nexport { emailService, EmailService, EmailOptions };\n\n/**\n * File upload services.\n */\nexport {\n imageUploaderService,\n documentUploaderService,\n videoUploaderService,\n fileUploaderService,\n};\n"]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../../utils/features/change-case.features"), exports);
18
+ //# sourceMappingURL=change-case.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-case.js","sourceRoot":"","sources":["../../../../src/exports/utils/change-case.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4EAA0D","sourcesContent":["export * from \"../../utils/features/change-case.features\";\n"]}
@@ -1,13 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPrismaModels = exports.capitalize = exports.utils = void 0;
4
- const text_helpers_1 = require("../../utils/helpers/text.helpers");
5
- Object.defineProperty(exports, "capitalize", { enumerable: true, get: function () { return text_helpers_1.capitalize; } });
3
+ exports.getPrismaModels = void 0;
6
4
  const models_helpers_1 = require("../../utils/helpers/models.helpers");
7
5
  Object.defineProperty(exports, "getPrismaModels", { enumerable: true, get: function () { return models_helpers_1.getModels; } });
8
- exports.utils = {
9
- capitalize: text_helpers_1.capitalize,
10
- getPrismaModels: models_helpers_1.getModels,
11
- };
12
- exports.default = exports.utils;
13
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/utils/index.ts"],"names":[],"mappings":";;;AAAA,mEAA8D;AAerD,2FAfA,yBAAU,OAeA;AAdnB,uEAA+D;AAc7B,gGAdzB,0BAAS,OAc+B;AALpC,QAAA,KAAK,GAAG;IACnB,UAAU,EAAV,yBAAU;IACV,eAAe,EAAE,0BAAS;CAC3B,CAAC;AAGF,kBAAe,aAAK,CAAC","sourcesContent":["import { capitalize } from \"../../utils/helpers/text.helpers\";\r\nimport { getModels } from \"../../utils/helpers/models.helpers\";\r\n\r\n/**\r\n * A collection of utility functions.\r\n *\r\n * @namespace utils\r\n * @property {Function} capitalize - Capitalizes the first letter of each word in a string.\r\n * @property {Function} getPrismaModels - Retrieves Prisma models dynamically.\r\n */\r\nexport const utils = {\r\n capitalize,\r\n getPrismaModels: getModels,\r\n};\r\n\r\nexport { capitalize, getModels as getPrismaModels };\r\nexport default utils;\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/utils/index.ts"],"names":[],"mappings":";;;AAAA,uEAA+D;AAEzC,gGAFb,0BAAS,OAEmB","sourcesContent":["import { getModels } from \"../../utils/helpers/models.helpers\";\n\nexport { getModels as getPrismaModels };\n"]}
@@ -3,11 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.validateDto = exports.validation = void 0;
6
+ exports.validateDto = void 0;
7
7
  const validate_dto_1 = __importDefault(require("../../utils/validate-dto"));
8
8
  exports.validateDto = validate_dto_1.default;
9
- exports.validation = {
10
- validateDto: validate_dto_1.default,
11
- };
12
- exports.default = exports.validation;
13
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/validation/index.ts"],"names":[],"mappings":";;;;;;AAAA,4EAAmD;AAY1C,sBAZF,sBAAW,CAYE;AAJP,QAAA,UAAU,GAAG;IACxB,WAAW,EAAX,sBAAW;CACZ,CAAC;AAGF,kBAAe,kBAAU,CAAC","sourcesContent":["import validateDto from \"../../utils/validate-dto\";\r\n\r\n/**\r\n * A collection of validation utilities.\r\n *\r\n * @namespace validation\r\n * @property {Function} validateDto - Validates data transfer objects (DTO).\r\n */\r\nexport const validation = {\r\n validateDto,\r\n};\r\n\r\nexport { validateDto };\r\nexport default validation;\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/validation/index.ts"],"names":[],"mappings":";;;;;;AAAA,4EAAmD;AAE1C,sBAFF,sBAAW,CAEE","sourcesContent":["import validateDto from \"../../utils/validate-dto\";\n\nexport { validateDto };\n"]}
@@ -0,0 +1,514 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const vitest_1 = require("vitest");
16
+ const auth_controller_1 = require("../auth.controller");
17
+ const auth_service_1 = __importDefault(require("../auth.service"));
18
+ const base_service_1 = require("../../base/base.service");
19
+ const prisma_helpers_1 = require("../../../utils/helpers/prisma.helpers");
20
+ const models_helpers_1 = require("../../../utils/helpers/models.helpers");
21
+ const server_1 = require("../../../server");
22
+ vitest_1.vi.mock("bcrypt", () => ({
23
+ default: {
24
+ compare: vitest_1.vi.fn(),
25
+ hash: vitest_1.vi.fn(),
26
+ },
27
+ }));
28
+ vitest_1.vi.mock("../auth.service", () => ({
29
+ default: {
30
+ isCorrectPassword: vitest_1.vi.fn(),
31
+ signJwtToken: vitest_1.vi.fn(),
32
+ isPasswordStrong: vitest_1.vi.fn(),
33
+ hashPassword: vitest_1.vi.fn(),
34
+ authenticate: vitest_1.vi.fn(),
35
+ handleAuthenticationControl: vitest_1.vi.fn(),
36
+ handleActionAccessControl: vitest_1.vi.fn(),
37
+ },
38
+ }));
39
+ vitest_1.vi.mock("../../base/base.service", () => ({
40
+ getBaseServices: vitest_1.vi.fn(),
41
+ }));
42
+ vitest_1.vi.mock("../../../utils/helpers/prisma.helpers", () => ({
43
+ getPrismaInstance: vitest_1.vi.fn(),
44
+ }));
45
+ vitest_1.vi.mock("../../../utils/helpers/models.helpers", () => ({
46
+ importPrismaModelModules: vitest_1.vi.fn(),
47
+ getPrismaModelRelations: vitest_1.vi.fn(),
48
+ getModels: vitest_1.vi.fn(() => []),
49
+ getModelUniqueFields: vitest_1.vi.fn(() => []),
50
+ models: [],
51
+ prismaModelRelationFields: {},
52
+ }));
53
+ vitest_1.vi.mock("../../../server", () => ({
54
+ getInitConfigs: vitest_1.vi.fn(),
55
+ close: vitest_1.vi.fn(),
56
+ }));
57
+ (0, vitest_1.describe)("Auth Controller Factory", () => {
58
+ let req;
59
+ let res;
60
+ let next;
61
+ let mockPrisma;
62
+ let authController;
63
+ let userService;
64
+ (0, vitest_1.beforeEach)(() => __awaiter(void 0, void 0, void 0, function* () {
65
+ vitest_1.vi.resetAllMocks();
66
+ userService = {
67
+ findOne: vitest_1.vi.fn(),
68
+ createOne: vitest_1.vi.fn(),
69
+ };
70
+ mockPrisma = {
71
+ user: {
72
+ findUnique: vitest_1.vi.fn(),
73
+ update: vitest_1.vi.fn(),
74
+ },
75
+ };
76
+ base_service_1.getBaseServices.mockReturnValue({
77
+ user: userService,
78
+ });
79
+ prisma_helpers_1.getPrismaInstance.mockReturnValue(mockPrisma);
80
+ models_helpers_1.importPrismaModelModules.mockResolvedValue({
81
+ prismaQueryOptions: {
82
+ queryOptions: {},
83
+ findOne: {},
84
+ },
85
+ });
86
+ server_1.getInitConfigs.mockReturnValue({
87
+ authentication: {
88
+ usernameField: "username",
89
+ login: {
90
+ sendAccessTokenThrough: "both",
91
+ },
92
+ },
93
+ });
94
+ req = {
95
+ user: {
96
+ id: "user-id-123",
97
+ username: "testuser",
98
+ password: "hashedPassword",
99
+ isVerified: true,
100
+ active: true,
101
+ },
102
+ body: {},
103
+ query: {},
104
+ secure: false,
105
+ headers: {},
106
+ };
107
+ res = {
108
+ status: vitest_1.vi.fn().mockReturnThis(),
109
+ json: vitest_1.vi.fn(),
110
+ cookie: vitest_1.vi.fn(),
111
+ send: vitest_1.vi.fn(),
112
+ };
113
+ next = vitest_1.vi.fn();
114
+ authController = yield (0, auth_controller_1.authControllerFactory)();
115
+ }));
116
+ (0, vitest_1.afterEach)(() => {
117
+ vitest_1.vi.clearAllMocks();
118
+ });
119
+ (0, vitest_1.describe)("getMe", () => {
120
+ (0, vitest_1.it)("should get the current user and return it", () => __awaiter(void 0, void 0, void 0, function* () {
121
+ userService.findOne.mockResolvedValueOnce({
122
+ id: "user-id-123",
123
+ username: "testuser",
124
+ email: "test@example.com",
125
+ });
126
+ yield authController.getMe(req, res, next);
127
+ (0, vitest_1.expect)(userService.findOne).toHaveBeenCalledWith({ id: "user-id-123" }, vitest_1.expect.any(String));
128
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(200);
129
+ (0, vitest_1.expect)(res.json).toHaveBeenCalledWith(req.user);
130
+ }));
131
+ (0, vitest_1.it)("should remove excluded fields from the user object", () => __awaiter(void 0, void 0, void 0, function* () {
132
+ const fullUser = {
133
+ id: "user-id-123",
134
+ username: "testuser",
135
+ email: "test@example.com",
136
+ password: "hashedPassword",
137
+ passwordChangedAt: new Date(),
138
+ active: true,
139
+ };
140
+ req.user = Object.assign({}, fullUser);
141
+ userService.findOne.mockResolvedValueOnce(fullUser);
142
+ yield authController.getMe(req, res, next);
143
+ Object.keys(auth_controller_1.defaultExcludedUserFields).forEach((field) => {
144
+ (0, vitest_1.expect)(req.user[field]).toBeUndefined();
145
+ });
146
+ }));
147
+ (0, vitest_1.it)("should call next middleware when afterGetMe is provided", () => __awaiter(void 0, void 0, void 0, function* () {
148
+ const controllerWithMiddleware = yield (0, auth_controller_1.authControllerFactory)({
149
+ afterGetMe: true,
150
+ });
151
+ userService.findOne.mockResolvedValueOnce({
152
+ id: "user-id-123",
153
+ username: "testuser",
154
+ email: "test@example.com",
155
+ });
156
+ yield controllerWithMiddleware.getMe(req, res, next);
157
+ (0, vitest_1.expect)(req.responseData).toBeDefined();
158
+ (0, vitest_1.expect)(req.responseStatus).toBe(200);
159
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
160
+ (0, vitest_1.expect)(res.status).not.toHaveBeenCalled();
161
+ }));
162
+ });
163
+ (0, vitest_1.describe)("logout", () => {
164
+ (0, vitest_1.it)("should clear the access token cookie and return 204", () => __awaiter(void 0, void 0, void 0, function* () {
165
+ yield authController.logout(req, res, next);
166
+ (0, vitest_1.expect)(res.cookie).toHaveBeenCalledWith("arkos_access_token", "no-token", vitest_1.expect.objectContaining({
167
+ httpOnly: true,
168
+ }));
169
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(204);
170
+ (0, vitest_1.expect)(res.json).toHaveBeenCalled();
171
+ }));
172
+ (0, vitest_1.it)("should call next middleware when afterLogout is provided", () => __awaiter(void 0, void 0, void 0, function* () {
173
+ const controllerWithMiddleware = yield (0, auth_controller_1.authControllerFactory)({
174
+ afterLogout: true,
175
+ });
176
+ yield controllerWithMiddleware.logout(req, res, next);
177
+ (0, vitest_1.expect)(req.responseData).toBeNull();
178
+ (0, vitest_1.expect)(req.responseStatus).toBe(204);
179
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
180
+ (0, vitest_1.expect)(res.status).not.toHaveBeenCalled();
181
+ }));
182
+ });
183
+ (0, vitest_1.describe)("login", () => {
184
+ (0, vitest_1.it)("should return 400 if username or password is missing", () => __awaiter(void 0, void 0, void 0, function* () {
185
+ req.body = { username: "testuser" };
186
+ yield authController.login(req, res, next);
187
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
188
+ statusCode: 400,
189
+ message: vitest_1.expect.stringContaining("username and password"),
190
+ }));
191
+ }));
192
+ (0, vitest_1.it)("should use default username field from config when not specified in query", () => __awaiter(void 0, void 0, void 0, function* () {
193
+ req.body = { username: "testuser", password: "Password123" };
194
+ mockPrisma.user.findUnique.mockResolvedValueOnce({
195
+ id: "user-id-123",
196
+ username: "testuser",
197
+ password: "hashedPassword",
198
+ });
199
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
200
+ auth_service_1.default.signJwtToken.mockReturnValue("jwt-token-123");
201
+ yield authController.login(req, res, next);
202
+ (0, vitest_1.expect)(mockPrisma.user.findUnique).toHaveBeenCalledWith({
203
+ where: { username: "testuser" },
204
+ });
205
+ }));
206
+ (0, vitest_1.it)("should use username field from query parameter when provided", () => __awaiter(void 0, void 0, void 0, function* () {
207
+ req.query.usernameField = "email";
208
+ req.body = { email: "test@example.com", password: "Password123" };
209
+ mockPrisma.user.findUnique.mockResolvedValueOnce({
210
+ id: "user-id-123",
211
+ email: "test@example.com",
212
+ password: "hashedPassword",
213
+ });
214
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
215
+ auth_service_1.default.signJwtToken.mockReturnValue("jwt-token-123");
216
+ yield authController.login(req, res, next);
217
+ (0, vitest_1.expect)(mockPrisma.user.findUnique).toHaveBeenCalledWith({
218
+ where: { email: "test@example.com" },
219
+ });
220
+ }));
221
+ (0, vitest_1.it)("should return 401 if user is not found", () => __awaiter(void 0, void 0, void 0, function* () {
222
+ req.body = { username: "nonexistentuser", password: "Password123" };
223
+ mockPrisma.user.findUnique.mockResolvedValueOnce(null);
224
+ yield authController.login(req, res, next);
225
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
226
+ statusCode: 401,
227
+ message: vitest_1.expect.stringContaining("Incorrect username or password"),
228
+ }));
229
+ }));
230
+ (0, vitest_1.it)("should return 401 if password is incorrect", () => __awaiter(void 0, void 0, void 0, function* () {
231
+ req.body = { username: "testuser", password: "WrongPassword123" };
232
+ mockPrisma.user.findUnique.mockResolvedValueOnce({
233
+ id: "user-id-123",
234
+ username: "testuser",
235
+ password: "hashedPassword",
236
+ });
237
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(false);
238
+ yield authController.login(req, res, next);
239
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
240
+ statusCode: 401,
241
+ message: vitest_1.expect.stringContaining("Incorrect username or password"),
242
+ }));
243
+ }));
244
+ (0, vitest_1.it)('should set cookie and return token in response when config is "both"', () => __awaiter(void 0, void 0, void 0, function* () {
245
+ req.body = { username: "testuser", password: "Password123" };
246
+ mockPrisma.user.findUnique.mockResolvedValueOnce({
247
+ id: "user-id-123",
248
+ username: "testuser",
249
+ password: "hashedPassword",
250
+ });
251
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
252
+ auth_service_1.default.signJwtToken.mockReturnValue("jwt-token-123");
253
+ server_1.getInitConfigs.mockReturnValue({
254
+ authentication: {
255
+ usernameField: "username",
256
+ login: {
257
+ sendAccessTokenThrough: "both",
258
+ },
259
+ },
260
+ });
261
+ yield authController.login(req, res, next);
262
+ (0, vitest_1.expect)(res.cookie).toHaveBeenCalledWith("arkos_access_token", "jwt-token-123", vitest_1.expect.any(Object));
263
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(200);
264
+ (0, vitest_1.expect)(res.json).toHaveBeenCalledWith({
265
+ accessToken: "jwt-token-123",
266
+ });
267
+ }));
268
+ (0, vitest_1.it)('should only set cookie when config is "cookie-only"', () => __awaiter(void 0, void 0, void 0, function* () {
269
+ req.body = { username: "testuser", password: "Password123" };
270
+ mockPrisma.user.findUnique.mockResolvedValueOnce({
271
+ id: "user-id-123",
272
+ username: "testuser",
273
+ password: "hashedPassword",
274
+ });
275
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
276
+ auth_service_1.default.signJwtToken.mockReturnValue("jwt-token-123");
277
+ server_1.getInitConfigs.mockReturnValue({
278
+ authentication: {
279
+ usernameField: "username",
280
+ login: {
281
+ sendAccessTokenThrough: "cookie-only",
282
+ },
283
+ },
284
+ });
285
+ yield authController.login(req, res, next);
286
+ (0, vitest_1.expect)(res.cookie).toHaveBeenCalledWith("arkos_access_token", "jwt-token-123", vitest_1.expect.any(Object));
287
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(200);
288
+ (0, vitest_1.expect)(res.send).toHaveBeenCalled();
289
+ (0, vitest_1.expect)(res.json).not.toHaveBeenCalled();
290
+ }));
291
+ (0, vitest_1.it)('should only return token in response when config is "response-only"', () => __awaiter(void 0, void 0, void 0, function* () {
292
+ req.body = { username: "testuser", password: "Password123" };
293
+ mockPrisma.user.findUnique.mockResolvedValueOnce({
294
+ id: "user-id-123",
295
+ username: "testuser",
296
+ password: "hashedPassword",
297
+ });
298
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
299
+ auth_service_1.default.signJwtToken.mockReturnValue("jwt-token-123");
300
+ server_1.getInitConfigs.mockReturnValue({
301
+ authentication: {
302
+ usernameField: "username",
303
+ login: {
304
+ sendAccessTokenThrough: "response-only",
305
+ },
306
+ },
307
+ });
308
+ yield authController.login(req, res, next);
309
+ (0, vitest_1.expect)(res.cookie).not.toHaveBeenCalled();
310
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(200);
311
+ (0, vitest_1.expect)(res.json).toHaveBeenCalledWith({
312
+ accessToken: "jwt-token-123",
313
+ });
314
+ }));
315
+ (0, vitest_1.it)("should call next middleware when afterLogin is provided", () => __awaiter(void 0, void 0, void 0, function* () {
316
+ const controllerWithMiddleware = yield (0, auth_controller_1.authControllerFactory)({
317
+ afterLogin: true,
318
+ });
319
+ req.body = { username: "testuser", password: "Password123" };
320
+ mockPrisma.user.findUnique.mockResolvedValueOnce({
321
+ id: "user-id-123",
322
+ username: "testuser",
323
+ password: "hashedPassword",
324
+ });
325
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
326
+ auth_service_1.default.signJwtToken.mockReturnValue("jwt-token-123");
327
+ yield controllerWithMiddleware.login(req, res, next);
328
+ (0, vitest_1.expect)(req.responseData).toEqual({ accessToken: "jwt-token-123" });
329
+ (0, vitest_1.expect)(req.responseStatus).toBe(200);
330
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
331
+ (0, vitest_1.expect)(res.status).not.toHaveBeenCalled();
332
+ }));
333
+ });
334
+ (0, vitest_1.describe)("signup", () => {
335
+ (0, vitest_1.it)("should create a new user and return 201", () => __awaiter(void 0, void 0, void 0, function* () {
336
+ req.body = {
337
+ username: "newuser",
338
+ email: "newuser@example.com",
339
+ password: "Password123",
340
+ };
341
+ const createdUser = {
342
+ id: "new-user-id",
343
+ username: "newuser",
344
+ email: "newuser@example.com",
345
+ password: "hashedPassword",
346
+ active: true,
347
+ };
348
+ userService.createOne.mockResolvedValueOnce(Object.assign({}, createdUser));
349
+ yield authController.signup(req, res, next);
350
+ (0, vitest_1.expect)(userService.createOne).toHaveBeenCalledWith(req.body);
351
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(201);
352
+ const responseUser = res.json.mock.calls[0][0].data;
353
+ Object.keys(auth_controller_1.defaultExcludedUserFields).forEach((field) => {
354
+ (0, vitest_1.expect)(responseUser[field]).toBeUndefined();
355
+ });
356
+ }));
357
+ (0, vitest_1.it)("should call next middleware when afterSignup is provided", () => __awaiter(void 0, void 0, void 0, function* () {
358
+ const controllerWithMiddleware = yield (0, auth_controller_1.authControllerFactory)({
359
+ afterSignup: true,
360
+ });
361
+ req.body = {
362
+ username: "newuser",
363
+ email: "newuser@example.com",
364
+ password: "Password123",
365
+ };
366
+ const createdUser = {
367
+ id: "new-user-id",
368
+ username: "newuser",
369
+ email: "newuser@example.com",
370
+ password: "hashedPassword",
371
+ };
372
+ userService.createOne.mockResolvedValueOnce(Object.assign({}, createdUser));
373
+ yield controllerWithMiddleware.signup(req, res, next);
374
+ (0, vitest_1.expect)(req.responseData).toEqual({ data: createdUser });
375
+ (0, vitest_1.expect)(req.responseStatus).toBe(201);
376
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
377
+ (0, vitest_1.expect)(res.status).not.toHaveBeenCalled();
378
+ }));
379
+ });
380
+ (0, vitest_1.describe)("updatePassword", () => {
381
+ (0, vitest_1.it)("should return 400 if currentPassword or newPassword is missing", () => __awaiter(void 0, void 0, void 0, function* () {
382
+ req.body = { currentPassword: "CurrentPassword123" };
383
+ yield authController.updatePassword(req, res, next);
384
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
385
+ statusCode: 400,
386
+ message: vitest_1.expect.stringContaining("currentPassword and newPassword are required"),
387
+ }));
388
+ }));
389
+ (0, vitest_1.it)("should return 404 if user is not found or inactive", () => __awaiter(void 0, void 0, void 0, function* () {
390
+ req.user = null;
391
+ req.body = {
392
+ currentPassword: "CurrentPassword123",
393
+ newPassword: "NewPassword123",
394
+ };
395
+ yield authController.updatePassword(req, res, next);
396
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
397
+ statusCode: 404,
398
+ message: vitest_1.expect.stringContaining("User not found"),
399
+ }));
400
+ }));
401
+ (0, vitest_1.it)("should return 423 if user is not verified", () => __awaiter(void 0, void 0, void 0, function* () {
402
+ req.user = {
403
+ id: "user-id-123",
404
+ username: "testuser",
405
+ password: "hashedPassword",
406
+ isVerified: false,
407
+ };
408
+ req.body = {
409
+ currentPassword: "CurrentPassword123",
410
+ newPassword: "NewPassword123",
411
+ };
412
+ yield authController.updatePassword(req, res, next);
413
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
414
+ statusCode: 423,
415
+ message: vitest_1.expect.stringContaining("verify your account"),
416
+ }));
417
+ }));
418
+ (0, vitest_1.it)("should return 400 if current password is incorrect", () => __awaiter(void 0, void 0, void 0, function* () {
419
+ req.user = {
420
+ id: "user-id-123",
421
+ username: "testuser",
422
+ password: "hashedPassword",
423
+ isVerified: true,
424
+ };
425
+ req.body = {
426
+ currentPassword: "WrongPassword123",
427
+ newPassword: "NewPassword123",
428
+ };
429
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(false);
430
+ yield authController.updatePassword(req, res, next);
431
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
432
+ statusCode: 400,
433
+ message: vitest_1.expect.stringContaining("Current password is incorrect"),
434
+ }));
435
+ }));
436
+ (0, vitest_1.it)("should return 400 if new password is not strong enough", () => __awaiter(void 0, void 0, void 0, function* () {
437
+ req.user = {
438
+ id: "user-id-123",
439
+ username: "testuser",
440
+ password: "hashedPassword",
441
+ isVerified: true,
442
+ };
443
+ req.body = {
444
+ currentPassword: "CurrentPassword123",
445
+ newPassword: "weakpassword",
446
+ };
447
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
448
+ auth_service_1.default.isPasswordStrong.mockReturnValue(false);
449
+ yield authController.updatePassword(req, res, next);
450
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
451
+ statusCode: 400,
452
+ message: vitest_1.expect.stringContaining("Password must contain"),
453
+ }));
454
+ }));
455
+ (0, vitest_1.it)("should update password and return 200 on success", () => __awaiter(void 0, void 0, void 0, function* () {
456
+ req.user = {
457
+ id: "user-id-123",
458
+ username: "testuser",
459
+ password: "hashedPassword",
460
+ isVerified: true,
461
+ };
462
+ req.body = {
463
+ currentPassword: "CurrentPassword123",
464
+ newPassword: "NewPassword123",
465
+ };
466
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
467
+ auth_service_1.default.isPasswordStrong.mockReturnValue(true);
468
+ auth_service_1.default.hashPassword.mockResolvedValueOnce("newHashedPassword");
469
+ yield authController.updatePassword(req, res, next);
470
+ (0, vitest_1.expect)(mockPrisma.user.update).toHaveBeenCalledWith({
471
+ where: { id: "user-id-123" },
472
+ data: {
473
+ password: "newHashedPassword",
474
+ passwordChangedAt: vitest_1.expect.any(Date),
475
+ },
476
+ });
477
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(200);
478
+ (0, vitest_1.expect)(res.json).toHaveBeenCalledWith({
479
+ status: "success",
480
+ message: "Password updated successfully!",
481
+ });
482
+ }));
483
+ (0, vitest_1.it)("should call next middleware when afterUpdatePassword is provided", () => __awaiter(void 0, void 0, void 0, function* () {
484
+ const controllerWithMiddleware = yield (0, auth_controller_1.authControllerFactory)({
485
+ afterUpdatePassword: true,
486
+ });
487
+ req.user = {
488
+ id: "user-id-123",
489
+ username: "testuser",
490
+ password: "hashedPassword",
491
+ isVerified: true,
492
+ };
493
+ req.body = {
494
+ currentPassword: "CurrentPassword123",
495
+ newPassword: "NewPassword123",
496
+ };
497
+ auth_service_1.default.isCorrectPassword.mockResolvedValueOnce(true);
498
+ auth_service_1.default.isPasswordStrong.mockReturnValue(true);
499
+ auth_service_1.default.hashPassword.mockResolvedValueOnce("newHashedPassword123");
500
+ yield controllerWithMiddleware.updatePassword(req, res, next);
501
+ (0, vitest_1.expect)(req.responseData).toEqual({
502
+ status: "success",
503
+ message: "Password updated successfully!",
504
+ });
505
+ (0, vitest_1.expect)(req.responseStatus).toBe(200);
506
+ (0, vitest_1.expect)(req.additionalData).toEqual({
507
+ user: req.user,
508
+ });
509
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
510
+ (0, vitest_1.expect)(res.status).not.toHaveBeenCalled();
511
+ }));
512
+ });
513
+ });
514
+ //# sourceMappingURL=auth.controller.test.js.map