arkos 1.3.1-beta → 1.3.2-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 (256) hide show
  1. package/dist/cjs/app.js +139 -1
  2. package/dist/cjs/exports/auth/index.js +6 -1
  3. package/dist/cjs/exports/controllers/index.js +11 -1
  4. package/dist/cjs/exports/error-handler/index.js +11 -1
  5. package/dist/cjs/exports/index.js +12 -1
  6. package/dist/cjs/exports/middlewares/index.js +7 -1
  7. package/dist/cjs/exports/prisma/index.js +13 -1
  8. package/dist/cjs/exports/services/index.js +48 -1
  9. package/dist/cjs/exports/utils/index.js +44 -1
  10. package/dist/cjs/exports/validation/index.js +11 -1
  11. package/dist/cjs/modules/auth/auth.controller.js +229 -1
  12. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  13. package/dist/cjs/modules/auth/auth.router.js +82 -1
  14. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  15. package/dist/cjs/modules/auth/auth.service.js +226 -1
  16. package/dist/cjs/modules/auth/utils/auth-error-objects.js +10 -1
  17. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +83 -1
  18. package/dist/cjs/modules/auth/utils/services/auth-action.service.js +92 -1
  19. package/dist/cjs/modules/auth/utils/services/auth-action.service.js.map +1 -1
  20. package/dist/cjs/modules/base/base.controller.js +172 -1
  21. package/dist/cjs/modules/base/base.middlewares.js +92 -1
  22. package/dist/cjs/modules/base/base.router.js +22 -1
  23. package/dist/cjs/modules/base/base.service.js +507 -1
  24. package/dist/cjs/modules/base/base.service.js.map +1 -1
  25. package/dist/cjs/modules/base/types/base.service.types.js +3 -1
  26. package/dist/cjs/modules/base/types/base.service.types.js.map +1 -1
  27. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +80 -1
  28. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +50 -1
  29. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +104 -1
  30. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +208 -1
  31. package/dist/cjs/modules/base/utils/router-validator.js +16 -1
  32. package/dist/cjs/modules/base/utils/service-hooks-manager.js +19 -1
  33. package/dist/cjs/modules/email/email.service.js +104 -1
  34. package/dist/cjs/modules/error-handler/error-handler.controller.js +146 -4
  35. package/dist/cjs/modules/error-handler/utils/app-error.js +17 -1
  36. package/dist/cjs/modules/error-handler/utils/catch-async.js +21 -1
  37. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +205 -3
  38. package/dist/cjs/modules/file-upload/file-upload.controller.js +233 -1
  39. package/dist/cjs/modules/file-upload/file-upload.router.js +60 -1
  40. package/dist/cjs/modules/file-upload/file-upload.service.js +322 -1
  41. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +97 -1
  42. package/dist/cjs/modules/swagger/swagger.router.js +38 -1
  43. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +338 -1
  44. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +64 -1
  45. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +37 -1
  46. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +48 -1
  47. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +32 -1
  48. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +49 -1
  49. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +34 -1
  50. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +471 -1
  51. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +572 -1
  52. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +260 -1
  53. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +112 -1
  54. package/dist/cjs/paths.js +9 -1
  55. package/dist/cjs/server.js +94 -5
  56. package/dist/cjs/types/arkos-config.js +3 -1
  57. package/dist/cjs/types/arkos-config.js.map +1 -1
  58. package/dist/cjs/types/auth.js +3 -1
  59. package/dist/cjs/types/index.js +11 -1
  60. package/dist/cjs/types/router-config.js +3 -1
  61. package/dist/cjs/utils/arkos-env.js +9 -1
  62. package/dist/cjs/utils/cli/build.js +214 -5
  63. package/dist/cjs/utils/cli/dev.js +154 -3
  64. package/dist/cjs/utils/cli/generate.js +109 -1
  65. package/dist/cjs/utils/cli/index.js +104 -1
  66. package/dist/cjs/utils/cli/index.js.map +1 -1
  67. package/dist/cjs/utils/cli/prisma-generate.js +120 -0
  68. package/dist/cjs/utils/cli/prisma-generate.js.map +1 -0
  69. package/dist/cjs/utils/cli/start.js +103 -1
  70. package/dist/cjs/utils/cli/utils/cli.helpers.js +24 -1
  71. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +73 -1
  72. package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js +36 -0
  73. package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -0
  74. package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js +21 -0
  75. package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -0
  76. package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js +201 -0
  77. package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -0
  78. package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js +288 -0
  79. package/dist/cjs/utils/cli/utils/template-generator/templates/{generate-middlewares.js.map → middlewares-template.js.map} +1 -1
  80. package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js +64 -0
  81. package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -0
  82. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +45 -0
  83. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +1 -0
  84. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +29 -0
  85. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js.map +1 -0
  86. package/dist/cjs/utils/cli/utils/template-generators.js +34 -2
  87. package/dist/cjs/utils/cli/utils/template-generators.js.map +1 -1
  88. package/dist/cjs/utils/cli/utils/watermark-stamper.js +17 -3
  89. package/dist/cjs/utils/dotenv.helpers.js +43 -1
  90. package/dist/cjs/utils/dynamic-loader.js +270 -9
  91. package/dist/cjs/utils/features/api.features.js +169 -1
  92. package/dist/cjs/utils/features/change-case.features.js +67 -1
  93. package/dist/cjs/utils/features/port-and-host-allocator.js +105 -1
  94. package/dist/cjs/utils/helpers/api.features.helpers.js +112 -1
  95. package/dist/cjs/utils/helpers/change-case.helpers.js +177 -1
  96. package/dist/cjs/utils/helpers/deepmerge.helper.js +115 -1
  97. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js +76 -1
  98. package/dist/cjs/utils/helpers/fs.helpers.js +57 -1
  99. package/dist/cjs/utils/helpers/global.helpers.js +94 -1
  100. package/dist/cjs/utils/helpers/prisma.helpers.js +40 -1
  101. package/dist/cjs/utils/helpers/query-parser.helpers.js +45 -1
  102. package/dist/cjs/utils/helpers/routers.helpers.js +37 -1
  103. package/dist/cjs/utils/helpers/text.helpers.js +28 -1
  104. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +455 -1
  105. package/dist/cjs/utils/prisma/prisma-schema-parser.js +216 -4
  106. package/dist/cjs/utils/prisma/types.js +3 -1
  107. package/dist/cjs/utils/sheu.js +120 -1
  108. package/dist/cjs/utils/validate-dto.js +17 -1
  109. package/dist/cjs/utils/validate-schema.js +15 -1
  110. package/dist/esm/app.js +132 -1
  111. package/dist/esm/exports/auth/index.js +2 -1
  112. package/dist/esm/exports/controllers/index.js +4 -1
  113. package/dist/esm/exports/error-handler/index.js +4 -1
  114. package/dist/esm/exports/index.js +8 -1
  115. package/dist/esm/exports/middlewares/index.js +2 -1
  116. package/dist/esm/exports/prisma/index.js +6 -1
  117. package/dist/esm/exports/services/index.js +9 -1
  118. package/dist/esm/exports/utils/index.js +4 -1
  119. package/dist/esm/exports/validation/index.js +4 -1
  120. package/dist/esm/modules/auth/auth.controller.js +222 -1
  121. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  122. package/dist/esm/modules/auth/auth.router.js +76 -1
  123. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  124. package/dist/esm/modules/auth/auth.service.js +219 -1
  125. package/dist/esm/modules/auth/utils/auth-error-objects.js +4 -1
  126. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +73 -1
  127. package/dist/esm/modules/auth/utils/services/auth-action.service.js +90 -1
  128. package/dist/esm/modules/auth/utils/services/auth-action.service.js.map +1 -1
  129. package/dist/esm/modules/base/base.controller.js +165 -1
  130. package/dist/esm/modules/base/base.middlewares.js +81 -1
  131. package/dist/esm/modules/base/base.router.js +15 -1
  132. package/dist/esm/modules/base/base.service.js +500 -1
  133. package/dist/esm/modules/base/base.service.js.map +1 -1
  134. package/dist/esm/modules/base/types/base.service.types.js +2 -1
  135. package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
  136. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +76 -1
  137. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +44 -1
  138. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +96 -1
  139. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +198 -1
  140. package/dist/esm/modules/base/utils/router-validator.js +14 -1
  141. package/dist/esm/modules/base/utils/service-hooks-manager.js +17 -1
  142. package/dist/esm/modules/email/email.service.js +97 -1
  143. package/dist/esm/modules/error-handler/error-handler.controller.js +107 -4
  144. package/dist/esm/modules/error-handler/utils/app-error.js +15 -1
  145. package/dist/esm/modules/error-handler/utils/catch-async.js +19 -1
  146. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +163 -3
  147. package/dist/esm/modules/file-upload/file-upload.controller.js +228 -1
  148. package/dist/esm/modules/file-upload/file-upload.router.js +54 -1
  149. package/dist/esm/modules/file-upload/file-upload.service.js +314 -1
  150. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +87 -1
  151. package/dist/esm/modules/swagger/swagger.router.js +32 -1
  152. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +333 -1
  153. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +58 -1
  154. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +34 -1
  155. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +42 -1
  156. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +26 -1
  157. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +46 -1
  158. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +28 -1
  159. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +465 -1
  160. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +566 -1
  161. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +255 -1
  162. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +101 -1
  163. package/dist/esm/paths.js +3 -1
  164. package/dist/esm/server.js +85 -5
  165. package/dist/esm/types/arkos-config.js +2 -1
  166. package/dist/esm/types/arkos-config.js.map +1 -1
  167. package/dist/esm/types/auth.js +2 -1
  168. package/dist/esm/types/index.js +8 -1
  169. package/dist/esm/types/router-config.js +2 -1
  170. package/dist/esm/utils/arkos-env.js +7 -1
  171. package/dist/esm/utils/cli/build.js +208 -5
  172. package/dist/esm/utils/cli/dev.js +147 -3
  173. package/dist/esm/utils/cli/generate.js +103 -1
  174. package/dist/esm/utils/cli/index.js +94 -1
  175. package/dist/esm/utils/cli/index.js.map +1 -1
  176. package/dist/esm/utils/cli/prisma-generate.js +114 -0
  177. package/dist/esm/utils/cli/prisma-generate.js.map +1 -0
  178. package/dist/esm/utils/cli/start.js +96 -1
  179. package/dist/esm/utils/cli/utils/cli.helpers.js +16 -1
  180. package/dist/esm/utils/cli/utils/smart-fs-watcher.js +68 -1
  181. package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js +33 -0
  182. package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -0
  183. package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js +18 -0
  184. package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -0
  185. package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js +198 -0
  186. package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -0
  187. package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js +285 -0
  188. package/dist/esm/utils/cli/utils/template-generator/templates/{generate-middlewares.js.map → middlewares-template.js.map} +1 -1
  189. package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js +61 -0
  190. package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -0
  191. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +39 -0
  192. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -0
  193. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js +26 -0
  194. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js.map +1 -0
  195. package/dist/esm/utils/cli/utils/template-generators.js +28 -2
  196. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  197. package/dist/esm/utils/cli/utils/watermark-stamper.js +15 -3
  198. package/dist/esm/utils/dotenv.helpers.js +37 -1
  199. package/dist/esm/utils/dynamic-loader.js +254 -9
  200. package/dist/esm/utils/features/api.features.js +162 -1
  201. package/dist/esm/utils/features/change-case.features.js +31 -1
  202. package/dist/esm/utils/features/port-and-host-allocator.js +67 -1
  203. package/dist/esm/utils/helpers/api.features.helpers.js +106 -1
  204. package/dist/esm/utils/helpers/change-case.helpers.js +161 -1
  205. package/dist/esm/utils/helpers/deepmerge.helper.js +113 -1
  206. package/dist/esm/utils/helpers/dynamic-loader.helpers.js +69 -1
  207. package/dist/esm/utils/helpers/fs.helpers.js +48 -1
  208. package/dist/esm/utils/helpers/global.helpers.js +51 -1
  209. package/dist/esm/utils/helpers/prisma.helpers.js +32 -1
  210. package/dist/esm/utils/helpers/query-parser.helpers.js +40 -1
  211. package/dist/esm/utils/helpers/routers.helpers.js +29 -1
  212. package/dist/esm/utils/helpers/text.helpers.js +22 -1
  213. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +448 -1
  214. package/dist/esm/utils/prisma/prisma-schema-parser.js +209 -4
  215. package/dist/esm/utils/prisma/types.js +2 -1
  216. package/dist/esm/utils/sheu.js +118 -1
  217. package/dist/esm/utils/validate-dto.js +11 -1
  218. package/dist/esm/utils/validate-schema.js +9 -1
  219. package/dist/types/modules/auth/utils/services/auth-action.service.d.ts +1 -1
  220. package/dist/types/modules/base/types/base.service.types.d.ts +12 -9
  221. package/dist/types/types/arkos-config.d.ts +3 -2
  222. package/dist/types/utils/cli/prisma-generate.d.ts +1 -0
  223. package/package.json +2 -2
  224. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -21
  225. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
  226. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -12
  227. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  228. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js +0 -144
  229. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +0 -1
  230. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -256
  231. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -36
  232. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  233. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -18
  234. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  235. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -9
  236. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
  237. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -21
  238. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
  239. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -12
  240. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  241. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js +0 -144
  242. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +0 -1
  243. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -256
  244. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -36
  245. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  246. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -18
  247. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  248. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -9
  249. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
  250. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-auth-configs-template.d.ts → auth-configs-template.d.ts} +0 -0
  251. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-controller-template.d.ts → controller-template.d.ts} +0 -0
  252. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-hooks-template.d.ts → hooks-template.d.ts} +0 -0
  253. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-middlewares.d.ts → middlewares-template.d.ts} +0 -0
  254. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-prisma-query-options.d.ts → query-options-template.d.ts} +0 -0
  255. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-router-template.d.ts → router-template.d.ts} +0 -0
  256. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-service-template.d.ts → service-template.d.ts} +0 -0
