arkos 1.1.11-beta → 1.1.13-test

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 (168) hide show
  1. package/dist/cjs/app.js +1 -1
  2. package/dist/cjs/app.js.map +1 -1
  3. package/dist/cjs/exports/auth/index.js +1 -1
  4. package/dist/cjs/exports/auth/index.js.map +1 -1
  5. package/dist/cjs/exports/utils/index.js.map +1 -1
  6. package/dist/cjs/modules/auth/auth.controller.js +53 -64
  7. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  8. package/dist/cjs/modules/auth/auth.router.js +46 -58
  9. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  10. package/dist/cjs/modules/auth/auth.service.js +95 -116
  11. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  12. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +6 -7
  13. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -1
  14. package/dist/cjs/modules/base/base.controller.js +30 -46
  15. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  16. package/dist/cjs/modules/base/base.middlewares.js +17 -28
  17. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  18. package/dist/cjs/modules/base/base.router.js +6 -17
  19. package/dist/cjs/modules/base/base.router.js.map +1 -1
  20. package/dist/cjs/modules/base/base.service.js +128 -114
  21. package/dist/cjs/modules/base/base.service.js.map +1 -1
  22. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +3 -5
  23. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
  24. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +86 -55
  25. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  26. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +30 -40
  27. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  28. package/dist/cjs/modules/email/email.service.js +28 -39
  29. package/dist/cjs/modules/email/email.service.js.map +1 -1
  30. package/dist/cjs/modules/error-handler/error-handler.controller.js +6 -3
  31. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  32. package/dist/cjs/modules/error-handler/utils/catch-async.js +3 -12
  33. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +1 -1
  34. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +17 -31
  35. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  36. package/dist/cjs/modules/file-uploader/file-uploader.controller.js +18 -27
  37. package/dist/cjs/modules/file-uploader/file-uploader.controller.js.map +1 -1
  38. package/dist/cjs/modules/file-uploader/file-uploader.router.js +23 -34
  39. package/dist/cjs/modules/file-uploader/file-uploader.router.js.map +1 -1
  40. package/dist/cjs/modules/file-uploader/file-uploader.service.js +117 -131
  41. package/dist/cjs/modules/file-uploader/file-uploader.service.js.map +1 -1
  42. package/dist/cjs/modules/file-uploader/utils/helpers/file-uploader.helpers.js +15 -26
  43. package/dist/cjs/modules/file-uploader/utils/helpers/file-uploader.helpers.js.map +1 -1
  44. package/dist/cjs/server.js +1 -1
  45. package/dist/cjs/server.js.map +1 -1
  46. package/dist/cjs/types/arkos-config.js.map +1 -1
  47. package/dist/cjs/types/auth.js.map +1 -1
  48. package/dist/cjs/types/index.js.map +1 -1
  49. package/dist/cjs/utils/cli/build.js +100 -47
  50. package/dist/cjs/utils/cli/build.js.map +1 -1
  51. package/dist/cjs/utils/cli/dev.js +44 -47
  52. package/dist/cjs/utils/cli/dev.js.map +1 -1
  53. package/dist/cjs/utils/cli/index.js +4 -6
  54. package/dist/cjs/utils/cli/index.js.map +1 -1
  55. package/dist/cjs/utils/cli/start.js +36 -37
  56. package/dist/cjs/utils/cli/start.js.map +1 -1
  57. package/dist/cjs/utils/dotenv.helpers.js +43 -0
  58. package/dist/cjs/utils/dotenv.helpers.js.map +1 -0
  59. package/dist/cjs/utils/features/api.features.js +26 -33
  60. package/dist/cjs/utils/features/api.features.js.map +1 -1
  61. package/dist/cjs/utils/helpers/api.features.helpers.js +4 -6
  62. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  63. package/dist/cjs/utils/helpers/change-case.helpers.js +28 -36
  64. package/dist/cjs/utils/helpers/change-case.helpers.js.map +1 -1
  65. package/dist/cjs/utils/helpers/deepmerge.helper.js +4 -8
  66. package/dist/cjs/utils/helpers/deepmerge.helper.js.map +1 -1
  67. package/dist/cjs/utils/helpers/fs.helpers.js +1 -1
  68. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  69. package/dist/cjs/utils/helpers/global.helpers.js +2 -13
  70. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  71. package/dist/cjs/utils/helpers/models.helpers.js +69 -80
  72. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  73. package/dist/cjs/utils/helpers/prisma.helpers.js +23 -34
  74. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  75. package/dist/cjs/utils/validate-dto.js +6 -17
  76. package/dist/cjs/utils/validate-dto.js.map +1 -1
  77. package/dist/cjs/utils/validate-schema.js +6 -17
  78. package/dist/cjs/utils/validate-schema.js.map +1 -1
  79. package/dist/es2020/app.js +1 -1
  80. package/dist/es2020/app.js.map +1 -1
  81. package/dist/es2020/exports/auth/index.js +1 -2
  82. package/dist/es2020/exports/auth/index.js.map +1 -1
  83. package/dist/es2020/exports/utils/index.js.map +1 -1
  84. package/dist/es2020/modules/auth/auth.controller.js +53 -64
  85. package/dist/es2020/modules/auth/auth.controller.js.map +1 -1
  86. package/dist/es2020/modules/auth/auth.router.js +46 -58
  87. package/dist/es2020/modules/auth/auth.router.js.map +1 -1
  88. package/dist/es2020/modules/auth/auth.service.js +95 -116
  89. package/dist/es2020/modules/auth/auth.service.js.map +1 -1
  90. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js +6 -7
  91. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -1
  92. package/dist/es2020/modules/base/base.controller.js +30 -46
  93. package/dist/es2020/modules/base/base.controller.js.map +1 -1
  94. package/dist/es2020/modules/base/base.middlewares.js +17 -28
  95. package/dist/es2020/modules/base/base.middlewares.js.map +1 -1
  96. package/dist/es2020/modules/base/base.router.js +6 -17
  97. package/dist/es2020/modules/base/base.router.js.map +1 -1
  98. package/dist/es2020/modules/base/base.service.js +128 -114
  99. package/dist/es2020/modules/base/base.service.js.map +1 -1
  100. package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js +3 -5
  101. package/dist/es2020/modules/base/utils/helpers/base.controller.helpers.js.map +1 -1
  102. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js +53 -55
  103. package/dist/es2020/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  104. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js +30 -40
  105. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  106. package/dist/es2020/modules/email/email.service.js +28 -39
  107. package/dist/es2020/modules/email/email.service.js.map +1 -1
  108. package/dist/es2020/modules/error-handler/error-handler.controller.js +6 -3
  109. package/dist/es2020/modules/error-handler/error-handler.controller.js.map +1 -1
  110. package/dist/es2020/modules/error-handler/utils/catch-async.js +3 -12
  111. package/dist/es2020/modules/error-handler/utils/catch-async.js.map +1 -1
  112. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js +17 -31
  113. package/dist/es2020/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  114. package/dist/es2020/modules/file-uploader/file-uploader.controller.js +18 -27
  115. package/dist/es2020/modules/file-uploader/file-uploader.controller.js.map +1 -1
  116. package/dist/es2020/modules/file-uploader/file-uploader.router.js +23 -34
  117. package/dist/es2020/modules/file-uploader/file-uploader.router.js.map +1 -1
  118. package/dist/es2020/modules/file-uploader/file-uploader.service.js +117 -131
  119. package/dist/es2020/modules/file-uploader/file-uploader.service.js.map +1 -1
  120. package/dist/es2020/modules/file-uploader/utils/helpers/file-uploader.helpers.js +15 -26
  121. package/dist/es2020/modules/file-uploader/utils/helpers/file-uploader.helpers.js.map +1 -1
  122. package/dist/es2020/server.js +1 -1
  123. package/dist/es2020/server.js.map +1 -1
  124. package/dist/es2020/types/arkos-config.js.map +1 -1
  125. package/dist/es2020/types/auth.js.map +1 -1
  126. package/dist/es2020/types/index.js.map +1 -1
  127. package/dist/es2020/utils/cli/build.js +101 -48
  128. package/dist/es2020/utils/cli/build.js.map +1 -1
  129. package/dist/es2020/utils/cli/dev.js +44 -47
  130. package/dist/es2020/utils/cli/dev.js.map +1 -1
  131. package/dist/es2020/utils/cli/index.js +4 -6
  132. package/dist/es2020/utils/cli/index.js.map +1 -1
  133. package/dist/es2020/utils/cli/start.js +36 -37
  134. package/dist/es2020/utils/cli/start.js.map +1 -1
  135. package/dist/es2020/utils/dotenv.helpers.js +37 -0
  136. package/dist/es2020/utils/dotenv.helpers.js.map +1 -0
  137. package/dist/es2020/utils/features/api.features.js +26 -33
  138. package/dist/es2020/utils/features/api.features.js.map +1 -1
  139. package/dist/es2020/utils/helpers/api.features.helpers.js +4 -6
  140. package/dist/es2020/utils/helpers/api.features.helpers.js.map +1 -1
  141. package/dist/es2020/utils/helpers/change-case.helpers.js +28 -36
  142. package/dist/es2020/utils/helpers/change-case.helpers.js.map +1 -1
  143. package/dist/es2020/utils/helpers/deepmerge.helper.js +4 -8
  144. package/dist/es2020/utils/helpers/deepmerge.helper.js.map +1 -1
  145. package/dist/es2020/utils/helpers/fs.helpers.js +1 -1
  146. package/dist/es2020/utils/helpers/fs.helpers.js.map +1 -1
  147. package/dist/es2020/utils/helpers/global.helpers.js +2 -13
  148. package/dist/es2020/utils/helpers/global.helpers.js.map +1 -1
  149. package/dist/es2020/utils/helpers/models.helpers.js +69 -80
  150. package/dist/es2020/utils/helpers/models.helpers.js.map +1 -1
  151. package/dist/es2020/utils/helpers/prisma.helpers.js +23 -34
  152. package/dist/es2020/utils/helpers/prisma.helpers.js.map +1 -1
  153. package/dist/es2020/utils/validate-dto.js +6 -17
  154. package/dist/es2020/utils/validate-dto.js.map +1 -1
  155. package/dist/es2020/utils/validate-schema.js +6 -17
  156. package/dist/es2020/utils/validate-schema.js.map +1 -1
  157. package/dist/types/exports/auth/index.d.ts +2 -3
  158. package/dist/types/modules/auth/auth.service.d.ts +3 -3
  159. package/dist/types/modules/base/base.middlewares.d.ts +5 -5
  160. package/dist/types/modules/base/base.router.d.ts +1 -1
  161. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +2 -1
  162. package/dist/types/types/auth.d.ts +10 -9
  163. package/dist/types/types/index.d.ts +2 -2
  164. package/dist/types/utils/cli/build.d.ts +0 -1
  165. package/dist/types/utils/dotenv.helpers.d.ts +1 -0
  166. package/dist/types/utils/helpers/models.helpers.d.ts +21 -2
  167. package/dist/types/utils/validate-dto.d.ts +1 -1
  168. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"file-uploader.controller.js","sourceRoot":"","sources":["../../../../src/modules/file-uploader/file-uploader.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import AppError from \"../error-handler/utils/app-error\";\nimport {\n FileUploaderService,\n getFileUploaderServices,\n} from \"./file-uploader.service\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { NextFunction, Request, Response } from \"express\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { promisify } from \"util\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n processFile,\n processImage,\n} from \"./utils/helpers/file-uploader.helpers\";\nimport {\n accessAsync,\n mkdirAsync,\n statAsync,\n} from \"../../utils/helpers/fs.helpers\";\n\n/**\n * Handles file upload requests, processes images if needed, and returns URLs\n * Supports paths outside of the project directory with '../' prefix\n * @param {Request} req - Express request object\n * @param {Response} res - Express response object\n * @param {NextFunction} next - Express next middleware function\n */\nexport const uploadFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileType } = req.params;\n const { format, width, height, resizeTo } = req.query;\n const options = { format, width, height, resizeTo };\n\n const {\n documentUploaderService,\n fileUploaderService,\n imageUploaderService,\n videoUploaderService,\n } = getFileUploaderServices();\n\n const { fileUpload } = getArkosConfig();\n const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n // Ensure upload directory exists\n const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);\n try {\n await accessAsync(uploadPath);\n } catch (err) {\n // Create directory if it doesn't exist\n await mkdirAsync(uploadPath, { recursive: true });\n }\n\n // Select the appropriate uploader service based on file type\n let uploader: FileUploaderService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploaderService;\n break;\n case \"videos\":\n uploader = videoUploaderService;\n break;\n case \"documents\":\n uploader = documentUploaderService;\n break;\n case \"files\":\n uploader = fileUploaderService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n // Handle the file upload\n uploader.handleMultipleUpload()(req, res, async (err) => {\n if (err) return next(err);\n\n // Process all uploaded files\n let data;\n if (req.files && Array.isArray(req.files)) {\n if (fileType === \"images\") {\n // Process multiple image files with image transformations\n data = await Promise.all(\n req.files.map((file) => processImage(req, file.path, options))\n );\n } else {\n // Just store other file types without processing\n data = await Promise.all(\n req.files.map((file) => processFile(req, file.path))\n );\n }\n // Filter out any null values from failed processing\n data = data.filter((url) => url !== null);\n } else if (req.file) {\n // Process a single file\n if (fileType === \"images\") {\n data = await processImage(req, req.file.path, options);\n } else {\n data = await processFile(req, req.file.path);\n }\n } else {\n return next(new AppError(\"No file uploaded\", 400));\n }\n\n res.status(200).json({\n success: true,\n data,\n message: Array.isArray(data)\n ? `${data.length} files uploaded successfully`\n : \"File uploaded successfully\",\n });\n });\n }\n);\n\n/**\n * Handles file deletion requests\n * Supports paths outside of the project directory with '../' prefix\n * @param {Request} req - Express request object\n * @param {Response} res - Express response object\n * @param {NextFunction} next - Express next middleware function\n */\nexport const deleteFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileType, fileName } = req.params;\n\n // if (!fileName) {\n // return next(new AppError(\"File name is required\", 400));\n // }\n\n // if (!fileType) {\n // return next(new AppError(\"File type is required\", 400));\n // }\n\n // // Get the base upload directory from config\n // const { fileUpload } = getArkosConfig();\n // const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n // // Construct the actual file path using path.resolve to handle '../' paths\n // const actualFilePath = path.resolve(\n // process.cwd(),\n // baseUploadDir,\n // fileType,\n // fileName\n // );\n\n const {\n documentUploaderService,\n fileUploaderService,\n imageUploaderService,\n videoUploaderService,\n } = getFileUploaderServices();\n\n let uploader: FileUploaderService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploaderService;\n break;\n case \"videos\":\n uploader = videoUploaderService;\n break;\n case \"documents\":\n uploader = documentUploaderService;\n break;\n case \"files\":\n uploader = fileUploaderService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n try {\n // // Check if file exists\n // await access(actualFilePath, fs.constants.F_OK);\n\n // // Delete the file\n // await unlink(actualFilePath);\n\n const fullUrl = `${req.protocol}://${req.get(\"host\")}${req.originalUrl}`;\n await uploader.deleteFileByUrl(fullUrl);\n\n res.status(200).json({\n success: true,\n message: \"File deleted successfully\",\n });\n } catch (error) {\n // File doesn't exist\n return next(new AppError(\"File not found\", 404));\n }\n }\n);\n\nexport const streamFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileName, fileType } = req.params;\n\n const filePath = path.join(\".\", \"uploads\", fileType, fileName);\n try {\n await accessAsync(filePath);\n } catch (err) {\n throw new AppError(\"File not found\", 404);\n }\n\n const fileStat = await statAsync(filePath);\n const fileSize = fileStat.size;\n const range = req.headers.range;\n\n if (range) {\n const [partialStart, partialEnd] = range.replace(/bytes=/, \"\").split(\"-\");\n const start = parseInt(partialStart, 10) || 0;\n const end = partialEnd ? parseInt(partialEnd, 10) : fileSize - 1;\n\n if (start >= fileSize || end >= fileSize) {\n res.status(416).json({ error: \"Range Not Satisfiable\" });\n return;\n }\n\n res.writeHead(206, {\n \"Content-Range\": `bytes ${start}-${end}/${fileSize}`,\n \"Accept-Ranges\": \"bytes\",\n \"Content-Length\": end - start + 1,\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n });\n\n fs.createReadStream(filePath, { start, end }).pipe(res);\n } else {\n res.writeHead(200, {\n \"Content-Length\": fileSize,\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n });\n fs.createReadStream(filePath).pipe(res);\n }\n }\n);\n"]}
