arkos 1.3.2-canary.3 → 1.3.3-beta

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 (301) hide show
  1. package/README.md +8 -4
  2. package/dist/cjs/app.js +174 -1
  3. package/dist/cjs/app.js.map +1 -1
  4. package/dist/cjs/exports/auth/index.js +6 -1
  5. package/dist/cjs/exports/controllers/index.js +11 -1
  6. package/dist/cjs/exports/error-handler/index.js +11 -1
  7. package/dist/cjs/exports/index.js +12 -1
  8. package/dist/cjs/exports/middlewares/index.js +7 -1
  9. package/dist/cjs/exports/prisma/index.js +13 -1
  10. package/dist/cjs/exports/services/index.js +48 -1
  11. package/dist/cjs/exports/utils/index.js +24 -1
  12. package/dist/cjs/exports/utils/index.js.map +1 -1
  13. package/dist/cjs/exports/validation/index.js +11 -1
  14. package/dist/cjs/modules/auth/auth.controller.js +247 -1
  15. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  16. package/dist/cjs/modules/auth/auth.router.js +82 -1
  17. package/dist/cjs/modules/auth/auth.service.js +226 -1
  18. package/dist/cjs/modules/auth/utils/auth-error-objects.js +10 -1
  19. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +83 -1
  20. package/dist/cjs/modules/auth/utils/services/auth-action.service.js +92 -1
  21. package/dist/cjs/modules/base/base.controller.js +210 -1
  22. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  23. package/dist/cjs/modules/base/base.middlewares.js +92 -1
  24. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  25. package/dist/cjs/modules/base/base.router.js +22 -1
  26. package/dist/cjs/modules/base/base.service.js +615 -1
  27. package/dist/cjs/modules/base/base.service.js.map +1 -1
  28. package/dist/cjs/modules/base/types/base.service.types.js +3 -1
  29. package/dist/cjs/modules/base/types/base.service.types.js.map +1 -1
  30. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +80 -1
  31. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +50 -1
  32. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +118 -1
  33. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  34. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +208 -1
  35. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  36. package/dist/cjs/modules/base/utils/router-validator.js +16 -1
  37. package/dist/cjs/modules/base/utils/service-hooks-manager.js +19 -1
  38. package/dist/cjs/modules/debugger/debugger.service.js +48 -0
  39. package/dist/cjs/modules/debugger/debugger.service.js.map +1 -0
  40. package/dist/cjs/modules/email/email.service.js +104 -1
  41. package/dist/cjs/modules/error-handler/error-handler.controller.js +146 -4
  42. package/dist/cjs/modules/error-handler/utils/app-error.js +17 -1
  43. package/dist/cjs/modules/error-handler/utils/catch-async.js +21 -1
  44. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +205 -3
  45. package/dist/cjs/modules/file-upload/file-upload.controller.js +237 -1
  46. package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
  47. package/dist/cjs/modules/file-upload/file-upload.router.js +60 -1
  48. package/dist/cjs/modules/file-upload/file-upload.service.js +322 -1
  49. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +97 -1
  50. package/dist/cjs/modules/swagger/swagger.router.js +39 -1
  51. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  52. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +338 -1
  53. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +64 -1
  54. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +37 -1
  55. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +52 -1
  56. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
  57. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +32 -1
  58. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +49 -1
  59. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +34 -1
  60. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +471 -1
  61. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +572 -1
  62. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +260 -1
  63. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -1
  64. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +112 -1
  65. package/dist/cjs/paths.js +9 -1
  66. package/dist/cjs/server.js +103 -5
  67. package/dist/cjs/server.js.map +1 -1
  68. package/dist/cjs/types/arkos-config.js +3 -1
  69. package/dist/cjs/types/arkos-config.js.map +1 -1
  70. package/dist/cjs/types/auth.js +3 -1
  71. package/dist/cjs/types/index.js +11 -1
  72. package/dist/cjs/types/index.js.map +1 -1
  73. package/dist/cjs/types/router-config.js +3 -1
  74. package/dist/cjs/utils/arkos-env.js +9 -1
  75. package/dist/cjs/utils/cli/build.js +214 -5
  76. package/dist/cjs/utils/cli/dev.js +154 -3
  77. package/dist/cjs/utils/cli/generate.js +126 -1
  78. package/dist/cjs/utils/cli/generate.js.map +1 -1
  79. package/dist/cjs/utils/cli/index.js +104 -1
  80. package/dist/cjs/utils/cli/index.js.map +1 -1
  81. package/dist/cjs/utils/cli/prisma-generate.js +120 -0
  82. package/dist/cjs/utils/cli/prisma-generate.js.map +1 -0
  83. package/dist/cjs/utils/cli/start.js +103 -1
  84. package/dist/cjs/utils/cli/utils/cli.helpers.js +24 -1
  85. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +73 -1
  86. package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js +60 -0
  87. package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -0
  88. package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js +17 -0
  89. package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -0
  90. package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js +201 -0
  91. package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -0
  92. package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js +286 -0
  93. package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js.map +1 -0
  94. package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js +64 -0
  95. package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -0
  96. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +42 -0
  97. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +1 -0
  98. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +29 -0
  99. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js.map +1 -0
  100. package/dist/cjs/utils/cli/utils/template-generators.js +34 -2
  101. package/dist/cjs/utils/cli/utils/template-generators.js.map +1 -1
  102. package/dist/cjs/utils/cli/utils/watermark-stamper.js +17 -3
  103. package/dist/cjs/utils/dotenv.helpers.js +43 -1
  104. package/dist/cjs/utils/dynamic-loader.js +270 -9
  105. package/dist/cjs/utils/features/api.features.js +226 -1
  106. package/dist/cjs/utils/features/api.features.js.map +1 -1
  107. package/dist/cjs/utils/features/change-case.features.js +67 -1
  108. package/dist/cjs/utils/features/port-and-host-allocator.js +105 -1
  109. package/dist/cjs/utils/helpers/api.features.helpers.js +112 -1
  110. package/dist/cjs/utils/helpers/change-case.helpers.js +177 -1
  111. package/dist/cjs/utils/helpers/deepmerge.helper.js +115 -1
  112. package/dist/cjs/utils/helpers/deepmerge.helper.js.map +1 -1
  113. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js +76 -1
  114. package/dist/cjs/utils/helpers/fs.helpers.js +57 -1
  115. package/dist/cjs/utils/helpers/global.helpers.js +94 -1
  116. package/dist/cjs/utils/helpers/prisma.helpers.js +44 -1
  117. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  118. package/dist/cjs/utils/helpers/query-parser.helpers.js +45 -1
  119. package/dist/cjs/utils/helpers/routers.helpers.js +37 -1
  120. package/dist/cjs/utils/helpers/text.helpers.js +28 -1
  121. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +455 -1
  122. package/dist/cjs/utils/prisma/prisma-schema-parser.js +216 -4
  123. package/dist/cjs/utils/prisma/types.js +3 -1
  124. package/dist/cjs/utils/sheu.js +126 -1
  125. package/dist/cjs/utils/sheu.js.map +1 -1
  126. package/dist/cjs/utils/validate-dto.js +17 -1
  127. package/dist/cjs/utils/validate-schema.js +15 -1
  128. package/dist/esm/app.js +134 -1
  129. package/dist/esm/app.js.map +1 -1
  130. package/dist/esm/exports/auth/index.js +2 -1
  131. package/dist/esm/exports/controllers/index.js +4 -1
  132. package/dist/esm/exports/error-handler/index.js +4 -1
  133. package/dist/esm/exports/index.js +8 -1
  134. package/dist/esm/exports/middlewares/index.js +2 -1
  135. package/dist/esm/exports/prisma/index.js +6 -1
  136. package/dist/esm/exports/services/index.js +9 -1
  137. package/dist/esm/exports/utils/index.js +4 -1
  138. package/dist/esm/exports/utils/index.js.map +1 -1
  139. package/dist/esm/exports/validation/index.js +4 -1
  140. package/dist/esm/modules/auth/auth.controller.js +240 -1
  141. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  142. package/dist/esm/modules/auth/auth.router.js +76 -1
  143. package/dist/esm/modules/auth/auth.service.js +219 -1
  144. package/dist/esm/modules/auth/utils/auth-error-objects.js +4 -1
  145. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +73 -1
  146. package/dist/esm/modules/auth/utils/services/auth-action.service.js +90 -1
  147. package/dist/esm/modules/base/base.controller.js +203 -1
  148. package/dist/esm/modules/base/base.controller.js.map +1 -1
  149. package/dist/esm/modules/base/base.middlewares.js +81 -1
  150. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  151. package/dist/esm/modules/base/base.router.js +15 -1
  152. package/dist/esm/modules/base/base.service.js +608 -1
  153. package/dist/esm/modules/base/base.service.js.map +1 -1
  154. package/dist/esm/modules/base/types/base.service.types.js +2 -1
  155. package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
  156. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +76 -1
  157. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +44 -1
  158. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +109 -1
  159. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  160. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +198 -1
  161. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  162. package/dist/esm/modules/base/utils/router-validator.js +14 -1
  163. package/dist/esm/modules/base/utils/service-hooks-manager.js +17 -1
  164. package/dist/esm/modules/debugger/debugger.service.js +43 -0
  165. package/dist/esm/modules/debugger/debugger.service.js.map +1 -0
  166. package/dist/esm/modules/email/email.service.js +97 -1
  167. package/dist/esm/modules/error-handler/error-handler.controller.js +107 -4
  168. package/dist/esm/modules/error-handler/utils/app-error.js +15 -1
  169. package/dist/esm/modules/error-handler/utils/catch-async.js +19 -1
  170. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +163 -3
  171. package/dist/esm/modules/file-upload/file-upload.controller.js +232 -1
  172. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
  173. package/dist/esm/modules/file-upload/file-upload.router.js +54 -1
  174. package/dist/esm/modules/file-upload/file-upload.service.js +314 -1
  175. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +87 -1
  176. package/dist/esm/modules/swagger/swagger.router.js +33 -1
  177. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  178. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +333 -1
  179. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +58 -1
  180. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +34 -1
  181. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +46 -1
  182. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
  183. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +26 -1
  184. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +46 -1
  185. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +28 -1
  186. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +465 -1
  187. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +566 -1
  188. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +255 -1
  189. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -1
  190. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +101 -1
  191. package/dist/esm/paths.js +3 -1
  192. package/dist/esm/server.js +94 -5
  193. package/dist/esm/server.js.map +1 -1
  194. package/dist/esm/types/arkos-config.js +2 -1
  195. package/dist/esm/types/arkos-config.js.map +1 -1
  196. package/dist/esm/types/auth.js +2 -1
  197. package/dist/esm/types/index.js +8 -1
  198. package/dist/esm/types/index.js.map +1 -1
  199. package/dist/esm/types/router-config.js +2 -1
  200. package/dist/esm/utils/arkos-env.js +7 -1
  201. package/dist/esm/utils/cli/build.js +208 -5
  202. package/dist/esm/utils/cli/dev.js +147 -3
  203. package/dist/esm/utils/cli/generate.js +120 -1
  204. package/dist/esm/utils/cli/generate.js.map +1 -1
  205. package/dist/esm/utils/cli/index.js +94 -1
  206. package/dist/esm/utils/cli/index.js.map +1 -1
  207. package/dist/esm/utils/cli/prisma-generate.js +114 -0
  208. package/dist/esm/utils/cli/prisma-generate.js.map +1 -0
  209. package/dist/esm/utils/cli/start.js +96 -1
  210. package/dist/esm/utils/cli/utils/cli.helpers.js +16 -1
  211. package/dist/esm/utils/cli/utils/smart-fs-watcher.js +68 -1
  212. package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js +57 -0
  213. package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -0
  214. package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js +14 -0
  215. package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -0
  216. package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js +198 -0
  217. package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -0
  218. package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js +283 -0
  219. package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js.map +1 -0
  220. package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js +61 -0
  221. package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -0
  222. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +39 -0
  223. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -0
  224. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js +26 -0
  225. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js.map +1 -0
  226. package/dist/esm/utils/cli/utils/template-generators.js +28 -2
  227. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  228. package/dist/esm/utils/cli/utils/watermark-stamper.js +15 -3
  229. package/dist/esm/utils/dotenv.helpers.js +37 -1
  230. package/dist/esm/utils/dynamic-loader.js +254 -9
  231. package/dist/esm/utils/features/api.features.js +220 -1
  232. package/dist/esm/utils/features/api.features.js.map +1 -1
  233. package/dist/esm/utils/features/change-case.features.js +31 -1
  234. package/dist/esm/utils/features/port-and-host-allocator.js +67 -1
  235. package/dist/esm/utils/helpers/api.features.helpers.js +106 -1
  236. package/dist/esm/utils/helpers/change-case.helpers.js +161 -1
  237. package/dist/esm/utils/helpers/deepmerge.helper.js +113 -1
  238. package/dist/esm/utils/helpers/deepmerge.helper.js.map +1 -1
  239. package/dist/esm/utils/helpers/dynamic-loader.helpers.js +69 -1
  240. package/dist/esm/utils/helpers/fs.helpers.js +48 -1
  241. package/dist/esm/utils/helpers/global.helpers.js +51 -1
  242. package/dist/esm/utils/helpers/prisma.helpers.js +36 -1
  243. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
  244. package/dist/esm/utils/helpers/query-parser.helpers.js +40 -1
  245. package/dist/esm/utils/helpers/routers.helpers.js +29 -1
  246. package/dist/esm/utils/helpers/text.helpers.js +22 -1
  247. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +448 -1
  248. package/dist/esm/utils/prisma/prisma-schema-parser.js +209 -4
  249. package/dist/esm/utils/prisma/types.js +2 -1
  250. package/dist/esm/utils/sheu.js +124 -1
  251. package/dist/esm/utils/sheu.js.map +1 -1
  252. package/dist/esm/utils/validate-dto.js +11 -1
  253. package/dist/esm/utils/validate-schema.js +9 -1
  254. package/dist/types/exports/utils/index.d.ts +2 -2
  255. package/dist/types/modules/base/base.controller.d.ts +2 -0
  256. package/dist/types/modules/base/base.service.d.ts +5 -0
  257. package/dist/types/modules/base/types/base.service.types.d.ts +11 -8
  258. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +2 -0
  259. package/dist/types/modules/debugger/debugger.service.d.ts +7 -0
  260. package/dist/types/types/arkos-config.d.ts +3 -0
  261. package/dist/types/types/index.d.ts +3 -0
  262. package/dist/types/utils/cli/generate.d.ts +2 -0
  263. package/dist/types/utils/cli/prisma-generate.d.ts +1 -0
  264. package/dist/types/utils/features/api.features.d.ts +3 -5
  265. package/dist/types/utils/sheu.d.ts +4 -0
  266. package/package.json +2 -2
  267. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -21
  268. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
  269. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -12
  270. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  271. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js +0 -144
  272. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +0 -1
  273. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -256
  274. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
  275. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -36
  276. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  277. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -18
  278. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  279. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -9
  280. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
  281. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -21
  282. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
  283. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -12
  284. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  285. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js +0 -144
  286. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +0 -1
  287. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -256
  288. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
  289. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -36
  290. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  291. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -18
  292. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  293. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -9
  294. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
  295. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-auth-configs-template.d.ts → auth-configs-template.d.ts} +0 -0
  296. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-controller-template.d.ts → controller-template.d.ts} +0 -0
  297. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-hooks-template.d.ts → hooks-template.d.ts} +0 -0
  298. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-middlewares.d.ts → middlewares-template.d.ts} +0 -0
  299. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-prisma-query-options.d.ts → query-options-template.d.ts} +0 -0
  300. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-router-template.d.ts → router-template.d.ts} +0 -0
  301. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-service-template.d.ts → service-template.d.ts} +0 -0