@@ -1 +1,208 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.removeApiAction=removeApiAction,exports.isPrismaRelationFormat=isPrismaRelationFormat,exports.throwErrorIfApiActionIsInvalid=throwErrorIfApiActionIsInvalid,exports.handleRelationFieldsInBody=handleRelationFieldsInBody,exports.canBeUsedToConnect=canBeUsedToConnect;const prisma_schema_parser_1=__importDefault(require("../../../../utils/prisma/prisma-schema-parser")),app_error_1=__importDefault(require("../../../error-handler/utils/app-error"));function removeApiAction(e){if(!e||typeof e!="object")return e;const n={};for(const[a,r]of Object.entries(e))a!=="apiAction"&&(Array.isArray(r)?n[a]=r.map(t=>typeof t=="object"&&t!==null?removeApiAction(t):t):typeof r=="object"&&r!==null?n[a]=removeApiAction(r):n[a]=r);return n}const prismaOperations=["create","connect","update","delete","disconnect","deleteMany","connectOrCreate","upsert","set"];function isPrismaRelationFormat(e){return!e||typeof e!="object"?!1:prismaOperations.some(n=>e?.[n])}function throwErrorIfApiActionIsInvalid(e){if(e&&!prismaOperations.includes(e))throw Error(`Validation Error: Unknown value "${e}" for apiAction field, available values are ${prismaOperations.join(", ")}.`)}function handleRelationFieldsInBody(e,n,a=[]){let r={...e};if(n?.list?.forEach(t=>{if(!e[t.name])return;if(a?.includes?.(e[t.name]?.apiAction)){delete r[t.name];return}if(isPrismaRelationFormat(e[t.name])||!Array.isArray(e[t.name]))return;const c=[],o=[],i=[],l=[],p=[];e[t.name]?.forEach(s=>{if(a?.includes?.(s?.apiAction))return;const A=s?.apiAction;if(throwErrorIfApiActionIsInvalid(A),A==="delete")p.push(s.id);else if(A==="disconnect")l.push({id:s.id});else if(canBeUsedToConnect(t.type,s)){const{apiAction:f,...u}=s;throwErrorIfApiActionIsInvalid(f),o.push(u)}else if(s?.id){const{id:f,apiAction:u,...m}=s;throwErrorIfApiActionIsInvalid(u);let h=getGroupedModelReations(t.type),d=m;(h?.singular||h?.list)&&(d=handleRelationFieldsInBody(m,h,a)),i.push({where:{id:f},data:d})}else{let f=getGroupedModelReations(t.type),u={...s};if((f?.singular||f?.list)&&(u=handleRelationFieldsInBody(u,f,a)),u?.apiAction){const{apiAction:m,...h}=u;throwErrorIfApiActionIsInvalid(m),u=h}c.push(u)}}),r[t.name]={...c.length?{create:c}:{},...o.length?{connect:o}:{},...i.length?{update:i}:{},...l.length?{disconnect:l}:{},...p.length?{deleteMany:{id:{in:p}}}:{}}}),n?.singular?.forEach(t=>{if(!e[t.name])return;if(a?.includes?.(e[t.name]?.apiAction)){delete r[t.name];return}if(isPrismaRelationFormat(e[t.name]))return;const c=e[t.name];let o=getGroupedModelReations(t.type);if(c?.apiAction==="delete")r[t.name]={delete:!0};else if(c?.apiAction==="disconnect")r[t.name]={disconnect:!0};else if(canBeUsedToConnect(t.type,c)){const{apiAction:i,...l}=c;throwErrorIfApiActionIsInvalid(i),r[t.name]={connect:l}}else if(c?.id){const{id:i,apiAction:l,...p}=c;throwErrorIfApiActionIsInvalid(l);let s=p;(o?.singular||o?.list)&&(s=handleRelationFieldsInBody(p,o,a)),r[t.name]={update:{where:{id:i},data:s}}}else{let i={...c};if(i?.apiAction){const{apiAction:l,...p}=i;throwErrorIfApiActionIsInvalid(l),i=p}(o?.singular||o?.list)&&(i=handleRelationFieldsInBody(i,o,a)),r[t.name]={create:i}}}),r?.apiAction)throw new app_error_1.default("Validation Error: Invalid usage of apiAction field, it must only be used on relation fields whether single or multiple.",500,{data:{...e}});return removeApiAction(r)}function getGroupedModelReations(e){const n=prisma_schema_parser_1.default.getModelRelations(e);return{singular:n?.filter(a=>a.isRelation&&!a.isArray),list:n?.filter(a=>a.isRelation&&a.isArray)}}function canBeUsedToConnect(e,n){if(!n||n.apiAction&&!["connect"].includes?.(n.apiAction))return!1;if(n.apiAction==="connect"||Object.keys(n)?.length===1&&n?.id)return!0;const a=prisma_schema_parser_1.default.getModelUniqueFields(e)||[];if(Object.keys(n).length===1&&a?.length>0){const r=Object.keys(n)[0];return a?.some(t=>t.name===r)}return!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.removeApiAction = removeApiAction;
7
+ exports.isPrismaRelationFormat = isPrismaRelationFormat;
8
+ exports.throwErrorIfApiActionIsInvalid = throwErrorIfApiActionIsInvalid;
9
+ exports.handleRelationFieldsInBody = handleRelationFieldsInBody;
10
+ exports.canBeUsedToConnect = canBeUsedToConnect;
11
+ const prisma_schema_parser_1 = __importDefault(require("../../../../utils/prisma/prisma-schema-parser"));
12
+ const app_error_1 = __importDefault(require("../../../error-handler/utils/app-error"));
13
+ function removeApiAction(obj) {
14
+ if (!obj || typeof obj !== "object")
15
+ return obj;
16
+ const result = {};
17
+ for (const [key, value] of Object.entries(obj)) {
18
+ if (key === "apiAction")
19
+ continue;
20
+ if (Array.isArray(value)) {
21
+ result[key] = value.map((item) => typeof item === "object" && item !== null ? removeApiAction(item) : item);
22
+ }
23
+ else if (typeof value === "object" && value !== null) {
24
+ result[key] = removeApiAction(value);
25
+ }
26
+ else {
27
+ result[key] = value;
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ const prismaOperations = [
33
+ "create",
34
+ "connect",
35
+ "update",
36
+ "delete",
37
+ "disconnect",
38
+ "deleteMany",
39
+ "connectOrCreate",
40
+ "upsert",
41
+ "set",
42
+ ];
43
+ function isPrismaRelationFormat(obj) {
44
+ if (!obj || typeof obj !== "object")
45
+ return false;
46
+ return prismaOperations.some((op) => obj?.[op]);
47
+ }
48
+ function throwErrorIfApiActionIsInvalid(apiAction) {
49
+ if (apiAction && !prismaOperations.includes(apiAction))
50
+ throw Error(`Validation Error: Unknown value "${apiAction}" for apiAction field, available values are ${prismaOperations.join(", ")}.`);
51
+ }
52
+ function handleRelationFieldsInBody(body, relationFields, ignoreActions = []) {
53
+ let mutableBody = { ...body };
54
+ relationFields?.list?.forEach((field) => {
55
+ if (!body[field.name])
56
+ return;
57
+ if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {
58
+ delete mutableBody[field.name];
59
+ return;
60
+ }
61
+ if (isPrismaRelationFormat(body[field.name]))
62
+ return;
63
+ if (!Array.isArray(body[field.name]))
64
+ return;
65
+ const createData = [];
66
+ const connectData = [];
67
+ const updateData = [];
68
+ const disconnectData = [];
69
+ const deleteManyIds = [];
70
+ body[field.name]?.forEach((bodyField) => {
71
+ if (ignoreActions?.includes?.(bodyField?.apiAction))
72
+ return;
73
+ const apiAction = bodyField?.apiAction;
74
+ throwErrorIfApiActionIsInvalid(apiAction);
75
+ if (apiAction === "delete") {
76
+ deleteManyIds.push(bodyField.id);
77
+ }
78
+ else if (apiAction === "disconnect") {
79
+ disconnectData.push({ id: bodyField.id });
80
+ }
81
+ else if (canBeUsedToConnect(field.type, bodyField)) {
82
+ const { apiAction, ...cleanedData } = bodyField;
83
+ throwErrorIfApiActionIsInvalid(apiAction);
84
+ connectData.push(cleanedData);
85
+ }
86
+ else if (!bodyField?.id) {
87
+ let nestedRelations = getGroupedModelReations(field.type);
88
+ let dataToPush = { ...bodyField };
89
+ if (nestedRelations?.singular || nestedRelations?.list) {
90
+ dataToPush = handleRelationFieldsInBody(dataToPush, nestedRelations, ignoreActions);
91
+ }
92
+ if (dataToPush?.apiAction) {
93
+ const { apiAction, ...rest } = dataToPush;
94
+ throwErrorIfApiActionIsInvalid(apiAction);
95
+ dataToPush = rest;
96
+ }
97
+ createData.push(dataToPush);
98
+ }
99
+ else {
100
+ const { id, apiAction, ...data } = bodyField;
101
+ throwErrorIfApiActionIsInvalid(apiAction);
102
+ let nestedRelations = getGroupedModelReations(field.type);
103
+ let dataToPush = data;
104
+ if (nestedRelations?.singular || nestedRelations?.list) {
105
+ dataToPush = handleRelationFieldsInBody(data, nestedRelations, ignoreActions);
106
+ }
107
+ updateData.push({
108
+ where: { id },
109
+ data: dataToPush,
110
+ });
111
+ }
112
+ });
113
+ mutableBody[field.name] = {
114
+ ...(createData.length ? { create: createData } : {}),
115
+ ...(connectData.length ? { connect: connectData } : {}),
116
+ ...(updateData.length ? { update: updateData } : {}),
117
+ ...(disconnectData.length ? { disconnect: disconnectData } : {}),
118
+ ...(deleteManyIds.length
119
+ ? { deleteMany: { id: { in: deleteManyIds } } }
120
+ : {}),
121
+ };
122
+ });
123
+ relationFields?.singular?.forEach((field) => {
124
+ if (!body[field.name])
125
+ return;
126
+ if (ignoreActions?.includes?.(body[field.name]?.apiAction)) {
127
+ delete mutableBody[field.name];
128
+ return;
129
+ }
130
+ if (isPrismaRelationFormat(body[field.name])) {
131
+ return;
132
+ }
133
+ const relationData = body[field.name];
134
+ let nestedRelations = getGroupedModelReations(field.type);
135
+ if (relationData?.apiAction === "delete") {
136
+ mutableBody[field.name] = { delete: true };
137
+ }
138
+ else if (relationData?.apiAction === "disconnect") {
139
+ mutableBody[field.name] = { disconnect: true };
140
+ }
141
+ else if (canBeUsedToConnect(field.type, relationData)) {
142
+ const { apiAction, ...cleanedData } = relationData;
143
+ throwErrorIfApiActionIsInvalid(apiAction);
144
+ mutableBody[field.name] = { connect: cleanedData };
145
+ }
146
+ else if (!relationData?.id) {
147
+ let dataToCreate = { ...relationData };
148
+ if (dataToCreate?.apiAction) {
149
+ const { apiAction, ...rest } = dataToCreate;
150
+ throwErrorIfApiActionIsInvalid(apiAction);
151
+ dataToCreate = rest;
152
+ }
153
+ if (nestedRelations?.singular || nestedRelations?.list) {
154
+ dataToCreate = handleRelationFieldsInBody(dataToCreate, nestedRelations, ignoreActions);
155
+ }
156
+ mutableBody[field.name] = { create: dataToCreate };
157
+ }
158
+ else {
159
+ const { id, apiAction, ...data } = relationData;
160
+ throwErrorIfApiActionIsInvalid(apiAction);
161
+ let dataToUpdate = data;
162
+ if (nestedRelations?.singular || nestedRelations?.list) {
163
+ dataToUpdate = handleRelationFieldsInBody(data, nestedRelations, ignoreActions);
164
+ }
165
+ mutableBody[field.name] = {
166
+ update: {
167
+ where: { id },
168
+ data: dataToUpdate,
169
+ },
170
+ };
171
+ }
172
+ });
173
+ if (mutableBody?.apiAction) {
174
+ throw new app_error_1.default("Validation Error: Invalid usage of apiAction field, it must only be used on relation fields whether single or multiple.", 500, {
175
+ data: {
176
+ ...body,
177
+ },
178
+ });
179
+ }
180
+ return removeApiAction(mutableBody);
181
+ }
182
+ function getGroupedModelReations(modelName) {
183
+ const relationsFields = prisma_schema_parser_1.default.getModelRelations(modelName);
184
+ return {
185
+ singular: relationsFields?.filter((field) => field.isRelation && !field.isArray),
186
+ list: relationsFields?.filter((field) => field.isRelation && field.isArray),
187
+ };
188
+ }
189
+ function canBeUsedToConnect(modelName, bodyField) {
190
+ if (!bodyField)
191
+ return false;
192
+ if (bodyField.apiAction && !["connect"]?.includes?.(bodyField.apiAction)) {
193
+ return false;
194
+ }
195
+ if (bodyField.apiAction === "connect") {
196
+ return true;
197
+ }
198
+ if (Object.keys(bodyField)?.length === 1 && bodyField?.id) {
199
+ return true;
200
+ }
201
+ const uniqueFields = prisma_schema_parser_1.default.getModelUniqueFields(modelName) || [];
202
+ if (Object.keys(bodyField).length === 1 && uniqueFields?.length > 0) {
203
+ const fieldName = Object.keys(bodyField)[0];
204
+ return uniqueFields?.some((field) => field.name === fieldName);
205
+ }
206
+ return false;
207
+ }
208
+ //# sourceMappingURL=base.service.helpers.js.map
@@ -1 +1,16 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});class RouterValidator{isExpressRouter(t){if(!t||typeof t!="function")return!1;const e=typeof t?.use=="function"&&typeof t?.get=="function"&&typeof t?.route=="function",s=Array.isArray(t?.stack);return e&&s}}const routerValidator=new RouterValidator;exports.default=routerValidator;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class RouterValidator {
4
+ isExpressRouter(router) {
5
+ if (!router || typeof router !== "function")
6
+ return false;
7
+ const hasRouterMethods = typeof router?.use === "function" &&
8
+ typeof router?.get === "function" &&
9
+ typeof router?.route === "function";
10
+ const hasStack = Array.isArray(router?.stack);
11
+ return hasRouterMethods && hasStack;
12
+ }
13
+ }
14
+ const routerValidator = new RouterValidator();
15
+ exports.default = routerValidator;
16
+ //# sourceMappingURL=router-validator.js.map
@@ -1 +1,19 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});class ServiceHooksManager{async handleHook(o,e){const r=Array.isArray(o)?o:[o];for(const t of r)await t(e)}validateServiceHook(o){if(typeof o!="function")throw new Error(`Validation Error: service hook must be of type function or array of functions but received value of type ${typeof o}`)}}const serviceHooksManager=new ServiceHooksManager;exports.default=serviceHooksManager;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class ServiceHooksManager {
4
+ async handleHook(hooksReceived, hooksArgs) {
5
+ const hooks = Array.isArray(hooksReceived)
6
+ ? hooksReceived
7
+ : [hooksReceived];
8
+ for (const hook of hooks) {
9
+ await hook(hooksArgs);
10
+ }
11
+ }
12
+ validateServiceHook(hook) {
13
+ if (typeof hook !== "function")
14
+ throw new Error(`Validation Error: service hook must be of type function or array of functions but received value of type ${typeof hook}`);
15
+ }
16
+ }
17
+ const serviceHooksManager = new ServiceHooksManager();
18
+ exports.default = serviceHooksManager;
19
+ //# sourceMappingURL=service-hooks-manager.js.map
@@ -1 +1,104 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.EmailService=void 0;const nodemailer_1=__importDefault(require("nodemailer")),html_to_text_1=require("html-to-text"),server_1=require("../../server"),app_error_1=__importDefault(require("../error-handler/utils/app-error"));class EmailService{constructor(e){this.transporter=null,this.customConfig=null,e&&(this.customConfig=e)}getEmailConfig(){if(this.customConfig)return this.customConfig;const{email:e}=(0,server_1.getArkosConfig)();if(!e)throw new app_error_1.default("You are trying to use emailService without setting arkosConfig.email configurations",500,{docs:"Read more about emailService at https://www.arkosjs.com/docs/core-concepts/sending-emails"});return{host:e.host,port:e.port||465,secure:e.secure!==void 0?e.secure:!0,auth:{user:e.auth?.user,pass:e.auth?.pass},name:e.name}}getTransporter(e){if(e){const t=this.getEmailConfig();return nodemailer_1.default.createTransport({host:e.host||t.host,port:e.port||t.port,secure:e.secure!==void 0?e.secure:t.secure,auth:e.auth||t.auth})}if(!this.transporter){const t=this.getEmailConfig();this.transporter=nodemailer_1.default.createTransport({host:t.host,port:t.port,secure:t.secure,auth:t.auth})}return this.transporter}async send(e,t,o=!1){const a=this.getEmailConfig(),s=t?this.getTransporter(t):this.getTransporter(),i=e.from||t?.auth?.user||a.auth?.user;if((t||!o)&&!await this.verifyConnection(s))throw new Error("Failed to connect to email server");return{success:!0,messageId:(await s.sendMail({...e,from:i,text:e?.text||(0,html_to_text_1.convert)(e.html)})).messageId}}async verifyConnection(e){try{return await(e||this.getTransporter()).verify(),!0}catch(t){return console.error("Email Server Connection Failed",t),!1}}updateConfig(e){this.customConfig=e,this.transporter=null}static create(e){return new EmailService(e)}}exports.EmailService=EmailService;const emailService=new EmailService;exports.default=emailService;
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.EmailService = void 0;
7
+ const nodemailer_1 = __importDefault(require("nodemailer"));
8
+ const html_to_text_1 = require("html-to-text");
9
+ const server_1 = require("../../server");
10
+ const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
11
+ class EmailService {
12
+ constructor(config) {
13
+ this.transporter = null;
14
+ this.customConfig = null;
15
+ if (config) {
16
+ this.customConfig = config;
17
+ }
18
+ }
19
+ getEmailConfig() {
20
+ if (this.customConfig) {
21
+ return this.customConfig;
22
+ }
23
+ const { email: emailConfigs } = (0, server_1.getArkosConfig)();
24
+ if (!emailConfigs) {
25
+ throw new app_error_1.default("You are trying to use emailService without setting arkosConfig.email configurations", 500, {
26
+ docs: "Read more about emailService at https://www.arkosjs.com/docs/core-concepts/sending-emails",
27
+ });
28
+ }
29
+ return {
30
+ host: emailConfigs.host,
31
+ port: emailConfigs.port || 465,
32
+ secure: emailConfigs.secure !== undefined ? emailConfigs.secure : true,
33
+ auth: {
34
+ user: emailConfigs.auth?.user,
35
+ pass: emailConfigs.auth?.pass,
36
+ },
37
+ name: emailConfigs.name,
38
+ };
39
+ }
40
+ getTransporter(customConfig) {
41
+ if (customConfig) {
42
+ const defaultConfig = this.getEmailConfig();
43
+ return nodemailer_1.default.createTransport({
44
+ host: customConfig.host || defaultConfig.host,
45
+ port: customConfig.port || defaultConfig.port,
46
+ secure: customConfig.secure !== undefined
47
+ ? customConfig.secure
48
+ : defaultConfig.secure,
49
+ auth: customConfig.auth || defaultConfig.auth,
50
+ });
51
+ }
52
+ if (!this.transporter) {
53
+ const config = this.getEmailConfig();
54
+ this.transporter = nodemailer_1.default.createTransport({
55
+ host: config.host,
56
+ port: config.port,
57
+ secure: config.secure,
58
+ auth: config.auth,
59
+ });
60
+ }
61
+ return this.transporter;
62
+ }
63
+ async send(options, connectionOptions, skipVerification = false) {
64
+ const config = this.getEmailConfig();
65
+ const transporter = connectionOptions
66
+ ? this.getTransporter(connectionOptions)
67
+ : this.getTransporter();
68
+ const fromAddress = options.from || connectionOptions?.auth?.user || config.auth?.user;
69
+ if (connectionOptions || !skipVerification) {
70
+ const isConnected = await this.verifyConnection(transporter);
71
+ if (!isConnected) {
72
+ throw new Error("Failed to connect to email server");
73
+ }
74
+ }
75
+ const info = await transporter.sendMail({
76
+ ...options,
77
+ from: fromAddress,
78
+ text: options?.text || (0, html_to_text_1.convert)(options.html),
79
+ });
80
+ return { success: true, messageId: info.messageId };
81
+ }
82
+ async verifyConnection(transporterToVerify) {
83
+ try {
84
+ const transporter = transporterToVerify || this.getTransporter();
85
+ await transporter.verify();
86
+ return true;
87
+ }
88
+ catch (error) {
89
+ console.error("Email Server Connection Failed", error);
90
+ return false;
91
+ }
92
+ }
93
+ updateConfig(config) {
94
+ this.customConfig = config;
95
+ this.transporter = null;
96
+ }
97
+ static create(config) {
98
+ return new EmailService(config);
99
+ }
100
+ }
101
+ exports.EmailService = EmailService;
102
+ const emailService = new EmailService();
103
+ exports.default = emailService;
104
+ //# sourceMappingURL=email.service.js.map
@@ -1,4 +1,146 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,n,o,a){a===void 0&&(a=o);var t=Object.getOwnPropertyDescriptor(n,o);(!t||("get"in t?!n.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return n[o]}}),Object.defineProperty(e,a,t)}:function(e,n,o,a){a===void 0&&(a=o),e[a]=n[o]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}:function(e,n){e.default=n}),__importStar=this&&this.__importStar||function(){var e=function(n){return e=Object.getOwnPropertyNames||function(o){var a=[];for(var t in o)Object.prototype.hasOwnProperty.call(o,t)&&(a[a.length]=t);return a},e(n)};return function(n){if(n&&n.__esModule)return n;var o={};if(n!=null)for(var a=e(n),t=0;t<a.length;t++)a[t]!=="default"&&__createBinding(o,n,a[t]);return __setModuleDefault(o,n),o}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=errorHandler;const app_error_1=__importDefault(require("./utils/app-error")),errorControllerHelper=__importStar(require("./utils/error-handler.helpers")),server_1=require("../../server");function errorHandler(e,n,o,a){if(console.error("[\x1B[31mError\x1B[0m]:",e),e.statusCode=e.statusCode||500,e.status=e.status||"error",process.env.NODE_ENV!=="production")return sendDevelopmentError(e,n,o);let t={...e,message:e.message};e.name==="JsonWebTokenError"&&(t=errorControllerHelper.handleJWTError()),e.name==="TokenExpiredError"&&(t=errorControllerHelper.handleJWTExpired()),e.name==="PrismaClientValidationError"&&(t=errorControllerHelper.handlePrismaClientValidationError(e)),e.name==="PrismaClientInitializationError"&&(t=errorControllerHelper.handlePrismaClientInitializationError(e)),e.code==="P1000"&&(t=errorControllerHelper.handleAuthenticationError(e)),e.code==="P1001"&&(t=errorControllerHelper.handleServerNotReachableError(e)),e.code==="P1002"&&(t=errorControllerHelper.handleConnectionTimeoutError(e)),e.code==="P1003"&&(t=errorControllerHelper.handleDatabaseNotFoundError(e)),e.code==="P2000"&&(t=errorControllerHelper.handleFieldValueTooLargeError(e)),e.code==="P2001"&&(t=errorControllerHelper.handleRecordNotFoundError(e)),e.code==="P2002"&&(t=errorControllerHelper.handleUniqueConstraintError(e)),e.code==="P2003"&&(t=errorControllerHelper.handleForeignKeyConstraintError(e)),e.code==="P2004"&&(t=errorControllerHelper.handleConstraintFailedError(e)),e.code==="P2025"&&(t=errorControllerHelper.handleNonExistingRecord(e)),e.code==="P3000"&&(t=errorControllerHelper.handleSchemaCreationFailedError(e)),e.code==="P3001"&&(t=errorControllerHelper.handleMigrationAlreadyAppliedError(e)),e.code==="P3002"&&(t=errorControllerHelper.handleMigrationScriptFailedError(e)),e.code==="P3003"&&(t=errorControllerHelper.handleVersionMismatchError(e)),e.name==="NetworkError"&&(t=errorControllerHelper.handleNetworkError(e)),t.isOperational||(t=new app_error_1.default("Internal server error",500)),sendProductionError(t,n,o)}function sendDevelopmentError(e,n,o){n.originalUrl.startsWith("/api")?o.status(e.statusCode).json({...e,message:e.message.split(`
2
- `)[e.message.split(`
3
- `).length-1],stack:e.stack?.split(`
4
- `)}):o.status(e.statusCode).json({title:"Internal server error",message:e.message})}function sendProductionError(e,n,o){if(n.originalUrl.startsWith("/api")){e.isOperational?o.status(e.statusCode).json({status:e.status,message:e.message,meta:e.meta||{},code:e.code||"unknown"}):o.status(500).json({status:"error",message:"Internal server error"});return}if(e.isOperational){o.status(e.statusCode).json({title:"Internal server error",message:e.message});return}o.status(e.statusCode).json({title:"Internal server error",message:"Please try again later."})}process.on("SIGTERM",()=>{process.env.NODE_ENV!=="production"&&process.env.NODE_ENV!=="staging"?process.exit():(console.error("SIGTERM RECEIVED in Production. Shutting down gracefully!"),server_1.server.close(()=>{console.error("Process terminated!!!"),process.exit()}))});
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = errorHandler;
40
+ const app_error_1 = __importDefault(require("./utils/app-error"));
41
+ const errorControllerHelper = __importStar(require("./utils/error-handler.helpers"));
42
+ const server_1 = require("../../server");
43
+ function errorHandler(err, req, res, _) {
44
+ console.error("[\x1b[31mError\x1b[0m]:", err);
45
+ err.statusCode = err.statusCode || 500;
46
+ err.status = err.status || "error";
47
+ if (process.env.NODE_ENV !== "production")
48
+ return sendDevelopmentError(err, req, res);
49
+ let error = { ...err, message: err.message };
50
+ if (err.name === "JsonWebTokenError")
51
+ error = errorControllerHelper.handleJWTError();
52
+ if (err.name === "TokenExpiredError")
53
+ error = errorControllerHelper.handleJWTExpired();
54
+ if (err.name === "PrismaClientValidationError")
55
+ error = errorControllerHelper.handlePrismaClientValidationError(err);
56
+ if (err.name === "PrismaClientInitializationError")
57
+ error = errorControllerHelper.handlePrismaClientInitializationError(err);
58
+ if (err.code === "P1000")
59
+ error = errorControllerHelper.handleAuthenticationError(err);
60
+ if (err.code === "P1001")
61
+ error = errorControllerHelper.handleServerNotReachableError(err);
62
+ if (err.code === "P1002")
63
+ error = errorControllerHelper.handleConnectionTimeoutError(err);
64
+ if (err.code === "P1003")
65
+ error = errorControllerHelper.handleDatabaseNotFoundError(err);
66
+ if (err.code === "P2000")
67
+ error = errorControllerHelper.handleFieldValueTooLargeError(err);
68
+ if (err.code === "P2001")
69
+ error = errorControllerHelper.handleRecordNotFoundError(err);
70
+ if (err.code === "P2002")
71
+ error = errorControllerHelper.handleUniqueConstraintError(err);
72
+ if (err.code === "P2003")
73
+ error = errorControllerHelper.handleForeignKeyConstraintError(err);
74
+ if (err.code === "P2004")
75
+ error = errorControllerHelper.handleConstraintFailedError(err);
76
+ if (err.code === "P2025")
77
+ error = errorControllerHelper.handleNonExistingRecord(err);
78
+ if (err.code === "P3000")
79
+ error = errorControllerHelper.handleSchemaCreationFailedError(err);
80
+ if (err.code === "P3001")
81
+ error = errorControllerHelper.handleMigrationAlreadyAppliedError(err);
82
+ if (err.code === "P3002")
83
+ error = errorControllerHelper.handleMigrationScriptFailedError(err);
84
+ if (err.code === "P3003")
85
+ error = errorControllerHelper.handleVersionMismatchError(err);
86
+ if (err.name === "NetworkError")
87
+ error = errorControllerHelper.handleNetworkError(err);
88
+ if (!error.isOperational)
89
+ error = new app_error_1.default("Internal server error", 500);
90
+ sendProductionError(error, req, res);
91
+ }
92
+ function sendDevelopmentError(err, req, res) {
93
+ if (req.originalUrl.startsWith("/api"))
94
+ res.status(err.statusCode).json({
95
+ ...err,
96
+ message: err.message.split("\n")[err.message.split("\n").length - 1],
97
+ stack: err.stack?.split("\n"),
98
+ });
99
+ else
100
+ res.status(err.statusCode).json({
101
+ title: "Internal server error",
102
+ message: err.message,
103
+ });
104
+ }
105
+ function sendProductionError(err, req, res) {
106
+ if (req.originalUrl.startsWith("/api")) {
107
+ if (err.isOperational)
108
+ res.status(err.statusCode).json({
109
+ status: err.status,
110
+ message: err.message,
111
+ meta: err.meta || {},
112
+ code: err.code || "unknown",
113
+ });
114
+ else
115
+ res.status(500).json({
116
+ status: "error",
117
+ message: "Internal server error",
118
+ });
119
+ return;
120
+ }
121
+ if (err.isOperational) {
122
+ res.status(err.statusCode).json({
123
+ title: "Internal server error",
124
+ message: err.message,
125
+ });
126
+ return;
127
+ }
128
+ res.status(err.statusCode).json({
129
+ title: "Internal server error",
130
+ message: "Please try again later.",
131
+ });
132
+ }
133
+ process.on("SIGTERM", () => {
134
+ if (process.env.NODE_ENV !== "production" &&
135
+ process.env.NODE_ENV !== "staging") {
136
+ process.exit();
137
+ }
138
+ else {
139
+ console.error("SIGTERM RECEIVED in Production. Shutting down gracefully!");
140
+ server_1.server.close(() => {
141
+ console.error("Process terminated!!!");
142
+ process.exit();
143
+ });
144
+ }
145
+ });
146
+ //# sourceMappingURL=error-handler.controller.js.map
@@ -1 +1,17 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});class AppError extends Error{constructor(r,t,s,e){super(r),this.message=r||"An error occurred, try again!",this.statusCode=t,this.status=`${t}`.startsWith("4")?"fail":"error",this.isOperational=!0,this.code=e||"Unknown",this.meta=s,this.missing=!1,Error.captureStackTrace(this,this.constructor)}}exports.default=AppError;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class AppError extends Error {
4
+ constructor(message, statusCode, meta, code) {
5
+ super(message);
6
+ this.message = message || "An error occurred, try again!";
7
+ this.statusCode = statusCode;
8
+ this.status = `${statusCode}`.startsWith("4") ? "fail" : "error";
9
+ this.isOperational = true;
10
+ this.code = code || "Unknown";
11
+ this.meta = meta;
12
+ this.missing = false;
13
+ Error.captureStackTrace(this, this.constructor);
14
+ }
15
+ }
16
+ exports.default = AppError;
17
+ //# sourceMappingURL=app-error.js.map
@@ -1 +1,21 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const catchAsync=(c,s={type:"normal"})=>s?.type==="error"?async(e,a,r,t)=>{try{return await c(e,a,r,t)}catch(y){t(y)}}:async(e,a,r)=>{try{return await c(e,a,r)}catch(t){r(t)}};exports.default=catchAsync;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const catchAsync = (fn, options = { type: "normal" }) => options?.type === "error"
4
+ ? async (err, req, res, next) => {
5
+ try {
6
+ return (await fn(err, req, res, next));
7
+ }
8
+ catch (err) {
9
+ next(err);
10
+ }
11
+ }
12
+ : async (req, res, next) => {
13
+ try {
14
+ return (await fn(req, res, next));
15
+ }
16
+ catch (err) {
17
+ next(err);
18
+ }
19
+ };
20
+ exports.default = catchAsync;
21
+ //# sourceMappingURL=catch-async.js.map