1
+ {"version":3,"file":"file-uploader.controller.js","sourceRoot":"","sources":["../../../../src/modules/file-uploader/file-uploader.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import AppError from \"../error-handler/utils/app-error\";\nimport {\n FileUploaderService,\n getFileUploaderServices,\n} from \"./file-uploader.service\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { NextFunction, Request, Response } from \"express\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { promisify } from \"util\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n processFile,\n processImage,\n} from \"./utils/helpers/file-uploader.helpers\";\nimport {\n accessAsync,\n mkdirAsync,\n statAsync,\n} from \"../../utils/helpers/fs.helpers\";\n\n/**\n * Handles file upload requests, processes images if needed, and returns URLs\n * Supports paths outside of the project directory with '../' prefix\n * @param {Request} req - Express request object\n * @param {Response} res - Express response object\n * @param {NextFunction} next - Express next middleware function\n */\nexport const uploadFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileType } = req.params;\n const { format, width, height, resizeTo } = req.query;\n const options = { format, width, height, resizeTo };\n\n const {\n documentUploaderService,\n fileUploaderService,\n imageUploaderService,\n videoUploaderService,\n } = getFileUploaderServices();\n\n const { fileUpload } = getArkosConfig();\n const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n // Ensure upload directory exists\n const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);\n try {\n await accessAsync(uploadPath);\n } catch (err) {\n // Create directory if it doesn't exist\n await mkdirAsync(uploadPath, { recursive: true });\n }\n\n // Select the appropriate uploader service based on file type\n let uploader: FileUploaderService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploaderService;\n break;\n case \"videos\":\n uploader = videoUploaderService;\n break;\n case \"documents\":\n uploader = documentUploaderService;\n break;\n case \"files\":\n uploader = fileUploaderService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n // Handle the file upload\n uploader.handleMultipleUpload()(req, res, async (err) => {\n if (err) return next(err);\n\n // Process all uploaded files\n let data;\n if (req.files && Array.isArray(req.files)) {\n if (fileType === \"images\") {\n // Process multiple image files with image transformations\n data = await Promise.all(\n req.files.map((file) => processImage(req, file.path, options))\n );\n } else {\n // Just store other file types without processing\n data = await Promise.all(\n req.files.map((file) => processFile(req, file.path))\n );\n }\n // Filter out any null values from failed processing\n data = data.filter((url) => url !== null);\n } else if (req.file) {\n // Process a single file\n if (fileType === \"images\") {\n data = await processImage(req, req.file.path, options);\n } else {\n data = await processFile(req, req.file.path);\n }\n } else {\n return next(new AppError(\"No file uploaded\", 400));\n }\n\n res.status(200).json({\n success: true,\n data,\n message: Array.isArray(data)\n ? `${data.length} files uploaded successfully`\n : \"File uploaded successfully\",\n });\n });\n }\n);\n\n/**\n * Handles file deletion requests\n * Supports paths outside of the project directory with '../' prefix\n * @param {Request} req - Express request object\n * @param {Response} res - Express response object\n * @param {NextFunction} next - Express next middleware function\n */\nexport const deleteFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileType, fileName } = req.params;\n\n // if (!fileName) {\n // return next(new AppError(\"File name is required\", 400));\n // }\n\n // if (!fileType) {\n // return next(new AppError(\"File type is required\", 400));\n // }\n\n // // Get the base upload directory from config\n // const { fileUpload } = getArkosConfig();\n // const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n // // Construct the actual file path using path.resolve to handle '../' paths\n // const actualFilePath = path.resolve(\n // process.cwd(),\n // baseUploadDir,\n // fileType,\n // fileName\n // );\n\n const {\n documentUploaderService,\n fileUploaderService,\n imageUploaderService,\n videoUploaderService,\n } = getFileUploaderServices();\n\n let uploader: FileUploaderService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploaderService;\n break;\n case \"videos\":\n uploader = videoUploaderService;\n break;\n case \"documents\":\n uploader = documentUploaderService;\n break;\n case \"files\":\n uploader = fileUploaderService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n try {\n // // Check if file exists\n // await access(actualFilePath, fs.constants.F_OK);\n\n // // Delete the file\n // await unlink(actualFilePath);\n\n const fullUrl = `${req.protocol}://${req.get(\"host\")}${req.originalUrl}`;\n await uploader.deleteFileByUrl(fullUrl);\n\n res.status(200).json({\n success: true,\n message: \"File deleted successfully\",\n });\n } catch (error) {\n // File doesn't exist\n return next(new AppError(\"File not found\", 404));\n }\n }\n);\n\nexport const streamFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileName, fileType } = req.params;\n\n const filePath = path.join(\".\", \"uploads\", fileType, fileName);\n try {\n await accessAsync(filePath);\n } catch (err) {\n throw new AppError(\"File not found\", 404);\n }\n\n const fileStat = await statAsync(filePath);\n const fileSize = fileStat.size;\n const range = req.headers.range;\n\n if (range) {\n const [partialStart, partialEnd] = range.replace(/bytes=/, \"\").split(\"-\");\n const start = parseInt(partialStart, 10) || 0;\n const end = partialEnd ? parseInt(partialEnd, 10) : fileSize - 1;\n\n if (start >= fileSize || end >= fileSize) {\n res.status(416).json({ error: \"Range Not Satisfiable\" });\n return;\n }\n\n res.writeHead(206, {\n \"Content-Range\": `bytes ${start}-${end}/${fileSize}`,\n \"Accept-Ranges\": \"bytes\",\n \"Content-Length\": end - start + 1,\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n });\n\n fs.createReadStream(filePath, { start, end }).pipe(res);\n } else {\n res.writeHead(200, {\n \"Content-Length\": fileSize,\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n });\n fs.createReadStream(filePath).pipe(res);\n }\n }\n);\n"]}
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -21,30 +12,28 @@ const path_1 = __importDefault(require("path"));
21
12
  const express_2 = __importDefault(require("express"));
