arkos 1.2.13-test.1 → 1.2.13-test.3

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 (264) hide show
  1. package/dist/cjs/app.js +1 -138
  2. package/dist/cjs/exports/auth/index.js +1 -6
  3. package/dist/cjs/exports/controllers/index.js +1 -11
  4. package/dist/cjs/exports/error-handler/index.js +1 -11
  5. package/dist/cjs/exports/index.js +1 -12
  6. package/dist/cjs/exports/middlewares/index.js +1 -7
  7. package/dist/cjs/exports/prisma/index.js +1 -6
  8. package/dist/cjs/exports/services/index.js +1 -49
  9. package/dist/cjs/exports/utils/index.js +1 -44
  10. package/dist/cjs/exports/validation/index.js +1 -11
  11. package/dist/cjs/modules/auth/auth.controller.js +1 -194
  12. package/dist/cjs/modules/auth/auth.router.js +1 -50
  13. package/dist/cjs/modules/auth/auth.service.js +1 -185
  14. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +1 -83
  15. package/dist/cjs/modules/base/base.controller.js +1 -158
  16. package/dist/cjs/modules/base/base.middlewares.js +1 -92
  17. package/dist/cjs/modules/base/base.router.js +1 -24
  18. package/dist/cjs/modules/base/base.service.js +1 -128
  19. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +1 -82
  20. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +1 -50
  21. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +1 -97
  22. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +1 -171
  23. package/dist/cjs/modules/email/email.service.js +1 -104
  24. package/dist/cjs/modules/error-handler/error-handler.controller.js +4 -146
  25. package/dist/cjs/modules/error-handler/utils/app-error.js +1 -17
  26. package/dist/cjs/modules/error-handler/utils/catch-async.js +1 -12
  27. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +3 -201
  28. package/dist/cjs/modules/file-upload/file-upload.controller.js +1 -271
  29. package/dist/cjs/modules/file-upload/file-upload.router.js +1 -44
  30. package/dist/cjs/modules/file-upload/file-upload.service.js +1 -322
  31. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -97
  32. package/dist/cjs/modules/swagger/swagger.router.js +1 -119
  33. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  34. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -270
  35. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -66
  36. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -41
  37. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -29
  38. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -30
  39. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -471
  40. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -575
  41. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -253
  42. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -1
  43. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -105
  44. package/dist/cjs/package.json +3 -0
  45. package/dist/cjs/paths.js +1 -9
  46. package/dist/cjs/server.js +5 -85
  47. package/dist/cjs/server.js.map +1 -1
  48. package/dist/cjs/types/arkos-config.js +1 -3
  49. package/dist/cjs/types/auth.js +1 -3
  50. package/dist/cjs/types/index.js +1 -11
  51. package/dist/cjs/types/router-config.js +1 -3
  52. package/dist/cjs/utils/arkos-env.js +1 -9
  53. package/dist/cjs/utils/cli/build.js +6 -212
  54. package/dist/cjs/utils/cli/dev.js +5 -256
  55. package/dist/cjs/utils/cli/dev.js.map +1 -1
  56. package/dist/cjs/utils/cli/generate.js +12 -189
  57. package/dist/cjs/utils/cli/index.js +1 -81
  58. package/dist/cjs/utils/cli/start.js +5 -94
  59. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -24
  60. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +5 -20
  61. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +6 -15
  62. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +38 -67
  63. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +8 -36
  64. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +11 -36
  65. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +7 -27
  66. package/dist/cjs/utils/cli/utils/template-generators.js +2 -28
  67. package/dist/cjs/utils/dotenv.helpers.js +1 -43
  68. package/dist/cjs/utils/features/api.features.js +1 -167
  69. package/dist/cjs/utils/features/change-case.features.js +1 -67
  70. package/dist/cjs/utils/helpers/api.features.helpers.js +1 -106
  71. package/dist/cjs/utils/helpers/change-case.helpers.js +1 -177
  72. package/dist/cjs/utils/helpers/deepmerge.helper.js +1 -115
  73. package/dist/cjs/utils/helpers/fs.helpers.js +1 -61
  74. package/dist/cjs/utils/helpers/global.helpers.js +1 -89
  75. package/dist/cjs/utils/helpers/models.helpers.js +11 -339
  76. package/dist/cjs/utils/helpers/prisma.helpers.js +1 -52
  77. package/dist/cjs/utils/helpers/query-parser.helpers.js +1 -45
  78. package/dist/cjs/utils/helpers/routers.helpers.js +1 -21
  79. package/dist/cjs/utils/helpers/text.helpers.js +1 -28
  80. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -451
  81. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -1
  82. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -88
  83. package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -158
  84. package/dist/cjs/utils/prisma/types.js +1 -3
  85. package/dist/cjs/utils/sheu.js +1 -119
  86. package/dist/cjs/utils/validate-dto.js +1 -17
  87. package/dist/cjs/utils/validate-schema.js +1 -15
  88. package/dist/esm/app.js +1 -0
  89. package/dist/esm/app.js.map +1 -0
  90. package/dist/esm/exports/auth/index.js +1 -0
  91. package/dist/esm/exports/auth/index.js.map +1 -0
  92. package/dist/esm/exports/controllers/index.js +1 -0
  93. package/dist/esm/exports/controllers/index.js.map +1 -0
  94. package/dist/esm/exports/error-handler/index.js +1 -0
  95. package/dist/esm/exports/error-handler/index.js.map +1 -0
  96. package/dist/esm/exports/index.js +1 -0
  97. package/dist/esm/exports/index.js.map +1 -0
  98. package/dist/esm/exports/middlewares/index.js +1 -0
  99. package/dist/esm/exports/middlewares/index.js.map +1 -0
  100. package/dist/esm/exports/prisma/index.js +1 -0
  101. package/dist/esm/exports/prisma/index.js.map +1 -0
  102. package/dist/esm/exports/services/index.js +1 -0
  103. package/dist/esm/exports/services/index.js.map +1 -0
  104. package/dist/esm/exports/utils/index.js +1 -0
  105. package/dist/esm/exports/utils/index.js.map +1 -0
  106. package/dist/esm/exports/validation/index.js +1 -0
  107. package/dist/esm/exports/validation/index.js.map +1 -0
  108. package/dist/esm/modules/auth/auth.controller.js +1 -0
  109. package/dist/esm/modules/auth/auth.controller.js.map +1 -0
  110. package/dist/esm/modules/auth/auth.router.js +1 -0
  111. package/dist/esm/modules/auth/auth.router.js.map +1 -0
  112. package/dist/esm/modules/auth/auth.service.js +1 -0
  113. package/dist/esm/modules/auth/auth.service.js.map +1 -0
  114. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +1 -0
  115. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -0
  116. package/dist/esm/modules/base/base.controller.js +1 -0
  117. package/dist/esm/modules/base/base.controller.js.map +1 -0
  118. package/dist/esm/modules/base/base.middlewares.js +1 -0
  119. package/dist/esm/modules/base/base.middlewares.js.map +1 -0
  120. package/dist/esm/modules/base/base.router.js +1 -0
  121. package/dist/esm/modules/base/base.router.js.map +1 -0
  122. package/dist/esm/modules/base/base.service.js +1 -0
  123. package/dist/esm/modules/base/base.service.js.map +1 -0
  124. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +1 -0
  125. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +1 -0
  126. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +1 -0
  127. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js.map +1 -0
  128. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +1 -0
  129. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -0
  130. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +1 -0
  131. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -0
  132. package/dist/esm/modules/email/email.service.js +1 -0
  133. package/dist/esm/modules/email/email.service.js.map +1 -0
  134. package/dist/esm/modules/error-handler/error-handler.controller.js +4 -0
  135. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -0
  136. package/dist/esm/modules/error-handler/utils/app-error.js +1 -0
  137. package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -0
  138. package/dist/esm/modules/error-handler/utils/catch-async.js +1 -0
  139. package/dist/esm/modules/error-handler/utils/catch-async.js.map +1 -0
  140. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +3 -0
  141. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -0
  142. package/dist/esm/modules/file-upload/file-upload.controller.js +1 -0
  143. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -0
  144. package/dist/esm/modules/file-upload/file-upload.router.js +1 -0
  145. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -0
  146. package/dist/esm/modules/file-upload/file-upload.service.js +1 -0
  147. package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -0
  148. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +1 -0
  149. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
  150. package/dist/esm/modules/swagger/swagger.router.js +1 -0
  151. package/dist/esm/modules/swagger/swagger.router.js.map +1 -0
  152. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +1 -0
  153. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -0
  154. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +1 -0
  155. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +1 -0
  156. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -0
  157. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -0
  158. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +1 -0
  159. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -0
  160. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -0
  161. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -0
  162. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +1 -0
  163. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -0
  164. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +1 -0
  165. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -0
  166. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +1 -0
  167. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
  168. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +1 -0
  169. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -0
  170. package/dist/esm/package.json +3 -0
  171. package/dist/esm/paths.js +1 -0
  172. package/dist/esm/paths.js.map +1 -0
  173. package/dist/esm/server.js +5 -0
  174. package/dist/esm/server.js.map +1 -0
  175. package/dist/esm/types/arkos-config.js +1 -0
  176. package/dist/esm/types/arkos-config.js.map +1 -0
  177. package/dist/esm/types/auth.js +1 -0
  178. package/dist/esm/types/auth.js.map +1 -0
  179. package/dist/esm/types/index.js +1 -0
  180. package/dist/esm/types/index.js.map +1 -0
  181. package/dist/esm/types/router-config.js +1 -0
  182. package/dist/esm/types/router-config.js.map +1 -0
  183. package/dist/esm/utils/arkos-env.js +1 -0
  184. package/dist/esm/utils/arkos-env.js.map +1 -0
  185. package/dist/esm/utils/cli/build.js +6 -0
  186. package/dist/esm/utils/cli/build.js.map +1 -0
  187. package/dist/esm/utils/cli/dev.js +5 -0
  188. package/dist/esm/utils/cli/dev.js.map +1 -0
  189. package/dist/esm/utils/cli/generate.js +12 -0
  190. package/dist/esm/utils/cli/generate.js.map +1 -0
  191. package/dist/esm/utils/cli/index.js +1 -0
  192. package/dist/esm/utils/cli/index.js.map +1 -0
  193. package/dist/esm/utils/cli/start.js +5 -0
  194. package/dist/esm/utils/cli/start.js.map +1 -0
  195. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -0
  196. package/dist/esm/utils/cli/utils/cli.helpers.js.map +1 -0
  197. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +21 -0
  198. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +1 -0
  199. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +12 -0
  200. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -0
  201. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +206 -0
  202. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +1 -0
  203. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +36 -0
  204. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +1 -0
  205. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +18 -0
  206. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +1 -0
  207. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +15 -0
  208. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +1 -0
  209. package/dist/esm/utils/cli/utils/template-generators.js +2 -0
  210. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -0
  211. package/dist/esm/utils/dotenv.helpers.js +1 -0
  212. package/dist/esm/utils/dotenv.helpers.js.map +1 -0
  213. package/dist/esm/utils/features/api.features.js +1 -0
  214. package/dist/esm/utils/features/api.features.js.map +1 -0
  215. package/dist/esm/utils/features/change-case.features.js +1 -0
  216. package/dist/esm/utils/features/change-case.features.js.map +1 -0
  217. package/dist/esm/utils/helpers/api.features.helpers.js +1 -0
  218. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -0
  219. package/dist/esm/utils/helpers/change-case.helpers.js +1 -0
  220. package/dist/esm/utils/helpers/change-case.helpers.js.map +1 -0
  221. package/dist/esm/utils/helpers/deepmerge.helper.js +1 -0
  222. package/dist/esm/utils/helpers/deepmerge.helper.js.map +1 -0
  223. package/dist/esm/utils/helpers/fs.helpers.js +1 -0
  224. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -0
  225. package/dist/esm/utils/helpers/global.helpers.js +1 -0
  226. package/dist/esm/utils/helpers/global.helpers.js.map +1 -0
  227. package/dist/esm/utils/helpers/models.helpers.js +11 -0
  228. package/dist/esm/utils/helpers/models.helpers.js.map +1 -0
  229. package/dist/esm/utils/helpers/prisma.helpers.js +1 -0
  230. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -0
  231. package/dist/esm/utils/helpers/query-parser.helpers.js +1 -0
  232. package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -0
  233. package/dist/esm/utils/helpers/routers.helpers.js +1 -0
  234. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -0
  235. package/dist/esm/utils/helpers/text.helpers.js +1 -0
  236. package/dist/esm/utils/helpers/text.helpers.js.map +1 -0
  237. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js +1 -0
  238. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
  239. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -0
  240. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -0
  241. package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -0
  242. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -0
  243. package/dist/esm/utils/prisma/types.js +1 -0
  244. package/dist/esm/utils/prisma/types.js.map +1 -0
  245. package/dist/esm/utils/sheu.js +1 -0
  246. package/dist/esm/utils/sheu.js.map +1 -0
  247. package/dist/esm/utils/validate-dto.js +1 -0
  248. package/dist/esm/utils/validate-dto.js.map +1 -0
  249. package/dist/esm/utils/validate-schema.js +1 -0
  250. package/dist/esm/utils/validate-schema.js.map +1 -0
  251. package/package.json +6 -4
  252. package/dist/cjs/index.js +0 -22
  253. package/dist/esm/index.d.mts +0 -280
  254. package/dist/esm/index.mjs +0 -22
  255. package/dist/exports/index.js +0 -1
  256. package/dist/types/arkos-config.js +0 -1
  257. package/dist/types/auth.js +0 -1
  258. package/dist/types/index.js +0 -1
  259. package/dist/types/router-config.js +0 -1
  260. package/dist/utils/arkos-env.js +0 -1
  261. package/dist/utils/dotenv.helpers.js +0 -1
  262. package/dist/utils/sheu.js +0 -1
  263. package/dist/utils/validate-dto.js +0 -1
  264. package/dist/utils/validate-schema.js +0 -1
