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,322 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFileUploadServices=exports.FileUploadService=void 0;const multer_1=__importDefault(require("multer")),path_1=__importDefault(require("path")),fs_1=__importDefault(require("fs")),app_error_1=__importDefault(require("../error-handler/utils/app-error")),util_1=require("util"),server_1=require("../../server"),deepmerge_helper_1=__importDefault(require("../../utils/helpers/deepmerge.helper")),file_upload_helpers_1=require("./utils/helpers/file-upload.helpers"),text_helpers_1=require("../../utils/helpers/text.helpers");class FileUploadService{constructor(e,s=1024*1024*5,t=/.*/,a=30){this.fileFilter=(l,i,o)=>{const r=this.allowedFileTypes.test(path_1.default.extname(i.originalname).toLowerCase());this.allowedFileTypes.test(i.mimetype)&&r?o(null,!0):o(new app_error_1.default("Invalid file type",400))},e=e.startsWith("/")?e.substring(1):e,e=e.endsWith("/")?e.slice(0,-1):e,this.uploadDir=path_1.default.resolve(process.cwd(),`${e}/`),this.fileSizeLimit=s,this.allowedFileTypes=t,this.maxCount=a,fs_1.default.existsSync(this.uploadDir)||fs_1.default.mkdirSync(this.uploadDir,{recursive:!0}),this.storage=multer_1.default.diskStorage({destination:(l,i,o)=>{o(null,this.uploadDir)},filename:(l,i,o)=>{const r=Date.now()+"-"+Math.round(Math.random()*1e9);o(null,`${r}${path_1.default.extname(i.originalname)}`)}})}getUpload(){return(0,multer_1.default)({storage:this.storage,fileFilter:this.fileFilter,limits:{fileSize:this.fileSizeLimit}})}handleSingleUpload(e){return(s,t,a)=>{this.getUpload().single(this.getFieldName())(s,t,async i=>{if(i instanceof multer_1.default.MulterError)return a(i);if(i)return a(i);if(e){const{fileUpload:o}=(0,server_1.getArkosConfig)(),r=path_1.default.resolve(process.cwd(),(0,text_helpers_1.removeBothSlashes)(o?.baseUploadDir),(0,text_helpers_1.removeBothSlashes)(e));try{await(0,util_1.promisify)(fs_1.default.stat)(r)&&await(0,util_1.promisify)(fs_1.default.unlink)(r)}catch(n){console.error(n)}}a()})}}handleMultipleUpload(){return(e,s,t)=>{this.getUpload().array(this.getFieldName(),this.maxCount)(e,s,l=>{if(l instanceof multer_1.default.MulterError)return t(l);if(l)return t(l);t()})}}handleDeleteSingleFile(e){return async(s,t,a)=>{const l=path_1.default.join(e);try{await(0,util_1.promisify)(fs_1.default.stat)(l)&&await(0,util_1.promisify)(fs_1.default.unlink)(l)}catch(i){console.error(i)}a()}}async deleteFileByUrl(e){try{const{fileUpload:s}=(0,server_1.getArkosConfig)(),t=s?.baseRoute||"/api/uploads";let a;e.startsWith("http")?a=new URL(e).pathname:a=e;const l=a.indexOf(t);if(l===-1)throw new app_error_1.default("Invalid file URL: base route not found",400);const i=a.substring(l+t.length),o=i.startsWith("/")?i.substring(1):i,r=["images","videos","documents","files"];let n=null,u=null;for(const h of r){const v=o.indexOf(h+"/");if(v!==-1){n=h,u=o.substring(v+h.length+1);break}}if(!n||!u)throw new app_error_1.default("Unable to determine file type or file name from URL",400);const{documentUploadService:c,fileUploadService:p,imageUploadService:g,videoUploadService:f}=(0,exports.getFileUploadServices)();let m;switch(n){case"images":m=path_1.default.join(g.uploadDir,u);break;case"videos":m=path_1.default.join(f.uploadDir,u);break;case"documents":m=path_1.default.join(c.uploadDir,u);break;case"files":m=path_1.default.join(p.uploadDir,u);break;default:throw new app_error_1.default(`Unsupported file type: ${n}`,400)}return await(0,util_1.promisify)(fs_1.default.stat)(m),await(0,util_1.promisify)(fs_1.default.unlink)(m),!0}catch(s){throw s instanceof app_error_1.default?s:s.code==="ENOENT"?new app_error_1.default("File not found",404):new app_error_1.default(`Failed to delete file: ${s.message}`,500)}}getFieldName(){let e="files";return(this.uploadDir.endsWith("images")||this.uploadDir.endsWith("images/"))&&(e="images"),(this.uploadDir.endsWith("videos")||this.uploadDir.endsWith("videos/"))&&(e="videos"),(this.uploadDir.endsWith("documents")||this.uploadDir.endsWith("documents/"))&&(e="documents"),(this.uploadDir.endsWith("files")||this.uploadDir.endsWith("files/"))&&(e="files"),e}async upload(e,s,t={}){const{fileUpload:a}=(0,server_1.getArkosConfig)();return a?.baseRoute,new Promise((l,i)=>{((Array.isArray(e.query.multiple)?e.query.multiple[0]=="true":e.query.multiple=="true")?this.getUpload().array(this.getFieldName(),this.maxCount):this.getUpload().single(this.getFieldName()))(e,s,async n=>{if(n)return i(n);try{`${e.get("host")?.includes?.("localhost")?"http":"https"}${e.get("host")}`;const c=this.uploadDir.split("/");this.uploadDir.endsWith("/")?c[c.length-2]:c[c.length-1];let p;if(e.files&&Array.isArray(e.files)&&e.files.length>0)this.uploadDir?.includes?.("/images")?p=await Promise.all(e.files.map(f=>(0,file_upload_helpers_1.processImage)(e,f.path,t))):p=await Promise.all(e.files.map(f=>(0,file_upload_helpers_1.processFile)(e,f.path))),p=p.filter(f=>f!==null);else if(e.file)this.uploadDir?.includes?.("/images")?p=await(0,file_upload_helpers_1.processImage)(e,e.file.path,t):p=await(0,file_upload_helpers_1.processFile)(e,e.file.path);else return i(new app_error_1.default("No file uploaded",400));l(p)}catch(u){i(u)}})})}async deleteFileByName(e,s){try{if(!s)throw new app_error_1.default("File type parameter is required",400);const t=["images","videos","documents","files"];if(!t.includes(s))throw new app_error_1.default(`Invalid file type: ${s}. Must be one of: ${t.join(", ")}`,400);const{documentUploadService:a,fileUploadService:l,imageUploadService:i,videoUploadService:o}=(0,exports.getFileUploadServices)();let r;switch(s){case"images":r=i;break;case"videos":r=o;break;case"documents":r=a;break;case"files":r=l;break;default:throw new app_error_1.default(`Unsupported file type: ${s}`,400)}const n=path_1.default.join(r.uploadDir,e);return await(0,util_1.promisify)(fs_1.default.stat)(n),await(0,util_1.promisify)(fs_1.default.unlink)(n),!0}catch(t){throw t instanceof app_error_1.default?t:t.code==="ENOENT"?new app_error_1.default("File not found",404):new app_error_1.default(`Failed to delete file: ${t.message}`,500)}}}exports.FileUploadService=FileUploadService;const getFileUploadServices=()=>{const{fileUpload:d}=(0,server_1.getArkosConfig)(),e=d?.baseUploadDir||"/uploads",s={images:{maxCount:30,maxSize:1024*1024*15,supportedFilesRegex:/jpeg|jpg|png|gif|webp|svg|bmp|tiff|heif|heic|ico|jfif|raw|cr2|nef|orf|sr2|arw|dng|pef|raf|rw2|psd|ai|eps|xcf|jxr|wdp|hdp|jp2|j2k|jpf|jpx|jpm|mj2|avif/},videos:{maxCount:10,maxSize:1024*1024*5096,supportedFilesRegex:/mp4|avi|mov|mkv|flv|wmv|webm|mpg|mpeg|3gp|m4v|ts|rm|rmvb|vob|ogv|dv|qt|asf|m2ts|mts|divx|f4v|swf|mxf|roq|nsv|mvb|svi|mpe|m2v|mp2|mpv|h264|h265|hevc/},documents:{maxCount:30,maxSize:1024*1024*50,supportedFilesRegex:/pdf|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odg|odp|txt|rtf|csv|epub|md|tex|pages|numbers|key|xml|json|yaml|yml|ini|cfg|conf|log|html|htm|xhtml|djvu|mobi|azw|azw3|fb2|lit|ps|wpd|wps|dot|dotx|xlt|xltx|pot|potx|oft|one|onetoc2|opf|oxps|hwp/},files:{maxCount:10,maxSize:1024*1024*5096,supportedFilesRegex:/.*/}},t=d?.restrictions?(0,deepmerge_helper_1.default)(s,d.restrictions):s,a=new FileUploadService(`${e}/images`,t.images.maxSize,t.images.supportedFilesRegex,t.images.maxCount),l=new FileUploadService(`${e}/videos`,t.videos.maxSize,t.videos.supportedFilesRegex,t.videos.maxCount),i=new FileUploadService(`${e}/documents`,t.documents.maxSize,t.documents.supportedFilesRegex,t.documents.maxCount),o=new FileUploadService(`${e}/files`,t.files.maxSize,t.files.supportedFilesRegex,t.files.maxCount);return{imageUploadService:a,videoUploadService:l,documentUploadService:i,fileUploadService:o}};exports.getFileUploadServices=getFileUploadServices;
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.getFileUploadServices = exports.FileUploadService = void 0;
7
+ const multer_1 = __importDefault(require("multer"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
11
+ const util_1 = require("util");
12
+ const server_1 = require("../../server");
13
+ const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
14
+ const file_upload_helpers_1 = require("./utils/helpers/file-upload.helpers");
15
+ const text_helpers_1 = require("../../utils/helpers/text.helpers");
16
+ class FileUploadService {
17
+ constructor(uploadDir, fileSizeLimit = 1024 * 1024 * 5, allowedFileTypes = /.*/, maxCount = 30) {
18
+ this.fileFilter = (_, file, cb) => {
19
+ const extName = this.allowedFileTypes.test(path_1.default.extname(file.originalname).toLowerCase());
20
+ const mimeType = this.allowedFileTypes.test(file.mimetype);
21
+ if (mimeType && extName) {
22
+ cb(null, true);
23
+ }
24
+ else {
25
+ cb(new app_error_1.default("Invalid file type", 400));
26
+ }
27
+ };
28
+ uploadDir = uploadDir.startsWith("/") ? uploadDir.substring(1) : uploadDir;
29
+ uploadDir = uploadDir.endsWith("/") ? uploadDir.slice(0, -1) : uploadDir;
30
+ this.uploadDir = path_1.default.resolve(process.cwd(), `${uploadDir}/`);
31
+ this.fileSizeLimit = fileSizeLimit;
32
+ this.allowedFileTypes = allowedFileTypes;
33
+ this.maxCount = maxCount;
34
+ if (!fs_1.default.existsSync(this.uploadDir)) {
35
+ fs_1.default.mkdirSync(this.uploadDir, { recursive: true });
36
+ }
37
+ this.storage = multer_1.default.diskStorage({
38
+ destination: (_, _1, cb) => {
39
+ cb(null, this.uploadDir);
40
+ },
41
+ filename: (_, file, cb) => {
42
+ const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
43
+ cb(null, `${uniqueSuffix}${path_1.default.extname(file.originalname)}`);
44
+ },
45
+ });
46
+ }
47
+ getUpload() {
48
+ return (0, multer_1.default)({
49
+ storage: this.storage,
50
+ fileFilter: this.fileFilter,
51
+ limits: { fileSize: this.fileSizeLimit },
52
+ });
53
+ }
54
+ handleSingleUpload(oldFilePath) {
55
+ return (req, res, next) => {
56
+ const upload = this.getUpload().single(this.getFieldName());
57
+ upload(req, res, async (err) => {
58
+ if (err instanceof multer_1.default.MulterError) {
59
+ return next(err);
60
+ }
61
+ else if (err) {
62
+ return next(err);
63
+ }
64
+ if (oldFilePath) {
65
+ const { fileUpload: configs } = (0, server_1.getArkosConfig)();
66
+ const filePath = path_1.default.resolve(process.cwd(), (0, text_helpers_1.removeBothSlashes)(configs?.baseUploadDir), (0, text_helpers_1.removeBothSlashes)(oldFilePath));
67
+ try {
68
+ const stats = await (0, util_1.promisify)(fs_1.default.stat)(filePath);
69
+ if (stats)
70
+ await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
71
+ }
72
+ catch (err) {
73
+ console.error(err);
74
+ }
75
+ }
76
+ next();
77
+ });
78
+ };
79
+ }
80
+ handleMultipleUpload() {
81
+ return (req, res, next) => {
82
+ const upload = this.getUpload().array(this.getFieldName(), this.maxCount);
83
+ upload(req, res, (err) => {
84
+ if (err instanceof multer_1.default.MulterError)
85
+ return next(err);
86
+ else if (err)
87
+ return next(err);
88
+ next();
89
+ });
90
+ };
91
+ }
92
+ handleDeleteSingleFile(oldFilePath) {
93
+ return async (_, _1, next) => {
94
+ const filePath = path_1.default.join(oldFilePath);
95
+ try {
96
+ const stats = await (0, util_1.promisify)(fs_1.default.stat)(filePath);
97
+ if (stats) {
98
+ await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
99
+ }
100
+ }
101
+ catch (err) {
102
+ console.error(err);
103
+ }
104
+ next();
105
+ };
106
+ }
107
+ async deleteFileByUrl(fileUrl) {
108
+ try {
109
+ const { fileUpload } = (0, server_1.getArkosConfig)();
110
+ const baseRoute = fileUpload?.baseRoute || "/api/uploads";
111
+ let urlPath;
112
+ if (fileUrl.startsWith("http")) {
113
+ const url = new URL(fileUrl);
114
+ urlPath = url.pathname;
115
+ }
116
+ else {
117
+ urlPath = fileUrl;
118
+ }
119
+ const baseRouteIndex = urlPath.indexOf(baseRoute);
120
+ if (baseRouteIndex === -1) {
121
+ throw new app_error_1.default("Invalid file URL: base route not found", 400);
122
+ }
123
+ const pathAfterBaseRoute = urlPath.substring(baseRouteIndex + baseRoute.length);
124
+ const cleanPath = pathAfterBaseRoute.startsWith("/")
125
+ ? pathAfterBaseRoute.substring(1)
126
+ : pathAfterBaseRoute;
127
+ const fileTypes = ["images", "videos", "documents", "files"];
128
+ let fileType = null;
129
+ let fileName = null;
130
+ for (const type of fileTypes) {
131
+ const typeIndex = cleanPath.indexOf(type + "/");
132
+ if (typeIndex !== -1) {
133
+ fileType = type;
134
+ fileName = cleanPath.substring(typeIndex + type.length + 1);
135
+ break;
136
+ }
137
+ }
138
+ if (!fileType || !fileName) {
139
+ throw new app_error_1.default("Unable to determine file type or file name from URL", 400);
140
+ }
141
+ const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = (0, exports.getFileUploadServices)();
142
+ let filePath;
143
+ switch (fileType) {
144
+ case "images":
145
+ filePath = path_1.default.join(imageUploadService.uploadDir, fileName);
146
+ break;
147
+ case "videos":
148
+ filePath = path_1.default.join(videoUploadService.uploadDir, fileName);
149
+ break;
150
+ case "documents":
151
+ filePath = path_1.default.join(documentUploadService.uploadDir, fileName);
152
+ break;
153
+ case "files":
154
+ filePath = path_1.default.join(fileUploadService.uploadDir, fileName);
155
+ break;
156
+ default:
157
+ throw new app_error_1.default(`Unsupported file type: ${fileType}`, 400);
158
+ }
159
+ await (0, util_1.promisify)(fs_1.default.stat)(filePath);
160
+ await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
161
+ return true;
162
+ }
163
+ catch (error) {
164
+ if (error instanceof app_error_1.default) {
165
+ throw error;
166
+ }
167
+ if (error.code === "ENOENT") {
168
+ throw new app_error_1.default("File not found", 404);
169
+ }
170
+ throw new app_error_1.default(`Failed to delete file: ${error.message}`, 500);
171
+ }
172
+ }
173
+ getFieldName() {
174
+ let fieldName = "files";
175
+ if (this.uploadDir.endsWith("images") || this.uploadDir.endsWith("images/"))
176
+ fieldName = "images";
177
+ if (this.uploadDir.endsWith("videos") || this.uploadDir.endsWith("videos/"))
178
+ fieldName = "videos";
179
+ if (this.uploadDir.endsWith("documents") ||
180
+ this.uploadDir.endsWith("documents/"))
181
+ fieldName = "documents";
182
+ if (this.uploadDir.endsWith("files") || this.uploadDir.endsWith("files/"))
183
+ fieldName = "files";
184
+ return fieldName;
185
+ }
186
+ async upload(req, res, options = {}) {
187
+ const { fileUpload } = (0, server_1.getArkosConfig)();
188
+ fileUpload?.baseRoute || "/api/uploads";
189
+ return new Promise((resolve, reject) => {
190
+ const isMultiple = Array.isArray(req.query.multiple)
191
+ ? req.query.multiple[0] == "true"
192
+ : req.query.multiple == "true";
193
+ const uploadHandler = isMultiple
194
+ ? this.getUpload().array(this.getFieldName(), this.maxCount)
195
+ : this.getUpload().single(this.getFieldName());
196
+ uploadHandler(req, res, async (err) => {
197
+ if (err)
198
+ return reject(err);
199
+ try {
200
+ const protocol = req.get("host")?.includes?.("localhost")
201
+ ? "http"
202
+ : "https";
203
+ `${protocol}://${req.get("host")}`;
204
+ const dirParts = this.uploadDir.split("/");
205
+ (this.uploadDir.endsWith("/")
206
+ ? dirParts[dirParts.length - 2]
207
+ : dirParts[dirParts.length - 1]) || "files";
208
+ let data;
209
+ if (req.files && Array.isArray(req.files) && req.files.length > 0) {
210
+ const isImageUpload = this.uploadDir?.includes?.("/images");
211
+ if (isImageUpload) {
212
+ data = await Promise.all(req.files.map((file) => (0, file_upload_helpers_1.processImage)(req, file.path, options)));
213
+ }
214
+ else {
215
+ data = await Promise.all(req.files.map((file) => (0, file_upload_helpers_1.processFile)(req, file.path)));
216
+ }
217
+ data = data.filter((url) => url !== null);
218
+ }
219
+ else if (req.file) {
220
+ const isImageUpload = this.uploadDir?.includes?.("/images");
221
+ if (isImageUpload) {
222
+ data = await (0, file_upload_helpers_1.processImage)(req, req.file.path, options);
223
+ }
224
+ else {
225
+ data = await (0, file_upload_helpers_1.processFile)(req, req.file.path);
226
+ }
227
+ }
228
+ else {
229
+ return reject(new app_error_1.default("No file uploaded", 400));
230
+ }
231
+ resolve(data);
232
+ }
233
+ catch (error) {
234
+ reject(error);
235
+ }
236
+ });
237
+ });
238
+ }
239
+ async deleteFileByName(fileName, fileType) {
240
+ try {
241
+ if (!fileType)
242
+ throw new app_error_1.default("File type parameter is required", 400);
243
+ const validFileTypes = ["images", "videos", "documents", "files"];
244
+ if (!validFileTypes.includes(fileType)) {
245
+ throw new app_error_1.default(`Invalid file type: ${fileType}. Must be one of: ${validFileTypes.join(", ")}`, 400);
246
+ }
247
+ const { documentUploadService, fileUploadService, imageUploadService, videoUploadService, } = (0, exports.getFileUploadServices)();
248
+ let targetService;
249
+ switch (fileType) {
250
+ case "images":
251
+ targetService = imageUploadService;
252
+ break;
253
+ case "videos":
254
+ targetService = videoUploadService;
255
+ break;
256
+ case "documents":
257
+ targetService = documentUploadService;
258
+ break;
259
+ case "files":
260
+ targetService = fileUploadService;
261
+ break;
262
+ default:
263
+ throw new app_error_1.default(`Unsupported file type: ${fileType}`, 400);
264
+ }
265
+ const filePath = path_1.default.join(targetService.uploadDir, fileName);
266
+ await (0, util_1.promisify)(fs_1.default.stat)(filePath);
267
+ await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
268
+ return true;
269
+ }
270
+ catch (error) {
271
+ if (error instanceof app_error_1.default) {
272
+ throw error;
273
+ }
274
+ if (error.code === "ENOENT") {
275
+ throw new app_error_1.default("File not found", 404);
276
+ }
277
+ throw new app_error_1.default(`Failed to delete file: ${error.message}`, 500);
278
+ }
279
+ }
280
+ }
281
+ exports.FileUploadService = FileUploadService;
282
+ const getFileUploadServices = () => {
283
+ const { fileUpload } = (0, server_1.getArkosConfig)();
284
+ const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
285
+ const defaultRestrictions = {
286
+ images: {
287
+ maxCount: 30,
288
+ maxSize: 1024 * 1024 * 15,
289
+ supportedFilesRegex: /jpeg|jpg|png|gif|webp|svg|bmp|tiff|heif|heic|ico|jfif|raw|cr2|nef|orf|sr2|arw|dng|pef|raf|rw2|psd|ai|eps|xcf|jxr|wdp|hdp|jp2|j2k|jpf|jpx|jpm|mj2|avif/,
290
+ },
291
+ videos: {
292
+ maxCount: 10,
293
+ maxSize: 1024 * 1024 * 5096,
294
+ supportedFilesRegex: /mp4|avi|mov|mkv|flv|wmv|webm|mpg|mpeg|3gp|m4v|ts|rm|rmvb|vob|ogv|dv|qt|asf|m2ts|mts|divx|f4v|swf|mxf|roq|nsv|mvb|svi|mpe|m2v|mp2|mpv|h264|h265|hevc/,
295
+ },
296
+ documents: {
297
+ maxCount: 30,
298
+ maxSize: 1024 * 1024 * 50,
299
+ supportedFilesRegex: /pdf|doc|docx|xls|xlsx|ppt|pptx|odt|ods|odg|odp|txt|rtf|csv|epub|md|tex|pages|numbers|key|xml|json|yaml|yml|ini|cfg|conf|log|html|htm|xhtml|djvu|mobi|azw|azw3|fb2|lit|ps|wpd|wps|dot|dotx|xlt|xltx|pot|potx|oft|one|onetoc2|opf|oxps|hwp/,
300
+ },
301
+ files: {
302
+ maxCount: 10,
303
+ maxSize: 1024 * 1024 * 5096,
304
+ supportedFilesRegex: /.*/,
305
+ },
306
+ };
307
+ const restrictions = fileUpload?.restrictions
308
+ ? (0, deepmerge_helper_1.default)(defaultRestrictions, fileUpload.restrictions)
309
+ : defaultRestrictions;
310
+ const imageUploadService = new FileUploadService(`${baseUploadDir}/images`, restrictions.images.maxSize, restrictions.images.supportedFilesRegex, restrictions.images.maxCount);
311
+ const videoUploadService = new FileUploadService(`${baseUploadDir}/videos`, restrictions.videos.maxSize, restrictions.videos.supportedFilesRegex, restrictions.videos.maxCount);
312
+ const documentUploadService = new FileUploadService(`${baseUploadDir}/documents`, restrictions.documents.maxSize, restrictions.documents.supportedFilesRegex, restrictions.documents.maxCount);
313
+ const fileUploadService = new FileUploadService(`${baseUploadDir}/files`, restrictions.files.maxSize, restrictions.files.supportedFilesRegex, restrictions.files.maxCount);
314
+ return {
315
+ imageUploadService,
316
+ videoUploadService,
317
+ documentUploadService,
318
+ fileUploadService,
319
+ };
320
+ };
321
+ exports.getFileUploadServices = getFileUploadServices;
322
+ //# sourceMappingURL=file-upload.service.js.map
@@ -1 +1,97 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.processImage=exports.processFile=void 0,exports.adjustRequestUrl=adjustRequestUrl,exports.extractRequestInfo=extractRequestInfo;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),sharp_1=__importDefault(require("sharp")),util_1=require("util"),server_1=require("../../../../server"),mimetype_1=__importDefault(require("mimetype")),fs_helpers_1=require("../../../../utils/helpers/fs.helpers");function adjustRequestUrl(e,a,r){const{fileUpload:t}=(0,server_1.getArkosConfig)();e.url=e.url.replace(t?.baseRoute+"/"||"/api/uploads/","/"),e.url=e.url.replace(t?.baseRoute||"/api/uploads/","/"),r()}function extractRequestInfo(e){const{fileUpload:a}=(0,server_1.getArkosConfig)(),t=`${e.headers["x-forwarded-proto"]==="https"?"https":"http"}://${e.get?.("host")}`,i=a?.baseRoute||"/api/uploads";return{baseURL:t,baseRoute:i}}const generateRelativePath=(e,a)=>{const{fileUpload:r}=(0,server_1.getArkosConfig)(),t=r?.baseUploadDir||"/uploads";return t.startsWith("..")?path_1.default.join(a,path_1.default.basename(e)):(0,fs_helpers_1.fullCleanCwd)(e.replace(`${t}/`,"").replace(`/${t}/`,"").replace(`/${t}`,"").replace(`${t}`,""))},processFile=async(e,a)=>{const{baseURL:r,baseRoute:t}=extractRequestInfo(e),i=generateRelativePath(a,e.params.fileType);return`${r}${t==="/"?"":t}/${i}`};exports.processFile=processFile;const processImage=async(e,a,r)=>{const{baseURL:t,baseRoute:i}=extractRequestInfo(e),l=path_1.default.extname(a).toLowerCase(),p=l.replace(".",""),u=r.format||p;if(!mimetype_1.default.lookup(l)?.includes?.("image")){const s=generateRelativePath(a,e.params.fileType);return`${t}${i}/${s}`}const d=`${path_1.default.basename(a,l)}_${Date.now()}${l}`,n=path_1.default.join(path_1.default.dirname(a),d);try{let s=(0,sharp_1.default)(a);const o=await s.metadata();if(r.resizeTo&&o.width&&o.height){const c=r.resizeTo/Math.min(o.width,o.height),h=Math.round(o.width*c),m=Math.round(o.height*c);s=s.resize(h,m)}else(r.width||r.height)&&(s=s.resize(r.width||null,r.height||null,{fit:"inside"}));u==="webp"?s=s.toFormat("webp"):(u==="jpeg"||u==="jpg")&&(s=s.toFormat("jpeg")),await s.toFile(n),await(0,util_1.promisify)(fs_1.default.rename)(n,a);const f=generateRelativePath(a,e?.params.fileType);return`${t}${i}/${f}`}catch(s){try{await(0,util_1.promisify)(fs_1.default.stat)(n),await(0,util_1.promisify)(fs_1.default.unlink)(n)}catch{}throw s}};exports.processImage=processImage;
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.processImage = exports.processFile = void 0;
7
+ exports.adjustRequestUrl = adjustRequestUrl;
8
+ exports.extractRequestInfo = extractRequestInfo;
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const sharp_1 = __importDefault(require("sharp"));
12
+ const util_1 = require("util");
13
+ const server_1 = require("../../../../server");
14
+ const mimetype_1 = __importDefault(require("mimetype"));
15
+ const fs_helpers_1 = require("../../../../utils/helpers/fs.helpers");
16
+ function adjustRequestUrl(req, _, next) {
17
+ const { fileUpload } = (0, server_1.getArkosConfig)();
18
+ req.url = req.url.replace(fileUpload?.baseRoute + "/" || "/api/uploads/", "/");
19
+ req.url = req.url.replace(fileUpload?.baseRoute || "/api/uploads/", "/");
20
+ next();
21
+ }
22
+ function extractRequestInfo(req) {
23
+ const { fileUpload } = (0, server_1.getArkosConfig)();
24
+ const protocol = req.headers["x-forwarded-proto"] === "https" ? "https" : "http";
25
+ const baseURL = `${protocol}://${req.get?.("host")}`;
26
+ const baseRoute = fileUpload?.baseRoute || "/api/uploads";
27
+ return { baseURL, baseRoute };
28
+ }
29
+ const generateRelativePath = (filePath, fileType) => {
30
+ const { fileUpload } = (0, server_1.getArkosConfig)();
31
+ const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
32
+ if (baseUploadDir.startsWith("..")) {
33
+ return path_1.default.join(fileType, path_1.default.basename(filePath));
34
+ }
35
+ else {
36
+ return (0, fs_helpers_1.fullCleanCwd)(filePath
37
+ .replace(`${baseUploadDir}/`, "")
38
+ .replace(`/${baseUploadDir}/`, "")
39
+ .replace(`/${baseUploadDir}`, "")
40
+ .replace(`${baseUploadDir}`, ""));
41
+ }
42
+ };
43
+ const processFile = async (req, filePath) => {
44
+ const { baseURL, baseRoute } = extractRequestInfo(req);
45
+ const relativePath = generateRelativePath(filePath, req.params.fileType);
46
+ return `${baseURL}${baseRoute === "/" ? "" : baseRoute}/${relativePath}`;
47
+ };
48
+ exports.processFile = processFile;
49
+ const processImage = async (req, filePath, options) => {
50
+ const { baseURL, baseRoute } = extractRequestInfo(req);
51
+ const ext = path_1.default.extname(filePath).toLowerCase();
52
+ const originalFormat = ext.replace(".", "");
53
+ const outputFormat = options.format || originalFormat;
54
+ if (!mimetype_1.default.lookup(ext)?.includes?.("image")) {
55
+ const relativePath = generateRelativePath(filePath, req.params.fileType);
56
+ return `${baseURL}${baseRoute}/${relativePath}`;
57
+ }
58
+ const tempName = `${path_1.default.basename(filePath, ext)}_${Date.now()}${ext}`;
59
+ const tempPath = path_1.default.join(path_1.default.dirname(filePath), tempName);
60
+ try {
61
+ let transformer = (0, sharp_1.default)(filePath);
62
+ const metadata = await transformer.metadata();
63
+ if (options.resizeTo && metadata.width && metadata.height) {
64
+ const targetSize = options.resizeTo;
65
+ const scaleFactor = targetSize / Math.min(metadata.width, metadata.height);
66
+ const newWidth = Math.round(metadata.width * scaleFactor);
67
+ const newHeight = Math.round(metadata.height * scaleFactor);
68
+ transformer = transformer.resize(newWidth, newHeight);
69
+ }
70
+ else if (options.width || options.height) {
71
+ transformer = transformer.resize(options.width || null, options.height || null, {
72
+ fit: "inside",
73
+ });
74
+ }
75
+ if (outputFormat === "webp") {
76
+ transformer = transformer.toFormat("webp");
77
+ }
78
+ else if (outputFormat === "jpeg" || outputFormat === "jpg") {
79
+ transformer = transformer.toFormat("jpeg");
80
+ }
81
+ await transformer.toFile(tempPath);
82
+ await (0, util_1.promisify)(fs_1.default.rename)(tempPath, filePath);
83
+ const relativePath = generateRelativePath(filePath, req?.params.fileType);
84
+ return `${baseURL}${baseRoute}/${relativePath}`;
85
+ }
86
+ catch (error) {
87
+ try {
88
+ await (0, util_1.promisify)(fs_1.default.stat)(tempPath);
89
+ await (0, util_1.promisify)(fs_1.default.unlink)(tempPath);
90
+ }
91
+ catch (err) {
92
+ }
93
+ throw error;
94
+ }
95
+ };
96
+ exports.processImage = processImage;
97
+ //# sourceMappingURL=file-upload.helpers.js.map
@@ -1 +1,38 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getSwaggerRouter=getSwaggerRouter;const express_1=require("express"),swagger_jsdoc_1=__importDefault(require("swagger-jsdoc")),deepmerge_helper_1=__importDefault(require("../../utils/helpers/deepmerge.helper")),swagger_router_helpers_1=require("./utils/helpers/swagger.router.helpers"),missing_json_schemas_generator_1=__importDefault(require("./utils/helpers/missing-json-schemas-generator")),get_swagger_default_configs_1=__importDefault(require("./utils/helpers/get-swagger-default-configs")),global_helpers_1=require("../../utils/helpers/global.helpers"),generate_system_json_schemas_1=__importDefault(require("./utils/helpers/json-schema-generators/generate-system-json-schemas")),swaggerRouter=(0,express_1.Router)();async function getSwaggerRouter(e){let s=await(0,swagger_router_helpers_1.getOpenAPIJsonSchemasByConfigMode)(e);const r=await(0,swagger_router_helpers_1.generatePathsForModels)(e);s={...s,...await missing_json_schemas_generator_1.default.generateMissingJsonSchemas(r,s,e),...(0,generate_system_json_schemas_1.default)(e)};const t=(0,deepmerge_helper_1.default)(await(0,get_swagger_default_configs_1.default)(r,s)||{},e.swagger||{}),{definition:a,...n}=t?.options,o=(0,swagger_jsdoc_1.default)({definition:a,...n}),i=await(0,global_helpers_1.importEsmPreventingTsTransformation)("@scalar/express-api-reference");return swaggerRouter.use(t.endpoint,i.apiReference({content:o,...t?.scalarApiReferenceConfiguration})),swaggerRouter}
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.getSwaggerRouter = getSwaggerRouter;
7
+ const express_1 = require("express");
8
+ const swagger_jsdoc_1 = __importDefault(require("swagger-jsdoc"));
9
+ const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
10
+ const swagger_router_helpers_1 = require("./utils/helpers/swagger.router.helpers");
11
+ const missing_json_schemas_generator_1 = __importDefault(require("./utils/helpers/missing-json-schemas-generator"));
12
+ const get_swagger_default_configs_1 = __importDefault(require("./utils/helpers/get-swagger-default-configs"));
13
+ const global_helpers_1 = require("../../utils/helpers/global.helpers");
14
+ const generate_system_json_schemas_1 = __importDefault(require("./utils/helpers/json-schema-generators/generate-system-json-schemas"));
15
+ const swaggerRouter = (0, express_1.Router)();
16
+ async function getSwaggerRouter(arkosConfig) {
17
+ let defaultJsonSchemas = await (0, swagger_router_helpers_1.getOpenAPIJsonSchemasByConfigMode)(arkosConfig);
18
+ const defaultModelsPaths = await (0, swagger_router_helpers_1.generatePathsForModels)(arkosConfig);
19
+ defaultJsonSchemas = {
20
+ ...defaultJsonSchemas,
21
+ ...(await missing_json_schemas_generator_1.default.generateMissingJsonSchemas(defaultModelsPaths, defaultJsonSchemas, arkosConfig)),
22
+ ...(0, generate_system_json_schemas_1.default)(arkosConfig),
23
+ };
24
+ const swaggerConfigs = (0, deepmerge_helper_1.default)((await (0, get_swagger_default_configs_1.default)(defaultModelsPaths, defaultJsonSchemas)) ||
25
+ {}, arkosConfig.swagger || {});
26
+ const { definition, ...options } = swaggerConfigs?.options;
27
+ const swaggerSpecification = (0, swagger_jsdoc_1.default)({
28
+ definition: definition,
29
+ ...options,
30
+ });
31
+ const scalar = await (0, global_helpers_1.importEsmPreventingTsTransformation)("@scalar/express-api-reference");
32
+ swaggerRouter.use(swaggerConfigs.endpoint, scalar.apiReference({
33
+ content: swaggerSpecification,
34
+ ...swaggerConfigs?.scalarApiReferenceConfiguration,
35
+ }));
36
+ return swaggerRouter;
37
+ }
38
+ //# sourceMappingURL=swagger.router.js.map