@@ -1 +1,226 @@
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"),dynamic_loader_1=require("../../utils/dynamic-loader"),utils_1=require("../../exports/utils"),auth_error_objects_1=require("./utils/auth-error-objects"),auth_action_service_1=__importDefault(require("./utils/services/auth-action.service"));class AuthService{constructor(){this.actionsPerResource={},this.authenticate=(0,catch_async_1.default)(async(e,t,r)=>{if(!(0,server_1.getArkosConfig)()?.authentication){r();return}e.user=await this.getAuthenticatedUser(e),r()})}signJwtToken(e,t,r){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 on production!",500,{},"MissingJWTOnProduction");return r=r||s?.jwt?.secret||process.env.JWT_SECRET||arkos_env_1.default.JWT_SECRET,t=t||s?.jwt?.expiresIn||process.env.JWT_EXPIRES_IN||arkos_env_1.default.JWT_EXPIRES_IN,jsonwebtoken_1.default.sign({id:e},r,{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 r=parseInt(String(e.passwordChangedAt.getTime()/1e3),10);return t<r}return!1}async verifyJwtToken(e,t){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!",500);return t=t||r?.jwt?.secret||process.env.JWT_SECRET||arkos_env_1.default.JWT_SECRET,new Promise((s,o)=>{jsonwebtoken_1.default.verify(e,t,(i,n)=>{i?o(i):s(n)})})}checkStaticAccessControl(e,t,r){if(!e?.role&&!e.roles)throw Error("Validation Error: In order to use static authentication user needs at least role field or roles for multiple roles.");let s=[];return Array.isArray(r)?s=r:r[t]&&(s=Array.isArray(r[t])?r[t]:r[t].roles),!!(Array.isArray(e?.roles)?e.roles:[e.role]).some(i=>s.includes(i))}async checkDynamicAccessControl(e,t,r){return!!await(0,prisma_helpers_1.getPrismaInstance)().userRole.findFirst({where:{userId:e,role:{permissions:{some:{resource:r,action:t}}}},select:{id:!0}})}handleAccessControl(e,t,r){return auth_action_service_1.default.add(e,t,r),(0,catch_async_1.default)(async(s,o,i)=>{if(s.user){const n=s.user,c=(0,server_1.getArkosConfig)();if(n.isSuperUser){i();return}const u=new app_error_1.default("You do not have permission to perfom this action",403,{},"NotEnoughPermissions");if(c?.authentication?.mode==="dynamic"){if(!await this.checkDynamicAccessControl(n.id,e,t))return i(u)}else if(c?.authentication?.mode==="static"&&(!r||!this.checkStaticAccessControl(n,e,r)))return i(u)}i()})}async getAuthenticatedUser(e){if(!(0,server_1.getArkosConfig)()?.authentication)return null;const r=(0,prisma_helpers_1.getPrismaInstance)();let s;if(e?.headers?.authorization&&e?.headers?.authorization.startsWith("Bearer")?s=e?.headers?.authorization.split(" ")[1]:e?.cookies?.arkos_access_token!=="no-token"&&e.cookies&&(s=e?.cookies?.arkos_access_token),!s)throw auth_error_objects_1.loginRequiredError;let o;try{o=await this.verifyJwtToken(s)}catch{throw auth_error_objects_1.invaliAuthTokenError}if(!o?.id)throw auth_error_objects_1.invaliAuthTokenError;const i=await r.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,{},"UserNoLongerExists");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 e.accessToken=s,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}permission(e,t,r){if(new Error().stack?.includes("node_modules/express/lib/router/index.js"))throw new Error("authService.permission() should be called during application initialization level.");return auth_action_service_1.default.add(e,t,r),async o=>{const i=(0,server_1.getArkosConfig)();if(!i?.authentication)throw Error("Validation Error: Trying to use authService.permission without setting up authentication.");if(!o)throw auth_error_objects_1.loginRequiredError;return o.isSuperUser?!0:i?.authentication?.mode==="dynamic"?await this.checkDynamicAccessControl(o?.id,e,t):i?.authentication?.mode==="static"?(!r&&dynamic_loader_1.appModules.includes((0,utils_1.kebabCase)(t))&&(r=(0,dynamic_loader_1.getModuleComponents)((0,utils_1.kebabCase)(t))?.authConfigs?.accessControl),!!r&&this.checkStaticAccessControl(o,e,r)):!1}}}exports.AuthService=AuthService;const authService=new AuthService;exports.default=authService;
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
+ const dynamic_loader_1 = require("../../utils/dynamic-loader");
16
+ const utils_1 = require("../../exports/utils");
17
+ const auth_error_objects_1 = require("./utils/auth-error-objects");
18
+ const auth_action_service_1 = __importDefault(require("./utils/services/auth-action.service"));
19
+ class AuthService {
20
+ constructor() {
21
+ this.actionsPerResource = {};
22
+ this.authenticate = (0, catch_async_1.default)(async (req, _, next) => {
23
+ const arkosConfig = (0, server_1.getArkosConfig)();
24
+ if (!arkosConfig?.authentication) {
25
+ next();
26
+ return;
27
+ }
28
+ req.user = (await this.getAuthenticatedUser(req));
29
+ next();
30
+ });
31
+ }
32
+ signJwtToken(id, expiresIn, secret) {
33
+ const { authentication: configs } = (0, server_1.getArkosConfig)();
34
+ if (process.env.NODE_ENV === "production" &&
35
+ !process.env.JWT_SECRET &&
36
+ !configs?.jwt?.secret)
37
+ throw new app_error_1.default("Missing JWT secret on production!", 500, {}, "MissingJWTOnProduction");
38
+ secret =
39
+ secret ||
40
+ configs?.jwt?.secret ||
41
+ process.env.JWT_SECRET ||
42
+ arkos_env_1.default.JWT_SECRET;
43
+ expiresIn = (expiresIn ||
44
+ configs?.jwt?.expiresIn ||
45
+ process.env.JWT_EXPIRES_IN ||
46
+ arkos_env_1.default.JWT_EXPIRES_IN);
47
+ return jsonwebtoken_1.default.sign({ id }, secret, {
48
+ expiresIn: expiresIn,
49
+ });
50
+ }
51
+ isPasswordHashed(password) {
52
+ return !Number.isNaN(bcryptjs_1.default.getRounds(password) * 1);
53
+ }
54
+ async isCorrectPassword(candidatePassword, userPassword) {
55
+ return await bcryptjs_1.default.compare(candidatePassword, userPassword);
56
+ }
57
+ async hashPassword(password) {
58
+ return await bcryptjs_1.default.hash(password, 12);
59
+ }
60
+ isPasswordStrong(password) {
61
+ const initAuthConfigs = (0, server_1.getArkosConfig)()?.authentication;
62
+ const strongPasswordRegex = initAuthConfigs?.passwordValidation?.regex ||
63
+ /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).+$/;
64
+ return strongPasswordRegex.test(password);
65
+ }
66
+ userChangedPasswordAfter(user, JWTTimestamp) {
67
+ if (user.passwordChangedAt) {
68
+ const convertedTimestamp = parseInt(String(user.passwordChangedAt.getTime() / 1000), 10);
69
+ return JWTTimestamp < convertedTimestamp;
70
+ }
71
+ return false;
72
+ }
73
+ async verifyJwtToken(token, secret) {
74
+ const { authentication: configs } = (0, server_1.getArkosConfig)();
75
+ if (process.env.NODE_ENV === "production" &&
76
+ !process.env.JWT_SECRET &&
77
+ !configs?.jwt?.secret)
78
+ throw new app_error_1.default("Missing JWT secret!", 500);
79
+ secret =
80
+ secret ||
81
+ configs?.jwt?.secret ||
82
+ process.env.JWT_SECRET ||
83
+ arkos_env_1.default.JWT_SECRET;
84
+ return new Promise((resolve, reject) => {
85
+ jsonwebtoken_1.default.verify(token, secret, (err, decoded) => {
86
+ if (err)
87
+ reject(err);
88
+ else
89
+ resolve(decoded);
90
+ });
91
+ });
92
+ }
93
+ checkStaticAccessControl(user, action, accessControl) {
94
+ if (!user?.role && !user.roles)
95
+ throw Error("Validation Error: In order to use static authentication user needs at least role field or roles for multiple roles.");
96
+ let authorizedRoles = [];
97
+ if (Array.isArray(accessControl))
98
+ authorizedRoles = accessControl;
99
+ else if (accessControl[action])
100
+ authorizedRoles = Array.isArray(accessControl[action])
101
+ ? accessControl[action]
102
+ : accessControl[action].roles;
103
+ const userRoles = Array.isArray(user?.roles) ? user.roles : [user.role];
104
+ return !!userRoles.some((role) => authorizedRoles.includes(role));
105
+ }
106
+ async checkDynamicAccessControl(userId, action, resource) {
107
+ const prisma = (0, prisma_helpers_1.getPrismaInstance)();
108
+ return !!(await prisma.userRole.findFirst({
109
+ where: {
110
+ userId,
111
+ role: {
112
+ permissions: {
113
+ some: {
114
+ resource,
115
+ action,
116
+ },
117
+ },
118
+ },
119
+ },
120
+ select: { id: true },
121
+ }));
122
+ }
123
+ handleAccessControl(action, resource, accessControl) {
124
+ auth_action_service_1.default.add(action, resource, accessControl);
125
+ return (0, catch_async_1.default)(async (req, _, next) => {
126
+ if (req.user) {
127
+ const user = req.user;
128
+ const configs = (0, server_1.getArkosConfig)();
129
+ if (user.isSuperUser) {
130
+ next();
131
+ return;
132
+ }
133
+ const notEnoughPermissionsError = new app_error_1.default("You do not have permission to perfom this action", 403, {}, "NotEnoughPermissions");
134
+ if (configs?.authentication?.mode === "dynamic") {
135
+ const hasPermission = await this.checkDynamicAccessControl(user.id, action, resource);
136
+ if (!hasPermission)
137
+ return next(notEnoughPermissionsError);
138
+ }
139
+ else if (configs?.authentication?.mode === "static") {
140
+ if (!accessControl)
141
+ return next(notEnoughPermissionsError);
142
+ const hasPermission = this.checkStaticAccessControl(user, action, accessControl);
143
+ if (!hasPermission)
144
+ return next(notEnoughPermissionsError);
145
+ }
146
+ }
147
+ next();
148
+ });
149
+ }
150
+ async getAuthenticatedUser(req) {
151
+ const arkosConfig = (0, server_1.getArkosConfig)();
152
+ if (!arkosConfig?.authentication)
153
+ return null;
154
+ const prisma = (0, prisma_helpers_1.getPrismaInstance)();
155
+ let token;
156
+ if (req?.headers?.authorization &&
157
+ req?.headers?.authorization.startsWith("Bearer")) {
158
+ token = req?.headers?.authorization.split(" ")[1];
159
+ }
160
+ else if (req?.cookies?.arkos_access_token !== "no-token" && req.cookies) {
161
+ token = req?.cookies?.arkos_access_token;
162
+ }
163
+ if (!token)
164
+ throw auth_error_objects_1.loginRequiredError;
165
+ let decoded;
166
+ try {
167
+ decoded = await this.verifyJwtToken(token);
168
+ }
169
+ catch (err) {
170
+ throw auth_error_objects_1.invaliAuthTokenError;
171
+ }
172
+ if (!decoded?.id)
173
+ throw auth_error_objects_1.invaliAuthTokenError;
174
+ const user = await prisma.user.findUnique({
175
+ where: { id: String(decoded.id) },
176
+ });
177
+ if (!user)
178
+ throw new app_error_1.default("The user belonging to this token does no longer exists", 401, {}, "UserNoLongerExists");
179
+ if (this.userChangedPasswordAfter(user, decoded.iat) &&
180
+ !req.path?.includes?.("logout"))
181
+ throw new app_error_1.default("User recently changed password! Please log in again.", 401, {}, "PasswordChanged");
182
+ req.accessToken = token;
183
+ return user;
184
+ }
185
+ handleAuthenticationControl(action, authenticationControl) {
186
+ if (authenticationControl && typeof authenticationControl === "object") {
187
+ if (authenticationControl[action] === false)
188
+ return base_middlewares_1.callNext;
189
+ else if (authenticationControl[action] === true)
190
+ return this.authenticate;
191
+ }
192
+ else
193
+ return this.authenticate;
194
+ return this.authenticate;
195
+ }
196
+ permission(action, resource, accessControl) {
197
+ const stack = new Error().stack;
198
+ if (stack?.includes("node_modules/express/lib/router/index.js"))
199
+ throw new Error("authService.permission() should be called during application initialization level.");
200
+ auth_action_service_1.default.add(action, resource, accessControl);
201
+ return async (user) => {
202
+ const configs = (0, server_1.getArkosConfig)();
203
+ if (!configs?.authentication)
204
+ throw Error("Validation Error: Trying to use authService.permission without setting up authentication.");
205
+ if (!user)
206
+ throw auth_error_objects_1.loginRequiredError;
207
+ if (user.isSuperUser)
208
+ return true;
209
+ if (configs?.authentication?.mode === "dynamic") {
210
+ return await this.checkDynamicAccessControl(user?.id, action, resource);
211
+ }
212
+ else if (configs?.authentication?.mode === "static") {
213
+ if (!accessControl && dynamic_loader_1.appModules.includes((0, utils_1.kebabCase)(resource)))
214
+ accessControl = (0, dynamic_loader_1.getModuleComponents)((0, utils_1.kebabCase)(resource))?.authConfigs
215
+ ?.accessControl;
216
+ return (!!accessControl &&
217
+ this.checkStaticAccessControl(user, action, accessControl));
218
+ }
219
+ return false;
220
+ };
221
+ }
222
+ }
223
+ exports.AuthService = AuthService;
224
+ const authService = new AuthService();
225
+ exports.default = authService;
226
+ //# sourceMappingURL=auth.service.js.map
@@ -1 +1,10 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.invaliAuthTokenError=exports.loginRequiredError=void 0;const app_error_1=__importDefault(require("../../error-handler/utils/app-error"));exports.loginRequiredError=new app_error_1.default("You are not logged in! please log in to get access",401,{},"LoginRequired"),exports.invaliAuthTokenError=new app_error_1.default("Your auth token is invalid, please login again.",401,{},"InvalidAuthToken");
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.invaliAuthTokenError = exports.loginRequiredError = void 0;
7
+ const app_error_1 = __importDefault(require("../../error-handler/utils/app-error"));
8
+ exports.loginRequiredError = new app_error_1.default("You are not logged in! please log in to get access", 401, {}, "LoginRequired");
9
+ exports.invaliAuthTokenError = new app_error_1.default("Your auth token is invalid, please login again.", 401, {}, "InvalidAuthToken");
10
+ //# sourceMappingURL=auth-error-objects.js.map
@@ -1 +1,83 @@
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
+ "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 +1,92 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const utils_1=require("../../../../exports/utils"),text_helpers_1=require("../../../../utils/helpers/text.helpers");class AuthActionService{constructor(){this.authActions=[{roles:[],action:"View",resource:"auth-action",name:"View auth action",description:"Viewm an auth action",errorMessage:"You do not have permission to perform this operation"}]}add(e,r,t){if(!this.getOne(e,r)){const i=this.transformAccessControlToValidAuthAction(e,r,t);this.authActions.push(i)}}getAll(){return this.authActions}getOne(e,r){return this.authActions.find(t=>t.action===e&&t.resource===r)}transformAccessControlToValidAuthAction(e,r,t){const i={roles:t&&(Array.isArray(t)?t:typeof t=="string"?[t]:Array.isArray(t?.[e]||{})?t[e]:t[e]?.roles)||[],action:e,resource:r,name:`${(0,text_helpers_1.capitalize)((0,utils_1.kebabCase)(e).replace(/-/g," "))} ${(0,text_helpers_1.capitalize)((0,utils_1.kebabCase)(r).replace(/-/g," "))}`,description:`${(0,text_helpers_1.capitalize)((0,utils_1.kebabCase)(e).replace(/-/g," "))} ${(0,text_helpers_1.capitalize)((0,utils_1.kebabCase)(r).replace(/-/g," "))}`,errorMessage:"You do not have permission to perform this operation"};if(!t||Array.isArray(t))return i;const s=t[e];if(s){if(Array.isArray(s))return i;if(typeof s=="object")return{...i,name:s.name||i.name,description:s?.description||i.description,errorMessage:s?.errorMessage||i.errorMessage}}return i}getUniqueActions(){return[...new Set(this.authActions.map(e=>e.action))]}getUniqueResources(){return[...new Set(this.authActions.map(e=>e.resource))]}getByResource(e){return this.authActions.filter(r=>r.resource===e)}getByAction(e){return this.authActions.filter(r=>r.action===e)}exists(e,r){return!!this.getOne(e,r)}}const authActionService=new AuthActionService;exports.default=authActionService;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../../../../exports/utils");
4
+ const text_helpers_1 = require("../../../../utils/helpers/text.helpers");
5
+ class AuthActionService {
6
+ constructor() {
7
+ this.authActions = [
8
+ {
9
+ roles: [],
10
+ action: "View",
11
+ resource: "auth-action",
12
+ name: "View auth action",
13
+ description: "Viewm an auth action",
14
+ errorMessage: "You do not have permission to perform this operation",
15
+ },
16
+ ];
17
+ }
18
+ add(action, resource, accessControl) {
19
+ if (!this.getOne(action, resource)) {
20
+ const transformedAction = this.transformAccessControlToValidAuthAction(action, resource, accessControl);
21
+ this.authActions.push(transformedAction);
22
+ }
23
+ }
24
+ getAll() {
25
+ return this.authActions;
26
+ }
27
+ getOne(action, resource) {
28
+ return this.authActions.find((authAction) => authAction.action === action && authAction.resource === resource);
29
+ }
30
+ transformAccessControlToValidAuthAction(action, resource, accessControl) {
31
+ const baseAuthAction = {
32
+ roles: (accessControl &&
33
+ (Array.isArray(accessControl)
34
+ ? accessControl
35
+ : typeof accessControl === "string"
36
+ ? [accessControl]
37
+ : Array.isArray(accessControl?.[action] || {})
38
+ ? accessControl[action]
39
+ : accessControl[action]
40
+ ?.roles)) ||
41
+ [],
42
+ action,
43
+ resource,
44
+ name: `${(0, text_helpers_1.capitalize)((0, utils_1.kebabCase)(action).replace(/-/g, " "))} ${(0, text_helpers_1.capitalize)((0, utils_1.kebabCase)(resource).replace(/-/g, " "))}`,
45
+ description: `${(0, text_helpers_1.capitalize)((0, utils_1.kebabCase)(action).replace(/-/g, " "))} ${(0, text_helpers_1.capitalize)((0, utils_1.kebabCase)(resource).replace(/-/g, " "))}`,
46
+ errorMessage: `You do not have permission to perform this operation`,
47
+ };
48
+ if (!accessControl) {
49
+ return baseAuthAction;
50
+ }
51
+ if (Array.isArray(accessControl)) {
52
+ return baseAuthAction;
53
+ }
54
+ const actionRule = accessControl[action];
55
+ if (actionRule) {
56
+ if (Array.isArray(actionRule)) {
57
+ return baseAuthAction;
58
+ }
59
+ else if (typeof actionRule === "object") {
60
+ return {
61
+ ...baseAuthAction,
62
+ name: actionRule.name || baseAuthAction.name,
63
+ description: actionRule?.description || baseAuthAction.description,
64
+ errorMessage: actionRule?.errorMessage || baseAuthAction.errorMessage,
65
+ };
66
+ }
67
+ }
68
+ return baseAuthAction;
69
+ }
70
+ getUniqueActions() {
71
+ return [
72
+ ...new Set(this.authActions.map((authAction) => authAction.action)),
73
+ ];
74
+ }
75
+ getUniqueResources() {
76
+ return [
77
+ ...new Set(this.authActions.map((authAction) => authAction.resource)),
78
+ ];
79
+ }
80
+ getByResource(resource) {
81
+ return this.authActions.filter((authAction) => authAction.resource === resource);
82
+ }
83
+ getByAction(action) {
84
+ return this.authActions.filter((authAction) => authAction.action === action);
85
+ }
86
+ exists(action, resource) {
87
+ return !!this.getOne(action, resource);
88
+ }
89
+ }
90
+ const authActionService = new AuthActionService();
91
+ exports.default = authActionService;
92
+ //# sourceMappingURL=auth-action.service.js.map
@@ -1 +1,210 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAvailableResources=exports.BaseController=void 0;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"),dynamic_loader_1=require("../../utils/dynamic-loader"),pluralize_1=__importDefault(require("pluralize")),sheu_1=__importDefault(require("../../utils/sheu")),prisma_schema_parser_1=__importDefault(require("../../utils/prisma/prisma-schema-parser"));class BaseController{constructor(o){this.createOne=(0,catch_async_1.default)(async(e,a,s)=>{const t=await this.service.createOne(e.body,e.prismaQueryOptions,{user:e?.user,accessToken:e?.accessToken});if(this.interceptors.afterCreateOne)return e.responseData={data:t},e.responseStatus=201,s();a.status(201).json({data:t})}),this.createMany=(0,catch_async_1.default)(async(e,a,s)=>{const t=await this.service.createMany(e.body,e.prismaQueryOptions,{user:e?.user,accessToken:e?.accessToken});if(!t)return s(new app_error_1.default("Failed to create the resources. Please check your input.",400,{},"MissingRequestBody"));if(this.interceptors.afterCreateMany)return e.responseData={data:t},e.responseStatus=201,s();a.status(201).json({data:t})}),this.findMany=(0,catch_async_1.default)(async(e,a,s)=>{const{filters:{where:t,...n}}=new api_features_1.default(e,this.modelName).filter().sort().limitFields().paginate(),[r,u]=await Promise.all([this.service.findMany(t,n,{user:e?.user,accessToken:e?.accessToken}),this.service.count(t,{user:e?.user,accessToken:e?.accessToken})]);if(this.interceptors.afterFindMany)return e.responseData={total:u,results:r.length,data:r},e.responseStatus=200,s();a.status(200).json({total:u,results:r.length,data:r})}),this.findOne=(0,catch_async_1.default)(async(e,a,s)=>{const t=await this.service.findOne(e.params,e.prismaQueryOptions,{user:e?.user,accessToken:e?.accessToken});if(!t)return Object.keys(e.params).length===1&&"id"in e.params&&e.params.id!=="me"?s(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):s(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} not found`,404,{},"NotFound"));if(this.interceptors.afterFindOne)return e.responseData={data:t},e.responseStatus=200,s();a.status(200).json({data:t})}),this.updateOne=(0,catch_async_1.default)(async(e,a,s)=>{const t=await this.service.updateOne(e.params,e.body,e.prismaQueryOptions,{user:e?.user,accessToken:e?.accessToken});if(!t)return Object.keys(e.params).length===1&&"id"in e.params?s(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):s(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} not found`,404,{},"NotFound"));if(this.interceptors.afterUpdateOne)return e.responseData={data:t},e.responseStatus=200,s();a.status(200).json({data:t})}),this.updateMany=(0,catch_async_1.default)(async(e,a,s)=>{if(!Object.keys(e.query).some(u=>u!=="prismaQueryOptions"))return s(new app_error_1.default("Filter criteria not provided for bulk update.",400,{},"MissingRequestQueryParameters"));e.query.filterMode=e.query?.filterMode||"AND";const{filters:{where:t,...n}}=new api_features_1.default(e,this.modelName).filter().sort();delete n.include;const r=await this.service.updateMany(t,e.body,n,{user:e?.user,accessToken:e?.accessToken});if(!r||r.count===0)return s(new app_error_1.default(`${(0,pluralize_1.default)((0,change_case_helpers_1.pascalCase)(String(this.modelName)))} not found`,404));if(this.interceptors.afterUpdateMany)return e.responseData={results:r.count,data:r},e.responseStatus=200,s();a.status(200).json({results:r.count,data:r})}),this.deleteOne=(0,catch_async_1.default)(async(e,a,s)=>{const t=await this.service.deleteOne(e.params,{user:e?.user,accessToken:e?.accessToken});if(!t)return Object.keys(e.params).length===1&&"id"in e.params?s(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} with ID ${e.params?.id} not found`,404,{},"NotFound")):s(new app_error_1.default(`${(0,change_case_helpers_1.pascalCase)(String(this.modelName))} not found`,404,{},"NotFound"));if(this.interceptors.afterDeleteOne)return e.additionalData={data:t},e.responseStatus=204,s();a.status(204).send()}),this.deleteMany=(0,catch_async_1.default)(async(e,a,s)=>{if(!Object.keys(e.query).some(r=>r!=="prismaQueryOptions"))return s(new app_error_1.default("Filter criteria not provided for bulk deletion.",400,{},"MissingRequestQueryParameters"));e.query.filterMode=e.query?.filterMode||"AND";const{filters:{where:t}}=new api_features_1.default(e,this.modelName).filter().sort(),n=await this.service.deleteMany(t,{user:e?.user,accessToken:e?.accessToken});if(!n||n.count===0)return s(new app_error_1.default("No records found to delete",404,{},"NotFound"));if(this.interceptors.afterDeleteMany)return e.responseData={results:n.count,data:n},e.responseStatus=200,s();a.status(200).json({results:n.count,data:n})});const c=(0,dynamic_loader_1.getModuleComponents)(o);this.modelName=o,this.service=new base_service_1.BaseService(o),this.interceptors=c?.interceptors||{}}}exports.BaseController=BaseController,exports.getAvailableResources=(0,catch_async_1.default)(async(i,o)=>{sheu_1.default.warn("This route `/api/available-routes` will be deprecated from 1.4.0-beta, consider using /api/auth-actions instead."),o.status(200).json({data:[...prisma_schema_parser_1.default.getModelsAsArrayOfStrings().map(c=>(0,change_case_helpers_1.kebabCase)(c)),"file-upload"]})});
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
+ const catch_async_1 = __importDefault(require("../error-handler/utils/catch-async"));
8
+ const base_service_1 = require("./base.service");
9
+ const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
10
+ const change_case_helpers_1 = require("../../utils/helpers/change-case.helpers");
11
+ const dynamic_loader_1 = require("../../utils/dynamic-loader");
12
+ const pluralize_1 = __importDefault(require("pluralize"));
13
+ const sheu_1 = __importDefault(require("../../utils/sheu"));
14
+ const prisma_schema_parser_1 = __importDefault(require("../../utils/prisma/prisma-schema-parser"));
15
+ class BaseController {
16
+ constructor(modelName) {
17
+ this.createOne = (0, catch_async_1.default)(async (req, res, next) => {
18
+ const data = await this.service.createOne(req.body, req.prismaQueryOptions, { user: req?.user, accessToken: req?.accessToken });
19
+ if (this.interceptors.afterCreateOne) {
20
+ req.responseData = { data };
21
+ res.locals.data = { data };
22
+ req.responseStatus = 201;
23
+ res.locals.status = 201;
24
+ return next();
25
+ }
26
+ res.status(201).json({ data });
27
+ });
28
+ this.createMany = (0, catch_async_1.default)(async (req, res, next) => {
29
+ const data = await this.service.createMany(req.body, req.prismaQueryOptions, { user: req?.user, accessToken: req?.accessToken });
30
+ if (!data)
31
+ return next(new app_error_1.default("Failed to create the resources. Please check your input.", 400, { body: req.body }));
32
+ if (this.interceptors.afterCreateMany) {
33
+ req.responseData = { data };
34
+ res.locals.data = { data };
35
+ req.responseStatus = 201;
36
+ res.locals.status = 201;
37
+ return next();
38
+ }
39
+ res.status(201).json({ data });
40
+ });
41
+ this.findMany = (0, catch_async_1.default)(async (req, res, next) => {
42
+ const { where, ...queryOptions } = req.filters;
43
+ const [data, total] = (await Promise.all([
44
+ this.service.findMany(where, queryOptions, {
45
+ user: req?.user,
46
+ accessToken: req?.accessToken,
47
+ }),
48
+ this.service.count(where, {
49
+ user: req?.user,
50
+ accessToken: req?.accessToken,
51
+ }),
52
+ ]));
53
+ if (this.interceptors.afterFindMany) {
54
+ req.responseData = { total, results: data.length, data };
55
+ res.locals.data = { total, results: data.length, data };
56
+ req.responseStatus = 200;
57
+ res.locals.status = 200;
58
+ return next();
59
+ }
60
+ res.status(200).json({ total, results: data.length, data });
61
+ });
62
+ this.findOne = (0, catch_async_1.default)(async (req, res, next) => {
63
+ const data = await this.service.findOne(req.params, req.prismaQueryOptions, { user: req?.user, accessToken: req?.accessToken });
64
+ if (!data) {
65
+ if (Object.keys(req.params).length === 1 &&
66
+ "id" in req.params &&
67
+ req.params.id !== "me") {
68
+ 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"));
69
+ }
70
+ else {
71
+ return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "NotFound"));
72
+ }
73
+ }
74
+ if (this.interceptors.afterFindOne) {
75
+ req.responseData = { data };
76
+ res.locals.data = { data };
77
+ req.responseStatus = 200;
78
+ res.locals.status = 200;
79
+ return next();
80
+ }
81
+ res.status(200).json({ data });
82
+ });
83
+ this.updateOne = (0, catch_async_1.default)(async (req, res, next) => {
84
+ const data = await this.service.updateOne(req.params, req.body, req.prismaQueryOptions, { user: req?.user, accessToken: req?.accessToken });
85
+ if (!data) {
86
+ if (Object.keys(req.params).length === 1 && "id" in req.params) {
87
+ 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"));
88
+ }
89
+ else {
90
+ return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "NotFound"));
91
+ }
92
+ }
93
+ if (this.interceptors.afterUpdateOne) {
94
+ req.responseData = { data };
95
+ res.locals.data = { data };
96
+ req.responseStatus = 200;
97
+ res.locals.status = 200;
98
+ return next();
99
+ }
100
+ res.status(200).json({ data });
101
+ });
102
+ this.updateMany = (0, catch_async_1.default)(async (req, res, next) => {
103
+ if (!Object.keys(req.query).some((key) => key !== "prismaQueryOptions")) {
104
+ return next(new app_error_1.default("Filter criteria not provided for bulk update.", 400, {}, "MissingRequestQueryParameters"));
105
+ }
106
+ const { where, ...queryOptions } = req.filters;
107
+ delete queryOptions.include;
108
+ const data = (await this.service.updateMany(where, req.body, queryOptions, { user: req?.user, accessToken: req?.accessToken }));
109
+ if (!data || data.count === 0)
110
+ return next(new app_error_1.default(`${(0, pluralize_1.default)((0, change_case_helpers_1.pascalCase)(String(this.modelName)))} not found`, 404));
111
+ if (this.interceptors.afterUpdateMany) {
112
+ req.responseData = { results: data.count, data };
113
+ res.locals.data = { results: data.count, data };
114
+ req.responseStatus = 200;
115
+ res.locals.status = 200;
116
+ return next();
117
+ }
118
+ res.status(200).json({ results: data.count, data });
119
+ });
120
+ this.batchUpdate = (0, catch_async_1.default)(async (req, res, next) => {
121
+ const data = await this.service.batchUpdate(req.body, req.prismaQueryOptions, { user: req?.user, accessToken: req?.accessToken });
122
+ if (!data || data.length === 0)
123
+ return next(new app_error_1.default("Failed to update the resources. Please check your input.", 400, { body: req.body }));
124
+ if (this.interceptors.afterBatchUpdate) {
125
+ req.responseData = { results: data.length, data };
126
+ res.locals.data = { results: data.length, data };
127
+ req.responseStatus = 200;
128
+ res.locals.status = 200;
129
+ return next();
130
+ }
131
+ res.status(200).json({ results: data.length, data });
132
+ });
133
+ this.deleteOne = (0, catch_async_1.default)(async (req, res, next) => {
134
+ const data = await this.service.deleteOne(req.params, {
135
+ user: req?.user,
136
+ accessToken: req?.accessToken,
137
+ });
138
+ if (!data) {
139
+ if (Object.keys(req.params).length === 1 && "id" in req.params) {
140
+ 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"));
141
+ }
142
+ else {
143
+ return next(new app_error_1.default(`${(0, change_case_helpers_1.pascalCase)(String(this.modelName))} not found`, 404, {}, "NotFound"));
144
+ }
145
+ }
146
+ if (this.interceptors.afterDeleteOne) {
147
+ req.additionalData = { data };
148
+ res.locals.additionalData = { data };
149
+ req.responseStatus = 204;
150
+ res.locals.status = 204;
151
+ return next();
152
+ }
153
+ res.status(204).send();
154
+ });
155
+ this.deleteMany = (0, catch_async_1.default)(async (req, res, next) => {
156
+ if (!Object.keys(req.query).some((key) => key !== "prismaQueryOptions")) {
157
+ return next(new app_error_1.default("Filter criteria not provided for bulk deletion.", 400, {}, "MissingRequestQueryParameters"));
158
+ }
159
+ const { where } = req.filters;
160
+ const data = await this.service.deleteMany(where, {
161
+ user: req?.user,
162
+ accessToken: req?.accessToken,
163
+ });
164
+ if (!data || data.count === 0) {
165
+ return next(new app_error_1.default(`No records found to delete`, 404, {}, "NotFound"));
166
+ }
167
+ if (this.interceptors.afterDeleteMany) {
168
+ req.responseData = { results: data.count, data };
169
+ res.locals.data = { results: data.count, data };
170
+ req.responseStatus = 200;
171
+ res.locals.status = 200;
172
+ return next();
173
+ }
174
+ res.status(200).json({ results: data.count, data });
175
+ });
176
+ this.batchDelete = (0, catch_async_1.default)(async (req, res, next) => {
177
+ const data = await this.service.batchDelete(req.body, {
178
+ user: req?.user,
179
+ accessToken: req?.accessToken,
180
+ });
181
+ if (!data || data.length === 0)
182
+ return next(new app_error_1.default("Failed to delete the resources. Please check your input.", 400, { body: req.body }));
183
+ if (this.interceptors.afterBatchDelete) {
184
+ req.responseData = { results: data.length, data };
185
+ res.locals.data = { results: data.length, data };
186
+ req.responseStatus = 200;
187
+ res.locals.status = 200;
188
+ return next();
189
+ }
190
+ res.status(200).json({ results: data.length, data });
191
+ });
192
+ const components = (0, dynamic_loader_1.getModuleComponents)(modelName);
193
+ this.modelName = modelName;
194
+ this.service = new base_service_1.BaseService(modelName);
195
+ this.interceptors = components?.interceptors || {};
196
+ }
197
+ }
198
+ exports.BaseController = BaseController;
199
+ exports.getAvailableResources = (0, catch_async_1.default)(async (_, res) => {
200
+ sheu_1.default.warn("This route `/api/available-routes` will be deprecated from 1.4.0-beta, consider using /api/auth-actions instead.");
201
+ res.status(200).json({
202
+ data: [
203
+ ...prisma_schema_parser_1.default
204
+ .getModelsAsArrayOfStrings()
205
+ .map((model) => (0, change_case_helpers_1.kebabCase)(model)),
206
+ "file-upload",
207
+ ],
208
+ });
209
+ });
210
+ //# sourceMappingURL=base.controller.js.map