@@ -1,185 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AuthService = void 0;
7
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
- const bcryptjs_1 = __importDefault(require("bcryptjs"));
9
- const catch_async_1 = __importDefault(require("../error-handler/utils/catch-async"));
10
- const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
11
- const base_middlewares_1 = require("../base/base.middlewares");
12
- const server_1 = require("../../server");
13
- const arkos_env_1 = __importDefault(require("../../utils/arkos-env"));
14
- const prisma_helpers_1 = require("../../utils/helpers/prisma.helpers");
15
- class AuthService {
16
- constructor() {
17
- this.authenticate = (0, catch_async_1.default)(async (req, res, next) => {
18
- const arkosConfig = (0, server_1.getArkosConfig)();
19
- if (!arkosConfig?.authentication) {
20
- next();
21
- return;
22
- }
23
- req.user = (await this.getAuthenticatedUser(req));
24
- next();
25
- });
26
- }
27
- signJwtToken(id, expiresIn, secret) {
28
- const { authentication: configs } = (0, server_1.getArkosConfig)();
29
- if (process.env.NODE_ENV === "production" &&
30
- !process.env.JWT_SECRET &&
31
- !configs?.jwt?.secret)
32
- throw new app_error_1.default("Missing JWT secret on production!", 500, {}, "MissingJWTOnProduction");
33
- secret =
34
- secret ||
35
- configs?.jwt?.secret ||
36
- process.env.JWT_SECRET ||
37
- arkos_env_1.default.JWT_SECRET;
38
- expiresIn = (expiresIn ||
39
- configs?.jwt?.expiresIn ||
40
- process.env.JWT_EXPIRES_IN ||
41
- arkos_env_1.default.JWT_EXPIRES_IN);
42
- return jsonwebtoken_1.default.sign({ id }, secret, {
43
- expiresIn: expiresIn,
44
- });
45
- }
46
- isPasswordHashed(password) {
47
- return !Number.isNaN(bcryptjs_1.default.getRounds(password) * 1);
48
- }
49
- async isCorrectPassword(candidatePassword, userPassword) {
50
- return await bcryptjs_1.default.compare(candidatePassword, userPassword);
51
- }
52
- async hashPassword(password) {
53
- return await bcryptjs_1.default.hash(password, 12);
54
- }
55
- isPasswordStrong(password) {
56
- const initAuthConfigs = (0, server_1.getArkosConfig)()?.authentication;
57
- const strongPasswordRegex = initAuthConfigs?.passwordValidation?.regex ||
58
- /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).+$/;
59
- return strongPasswordRegex.test(password);
60
- }
61
- userChangedPasswordAfter(user, JWTTimestamp) {
62
- if (user.passwordChangedAt) {
63
- const convertedTimestamp = parseInt(String(user.passwordChangedAt.getTime() / 1000), 10);
64
- return JWTTimestamp < convertedTimestamp;
65
- }
66
- return false;
67
- }
68
- async verifyJwtToken(token, secret) {
69
- const { authentication: configs } = (0, server_1.getArkosConfig)();
70
- if (process.env.NODE_ENV === "production" &&
71
- !process.env.JWT_SECRET &&
72
- !configs?.jwt?.secret)
73
- throw new app_error_1.default("Missing JWT secret!", 500);
74
- secret =
75
- secret ||
76
- configs?.jwt?.secret ||
77
- process.env.JWT_SECRET ||
78
- arkos_env_1.default.JWT_SECRET;
79
- return new Promise((resolve, reject) => {
80
- jsonwebtoken_1.default.verify(token, secret, (err, decoded) => {
81
- if (err)
82
- reject(err);
83
- else
84
- resolve(decoded);
85
- });
86
- });
87
- }
88
- handleAccessControl(action, resourceName, accessControl) {
89
- return (0, catch_async_1.default)(async (req, res, next) => {
90
- if (req.user) {
91
- const user = req.user;
92
- const prisma = (0, prisma_helpers_1.getPrismaInstance)();
93
- const configs = (0, server_1.getArkosConfig)();
94
- if (user.isSuperUser) {
95
- next();
96
- return;
97
- }
98
- if (configs?.authentication?.mode === "dynamic") {
99
- const matchingRole = await prisma.userRole.findFirst({
100
- where: {
101
- userId: req.user.id,
102
- role: {
103
- permissions: {
104
- some: {
105
- resource: resourceName,
106
- action: action,
107
- },
108
- },
109
- },
110
- },
111
- select: { id: true },
112
- });
113
- if (!matchingRole)
114
- return next(new app_error_1.default("You do not have permission to perfom this action", 403));
115
- }
116
- else if (configs?.authentication?.mode === "static") {
117
- let authorizedRoles = [];
118
- if (!accessControl)
119
- return next(new app_error_1.default("You do not have permission to perform this action", 403));
120
- if (Array.isArray(accessControl))
121
- authorizedRoles = accessControl;
122
- else if (accessControl[action])
123
- authorizedRoles = accessControl[action] || [];
124
- const userRoles = Array.isArray(user?.roles)
125
- ? user.roles
126
- : [user.role];
127
- const hasPermission = userRoles.some((role) => authorizedRoles.includes(role));
128
- if (!hasPermission) {
129
- return next(new app_error_1.default("You do not have permission to perform this action", 403));
130
- }
131
- }
132
- }
133
- next();
134
- });
135
- }
136
- async getAuthenticatedUser(req) {
137
- const arkosConfig = (0, server_1.getArkosConfig)();
138
- if (!arkosConfig?.authentication)
139
- return null;
140
- const prisma = (0, prisma_helpers_1.getPrismaInstance)();
141
- let token;
142
- if (req?.headers?.authorization &&
143
- req?.headers?.authorization.startsWith("Bearer")) {
144
- token = req?.headers?.authorization.split(" ")[1];
145
- }
146
- else if (req?.cookies?.arkos_access_token !== "no-token" && req.cookies) {
147
- token = req?.cookies?.arkos_access_token;
148
- }
149
- if (!token)
150
- throw new app_error_1.default("You are not logged in! please log in to get access", 401, {}, "LoginRequired");
151
- let decoded;
152
- try {
153
- decoded = await this.verifyJwtToken(token);
154
- }
155
- catch (err) {
156
- throw new app_error_1.default("Your auth token is invalid, please login again.", 401, {}, "InvalidAuthToken");
157
- }
158
- if (!decoded?.id)
159
- throw new app_error_1.default("Your auth token is invalid, please login again.", 401, {}, "InvalidAuthToken");
160
- const user = await prisma.user.findUnique({
161
- where: { id: String(decoded.id) },
162
- });
163
- if (!user)
164
- throw new app_error_1.default("The user belonging to this token does no longer exists", 401);
165
- if (this.userChangedPasswordAfter(user, decoded.iat) &&
166
- !req.path?.includes?.("logout"))
167
- throw new app_error_1.default("User recently changed password! Please log in again.", 401, {}, "PasswordChanged");
168
- return user;
169
- }
170
- handleAuthenticationControl(action, authenticationControl) {
171
- if (authenticationControl && typeof authenticationControl === "object") {
172
- if (authenticationControl[action] === false)
173
- return base_middlewares_1.callNext;
174
- else if (authenticationControl[action] === true)
175
- return this.authenticate;
176
- }
177
- else
178
- return this.authenticate;
179
- return this.authenticate;
180
- }
181
- }
182
- exports.AuthService = AuthService;
183
- const authService = new AuthService();
184
- exports.default = authService;
185
- //# sourceMappingURL=auth.service.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.AuthService=void 0;const jsonwebtoken_1=__importDefault(require("jsonwebtoken")),bcryptjs_1=__importDefault(require("bcryptjs")),catch_async_1=__importDefault(require("../error-handler/utils/catch-async")),app_error_1=__importDefault(require("../error-handler/utils/app-error")),base_middlewares_1=require("../base/base.middlewares"),server_1=require("../../server"),arkos_env_1=__importDefault(require("../../utils/arkos-env")),prisma_helpers_1=require("../../utils/helpers/prisma.helpers");class AuthService{constructor(){this.authenticate=(0,catch_async_1.default)(async(e,t,s)=>{if(!(0,server_1.getArkosConfig)()?.authentication){s();return}e.user=await this.getAuthenticatedUser(e),s()})}signJwtToken(e,t,s){const{authentication:r}=(0,server_1.getArkosConfig)();if(process.env.NODE_ENV==="production"&&!process.env.JWT_SECRET&&!r?.jwt?.secret)throw new app_error_1.default("Missing JWT secret on production!",500,{},"MissingJWTOnProduction");return s=s||r?.jwt?.secret||process.env.JWT_SECRET||arkos_env_1.default.JWT_SECRET,t=t||r?.jwt?.expiresIn||process.env.JWT_EXPIRES_IN||arkos_env_1.default.JWT_EXPIRES_IN,jsonwebtoken_1.default.sign({id:e},s,{expiresIn:t})}isPasswordHashed(e){return!Number.isNaN(bcryptjs_1.default.getRounds(e)*1)}async isCorrectPassword(e,t){return await bcryptjs_1.default.compare(e,t)}async hashPassword(e){return await bcryptjs_1.default.hash(e,12)}isPasswordStrong(e){return((0,server_1.getArkosConfig)()?.authentication?.passwordValidation?.regex||/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).+$/).test(e)}userChangedPasswordAfter(e,t){if(e.passwordChangedAt){const s=parseInt(String(e.passwordChangedAt.getTime()/1e3),10);return t<s}return!1}async verifyJwtToken(e,t){const{authentication:s}=(0,server_1.getArkosConfig)();if(process.env.NODE_ENV==="production"&&!process.env.JWT_SECRET&&!s?.jwt?.secret)throw new app_error_1.default("Missing JWT secret!",500);return t=t||s?.jwt?.secret||process.env.JWT_SECRET||arkos_env_1.default.JWT_SECRET,new Promise((r,o)=>{jsonwebtoken_1.default.verify(e,t,(i,n)=>{i?o(i):r(n)})})}handleAccessControl(e,t,s){return(0,catch_async_1.default)(async(r,o,i)=>{if(r.user){const n=r.user,d=(0,prisma_helpers_1.getPrismaInstance)(),c=(0,server_1.getArkosConfig)();if(n.isSuperUser){i();return}if(c?.authentication?.mode==="dynamic"){if(!await d.userRole.findFirst({where:{userId:r.user.id,role:{permissions:{some:{resource:t,action:e}}}},select:{id:!0}}))return i(new app_error_1.default("You do not have permission to perfom this action",403))}else if(c?.authentication?.mode==="static"){let u=[];if(!s)return i(new app_error_1.default("You do not have permission to perform this action",403));if(Array.isArray(s)?u=s:s[e]&&(u=s[e]||[]),!(Array.isArray(n?.roles)?n.roles:[n.role]).some(l=>u.includes(l)))return i(new app_error_1.default("You do not have permission to perform this action",403))}}i()})}async getAuthenticatedUser(e){if(!(0,server_1.getArkosConfig)()?.authentication)return null;const s=(0,prisma_helpers_1.getPrismaInstance)();let r;if(e?.headers?.authorization&&e?.headers?.authorization.startsWith("Bearer")?r=e?.headers?.authorization.split(" ")[1]:e?.cookies?.arkos_access_token!=="no-token"&&e.cookies&&(r=e?.cookies?.arkos_access_token),!r)throw new app_error_1.default("You are not logged in! please log in to get access",401,{},"LoginRequired");let o;try{o=await this.verifyJwtToken(r)}catch{throw new app_error_1.default("Your auth token is invalid, please login again.",401,{},"InvalidAuthToken")}if(!o?.id)throw new app_error_1.default("Your auth token is invalid, please login again.",401,{},"InvalidAuthToken");const i=await s.user.findUnique({where:{id:String(o.id)}});if(!i)throw new app_error_1.default("The user belonging to this token does no longer exists",401);if(this.userChangedPasswordAfter(i,o.iat)&&!e.path?.includes?.("logout"))throw new app_error_1.default("User recently changed password! Please log in again.",401,{},"PasswordChanged");return i}handleAuthenticationControl(e,t){if(t&&typeof t=="object"){if(t[e]===!1)return base_middlewares_1.callNext;if(t[e]===!0)return this.authenticate}else return this.authenticate;return this.authenticate}}exports.AuthService=AuthService;const authService=new AuthService;exports.default=authService;
@@ -1,83 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getNestedValue = exports.createPrismaWhereClause = exports.determineUsernameField = void 0;
7
- exports.toMs = toMs;
8
- const server_1 = require("../../../../server");
9
- const app_error_1 = __importDefault(require("../../../error-handler/utils/app-error"));
10
- const determineUsernameField = (req) => {
11
- const authConfigs = (0, server_1.getArkosConfig)()?.authentication;
12
- if (req.query?.usernameField &&
13
- typeof req.query?.usernameField === "string" &&
14
- authConfigs?.login?.allowedUsernames?.includes?.(req.query.usernameField))
15
- return req.query.usernameField;
16
- else if (req.query?.usernameField)
17
- throw new app_error_1.default("Invalid usernameField parameter, it is not allowed!", 400);
18
- return authConfigs?.login?.allowedUsernames?.[0] || "username";
19
- };
20
- exports.determineUsernameField = determineUsernameField;
21
- const createPrismaWhereClause = (path, value) => {
22
- if (!path)
23
- return {};
24
- const parts = path.split(".");
25
- const whereClause = {};
26
- if (parts.length === 1) {
27
- whereClause[parts[0]] = value;
28
- return whereClause;
29
- }
30
- let current = whereClause;
31
- for (let i = 0; i < parts.length - 1; i++) {
32
- const part = parts[i];
33
- current[part] = {};
34
- current = current[part];
35
- }
36
- current[parts[parts.length - 1]] = value;
37
- return whereClause;
38
- };
39
- exports.createPrismaWhereClause = createPrismaWhereClause;
40
- const getNestedValue = (obj, path) => {
41
- if (!obj || !path)
42
- return undefined;
43
- const properties = path.split(".");
44
- const lastProperty = properties[properties.length - 1];
45
- if (lastProperty in obj) {
46
- return obj[lastProperty];
47
- }
48
- return undefined;
49
- };
50
- exports.getNestedValue = getNestedValue;
51
- function normalizeDuration(input) {
52
- return input
53
- .toLowerCase()
54
- .replace(/years?|yr|year/g, "y")
55
- .replace(/minutes?|min/g, "m")
56
- .replace(/seconds?|sec|secs/g, "s")
57
- .replace(/hours?|hr/g, "h")
58
- .replace(/days?/g, "d")
59
- .replace(/weeks?/g, "w")
60
- .replace(/milliseconds?/g, "ms");
61
- }
62
- function toMs(input) {
63
- if (typeof input === "number")
64
- return input * 1000;
65
- const normalizedInput = normalizeDuration(input.trim());
66
- const regex = /^(\d+(?:\.\d+)?)(ms|s|m|h|d|w|y)$/i;
67
- const match = normalizedInput.match(regex);
68
- if (!match)
69
- throw new Error(`Invalid time format: ${input}`);
70
- const value = parseFloat(match[1]);
71
- const unit = match[2].toLowerCase();
72
- const multipliers = {
73
- ms: 1,
74
- s: 1000,
75
- m: 60000,
76
- h: 3600000,
77
- d: 86400000,
78
- w: 604800000,
79
- y: 31557600000,
80
- };
81
- return value * multipliers[unit];
82
- }
83
- //# sourceMappingURL=auth.controller.helpers.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getNestedValue=exports.createPrismaWhereClause=exports.determineUsernameField=void 0,exports.toMs=toMs;const server_1=require("../../../../server"),app_error_1=__importDefault(require("../../../error-handler/utils/app-error")),determineUsernameField=e=>{const s=(0,server_1.getArkosConfig)()?.authentication;if(e.query?.usernameField&&typeof e.query?.usernameField=="string"&&s?.login?.allowedUsernames?.includes?.(e.query.usernameField))return e.query.usernameField;if(e.query?.usernameField)throw new app_error_1.default("Invalid usernameField parameter, it is not allowed!",400);return s?.login?.allowedUsernames?.[0]||"username"};exports.determineUsernameField=determineUsernameField;const createPrismaWhereClause=(e,s)=>{if(!e)return{};const r=e.split("."),t={};if(r.length===1)return t[r[0]]=s,t;let n=t;for(let i=0;i<r.length-1;i++){const a=r[i];n[a]={},n=n[a]}return n[r[r.length-1]]=s,t};exports.createPrismaWhereClause=createPrismaWhereClause;const getNestedValue=(e,s)=>{if(!e||!s)return;const r=s.split("."),t=r[r.length-1];if(t in e)return e[t]};exports.getNestedValue=getNestedValue;function normalizeDuration(e){return e.toLowerCase().replace(/years?|yr|year/g,"y").replace(/minutes?|min/g,"m").replace(/seconds?|sec|secs/g,"s").replace(/hours?|hr/g,"h").replace(/days?/g,"d").replace(/weeks?/g,"w").replace(/milliseconds?/g,"ms")}function toMs(e){if(typeof e=="number")return e*1e3;const s=normalizeDuration(e.trim()),r=/^(\d+(?:\.\d+)?)(ms|s|m|h|d|w|y)$/i,t=s.match(r);if(!t)throw new Error(`Invalid time format: ${e}`);const n=parseFloat(t[1]),i=t[2].toLowerCase();return n*{ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5,y:315576e5}[i]}
@@ -1,158 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getAvailableResources = exports.BaseController = void 0;
7
- exports.getAvalibleRoutes = getAvalibleRoutes;
8
- const catch_async_1 = __importDefault(require("../error-handler/utils/catch-async"));
9
- const api_features_1 = __importDefault(require("../../utils/features/api.features"));
10
- const base_service_1 = require("./base.service");
11
- const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
12
- const change_case_helpers_1 = require("../../utils/helpers/change-case.helpers");
13
- const models_helpers_1 = require("../../utils/helpers/models.helpers");
14
- const base_controller_helpers_1 = require("./utils/helpers/base.controller.helpers");
15
- const pluralize_1 = __importDefault(require("pluralize"));
16
- class BaseController {
17
- constructor(modelName) {
18
- this.createOne = (0, catch_async_1.default)(async (req, res, next) => {
19
- const data = await this.service.createOne(req.body, req.prismaQueryOptions);
20
- if (this.middlewares.afterCreateOne) {
21
- req.responseData = { data };
22
- req.responseStatus = 201;
23
- return next();
24
- }
25
- res.status(201).json({ data });
26
- });
27
- this.createMany = (0, catch_async_1.default)(async (req, res, next) => {
28
- const data = await this.service.createMany(req.body, req.prismaQueryOptions);
29
- if (!data)
30
- return next(new app_error_1.default("Failed to create the resources. Please check your input.", 400, {}, "MissingRequestBody"));
31
- if (this.middlewares.afterCreateMany) {
32
- req.responseData = { data };
33
- req.responseStatus = 201;
34
- return next();
35
- }
36
- res.status(201).json({ data });
37
- });
38
- this.findMany = (0, catch_async_1.default)(async (req, res, next) => {
39
- const { filters: { where, ...queryOptions }, } = new api_features_1.default(req, this.modelName)
40
- .filter()
41
- .sort()
42
- .limitFields()
43
- .paginate();
44
- const [data, total] = (await Promise.all([
45
- this.service.findMany(where, queryOptions),
46
- this.service.count(where),
47
- ]));
48
- if (this.middlewares.afterFindMany) {
49
- req.responseData = { total, results: data.length, data };
50
- req.responseStatus = 200;
51
- return next();
52
- }
53
- res.status(200).json({ total, results: data.length, data });
54
- });
55
- this.findOne = (0, catch_async_1.default)(async (req, res, next) => {
56
- const data = await this.service.findOne(req.params, req.prismaQueryOptions);
57
- if (!data) {
58
- if (Object.keys(req.params).length === 1 &&
59
- "id" in req.params &&
60
- req.params.id !== "me") {
61
- return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${req.params?.id} not found`, 404, {}, "NotFound"));
62
- }
63
- else {
64
- return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "NotFound"));
65
- }
66
- }
67
- if (this.middlewares.afterFindOne) {
68
- req.responseData = { data };
69
- req.responseStatus = 200;
70
- return next();
71
- }
72
- res.status(200).json({ data });
73
- });
74
- this.updateOne = (0, catch_async_1.default)(async (req, res, next) => {
75
- const data = await this.service.updateOne(req.params, req.body, req.prismaQueryOptions);
76
- if (!data) {
77
- if (Object.keys(req.params).length === 1 && "id" in req.params) {
78
- return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${req.params?.id} not found`, 404, {}, "NotFound"));
79
- }
80
- else {
81
- return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "NotFound"));
82
- }
83
- }
84
- if (this.middlewares.afterUpdateOne) {
85
- req.responseData = { data };
86
- req.responseStatus = 200;
87
- return next();
88
- }
89
- res.status(200).json({ data });
90
- });
91
- this.updateMany = (0, catch_async_1.default)(async (req, res, next) => {
92
- if (!Object.keys(req.query).some((key) => key !== "prismaQueryOptions")) {
93
- return next(new app_error_1.default("Filter criteria not provided for bulk update.", 400, {}, "MissingRequestQueryParameters"));
94
- }
95
- req.query.filterMode = req.query?.filterMode || "AND";
96
- const { filters: { where, ...queryOptions }, } = new api_features_1.default(req, this.modelName).filter().sort();
97
- delete queryOptions.include;
98
- const data = (await this.service.updateMany(where, req.body, queryOptions));
99
- if (!data || data.count === 0)
100
- return next(new app_error_1.default(`${(0, pluralize_1.default)((0, change_case_helpers_1.pascalCase)(String(this.modelName)))} not found`, 404));
101
- if (this.middlewares.afterUpdateMany) {
102
- req.responseData = { results: data.count, data };
103
- req.responseStatus = 200;
104
- return next();
105
- }
106
- res.status(200).json({ results: data.count, data });
107
- });
108
- this.deleteOne = (0, catch_async_1.default)(async (req, res, next) => {
109
- const data = await this.service.deleteOne(req.params);
110
- if (!data) {
111
- if (Object.keys(req.params).length === 1 && "id" in req.params) {
112
- return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${req.params?.id} not found`, 404, {}, "NotFound"));
113
- }
114
- else {
115
- return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "NotFound"));
116
- }
117
- }
118
- if (this.middlewares.afterDeleteOne) {
119
- req.additionalData = { data };
120
- req.responseStatus = 204;
121
- return next();
122
- }
123
- res.status(204).send();
124
- });
125
- this.deleteMany = (0, catch_async_1.default)(async (req, res, next) => {
126
- if (!Object.keys(req.query).some((key) => key !== "prismaQueryOptions")) {
127
- return next(new app_error_1.default("Filter criteria not provided for bulk deletion.", 400, {}, "MissingRequestQueryParameters"));
128
- }
129
- req.query.filterMode = req.query?.filterMode || "AND";
130
- const { filters: { where }, } = new api_features_1.default(req, this.modelName).filter().sort();
131
- const data = await this.service.deleteMany(where);
132
- if (!data || data.count === 0) {
133
- return next(new app_error_1.default(`No records found to delete`, 404, {}, "NotFound"));
134
- }
135
- if (this.middlewares.afterDeleteMany) {
136
- req.responseData = { results: data.count, data };
137
- req.responseStatus = 200;
138
- return next();
139
- }
140
- res.status(200).json({ results: data.count, data });
141
- });
142
- this.modelName = modelName;
143
- this.service = new base_service_1.BaseService(modelName);
144
- this.middlewares = (0, models_helpers_1.getModelModules)(modelName)?.middlewares || {};
145
- }
146
- }
147
- exports.BaseController = BaseController;
148
- function getAvalibleRoutes(req, res, next) {
149
- const routes = (0, base_controller_helpers_1.getAppRoutes)();
150
- res.json(routes);
151
- }
152
- exports.getAvailableResources = (0, catch_async_1.default)(async (req, res, next) => {
153
- const models = (0, models_helpers_1.getModels)();
154
- res.status(200).json({
155
- data: [...models.map((model) => (0, change_case_helpers_1.kebabCase)(model)), "file-upload"],
156
- });
157
- });
158
- //# sourceMappingURL=base.controller.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAvailableResources=exports.BaseController=void 0,exports.getAvalibleRoutes=getAvalibleRoutes;const catch_async_1=__importDefault(require("../error-handler/utils/catch-async")),api_features_1=__importDefault(require("../../utils/features/api.features")),base_service_1=require("./base.service"),app_error_1=__importDefault(require("../error-handler/utils/app-error")),change_case_helpers_1=require("../../utils/helpers/change-case.helpers"),models_helpers_1=require("../../utils/helpers/models.helpers"),base_controller_helpers_1=require("./utils/helpers/base.controller.helpers"),pluralize_1=__importDefault(require("pluralize"));class BaseController{constructor(o){this.createOne=(0,catch_async_1.default)(async(e,a,t)=>{const s=await this.service.createOne(e.body,e.prismaQueryOptions);if(this.middlewares.afterCreateOne)return e.responseData={data:s},e.responseStatus=201,t();a.status(201).json({data:s})}),this.createMany=(0,catch_async_1.default)(async(e,a,t)=>{const s=await this.service.createMany(e.body,e.prismaQueryOptions);if(!s)return t(new app_error_1.default("Failed to create the resources. Please check your input.",400,{},"MissingRequestBody"));if(this.middlewares.afterCreateMany)return e.responseData={data:s},e.responseStatus=201,t();a.status(201).json({data:s})}),this.findMany=(0,catch_async_1.default)(async(e,a,t)=>{const{filters:{where:s,...i}}=new api_features_1.default(e,this.modelName).filter().sort().limitFields().paginate(),[r,u]=await Promise.all([this.service.findMany(s,i),this.service.count(s)]);if(this.middlewares.afterFindMany)return e.responseData={total:u,results:r.length,data:r},e.responseStatus=200,t();a.status(200).json({total:u,results:r.length,data:r})}),this.findOne=(0,catch_async_1.default)(async(e,a,t)=>{const s=await this.service.findOne(e.params,e.prismaQueryOptions);if(!s)return Object.keys(e.params).length===1&&"id"in e.params&&e.params.id!=="me"?t(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):t(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} not found`,404,{},"NotFound"));if(this.middlewares.afterFindOne)return e.responseData={data:s},e.responseStatus=200,t();a.status(200).json({data:s})}),this.updateOne=(0,catch_async_1.default)(async(e,a,t)=>{const s=await this.service.updateOne(e.params,e.body,e.prismaQueryOptions);if(!s)return Object.keys(e.params).length===1&&"id"in e.params?t(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):t(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} not found`,404,{},"NotFound"));if(this.middlewares.afterUpdateOne)return e.responseData={data:s},e.responseStatus=200,t();a.status(200).json({data:s})}),this.updateMany=(0,catch_async_1.default)(async(e,a,t)=>{if(!Object.keys(e.query).some(u=>u!=="prismaQueryOptions"))return t(new app_error_1.default("Filter criteria not provided for bulk update.",400,{},"MissingRequestQueryParameters"));e.query.filterMode=e.query?.filterMode||"AND";const{filters:{where:s,...i}}=new api_features_1.default(e,this.modelName).filter().sort();delete i.include;const r=await this.service.updateMany(s,e.body,i);if(!r||r.count===0)return t(new app_error_1.default(`${(0,pluralize_1.default)((0,change_case_helpers_1.pascalCase)(String(this.modelName)))} not found`,404));if(this.middlewares.afterUpdateMany)return e.responseData={results:r.count,data:r},e.responseStatus=200,t();a.status(200).json({results:r.count,data:r})}),this.deleteOne=(0,catch_async_1.default)(async(e,a,t)=>{const s=await this.service.deleteOne(e.params);if(!s)return Object.keys(e.params).length===1&&"id"in e.params?t(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):t(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} not found`,404,{},"NotFound"));if(this.middlewares.afterDeleteOne)return e.additionalData={data:s},e.responseStatus=204,t();a.status(204).send()}),this.deleteMany=(0,catch_async_1.default)(async(e,a,t)=>{if(!Object.keys(e.query).some(r=>r!=="prismaQueryOptions"))return t(new app_error_1.default("Filter criteria not provided for bulk deletion.",400,{},"MissingRequestQueryParameters"));e.query.filterMode=e.query?.filterMode||"AND";const{filters:{where:s}}=new api_features_1.default(e,this.modelName).filter().sort(),i=await this.service.deleteMany(s);if(!i||i.count===0)return t(new app_error_1.default("No records found to delete",404,{},"NotFound"));if(this.middlewares.afterDeleteMany)return e.responseData={results:i.count,data:i},e.responseStatus=200,t();a.status(200).json({results:i.count,data:i})}),this.modelName=o,this.service=new base_service_1.BaseService(o),this.middlewares=(0,models_helpers_1.getModelModules)(o)?.middlewares||{}}}exports.BaseController=BaseController;function getAvalibleRoutes(n,o,e){const a=(0,base_controller_helpers_1.getAppRoutes)();o.json(a)}exports.getAvailableResources=(0,catch_async_1.default)(async(n,o,e)=>{const a=(0,models_helpers_1.getModels)();o.status(200).json({data:[...a.map(t=>(0,change_case_helpers_1.kebabCase)(t)),"file-upload"]})});
@@ -1,92 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.callNext = callNext;
7
- exports.sendResponse = sendResponse;
8
- exports.addRouteMiddlwaresAndConfigs = addRouteMiddlwaresAndConfigs;
9
- exports.addPrismaQueryOptionsToRequest = addPrismaQueryOptionsToRequest;
10
- exports.handleRequestLogs = handleRequestLogs;
11
- exports.handleRequestBodyValidationAndTransformation = handleRequestBodyValidationAndTransformation;
12
- const server_1 = require("../../server");
13
- const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
14
- const error_handler_1 = require("../../exports/error-handler");
15
- const validate_dto_1 = __importDefault(require("../../utils/validate-dto"));
16
- const validate_schema_1 = __importDefault(require("../../utils/validate-schema"));
17
- const base_middlewares_helpers_1 = require("./utils/helpers/base.middlewares.helpers");
18
- function callNext(_, _1, next) {
19
- next();
20
- }
21
- function sendResponse(req, res) {
22
- if (Number(req?.responseStatus) === 204)
23
- res.status(Number(req?.responseStatus)).send();
24
- else if (req.responseData && req?.responseStatus)
25
- res.status(Number(req?.responseStatus)).json(req.responseData);
26
- else if (Number(req?.responseStatus) && !req.responseData)
27
- res.status(Number(req?.responseStatus)).send();
28
- else
29
- res
30
- .status(500)
31
- .json({ message: "No status or data attached to the response" });
32
- }
33
- function addRouteMiddlwaresAndConfigs() { }
34
- function addPrismaQueryOptionsToRequest(prismaQueryOptions, action) {
35
- return (req, _, next) => {
36
- const configs = (0, server_1.getArkosConfig)();
37
- const resolvedOptions = (0, base_middlewares_helpers_1.resolvePrismaQueryOptions)(prismaQueryOptions, action);
38
- const requestQueryOptions = configs?.request?.parameters
39
- ?.allowDangerousPrismaQueryOptions
40
- ? JSON.parse(req.query?.prismaQueryOptions || "{}")
41
- : {};
42
- req.prismaQueryOptions = (0, deepmerge_helper_1.default)(resolvedOptions, requestQueryOptions);
43
- next();
44
- };
45
- }
46
- function handleRequestLogs(req, res, next) {
47
- const startTime = Date.now();
48
- const methodColors = {
49
- GET: "\x1b[36m",
50
- POST: "\x1b[32m",
51
- PUT: "\x1b[33m",
52
- PATCH: "\x1b[33m",
53
- DELETE: "\x1b[31m",
54
- HEAD: "\x1b[34m",
55
- OPTIONS: "\x1b[34m",
56
- };
57
- const getStatusColor = (statusCode) => {
58
- if (statusCode >= 200 && statusCode < 300)
59
- return "\x1b[32m";
60
- if (statusCode >= 300 && statusCode < 400)
61
- return "\x1b[33m";
62
- if (statusCode >= 400 && statusCode < 500)
63
- return "\x1b[33m";
64
- if (statusCode >= 500)
65
- return "\x1b[31m";
66
- return "\x1b[0m";
67
- };
68
- res.on("finish", () => {
69
- const duration = Date.now() - startTime;
70
- const now = new Date();
71
- const time = now.toTimeString().split(" ")[0];
72
- const methodColor = methodColors[req.method] || "\x1b[0m";
73
- const statusColor = getStatusColor(res.statusCode);
74
- console.info(`[\x1b[36mINFO\x1b[0m] \x1b[90m${time}\x1b[0m ${methodColor}${req.method}\x1b[0m ${decodeURIComponent(req.originalUrl)} ${statusColor}${res.statusCode}\x1b[0m \x1b[35m${duration}ms\x1b[0m`);
75
- });
76
- next();
77
- }
78
- function handleRequestBodyValidationAndTransformation(schemaOrDtoClass, classValidatorValidationOptions) {
79
- return (0, error_handler_1.catchAsync)(async (req, _, next) => {
80
- const validationConfigs = (0, server_1.getArkosConfig)()?.validation;
81
- let body = req.body;
82
- if (validationConfigs?.resolver === "class-validator" && schemaOrDtoClass)
83
- req.body = await (0, validate_dto_1.default)(schemaOrDtoClass, body, (0, deepmerge_helper_1.default)({
84
- whitelist: true,
85
- ...classValidatorValidationOptions,
86
- }, validationConfigs?.validationOptions || {}));
87
- else if (validationConfigs?.resolver === "zod" && schemaOrDtoClass)
88
- req.body = await (0, validate_schema_1.default)(schemaOrDtoClass, body);
89
- next();
90
- });
91
- }
92
- //# sourceMappingURL=base.middlewares.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.callNext=callNext,exports.sendResponse=sendResponse,exports.addRouteMiddlwaresAndConfigs=addRouteMiddlwaresAndConfigs,exports.addPrismaQueryOptionsToRequest=addPrismaQueryOptionsToRequest,exports.handleRequestLogs=handleRequestLogs,exports.handleRequestBodyValidationAndTransformation=handleRequestBodyValidationAndTransformation;const server_1=require("../../server"),deepmerge_helper_1=__importDefault(require("../../utils/helpers/deepmerge.helper")),error_handler_1=require("../../exports/error-handler"),validate_dto_1=__importDefault(require("../../utils/validate-dto")),validate_schema_1=__importDefault(require("../../utils/validate-schema")),base_middlewares_helpers_1=require("./utils/helpers/base.middlewares.helpers");function callNext(e,s,o){o()}function sendResponse(e,s){Number(e?.responseStatus)===204?s.status(Number(e?.responseStatus)).send():e.responseData&&e?.responseStatus?s.status(Number(e?.responseStatus)).json(e.responseData):Number(e?.responseStatus)&&!e.responseData?s.status(Number(e?.responseStatus)).send():s.status(500).json({message:"No status or data attached to the response"})}function addRouteMiddlwaresAndConfigs(){}function addPrismaQueryOptionsToRequest(e,s){return(o,a,r)=>{const n=(0,server_1.getArkosConfig)(),t=(0,base_middlewares_helpers_1.resolvePrismaQueryOptions)(e,s),i=n?.request?.parameters?.allowDangerousPrismaQueryOptions?JSON.parse(o.query?.prismaQueryOptions||"{}"):{};o.prismaQueryOptions=(0,deepmerge_helper_1.default)(t,i),r()}}function handleRequestLogs(e,s,o){const a=Date.now(),r={GET:"\x1B[36m",POST:"\x1B[32m",PUT:"\x1B[33m",PATCH:"\x1B[33m",DELETE:"\x1B[31m",HEAD:"\x1B[34m",OPTIONS:"\x1B[34m"},n=t=>t>=200&&t<300?"\x1B[32m":t>=300&&t<400||t>=400&&t<500?"\x1B[33m":t>=500?"\x1B[31m":"\x1B[0m";s.on("finish",()=>{const t=Date.now()-a,u=new Date().toTimeString().split(" ")[0],d=r[e.method]||"\x1B[0m",l=n(s.statusCode);console.info(`[\x1B[36mINFO\x1B[0m] \x1B[90m${u}\x1B[0m ${d}${e.method}\x1B[0m ${decodeURIComponent(e.originalUrl)} ${l}${s.statusCode}\x1B[0m \x1B[35m${t}ms\x1B[0m`)}),o()}function handleRequestBodyValidationAndTransformation(e,s){return(0,error_handler_1.catchAsync)(async(o,a,r)=>{const n=(0,server_1.getArkosConfig)()?.validation;let t=o.body;n?.resolver==="class-validator"&&e?o.body=await(0,validate_dto_1.default)(e,t,(0,deepmerge_helper_1.default)({whitelist:!0,...s},n?.validationOptions||{})):n?.resolver==="zod"&&e&&(o.body=await(0,validate_schema_1.default)(e,t)),r()})}
@@ -1,24 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getPrismaModelsRouter = getPrismaModelsRouter;
7
- exports.getAvailableResourcesAndRoutesRouter = getAvailableResourcesAndRoutesRouter;
8
- const express_1 = require("express");
9
- const base_controller_1 = require("./base.controller");
10
- const models_helpers_1 = require("../../utils/helpers/models.helpers");
11
- const auth_service_1 = __importDefault(require("../auth/auth.service"));
12
- const base_router_helpers_1 = require("./utils/helpers/base.router.helpers");
13
- async function getPrismaModelsRouter(arkosConfigs) {
14
- const router = (0, express_1.Router)();
15
- await Promise.all((0, base_router_helpers_1.setupRouters)((0, models_helpers_1.getModels)(), router, arkosConfigs));
16
- return router;
17
- }
18
- function getAvailableResourcesAndRoutesRouter() {
19
- const router = (0, express_1.Router)();
20
- router.get("/available-routes", auth_service_1.default?.authenticate, base_controller_1.getAvalibleRoutes);
21
- router.get("/available-resources", auth_service_1.default?.authenticate, base_controller_1.getAvailableResources);
22
- return router;
23
- }
24
- //# sourceMappingURL=base.router.js.map
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPrismaModelsRouter=getPrismaModelsRouter,exports.getAvailableResourcesAndRoutesRouter=getAvailableResourcesAndRoutesRouter;const express_1=require("express"),base_controller_1=require("./base.controller"),models_helpers_1=require("../../utils/helpers/models.helpers"),auth_service_1=__importDefault(require("../auth/auth.service")),base_router_helpers_1=require("./utils/helpers/base.router.helpers");async function getPrismaModelsRouter(e){const t=(0,express_1.Router)();return await Promise.all((0,base_router_helpers_1.setupRouters)((0,models_helpers_1.getModels)(),t,e)),t}function getAvailableResourcesAndRoutesRouter(){const e=(0,express_1.Router)();return e.get("/available-routes",auth_service_1.default?.authenticate,base_controller_1.getAvalibleRoutes),e.get("/available-resources",auth_service_1.default?.authenticate,base_controller_1.getAvailableResources),e}