22
13
  const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
23
14
  const router = (0, express_1.Router)();
24
- function getFileUploaderRouter(_a) {
25
- return __awaiter(this, arguments, void 0, function* ({ fileUpload }) {
26
- const modelModules = yield (0, models_helpers_1.importPrismaModelModules)("file-upload");
27
- let { middlewares = {}, authConfigs = {} } = {};
28
- if (modelModules) {
29
- ({ middlewares = {}, authConfigs = {} } = modelModules);
30
- }
31
- let basePathname = (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseRoute) || "/api/uploads/";
32
- if (!basePathname.startsWith("/"))
33
- basePathname = "/" + basePathname;
34
- if (!basePathname.endsWith("/"))
35
- basePathname = basePathname + "/";
36
- router.use(basePathname, auth_service_1.default.handleAuthenticationControl(authConfigs, "view"), auth_service_1.default.handleActionAccessControl(authConfigs, "view", "file-upload"), express_2.default.static(path_1.default.resolve(process.cwd(), (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseUploadDir) || "uploads"), (0, deepmerge_helper_1.default)({
37
- maxAge: "1y",
38
- etag: true,
39
- lastModified: true,
40
- dotfiles: "ignore",
41
- fallthrough: true,
42
- index: false,
43
- cacheControl: true,
44
- }, (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.expressStaticOptions) || {})));
45
- router.post(`${basePathname}:fileType`, auth_service_1.default.handleAuthenticationControl(authConfigs, "create"), auth_service_1.default.handleActionAccessControl(authConfigs, "create", "file-upload"), file_uploader_controller_1.uploadFile);
46
- router.delete(`${basePathname}:fileType/:fileName`, auth_service_1.default.handleAuthenticationControl(authConfigs, "delete"), auth_service_1.default.handleActionAccessControl(authConfigs, "create", "file-upload"), file_uploader_controller_1.deleteFile);
47
- return router;
48
- });
15
+ async function getFileUploaderRouter({ fileUpload }) {
16
+ const modelModules = await (0, models_helpers_1.importPrismaModelModules)("file-upload");
17
+ let { middlewares = {}, authConfigs = {} } = {};
18
+ if (modelModules) {
19
+ ({ middlewares = {}, authConfigs = {} } = modelModules);
20
+ }
21
+ let basePathname = fileUpload?.baseRoute || "/api/uploads/";
22
+ if (!basePathname.startsWith("/"))
23
+ basePathname = "/" + basePathname;
24
+ if (!basePathname.endsWith("/"))
25
+ basePathname = basePathname + "/";
26
+ router.use(basePathname, auth_service_1.default.handleAuthenticationControl("view", authConfigs), auth_service_1.default.handleAccessControl("view", "file-upload", authConfigs), express_2.default.static(path_1.default.resolve(process.cwd(), fileUpload?.baseUploadDir || "uploads"), (0, deepmerge_helper_1.default)({
27
+ maxAge: "1y",
28
+ etag: true,
29
+ lastModified: true,
30
+ dotfiles: "ignore",
31
+ fallthrough: true,
32
+ index: false,
33
+ cacheControl: true,
34
+ }, fileUpload?.expressStaticOptions || {})));
35
+ router.post(`${basePathname}:fileType`, auth_service_1.default.handleAuthenticationControl("create", authConfigs), auth_service_1.default.handleAccessControl("create", "file-upload", authConfigs), file_uploader_controller_1.uploadFile);
36
+ router.delete(`${basePathname}:fileType/:fileName`, auth_service_1.default.handleAuthenticationControl("delete", authConfigs), auth_service_1.default.handleAccessControl("create", "file-upload", authConfigs), file_uploader_controller_1.deleteFile);
37
+ return router;
49
38
  }
50
39
  //# sourceMappingURL=file-uploader.router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-uploader.router.js","sourceRoot":"","sources":["../../../../src/modules/file-uploader/file-uploader.router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAWA,sDAiDC;AA5DD,qCAAiC;AACjC,uEAA8E;AAC9E,wEAA+C;AAC/C,yEAAoE;AAEpE,gDAAwB;AACxB,sDAA8B;AAC9B,4FAA6D;AAE7D,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;AAEhC,SAAsB,qBAAqB;yDAAC,EAAE,UAAU,EAAe;QACrE,MAAM,YAAY,GAAG,MAAM,IAAA,yCAAwB,EAAC,aAAa,CAAC,CAAC;QACnE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC;QAEhD,IAAI,YAAY,EAAE,CAAC;YACjB,CAAC,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,YAAY,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,KAAI,eAAe,CAAC;QAE5D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,YAAY,GAAG,YAAY,GAAG,GAAG,CAAC;QAEnE,MAAM,CAAC,GAAG,CACR,YAAY,EACZ,sBAAW,CAAC,2BAA2B,CAAC,WAAW,EAAE,MAAM,CAAC,EAC5D,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EACzE,iBAAO,CAAC,MAAM,CACZ,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,KAAI,SAAS,CAAC,EACnE,IAAA,0BAAS,EACP;YACE,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,IAAI;SACnB,EACD,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,oBAAoB,KAAI,EAAE,CACvC,CACF,CACF,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,WAAW,EAC1B,sBAAW,CAAC,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,EAC9D,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,EAC3E,qCAAU,CACX,CAAC;QAEF,MAAM,CAAC,MAAM,CACX,GAAG,YAAY,qBAAqB,EACpC,sBAAW,CAAC,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,EAC9D,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,EAC3E,qCAAU,CACX,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA","sourcesContent":["import { Router } from \"express\";\nimport { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport authService from \"../auth/auth.service\";\nimport { deleteFile, uploadFile } from \"./file-uploader.controller\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport path from \"path\";\nimport express from \"express\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\nconst router: Router = Router();\n\nexport async function getFileUploaderRouter({ fileUpload }: ArkosConfig) {\n const modelModules = await importPrismaModelModules(\"file-upload\");\n let { middlewares = {}, authConfigs = {} } = {};\n\n if (modelModules) {\n ({ middlewares = {}, authConfigs = {} } = modelModules);\n }\n\n let basePathname = fileUpload?.baseRoute || \"/api/uploads/\";\n\n if (!basePathname.startsWith(\"/\")) basePathname = \"/\" + basePathname;\n if (!basePathname.endsWith(\"/\")) basePathname = basePathname + \"/\";\n\n router.use(\n basePathname,\n authService.handleAuthenticationControl(authConfigs, \"view\"),\n authService.handleActionAccessControl(authConfigs, \"view\", \"file-upload\"),\n express.static(\n path.resolve(process.cwd(), fileUpload?.baseUploadDir || \"uploads\"),\n deepmerge(\n {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n },\n fileUpload?.expressStaticOptions || {}\n )\n )\n );\n\n router.post(\n `${basePathname}:fileType`,\n authService.handleAuthenticationControl(authConfigs, \"create\"),\n authService.handleActionAccessControl(authConfigs, \"create\", \"file-upload\"),\n uploadFile\n );\n\n router.delete(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(authConfigs, \"delete\"),\n authService.handleActionAccessControl(authConfigs, \"create\", \"file-upload\"),\n deleteFile\n );\n\n return router;\n}\n"]}
1
+ {"version":3,"file":"file-uploader.router.js","sourceRoot":"","sources":["../../../../src/modules/file-uploader/file-uploader.router.ts"],"names":[],"mappings":";;;;;AAWA,sDAiDC;AA5DD,qCAAiC;AACjC,uEAA8E;AAC9E,wEAA+C;AAC/C,yEAAoE;AAEpE,gDAAwB;AACxB,sDAA8B;AAC9B,4FAA6D;AAE7D,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;AAEzB,KAAK,UAAU,qBAAqB,CAAC,EAAE,UAAU,EAAe;IACrE,MAAM,YAAY,GAAG,MAAM,IAAA,yCAAwB,EAAC,aAAa,CAAC,CAAC;IACnE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC;IAEhD,IAAI,YAAY,EAAE,CAAC;QACjB,CAAC,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,YAAY,GAAG,UAAU,EAAE,SAAS,IAAI,eAAe,CAAC;IAE5D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC;IACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,YAAY,GAAG,YAAY,GAAG,GAAG,CAAC;IAEnE,MAAM,CAAC,GAAG,CACR,YAAY,EACZ,sBAAW,CAAC,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,EAC5D,sBAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,EACnE,iBAAO,CAAC,MAAM,CACZ,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,IAAI,SAAS,CAAC,EACnE,IAAA,0BAAS,EACP;QACE,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,IAAI;KACnB,EACD,UAAU,EAAE,oBAAoB,IAAI,EAAE,CACvC,CACF,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,WAAW,EAC1B,sBAAW,CAAC,2BAA2B,CAAC,QAAQ,EAAE,WAAW,CAAC,EAC9D,sBAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC,EACrE,qCAAU,CACX,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,GAAG,YAAY,qBAAqB,EACpC,sBAAW,CAAC,2BAA2B,CAAC,QAAQ,EAAE,WAAW,CAAC,EAC9D,sBAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC,EACrE,qCAAU,CACX,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { Router } from \"express\";\nimport { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport authService from \"../auth/auth.service\";\nimport { deleteFile, uploadFile } from \"./file-uploader.controller\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport path from \"path\";\nimport express from \"express\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\nconst router: Router = Router();\n\nexport async function getFileUploaderRouter({ fileUpload }: ArkosConfig) {\n const modelModules = await importPrismaModelModules(\"file-upload\");\n let { middlewares = {}, authConfigs = {} } = {};\n\n if (modelModules) {\n ({ middlewares = {}, authConfigs = {} } = modelModules);\n }\n\n let basePathname = fileUpload?.baseRoute || \"/api/uploads/\";\n\n if (!basePathname.startsWith(\"/\")) basePathname = \"/\" + basePathname;\n if (!basePathname.endsWith(\"/\")) basePathname = basePathname + \"/\";\n\n router.use(\n basePathname,\n authService.handleAuthenticationControl(\"view\", authConfigs),\n authService.handleAccessControl(\"view\", \"file-upload\", authConfigs),\n express.static(\n path.resolve(process.cwd(), fileUpload?.baseUploadDir || \"uploads\"),\n deepmerge(\n {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n },\n fileUpload?.expressStaticOptions || {}\n )\n )\n );\n\n router.post(\n `${basePathname}:fileType`,\n authService.handleAuthenticationControl(\"create\", authConfigs),\n authService.handleAccessControl(\"create\", \"file-upload\", authConfigs),\n uploadFile\n );\n\n router.delete(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(\"delete\", authConfigs),\n authService.handleAccessControl(\"create\", \"file-upload\", authConfigs),\n deleteFile\n );\n\n return router;\n}\n"]}
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -63,7 +54,7 @@ class FileUploaderService {
63
54
  handleSingleUpload(oldFilePath) {
64
55
  return (req, res, next) => {
65
56
  const upload = this.getUploader().single(this.getFieldName());
66
- upload(req, res, (err) => __awaiter(this, void 0, void 0, function* () {
57
+ upload(req, res, async (err) => {
67
58
  if (err instanceof multer_1.default.MulterError) {
68
59
  return next(err);
69
60
  }
@@ -72,18 +63,18 @@ class FileUploaderService {
72
63
  }
73
64
  if (oldFilePath) {
74
65
  const { fileUpload: configs } = (0, server_1.getArkosConfig)();
75
- const filePath = path_1.default.resolve(process.cwd(), (0, text_helpers_1.removeBothSlashes)(configs === null || configs === void 0 ? void 0 : configs.baseUploadDir), (0, text_helpers_1.removeBothSlashes)(oldFilePath));
66
+ const filePath = path_1.default.resolve(process.cwd(), (0, text_helpers_1.removeBothSlashes)(configs?.baseUploadDir), (0, text_helpers_1.removeBothSlashes)(oldFilePath));
76
67
  try {
77
- const stats = yield (0, util_1.promisify)(fs_1.default.stat)(filePath);
68
+ const stats = await (0, util_1.promisify)(fs_1.default.stat)(filePath);
78
69
  if (stats)
79
- yield (0, util_1.promisify)(fs_1.default.unlink)(filePath);
70
+ await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
80
71
  }
81
72
  catch (err) {
82
73
  console.error(err);
83
74
  }
84
75
  }
85
76
  next();
86
- }));
77
+ });
87
78
  };
88
79
  }
89
80
  handleMultipleUpload() {
@@ -99,87 +90,85 @@ class FileUploaderService {
99
90
  };
100
91
  }
101
92
  handleDeleteSingleFile(oldFilePath) {
102
- return (req, res, next) => __awaiter(this, void 0, void 0, function* () {
93
+ return async (req, res, next) => {
103
94
  const filePath = path_1.default.join(oldFilePath);
104
95
  try {
105
- const stats = yield (0, util_1.promisify)(fs_1.default.stat)(filePath);
96
+ const stats = await (0, util_1.promisify)(fs_1.default.stat)(filePath);
106
97
  if (stats) {
107
- yield (0, util_1.promisify)(fs_1.default.unlink)(filePath);
98
+ await (0, util_1.promisify)(fs_1.default.unlink)(filePath);
108
99
  }
109
100
  }
110
101
  catch (err) {
111
102
  console.error(err);
112
103
  }
113
104
  next();
114
- });
105
+ };
115
106
  }
116
- deleteFileByUrl(fileUrl) {
117
- return __awaiter(this, void 0, void 0, function* () {
118
- try {
119
- const { fileUpload } = (0, server_1.getArkosConfig)();
120
- const baseRoute = (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseRoute) || "/api/uploads";
121
- let urlPath;
122
- if (fileUrl.startsWith("http")) {
123
- const url = new URL(fileUrl);
124
- urlPath = url.pathname;
125
- }
126
- else {
127
- urlPath = fileUrl;
128
- }
129
- const baseRouteIndex = urlPath.indexOf(baseRoute);
130
- if (baseRouteIndex === -1) {
131
- throw new app_error_1.default("Invalid file URL: base route not found", 400);
132
- }
133
- const pathAfterBaseRoute = urlPath.substring(baseRouteIndex + baseRoute.length);
134
- const cleanPath = pathAfterBaseRoute.startsWith("/")
135
- ? pathAfterBaseRoute.substring(1)
136
- : pathAfterBaseRoute;
137
- const fileTypes = ["images", "videos", "documents", "files"];
138
- let fileType = null;
139
- let fileName = null;
140
- for (const type of fileTypes) {
141
- const typeIndex = cleanPath.indexOf(type + "/");
142
- if (typeIndex !== -1) {
143
- fileType = type;
144
- fileName = cleanPath.substring(typeIndex + type.length + 1);
145
- break;
146
- }
147
- }
148
- if (!fileType || !fileName) {
149
- throw new app_error_1.default("Unable to determine file type or file name from URL", 400);
150
- }
151
- const { documentUploaderService, fileUploaderService, imageUploaderService, videoUploaderService, } = (0, exports.getFileUploaderServices)();
152
- let filePath;
153
- switch (fileType) {
154
- case "images":
155
- filePath = path_1.default.join(imageUploaderService.uploadDir, fileName);
156
- break;
157
- case "videos":
158
- filePath = path_1.default.join(videoUploaderService.uploadDir, fileName);
159
- break;
160
- case "documents":
161
- filePath = path_1.default.join(documentUploaderService.uploadDir, fileName);
162
- break;
163
- case "files":
164
- filePath = path_1.default.join(fileUploaderService.uploadDir, fileName);
165
- break;
166
- default:
167
- throw new app_error_1.default(`Unsupported file type: ${fileType}`, 400);
168
- }
169
- yield (0, util_1.promisify)(fs_1.default.stat)(filePath);
170
- yield (0, util_1.promisify)(fs_1.default.unlink)(filePath);
171
- return true;
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;
172
115
  }
173
- catch (error) {
174
- if (error instanceof app_error_1.default) {
175
- throw error;
176
- }
177
- if (error.code === "ENOENT") {
178
- throw new app_error_1.default("File not found", 404);
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;
179
136
  }
180
- throw new app_error_1.default(`Failed to delete file: ${error.message}`, 500);
181
137
  }
182
- });
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 { documentUploaderService, fileUploaderService, imageUploaderService, videoUploaderService, } = (0, exports.getFileUploaderServices)();
142
+ let filePath;
143
+ switch (fileType) {
144
+ case "images":
145
+ filePath = path_1.default.join(imageUploaderService.uploadDir, fileName);
146
+ break;
147
+ case "videos":
148
+ filePath = path_1.default.join(videoUploaderService.uploadDir, fileName);
149
+ break;
150
+ case "documents":
151
+ filePath = path_1.default.join(documentUploaderService.uploadDir, fileName);
152
+ break;
153
+ case "files":
154
+ filePath = path_1.default.join(fileUploaderService.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
+ }
183
172
  }
184
173
  getFieldName() {
185
174
  let fieldName = "files";
@@ -194,59 +183,56 @@ class FileUploaderService {
194
183
  fieldName = "files";
195
184
  return fieldName;
196
185
  }
197
- upload(req_1, res_1) {
198
- return __awaiter(this, arguments, void 0, function* (req, res, options = {}) {
199
- const { fileUpload } = (0, server_1.getArkosConfig)();
200
- const baseRoute = (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseRoute) || "/api/uploads";
201
- return new Promise((resolve, reject) => {
202
- const isMultiple = Array.isArray(req.query.multiple)
203
- ? req.query.multiple[0] == "true"
204
- : req.query.multiple == "true";
205
- const uploadHandler = isMultiple
206
- ? this.getUploader().array(this.getFieldName(), this.maxCount)
207
- : this.getUploader().single(this.getFieldName());
208
- uploadHandler(req, res, (err) => __awaiter(this, void 0, void 0, function* () {
209
- var _a, _b, _c, _d, _e, _f;
210
- if (err)
211
- return reject(err);
212
- try {
213
- const protocol = ((_b = (_a = req.get("host")) === null || _a === void 0 ? void 0 : _a.includes) === null || _b === void 0 ? void 0 : _b.call(_a, "localhost"))
214
- ? "http"
215
- : "https";
216
- const baseURL = `${protocol}://${req.get("host")}`;
217
- const dirParts = this.uploadDir.split("/");
218
- const fileType = (this.uploadDir.endsWith("/")
219
- ? dirParts[dirParts.length - 2]
220
- : dirParts[dirParts.length - 1]) || "files";
221
- let data;
222
- if (req.files && Array.isArray(req.files) && req.files.length > 0) {
223
- const isImageUploader = (_d = (_c = this.uploadDir) === null || _c === void 0 ? void 0 : _c.includes) === null || _d === void 0 ? void 0 : _d.call(_c, "/images");
224
- if (isImageUploader) {
225
- data = yield Promise.all(req.files.map((file) => (0, file_uploader_helpers_1.processImage)(req, file.path, options)));
226
- }
227
- else {
228
- data = yield Promise.all(req.files.map((file) => (0, file_uploader_helpers_1.processFile)(req, file.path)));
229
- }
230
- data = data.filter((url) => url !== null);
186
+ async upload(req, res, options = {}) {
187
+ const { fileUpload } = (0, server_1.getArkosConfig)();
188
+ const baseRoute = 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.getUploader().array(this.getFieldName(), this.maxCount)
195
+ : this.getUploader().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
+ const baseURL = `${protocol}://${req.get("host")}`;
204
+ const dirParts = this.uploadDir.split("/");
205
+ const fileType = (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 isImageUploader = this.uploadDir?.includes?.("/images");
211
+ if (isImageUploader) {
212
+ data = await Promise.all(req.files.map((file) => (0, file_uploader_helpers_1.processImage)(req, file.path, options)));
231
213
  }
232
- else if (req.file) {
233
- const isImageUploader = (_f = (_e = this.uploadDir) === null || _e === void 0 ? void 0 : _e.includes) === null || _f === void 0 ? void 0 : _f.call(_e, "/images");
234
- if (isImageUploader) {
235
- data = yield (0, file_uploader_helpers_1.processImage)(req, req.file.path, options);
236
- }
237
- else {
238
- data = yield (0, file_uploader_helpers_1.processFile)(req, req.file.path);
239
- }
214
+ else {
215
+ data = await Promise.all(req.files.map((file) => (0, file_uploader_helpers_1.processFile)(req, file.path)));
216
+ }
217
+ data = data.filter((url) => url !== null);
218
+ }
219
+ else if (req.file) {
220
+ const isImageUploader = this.uploadDir?.includes?.("/images");
221
+ if (isImageUploader) {
222
+ data = await (0, file_uploader_helpers_1.processImage)(req, req.file.path, options);
240
223
  }
241
224
  else {
242
- return reject(new app_error_1.default("No file uploaded", 400));
225
+ data = await (0, file_uploader_helpers_1.processFile)(req, req.file.path);
243
226
  }
244
- resolve(data);
245
227
  }
246
- catch (error) {
247
- reject(error);
228
+ else {
229
+ return reject(new app_error_1.default("No file uploaded", 400));
248
230
  }
249
- }));
231
+ resolve(data);
232
+ }
233
+ catch (error) {
234
+ reject(error);
235
+ }
250
236
  });
251
237
  });
252
238
  }
@@ -254,7 +240,7 @@ class FileUploaderService {
254
240
  exports.FileUploaderService = FileUploaderService;
255
241
  const getFileUploaderServices = () => {
256
242
  const { fileUpload } = (0, server_1.getArkosConfig)();
257
- const baseUploadDir = (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseUploadDir) || "/uploads";
243
+ const baseUploadDir = fileUpload?.baseUploadDir || "/uploads";
258
244
  const defaultRegexPatterns = {
259
245
  images: /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/,
260
246
  videos: /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/,
@@ -283,7 +269,7 @@ const getFileUploaderServices = () => {
283
269
  supportedFilesRegex: /.*/,
284
270
  },
285
271
  };
286
- const restrictions = (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.restrictions)
272
+ const restrictions = fileUpload?.restrictions
287
273
  ? (0, deepmerge_helper_1.default)(defaultRestrictions, fileUpload.restrictions)
288
274
  : defaultRestrictions;
289
275
  const imageUploaderService = new FileUploaderService(`${baseUploadDir}/images`, restrictions.images.maxSize, restrictions.images.supportedFilesRegex, restrictions.images.maxCount);