@fdm-monster/server 1.5.0-rc1

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 (377) hide show
  1. package/.env +19 -0
  2. package/.env.template +43 -0
  3. package/.gitattributes +1 -0
  4. package/.idea/codeStyles/Project.xml +85 -0
  5. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  6. package/.idea/dbnavigator.xml +574 -0
  7. package/.idea/fdm-monster.iml +16 -0
  8. package/.idea/inspectionProfiles/Project_Default.xml +22 -0
  9. package/.idea/jsLibraryMappings.xml +6 -0
  10. package/.idea/modules.xml +12 -0
  11. package/.idea/prettier.xml +6 -0
  12. package/.idea/vcs.xml +17 -0
  13. package/.swcrc +33 -0
  14. package/CODE_OF_CONDUCT.md +46 -0
  15. package/CONTRIBUTING.md +134 -0
  16. package/LICENSE +661 -0
  17. package/README.md +149 -0
  18. package/SECURITY.md +16 -0
  19. package/dist/@type/express/index.d.js +7 -0
  20. package/dist/@type/express/index.d.js.map +1 -0
  21. package/dist/constants/authorization.constants.js +99 -0
  22. package/dist/constants/authorization.constants.js.map +1 -0
  23. package/dist/constants/event.constants.js +55 -0
  24. package/dist/constants/event.constants.js.map +1 -0
  25. package/dist/constants/http-status-codes.constants.js +268 -0
  26. package/dist/constants/http-status-codes.constants.js.map +1 -0
  27. package/dist/constants/server-settings.constants.js +119 -0
  28. package/dist/constants/server-settings.constants.js.map +1 -0
  29. package/dist/constants/service.constants.js +48 -0
  30. package/dist/constants/service.constants.js.map +1 -0
  31. package/dist/container.js +161 -0
  32. package/dist/container.js.map +1 -0
  33. package/dist/container.tokens.js +83 -0
  34. package/dist/container.tokens.js.map +1 -0
  35. package/dist/controllers/auth.controller.js +143 -0
  36. package/dist/controllers/auth.controller.js.map +1 -0
  37. package/dist/controllers/batch-call.controller.js +59 -0
  38. package/dist/controllers/batch-call.controller.js.map +1 -0
  39. package/dist/controllers/camera-stream.controller.js +57 -0
  40. package/dist/controllers/camera-stream.controller.js.map +1 -0
  41. package/dist/controllers/custom-gcode.controller.js +76 -0
  42. package/dist/controllers/custom-gcode.controller.js.map +1 -0
  43. package/dist/controllers/first-time-setup.controller.js +65 -0
  44. package/dist/controllers/first-time-setup.controller.js.map +1 -0
  45. package/dist/controllers/floor.controller.js +78 -0
  46. package/dist/controllers/floor.controller.js.map +1 -0
  47. package/dist/controllers/plugin-firmware-update.controller.js +140 -0
  48. package/dist/controllers/plugin-firmware-update.controller.js.map +1 -0
  49. package/dist/controllers/print-completion.controller.js +58 -0
  50. package/dist/controllers/print-completion.controller.js.map +1 -0
  51. package/dist/controllers/printer-files.controller.js +208 -0
  52. package/dist/controllers/printer-files.controller.js.map +1 -0
  53. package/dist/controllers/printer-settings.controller.js +58 -0
  54. package/dist/controllers/printer-settings.controller.js.map +1 -0
  55. package/dist/controllers/printer.controller.js +287 -0
  56. package/dist/controllers/printer.controller.js.map +1 -0
  57. package/dist/controllers/server-private.controller.js +122 -0
  58. package/dist/controllers/server-private.controller.js.map +1 -0
  59. package/dist/controllers/server-public.controller.js +140 -0
  60. package/dist/controllers/server-public.controller.js.map +1 -0
  61. package/dist/controllers/settings.controller.js +89 -0
  62. package/dist/controllers/settings.controller.js.map +1 -0
  63. package/dist/controllers/user.controller.js +137 -0
  64. package/dist/controllers/user.controller.js.map +1 -0
  65. package/dist/controllers/validation/auth-controller.validation.js +15 -0
  66. package/dist/controllers/validation/auth-controller.validation.js.map +1 -0
  67. package/dist/controllers/validation/batch-controller.validation.js +29 -0
  68. package/dist/controllers/validation/batch-controller.validation.js.map +1 -0
  69. package/dist/controllers/validation/generic.validation.js +15 -0
  70. package/dist/controllers/validation/generic.validation.js.map +1 -0
  71. package/dist/controllers/validation/printer-controller.validation.js +66 -0
  72. package/dist/controllers/validation/printer-controller.validation.js.map +1 -0
  73. package/dist/controllers/validation/printer-files-controller.validation.js +66 -0
  74. package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -0
  75. package/dist/controllers/validation/printer-settings-controller.validation.js +15 -0
  76. package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -0
  77. package/dist/controllers/validation/setting.validation.js +19 -0
  78. package/dist/controllers/validation/setting.validation.js.map +1 -0
  79. package/dist/controllers/validation/user-controller.validation.js +16 -0
  80. package/dist/controllers/validation/user-controller.validation.js.map +1 -0
  81. package/dist/exceptions/job.exceptions.js +18 -0
  82. package/dist/exceptions/job.exceptions.js.map +1 -0
  83. package/dist/exceptions/runtime.exceptions.js +108 -0
  84. package/dist/exceptions/runtime.exceptions.js.map +1 -0
  85. package/dist/handlers/cache-manager.js +25 -0
  86. package/dist/handlers/cache-manager.js.map +1 -0
  87. package/dist/handlers/event-emitter.js +31 -0
  88. package/dist/handlers/event-emitter.js.map +1 -0
  89. package/dist/handlers/logger-factory.js +18 -0
  90. package/dist/handlers/logger-factory.js.map +1 -0
  91. package/dist/handlers/logger.js +85 -0
  92. package/dist/handlers/logger.js.map +1 -0
  93. package/dist/handlers/validators.js +131 -0
  94. package/dist/handlers/validators.js.map +1 -0
  95. package/dist/index.js +19 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/middleware/authenticate.js +83 -0
  98. package/dist/middleware/authenticate.js.map +1 -0
  99. package/dist/middleware/database.js +26 -0
  100. package/dist/middleware/database.js.map +1 -0
  101. package/dist/middleware/exception.handler.js +96 -0
  102. package/dist/middleware/exception.handler.js.map +1 -0
  103. package/dist/middleware/global.middleware.js +58 -0
  104. package/dist/middleware/global.middleware.js.map +1 -0
  105. package/dist/middleware/passport.js +44 -0
  106. package/dist/middleware/passport.js.map +1 -0
  107. package/dist/middleware/printer.js +49 -0
  108. package/dist/middleware/printer.js.map +1 -0
  109. package/dist/migrations/1696187882312-PrinterFile.js +40 -0
  110. package/dist/migrations/1696187882312-PrinterFile.js.map +1 -0
  111. package/dist/models/Auth/Permission.js +20 -0
  112. package/dist/models/Auth/Permission.js.map +1 -0
  113. package/dist/models/Auth/RefreshToken.js +41 -0
  114. package/dist/models/Auth/RefreshToken.js.map +1 -0
  115. package/dist/models/Auth/Role.js +20 -0
  116. package/dist/models/Auth/Role.js.map +1 -0
  117. package/dist/models/Auth/User.js +51 -0
  118. package/dist/models/Auth/User.js.map +1 -0
  119. package/dist/models/CameraStream.js +59 -0
  120. package/dist/models/CameraStream.js.map +1 -0
  121. package/dist/models/CustomGcode.js +28 -0
  122. package/dist/models/CustomGcode.js.map +1 -0
  123. package/dist/models/Floor.js +33 -0
  124. package/dist/models/Floor.js.map +1 -0
  125. package/dist/models/FloorPrinter.js +29 -0
  126. package/dist/models/FloorPrinter.js.map +1 -0
  127. package/dist/models/PrintCompletion.js +40 -0
  128. package/dist/models/PrintCompletion.js.map +1 -0
  129. package/dist/models/Printer.js +113 -0
  130. package/dist/models/Printer.js.map +1 -0
  131. package/dist/models/ServerSettings.js +168 -0
  132. package/dist/models/ServerSettings.js.map +1 -0
  133. package/dist/models/Settings.js +168 -0
  134. package/dist/models/Settings.js.map +1 -0
  135. package/dist/models/index.js +54 -0
  136. package/dist/models/index.js.map +1 -0
  137. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js +49 -0
  138. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +1 -0
  139. package/dist/mongo-migrations/20210907173950-printers-enabled.js +39 -0
  140. package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +1 -0
  141. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js +39 -0
  142. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +1 -0
  143. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js +60 -0
  144. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +1 -0
  145. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js +30 -0
  146. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +1 -0
  147. package/dist/mongo-migrations/20230716065316-user-remove-name.js +30 -0
  148. package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +1 -0
  149. package/dist/nodemon_restart_trigger.js +4 -0
  150. package/dist/nodemon_restart_trigger.js.map +1 -0
  151. package/dist/server.constants.js +99 -0
  152. package/dist/server.constants.js.map +1 -0
  153. package/dist/server.core.js +91 -0
  154. package/dist/server.core.js.map +1 -0
  155. package/dist/server.env.js +225 -0
  156. package/dist/server.env.js.map +1 -0
  157. package/dist/server.host.js +106 -0
  158. package/dist/server.host.js.map +1 -0
  159. package/dist/services/authentication/auth.service.js +136 -0
  160. package/dist/services/authentication/auth.service.js.map +1 -0
  161. package/dist/services/authentication/jwt.service.js +34 -0
  162. package/dist/services/authentication/jwt.service.js.map +1 -0
  163. package/dist/services/authentication/permission.service.js +73 -0
  164. package/dist/services/authentication/permission.service.js.map +1 -0
  165. package/dist/services/authentication/refresh-token.service.js +99 -0
  166. package/dist/services/authentication/refresh-token.service.js.map +1 -0
  167. package/dist/services/authentication/role.service.js +120 -0
  168. package/dist/services/authentication/role.service.js.map +1 -0
  169. package/dist/services/authentication/user.service.js +154 -0
  170. package/dist/services/authentication/user.service.js.map +1 -0
  171. package/dist/services/batch-call.service.js +148 -0
  172. package/dist/services/batch-call.service.js.map +1 -0
  173. package/dist/services/camera-stream.service.js +80 -0
  174. package/dist/services/camera-stream.service.js.map +1 -0
  175. package/dist/services/core/client-bundle.service.js +156 -0
  176. package/dist/services/core/client-bundle.service.js.map +1 -0
  177. package/dist/services/core/config.service.js +26 -0
  178. package/dist/services/core/config.service.js.map +1 -0
  179. package/dist/services/core/github.service.js +74 -0
  180. package/dist/services/core/github.service.js.map +1 -0
  181. package/dist/services/core/logs-manager.service.js +87 -0
  182. package/dist/services/core/logs-manager.service.js.map +1 -0
  183. package/dist/services/core/monsterpi.service.js +38 -0
  184. package/dist/services/core/monsterpi.service.js.map +1 -0
  185. package/dist/services/core/multer.service.js +122 -0
  186. package/dist/services/core/multer.service.js.map +1 -0
  187. package/dist/services/core/server-release.service.js +116 -0
  188. package/dist/services/core/server-release.service.js.map +1 -0
  189. package/dist/services/core/server-update.service.js +73 -0
  190. package/dist/services/core/server-update.service.js.map +1 -0
  191. package/dist/services/core/task-manager.service.js +196 -0
  192. package/dist/services/core/task-manager.service.js.map +1 -0
  193. package/dist/services/core/yaml.service.js +278 -0
  194. package/dist/services/core/yaml.service.js.map +1 -0
  195. package/dist/services/custom-gcode.service.js +48 -0
  196. package/dist/services/custom-gcode.service.js.map +1 -0
  197. package/dist/services/floor.service.js +183 -0
  198. package/dist/services/floor.service.js.map +1 -0
  199. package/dist/services/influxdb-v2/influx-db-v2-base.service.js +45 -0
  200. package/dist/services/influxdb-v2/influx-db-v2-base.service.js.map +1 -0
  201. package/dist/services/interfaces/auth.service.interface.js +6 -0
  202. package/dist/services/interfaces/auth.service.interface.js.map +1 -0
  203. package/dist/services/interfaces/camera-stream.dto.js +109 -0
  204. package/dist/services/interfaces/camera-stream.dto.js.map +1 -0
  205. package/dist/services/interfaces/camera-stream.service.interface.js +6 -0
  206. package/dist/services/interfaces/camera-stream.service.interface.js.map +1 -0
  207. package/dist/services/interfaces/custom-gcode.dto.js +18 -0
  208. package/dist/services/interfaces/custom-gcode.dto.js.map +1 -0
  209. package/dist/services/interfaces/custom-gcode.service.interface.js +6 -0
  210. package/dist/services/interfaces/custom-gcode.service.interface.js.map +1 -0
  211. package/dist/services/interfaces/floor.dto.js +61 -0
  212. package/dist/services/interfaces/floor.dto.js.map +1 -0
  213. package/dist/services/interfaces/floor.service.interface.js +6 -0
  214. package/dist/services/interfaces/floor.service.interface.js.map +1 -0
  215. package/dist/services/interfaces/gcode-analysis.dto.js +6 -0
  216. package/dist/services/interfaces/gcode-analysis.dto.js.map +1 -0
  217. package/dist/services/interfaces/jwt.service.interface.js +6 -0
  218. package/dist/services/interfaces/jwt.service.interface.js.map +1 -0
  219. package/dist/services/interfaces/login.dto.js +16 -0
  220. package/dist/services/interfaces/login.dto.js.map +1 -0
  221. package/dist/services/interfaces/page.interface.js +16 -0
  222. package/dist/services/interfaces/page.interface.js.map +1 -0
  223. package/dist/services/interfaces/permission.dto.js +16 -0
  224. package/dist/services/interfaces/permission.dto.js.map +1 -0
  225. package/dist/services/interfaces/permission.service.interface.js +6 -0
  226. package/dist/services/interfaces/permission.service.interface.js.map +1 -0
  227. package/dist/services/interfaces/printer-file.dto.js +27 -0
  228. package/dist/services/interfaces/printer-file.dto.js.map +1 -0
  229. package/dist/services/interfaces/printer-files.service.interface.js +6 -0
  230. package/dist/services/interfaces/printer-files.service.interface.js.map +1 -0
  231. package/dist/services/interfaces/printer.dto.js +18 -0
  232. package/dist/services/interfaces/printer.dto.js.map +1 -0
  233. package/dist/services/interfaces/printer.service.interface.js +6 -0
  234. package/dist/services/interfaces/printer.service.interface.js.map +1 -0
  235. package/dist/services/interfaces/role-service.interface.js +6 -0
  236. package/dist/services/interfaces/role-service.interface.js.map +1 -0
  237. package/dist/services/interfaces/settings.dto.js +34 -0
  238. package/dist/services/interfaces/settings.dto.js.map +1 -0
  239. package/dist/services/interfaces/settings.service.interface.js +6 -0
  240. package/dist/services/interfaces/settings.service.interface.js.map +1 -0
  241. package/dist/services/interfaces/user-service.interface.js +6 -0
  242. package/dist/services/interfaces/user-service.interface.js.map +1 -0
  243. package/dist/services/interfaces/user.dto.js +39 -0
  244. package/dist/services/interfaces/user.dto.js.map +1 -0
  245. package/dist/services/octoprint/constants/firmware-update-settings.constants.js +32 -0
  246. package/dist/services/octoprint/constants/firmware-update-settings.constants.js.map +1 -0
  247. package/dist/services/octoprint/constants/octoprint-service.constants.js +101 -0
  248. package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -0
  249. package/dist/services/octoprint/constants/octoprint-websocket.constants.js +88 -0
  250. package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -0
  251. package/dist/services/octoprint/octoprint-api.routes.js +192 -0
  252. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -0
  253. package/dist/services/octoprint/octoprint-api.service.js +402 -0
  254. package/dist/services/octoprint/octoprint-api.service.js.map +1 -0
  255. package/dist/services/octoprint/octoprint-sockio.adapter.js +309 -0
  256. package/dist/services/octoprint/octoprint-sockio.adapter.js.map +1 -0
  257. package/dist/services/octoprint/plugin-base.service.js +102 -0
  258. package/dist/services/octoprint/plugin-base.service.js.map +1 -0
  259. package/dist/services/octoprint/plugin-firmware-update.service.js +104 -0
  260. package/dist/services/octoprint/plugin-firmware-update.service.js.map +1 -0
  261. package/dist/services/octoprint/plugin-repository.cache.js +45 -0
  262. package/dist/services/octoprint/plugin-repository.cache.js.map +1 -0
  263. package/dist/services/octoprint/socket.factory.js +22 -0
  264. package/dist/services/octoprint/socket.factory.js.map +1 -0
  265. package/dist/services/octoprint/utils/api.utils.js +72 -0
  266. package/dist/services/octoprint/utils/api.utils.js.map +1 -0
  267. package/dist/services/orm/floor.service.interface.js +73 -0
  268. package/dist/services/orm/floor.service.interface.js.map +1 -0
  269. package/dist/services/orm/printer.service.interface.js +6 -0
  270. package/dist/services/orm/printer.service.interface.js.map +1 -0
  271. package/dist/services/print-completion.service.js +162 -0
  272. package/dist/services/print-completion.service.js.map +1 -0
  273. package/dist/services/printer-files.service.js +91 -0
  274. package/dist/services/printer-files.service.js.map +1 -0
  275. package/dist/services/printer.service.js +230 -0
  276. package/dist/services/printer.service.js.map +1 -0
  277. package/dist/services/settings.service.js +158 -0
  278. package/dist/services/settings.service.js.map +1 -0
  279. package/dist/services/validators/floor-service.validation.js +60 -0
  280. package/dist/services/validators/floor-service.validation.js.map +1 -0
  281. package/dist/services/validators/print-completion-service.validation.js +20 -0
  282. package/dist/services/validators/print-completion-service.validation.js.map +1 -0
  283. package/dist/services/validators/printer-service.validation.js +48 -0
  284. package/dist/services/validators/printer-service.validation.js.map +1 -0
  285. package/dist/services/validators/settings-service.validation.js +71 -0
  286. package/dist/services/validators/settings-service.validation.js.map +1 -0
  287. package/dist/services/validators/user-service.validation.js +33 -0
  288. package/dist/services/validators/user-service.validation.js.map +1 -0
  289. package/dist/services/validators/yaml-service.validation.js +63 -0
  290. package/dist/services/validators/yaml-service.validation.js.map +1 -0
  291. package/dist/services/yaml.service.js +278 -0
  292. package/dist/services/yaml.service.js.map +1 -0
  293. package/dist/shared.constants.js +15 -0
  294. package/dist/shared.constants.js.map +1 -0
  295. package/dist/state/file-upload-tracker.cache.js +88 -0
  296. package/dist/state/file-upload-tracker.cache.js.map +1 -0
  297. package/dist/state/file.cache.js +99 -0
  298. package/dist/state/file.cache.js.map +1 -0
  299. package/dist/state/files.store.js +132 -0
  300. package/dist/state/files.store.js.map +1 -0
  301. package/dist/state/floor.store.js +99 -0
  302. package/dist/state/floor.store.js.map +1 -0
  303. package/dist/state/printer-events.cache.js +97 -0
  304. package/dist/state/printer-events.cache.js.map +1 -0
  305. package/dist/state/printer-socket.store.js +217 -0
  306. package/dist/state/printer-socket.store.js.map +1 -0
  307. package/dist/state/printer.cache.js +112 -0
  308. package/dist/state/printer.cache.js.map +1 -0
  309. package/dist/state/settings.store.js +154 -0
  310. package/dist/state/settings.store.js.map +1 -0
  311. package/dist/state/socket-io.gateway.js +66 -0
  312. package/dist/state/socket-io.gateway.js.map +1 -0
  313. package/dist/state/test-printer-socket.store.js +91 -0
  314. package/dist/state/test-printer-socket.store.js.map +1 -0
  315. package/dist/state/validation/create-test-printer.validation.js +18 -0
  316. package/dist/state/validation/create-test-printer.validation.js.map +1 -0
  317. package/dist/task.presets.js +50 -0
  318. package/dist/task.presets.js.map +1 -0
  319. package/dist/tasks/boot.task.js +198 -0
  320. package/dist/tasks/boot.task.js.map +1 -0
  321. package/dist/tasks/client-bundle.task.js +32 -0
  322. package/dist/tasks/client-bundle.task.js.map +1 -0
  323. package/dist/tasks/print-completion.socketio.task.js +85 -0
  324. package/dist/tasks/print-completion.socketio.task.js.map +1 -0
  325. package/dist/tasks/printer-file-clean.task.js +72 -0
  326. package/dist/tasks/printer-file-clean.task.js.map +1 -0
  327. package/dist/tasks/printer-websocket-restore.task.js +64 -0
  328. package/dist/tasks/printer-websocket-restore.task.js.map +1 -0
  329. package/dist/tasks/printer-websocket.task.js +43 -0
  330. package/dist/tasks/printer-websocket.task.js.map +1 -0
  331. package/dist/tasks/socketio.task.js +83 -0
  332. package/dist/tasks/socketio.task.js.map +1 -0
  333. package/dist/tasks/software-update.task.js +22 -0
  334. package/dist/tasks/software-update.task.js.map +1 -0
  335. package/dist/tasks.js +48 -0
  336. package/dist/tasks.js.map +1 -0
  337. package/dist/types/express/index.d.js +7 -0
  338. package/dist/types/express/index.d.js.map +1 -0
  339. package/dist/utils/array.util.js +27 -0
  340. package/dist/utils/array.util.js.map +1 -0
  341. package/dist/utils/benchmark.util.js +39 -0
  342. package/dist/utils/benchmark.util.js.map +1 -0
  343. package/dist/utils/cache/key-diff.cache.js +128 -0
  344. package/dist/utils/cache/key-diff.cache.js.map +1 -0
  345. package/dist/utils/correlation-token.util.js +15 -0
  346. package/dist/utils/correlation-token.util.js.map +1 -0
  347. package/dist/utils/crypto.utils.js +29 -0
  348. package/dist/utils/crypto.utils.js.map +1 -0
  349. package/dist/utils/env.utils.js +98 -0
  350. package/dist/utils/env.utils.js.map +1 -0
  351. package/dist/utils/error.utils.js +15 -0
  352. package/dist/utils/error.utils.js.map +1 -0
  353. package/dist/utils/find-predicate.utils.js +18 -0
  354. package/dist/utils/find-predicate.utils.js.map +1 -0
  355. package/dist/utils/fs.utils.js +38 -0
  356. package/dist/utils/fs.utils.js.map +1 -0
  357. package/dist/utils/is-docker.js +40 -0
  358. package/dist/utils/is-docker.js.map +1 -0
  359. package/dist/utils/mapper.utils.js +33 -0
  360. package/dist/utils/mapper.utils.js.map +1 -0
  361. package/dist/utils/metric.utils.js +35 -0
  362. package/dist/utils/metric.utils.js.map +1 -0
  363. package/dist/utils/normalize-url.js +245 -0
  364. package/dist/utils/normalize-url.js.map +1 -0
  365. package/dist/utils/semver.utils.js +18 -0
  366. package/dist/utils/semver.utils.js.map +1 -0
  367. package/dist/utils/time.utils.js +26 -0
  368. package/dist/utils/time.utils.js.map +1 -0
  369. package/dist/utils/url.utils.js +33 -0
  370. package/dist/utils/url.utils.js.map +1 -0
  371. package/dist/utils/websocket.adapter.js +105 -0
  372. package/dist/utils/websocket.adapter.js.map +1 -0
  373. package/migrate-mongo-config.js +45 -0
  374. package/nodemon_restart_trigger.js +1 -0
  375. package/package.json +149 -0
  376. package/src/index.ts +19 -0
  377. package/tsconfig.json +28 -0
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ClientBundleService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ClientBundleService;
9
+ }
10
+ });
11
+ const _admzip = /*#__PURE__*/ _interop_require_default(require("adm-zip"));
12
+ const _path = require("path");
13
+ const _nodefs = require("node:fs");
14
+ const _promises = require("node:fs/promises");
15
+ const _fsutils = require("../../utils/fs.utils");
16
+ const _semverutils = require("../../utils/semver.utils");
17
+ const _serverconstants = require("../../server.constants");
18
+ function _interop_require_default(obj) {
19
+ return obj && obj.__esModule ? obj : {
20
+ default: obj
21
+ };
22
+ }
23
+ class ClientBundleService {
24
+ githubService;
25
+ configService;
26
+ logger;
27
+ constructor({ githubService, configService, loggerFactory }){
28
+ this.githubService = githubService;
29
+ this.configService = configService;
30
+ this.logger = loggerFactory(ClientBundleService.name);
31
+ }
32
+ get clientPackageJsonPath() {
33
+ return (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultClientBundleStorage, "package.json");
34
+ }
35
+ get clientIndexHtmlPath() {
36
+ return (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultClientBundleStorage, "dist/index.html");
37
+ }
38
+ async getReleases() {
39
+ const githubOwner = _serverconstants.AppConstants.orgName;
40
+ const githubRepo = _serverconstants.AppConstants.clientRepoName;
41
+ const result = await this.githubService.getReleases(githubOwner, githubRepo);
42
+ const latestResult = await this.githubService.getLatestRelease(githubOwner, githubRepo);
43
+ return {
44
+ minimum: {
45
+ tag_name: _serverconstants.AppConstants.defaultClientMinimum
46
+ },
47
+ current: {
48
+ tag_name: this.getClientVersion()
49
+ },
50
+ latest: latestResult.data,
51
+ releases: result.data
52
+ };
53
+ }
54
+ async shouldUpdateWithReason(overrideAutoUpdate, minimumVersion) {
55
+ const clientAutoUpdate = _serverconstants.AppConstants.enableClientDistAutoUpdateKey;
56
+ if (!clientAutoUpdate && !overrideAutoUpdate) {
57
+ return {
58
+ shouldUpdate: false,
59
+ reason: "Client auto-update disabled (ENABLE_CLIENT_DIST_AUTO_UPDATE), skipping"
60
+ };
61
+ }
62
+ const version = this.getClientVersion();
63
+ // If no package.json found, we should update to latest/minimum
64
+ if (!version) {
65
+ return {
66
+ shouldUpdate: true,
67
+ reason: `Client package.json does not exist, downloading new release`
68
+ };
69
+ }
70
+ if (!this.doesClientIndexHtmlExist()) {
71
+ return {
72
+ shouldUpdate: true,
73
+ reason: `Client index.html does not exist, downloading new release`
74
+ };
75
+ }
76
+ // If no bundle found, this task should run to ensure one is downloaded
77
+ const satisfiesMinimumVersion = (0, _semverutils.checkVersionSatisfiesMinimum)(version, minimumVersion);
78
+ if (satisfiesMinimumVersion) {
79
+ return {
80
+ shouldUpdate: false,
81
+ reason: `Client satisfies minimum version ${minimumVersion}, skipping`
82
+ };
83
+ }
84
+ return {
85
+ shouldUpdate: true,
86
+ reason: `Client bundle release ${version} does not satisfy minimum version ${minimumVersion}, downloading new release`
87
+ };
88
+ }
89
+ async downloadClientUpdate(releaseTag) {
90
+ const release = await this.getClientBundleRelease(releaseTag);
91
+ this.logger.log(`Retrieved ${release.assets.length} assets from release '${release.name}': ${release.assets.map((a)=>a.name)}`);
92
+ const asset = release.assets.find((a)=>a.name === `dist-client-${release.tag_name}.zip`);
93
+ const assetId = asset.id;
94
+ const downloadPath = await this.downloadClientBundleZip(assetId, asset.name);
95
+ await this.extractClientBundleZip(downloadPath);
96
+ }
97
+ async getClientBundleRelease(releaseTag) {
98
+ const githubOwner = _serverconstants.AppConstants.orgName;
99
+ const githubRepo = _serverconstants.AppConstants.clientRepoName;
100
+ const result = await this.githubService.getReleaseByTag(githubOwner, githubRepo, releaseTag);
101
+ return result.data;
102
+ }
103
+ async downloadClientBundleZip(assetId, assetName) {
104
+ const githubOwner = _serverconstants.AppConstants.orgName;
105
+ const githubRepo = _serverconstants.AppConstants.clientRepoName;
106
+ const assetResult = await this.githubService.requestAsset(githubOwner, githubRepo, assetId);
107
+ const dir = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultClientBundleZipsStorage);
108
+ (0, _fsutils.ensureDirExists)(dir);
109
+ this.logger.log(`Downloaded client release ZIP to '${dir}'. Extracting archive now`);
110
+ const path = (0, _path.join)(dir, assetName);
111
+ (0, _nodefs.writeFileSync)(path, Buffer.from(assetResult.data));
112
+ return path;
113
+ }
114
+ async extractClientBundleZip(downloadedZipPath) {
115
+ const zip = new _admzip.default(downloadedZipPath);
116
+ const distPath = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultClientBundleStorage);
117
+ (0, _fsutils.ensureDirExists)(distPath);
118
+ this.logger.debug(`Clearing contents of ${distPath}`);
119
+ for (const fileOrDir of (await (0, _promises.readdir)(distPath))){
120
+ this.logger.log(`Removing existing file/dir '${distPath}/${fileOrDir}' before updating client`);
121
+ try {
122
+ await (0, _promises.rm)((0, _path.join)(distPath, fileOrDir), {
123
+ force: true,
124
+ recursive: true
125
+ });
126
+ } catch (e) {
127
+ this.logger.error(`${e.message} ${e.stack}`);
128
+ throw e;
129
+ }
130
+ }
131
+ try {
132
+ zip.extractAllTo((0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultClientBundleStorage));
133
+ } catch (e) {
134
+ this.logger.error(`Unzipping failed ${e.message} ${e.stack}`);
135
+ throw e;
136
+ }
137
+ this.logger.log(`Successfully extracted client dist to ${distPath}`);
138
+ }
139
+ doesClientIndexHtmlExist() {
140
+ const indexHtmlPath = this.clientIndexHtmlPath;
141
+ return (0, _nodefs.existsSync)(indexHtmlPath);
142
+ }
143
+ getClientVersion() {
144
+ const packageJsonPath = this.clientPackageJsonPath;
145
+ const packageJsonFound = (0, _nodefs.existsSync)(packageJsonPath);
146
+ // If no package.json found, we should update to latest/minimum
147
+ if (!packageJsonFound) {
148
+ return;
149
+ }
150
+ require.cache[packageJsonPath] = undefined;
151
+ const json = require(packageJsonPath);
152
+ return json?.version;
153
+ }
154
+ }
155
+
156
+ //# sourceMappingURL=client-bundle.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/core/client-bundle.service.ts"],"names":["ClientBundleService","githubService","configService","logger","constructor","loggerFactory","name","clientPackageJsonPath","join","superRootPath","AppConstants","defaultClientBundleStorage","clientIndexHtmlPath","getReleases","githubOwner","orgName","githubRepo","clientRepoName","result","latestResult","getLatestRelease","minimum","tag_name","defaultClientMinimum","current","getClientVersion","latest","data","releases","shouldUpdateWithReason","overrideAutoUpdate","minimumVersion","clientAutoUpdate","enableClientDistAutoUpdateKey","shouldUpdate","reason","version","doesClientIndexHtmlExist","satisfiesMinimumVersion","checkVersionSatisfiesMinimum","downloadClientUpdate","releaseTag","release","getClientBundleRelease","log","assets","length","map","a","asset","find","assetId","id","downloadPath","downloadClientBundleZip","extractClientBundleZip","getReleaseByTag","assetName","assetResult","requestAsset","dir","defaultClientBundleZipsStorage","ensureDirExists","path","writeFileSync","Buffer","from","downloadedZipPath","zip","AdmZip","distPath","debug","fileOrDir","readdir","rm","force","recursive","e","error","message","stack","extractAllTo","indexHtmlPath","existsSync","packageJsonPath","packageJsonFound","require","cache","undefined","json"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ConfigService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ConfigService;
9
+ }
10
+ });
11
+ class ConfigService {
12
+ get(key, defaultValue) {
13
+ if (!Object.keys(process.env).includes(key) || !process.env[key]?.length) {
14
+ return defaultValue;
15
+ }
16
+ return process.env[key];
17
+ }
18
+ getOrThrow(key) {
19
+ const val = this.get(key);
20
+ if (!val) {
21
+ throw Error(`Environment variable with key ${key} was not defined.`);
22
+ }
23
+ }
24
+ }
25
+
26
+ //# sourceMappingURL=config.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/core/config.service.ts"],"names":["ConfigService","get","key","defaultValue","Object","keys","process","env","includes","length","getOrThrow","val","Error"],"mappings":";;;;+BAMaA;;;eAAAA;;;AAAN,MAAMA;IACXC,IAAIC,GAAW,EAAEC,YAAqB,EAAE;QACtC,IAAI,CAACC,OAAOC,IAAI,CAACC,QAAQC,GAAG,EAAEC,QAAQ,CAACN,QAAQ,CAACI,QAAQC,GAAG,CAACL,IAAI,EAAEO,QAAQ;YACxE,OAAON;QACT;QACA,OAAOG,QAAQC,GAAG,CAACL,IAAI;IACzB;IAEAQ,WAAWR,GAAW,EAAE;QACtB,MAAMS,MAAM,IAAI,CAACV,GAAG,CAACC;QACrB,IAAI,CAACS,KAAK;YACR,MAAMC,MAAM,CAAC,8BAA8B,EAAEV,IAAI,iBAAiB,CAAC;QACrE;IACF;AACF"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "GithubService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return GithubService;
9
+ }
10
+ });
11
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
12
+ class GithubService {
13
+ octokitService;
14
+ logger;
15
+ constructor({ loggerFactory, octokitService }){
16
+ this.logger = loggerFactory(GithubService.name, false);
17
+ this.octokitService = octokitService;
18
+ }
19
+ async wasAuthenticated() {
20
+ const result = await this.octokitService.auth();
21
+ return result?.type === "token";
22
+ }
23
+ async getLatestRelease(owner, repo) {
24
+ return await this.octokitService.rest.repos.getLatestRelease({
25
+ owner,
26
+ repo
27
+ }).catch((e)=>{
28
+ if (e.name === "HttpError" && e.status == 404) {
29
+ throw new _runtimeexceptions.NotFoundException(`Could not retrieve latest release`);
30
+ }
31
+ throw e;
32
+ });
33
+ }
34
+ async getReleases(owner, repo) {
35
+ return await this.octokitService.rest.repos.listReleases({
36
+ owner,
37
+ repo
38
+ }).catch((e)=>{
39
+ if (e.name === "HttpError" && e.status == 404) {
40
+ throw new _runtimeexceptions.NotFoundException(`Could not retrieve releases`);
41
+ }
42
+ throw e;
43
+ });
44
+ }
45
+ async getReleaseByTag(owner, repo, tag) {
46
+ return await this.octokitService.rest.repos.getReleaseByTag({
47
+ owner,
48
+ repo,
49
+ tag
50
+ }).catch((e)=>{
51
+ if (e.name === "HttpError" && e.status == 404) {
52
+ throw new _runtimeexceptions.NotFoundException(`Could not find release with tag ${tag}`);
53
+ }
54
+ throw e;
55
+ });
56
+ }
57
+ async requestAsset(owner, repo, assetId) {
58
+ return await this.octokitService.request("GET /repos/:owner/:repo/releases/assets/:asset_id", {
59
+ headers: {
60
+ Accept: "application/octet-stream"
61
+ },
62
+ owner,
63
+ repo,
64
+ asset_id: assetId
65
+ }).catch((e)=>{
66
+ if (e.name === "HttpError" && e.status == 404) {
67
+ throw new _runtimeexceptions.NotFoundException(`Could not find asset with id ${assetId}`);
68
+ }
69
+ throw e;
70
+ });
71
+ }
72
+ }
73
+
74
+ //# sourceMappingURL=github.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/core/github.service.ts"],"names":["GithubService","octokitService","logger","constructor","loggerFactory","name","wasAuthenticated","result","auth","type","getLatestRelease","owner","repo","rest","repos","catch","e","status","NotFoundException","getReleases","listReleases","getReleaseByTag","tag","requestAsset","assetId","request","headers","Accept","asset_id"],"mappings":";;;;+BAKaA;;;eAAAA;;;mCALqB;AAK3B,MAAMA;IACXC,eAAwB;IACxBC,OAAsB;IAEtBC,YAAY,EAAEC,aAAa,EAAEH,cAAc,EAA8D,CAAE;QACzG,IAAI,CAACC,MAAM,GAAGE,cAAcJ,cAAcK,IAAI,EAAE;QAChD,IAAI,CAACJ,cAAc,GAAGA;IACxB;IAEA,MAAMK,mBAAmB;QACvB,MAAMC,SAAS,MAAM,IAAI,CAACN,cAAc,CAACO,IAAI;QAC7C,OAAOD,QAAQE,SAAS;IAC1B;IAEA,MAAMC,iBAAiBC,KAAa,EAAEC,IAAY,EAAE;QAClD,OAAO,MAAM,IAAI,CAACX,cAAc,CAACY,IAAI,CAACC,KAAK,CACxCJ,gBAAgB,CAAC;YAChBC;YACAC;QACF,GACCG,KAAK,CAAC,CAACC;YACN,IAAIA,EAAEX,IAAI,KAAK,eAAeW,EAAEC,MAAM,IAAI,KAAK;gBAC7C,MAAM,IAAIC,oCAAiB,CAAC,CAAC,iCAAiC,CAAC;YACjE;YAEA,MAAMF;QACR;IACJ;IAEA,MAAMG,YAAYR,KAAa,EAAEC,IAAY,EAAE;QAC7C,OAAO,MAAM,IAAI,CAACX,cAAc,CAACY,IAAI,CAACC,KAAK,CACxCM,YAAY,CAAC;YACZT;YACAC;QACF,GACCG,KAAK,CAAC,CAACC;YACN,IAAIA,EAAEX,IAAI,KAAK,eAAeW,EAAEC,MAAM,IAAI,KAAK;gBAC7C,MAAM,IAAIC,oCAAiB,CAAC,CAAC,2BAA2B,CAAC;YAC3D;YAEA,MAAMF;QACR;IACJ;IAEA,MAAMK,gBAAgBV,KAAa,EAAEC,IAAY,EAAEU,GAAW,EAAE;QAC9D,OAAO,MAAM,IAAI,CAACrB,cAAc,CAACY,IAAI,CAACC,KAAK,CACxCO,eAAe,CAAC;YACfV;YACAC;YACAU;QACF,GACCP,KAAK,CAAC,CAACC;YACN,IAAIA,EAAEX,IAAI,KAAK,eAAeW,EAAEC,MAAM,IAAI,KAAK;gBAC7C,MAAM,IAAIC,oCAAiB,CAAC,CAAC,gCAAgC,EAAEI,IAAI,CAAC;YACtE;YAEA,MAAMN;QACR;IACJ;IAEA,MAAMO,aAAaZ,KAAa,EAAEC,IAAY,EAAEY,OAAY,EAAE;QAC5D,OAAO,MAAM,IAAI,CAACvB,cAAc,CAC7BwB,OAAO,CAAC,qDAAqD;YAC5DC,SAAS;gBACPC,QAAQ;YACV;YACAhB;YACAC;YACAgB,UAAUJ;QACZ,GACCT,KAAK,CAAC,CAACC;YACN,IAAIA,EAAEX,IAAI,KAAK,eAAeW,EAAEC,MAAM,IAAI,KAAK;gBAC7C,MAAM,IAAIC,oCAAiB,CAAC,CAAC,6BAA6B,EAAEM,QAAQ,CAAC;YACvE;YAEA,MAAMR;QACR;IACJ;AACF"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "LogDumpService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return LogDumpService;
9
+ }
10
+ });
11
+ const _admzip = /*#__PURE__*/ _interop_require_default(require("adm-zip"));
12
+ const _path = require("path");
13
+ const _fs = require("fs");
14
+ const _fsutils = require("../../utils/fs.utils");
15
+ const _serverconstants = require("../../server.constants");
16
+ const _timeutils = require("../../utils/time.utils");
17
+ function _interop_require_default(obj) {
18
+ return obj && obj.__esModule ? obj : {
19
+ default: obj
20
+ };
21
+ }
22
+ class LogDumpService {
23
+ logger;
24
+ constructor({ loggerFactory }){
25
+ this.logger = loggerFactory(LogDumpService.name);
26
+ }
27
+ async deleteOlderThanWeekAndMismatchingLogFiles() {
28
+ this.logger.log("Cleaning log files");
29
+ const path = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultLogsFolder);
30
+ const dirEntries = (0, _fs.readdirSync)(path, {
31
+ withFileTypes: true
32
+ });
33
+ const files = dirEntries.filter((dirent)=>dirent.isFile()).map((dirent)=>dirent.name);
34
+ // Filter only log files that are not in the format of logs/<app-name>-<date>.log
35
+ const startingFormat = `${_serverconstants.AppConstants.logAppName}-`;
36
+ const removedFilesNotInFormat = files.filter((f)=>f.endsWith(".log") && !f.startsWith(startingFormat));
37
+ const removedFilesOutdated = files.filter((f)=>{
38
+ const matchesFormat = f.endsWith(".log") && f.startsWith(startingFormat);
39
+ if (!matchesFormat) return false;
40
+ const strippedFilename = f.replace(".log", "").replace(startingFormat, "");
41
+ const date = new Date(strippedFilename);
42
+ if (!(0, _timeutils.isValidDate)(date)) {
43
+ this.logger.warn(`Failed to parse date from log file ${f}, removing it as outdated`);
44
+ return true;
45
+ }
46
+ const now = new Date();
47
+ const diff = now.getTime() - date.getTime();
48
+ const diffDays = diff / (1000 * 3600 * 24);
49
+ return diffDays > 7;
50
+ });
51
+ this.logger.log(`Removing ${removedFilesNotInFormat.length} files that are not in the format of ${startingFormat}<date>.log, and ${removedFilesOutdated.length} files that are older than 7 days`);
52
+ let removedWrongFormatFilesCount = 0;
53
+ for (const file of removedFilesNotInFormat){
54
+ try {
55
+ (0, _fs.unlinkSync)((0, _path.join)(path, file));
56
+ removedWrongFormatFilesCount++;
57
+ } catch (err) {
58
+ this.logger.warn(`Failed to delete log file ${file}`);
59
+ }
60
+ }
61
+ let removedOutdatedFilesCount = 0;
62
+ for (const file of removedFilesOutdated){
63
+ try {
64
+ (0, _fs.unlinkSync)((0, _path.join)(path, file));
65
+ removedOutdatedFilesCount++;
66
+ } catch (err) {
67
+ this.logger.warn(`Failed to delete log file ${file}`);
68
+ }
69
+ }
70
+ this.logger.log(`Removed ${removedWrongFormatFilesCount + removedOutdatedFilesCount} log file(s)`);
71
+ return {
72
+ removedWrongFormatFilesCount,
73
+ removedOutdatedFilesCount
74
+ };
75
+ }
76
+ async dumpZip() {
77
+ this.logger.log("Dumping logs as ZIP");
78
+ const zip = new _admzip.default();
79
+ const path = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultLogsFolder);
80
+ zip.addLocalFolder(path, "/logs", "*.log");
81
+ const outputPath = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultLogZipsFolder, `logs-${_serverconstants.AppConstants.serverRepoName}.zip`);
82
+ zip.writeZip(outputPath);
83
+ return outputPath;
84
+ }
85
+ }
86
+
87
+ //# sourceMappingURL=logs-manager.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/core/logs-manager.service.ts"],"names":["LogDumpService","logger","constructor","loggerFactory","name","deleteOlderThanWeekAndMismatchingLogFiles","log","path","join","superRootPath","AppConstants","defaultLogsFolder","dirEntries","readdirSync","withFileTypes","files","filter","dirent","isFile","map","startingFormat","logAppName","removedFilesNotInFormat","f","endsWith","startsWith","removedFilesOutdated","matchesFormat","strippedFilename","replace","date","Date","isValidDate","warn","now","diff","getTime","diffDays","length","removedWrongFormatFilesCount","file","unlinkSync","err","removedOutdatedFilesCount","dumpZip","zip","AdmZip","addLocalFolder","outputPath","defaultLogZipsFolder","serverRepoName","writeZip"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "MonsterPiService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MonsterPiService;
9
+ }
10
+ });
11
+ const _node = require("@sentry/node");
12
+ const _fs = require("fs");
13
+ const _serverconstants = require("../../server.constants");
14
+ class MonsterPiService {
15
+ monsterPiVersion = null;
16
+ logger;
17
+ fileLocation = _serverconstants.AppConstants.monsterPiFilePath;
18
+ constructor({ loggerFactory }){
19
+ this.logger = loggerFactory(MonsterPiService.name);
20
+ }
21
+ getMonsterPiVersionSafe() {
22
+ const fileExists = (0, _fs.existsSync)(this.fileLocation);
23
+ if (!fileExists) {
24
+ return null;
25
+ }
26
+ try {
27
+ const contents = (0, _fs.readFileSync)(this.fileLocation);
28
+ this.monsterPiVersion = contents.toString().replaceAll(" ", "");
29
+ return this.monsterPiVersion;
30
+ } catch (e) {
31
+ this.logger.warn("Error checking MonsterPi version");
32
+ (0, _node.captureException)(e);
33
+ }
34
+ return null;
35
+ }
36
+ }
37
+
38
+ //# sourceMappingURL=monsterpi.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/core/monsterpi.service.ts"],"names":["MonsterPiService","monsterPiVersion","logger","fileLocation","AppConstants","monsterPiFilePath","constructor","loggerFactory","name","getMonsterPiVersionSafe","fileExists","existsSync","contents","readFileSync","toString","replaceAll","e","warn","captureException"],"mappings":";;;;+BAKaA;;;eAAAA;;;sBALoB;oBACQ;iCACZ;AAGtB,MAAMA;IACXC,mBAAkC,KAAK;IACvCC,OAAO;IACCC,eAAeC,6BAAY,CAACC,iBAAiB,CAAC;IAEtDC,YAAY,EAAEC,aAAa,EAAqC,CAAE;QAChE,IAAI,CAACL,MAAM,GAAGK,cAAcP,iBAAiBQ,IAAI;IACnD;IAEAC,0BAA0B;QACxB,MAAMC,aAAaC,IAAAA,cAAU,EAAC,IAAI,CAACR,YAAY;QAC/C,IAAI,CAACO,YAAY;YACf,OAAO;QACT;QAEA,IAAI;YACF,MAAME,WAAWC,IAAAA,gBAAY,EAAC,IAAI,CAACV,YAAY;YAC/C,IAAI,CAACF,gBAAgB,GAAGW,SAASE,QAAQ,GAAGC,UAAU,CAAC,KAAK;YAC5D,OAAO,IAAI,CAACd,gBAAgB;QAC9B,EAAE,OAAOe,GAAG;YACV,IAAI,CAACd,MAAM,CAACe,IAAI,CAAC;YACjBC,IAAAA,sBAAgB,EAACF;QACnB;QACA,OAAO;IACT;AACF"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "MulterService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MulterService;
9
+ }
10
+ });
11
+ const _multer = /*#__PURE__*/ _interop_require_default(require("multer"));
12
+ const _path = require("path");
13
+ const _fs = require("fs");
14
+ const _fsutils = require("../../utils/fs.utils");
15
+ const _serverconstants = require("../../server.constants");
16
+ function _interop_require_default(obj) {
17
+ return obj && obj.__esModule ? obj : {
18
+ default: obj
19
+ };
20
+ }
21
+ class MulterService {
22
+ fileUploadTrackerCache;
23
+ httpClient;
24
+ constructor({ fileUploadTrackerCache, httpClient }){
25
+ this.fileUploadTrackerCache = fileUploadTrackerCache;
26
+ this.httpClient = httpClient;
27
+ }
28
+ getNewestFile(collection) {
29
+ const dirPath = this.collectionPath(collection);
30
+ const files = this.orderRecentFiles(dirPath);
31
+ const latestFile = files.length ? files[0] : undefined;
32
+ return latestFile ? (0, _path.join)(dirPath, latestFile.file) : undefined;
33
+ }
34
+ clearUploadsFolder() {
35
+ const fileStoragePath = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultFileStorageFolder);
36
+ if (!(0, _fs.existsSync)(fileStoragePath)) return;
37
+ const files = (0, _fs.readdirSync)(fileStoragePath, {
38
+ withFileTypes: true
39
+ }).filter((item)=>!item.isDirectory()).map((item)=>item.name);
40
+ for (const file of files){
41
+ (0, _fs.unlink)((0, _path.join)(fileStoragePath, file), (err)=>{
42
+ /* istanbul ignore next */ if (err) throw err;
43
+ });
44
+ }
45
+ }
46
+ fileExists(downloadFilename, collection) {
47
+ const downloadPath = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultFileStorageFolder, collection, downloadFilename);
48
+ return (0, _fs.existsSync)(downloadPath);
49
+ }
50
+ async downloadFile(downloadUrl, downloadFilename, collection) {
51
+ const downloadFolder = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultFileStorageFolder, collection);
52
+ if (!(0, _fs.existsSync)(downloadFolder)) {
53
+ (0, _fs.mkdirSync)(downloadFolder, {
54
+ recursive: true
55
+ });
56
+ }
57
+ const downloadPath = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultFileStorageFolder, collection, downloadFilename);
58
+ const fileStream = (0, _fs.createWriteStream)(downloadPath);
59
+ const res = await this.httpClient.get(downloadUrl);
60
+ return await new Promise((resolve, reject)=>{
61
+ fileStream.write(res.data);
62
+ fileStream.on("error", (err)=>{
63
+ return reject(err);
64
+ });
65
+ fileStream.on("finish", async ()=>{
66
+ return resolve();
67
+ });
68
+ fileStream.on("close", async ()=>{
69
+ return resolve();
70
+ });
71
+ resolve();
72
+ });
73
+ }
74
+ getMulterGCodeFileFilter(storeAsFile = true) {
75
+ return this.getMulterFileFilter(".gcode", storeAsFile);
76
+ }
77
+ async multerLoadFileAsync(req, res, fileExtension, storeAsFile = true) {
78
+ return await new Promise((resolve, reject)=>this.getMulterFileFilter(fileExtension, storeAsFile)(req, res, (err)=>{
79
+ if (err) {
80
+ return reject(err);
81
+ }
82
+ resolve(req.files);
83
+ }));
84
+ }
85
+ getMulterFileFilter(fileExtension, storeAsFile = true) {
86
+ return (0, _multer.default)({
87
+ storage: storeAsFile ? _multer.default.diskStorage({
88
+ destination: (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultFileStorageFolder)
89
+ }) : _multer.default.memoryStorage(),
90
+ fileFilter: this.multerFileFilter(fileExtension)
91
+ }).any();
92
+ }
93
+ multerFileFilter(extension) {
94
+ return (req, file, callback)=>{
95
+ const ext = (0, _path.extname)(file.originalname);
96
+ if (extension?.length && ext !== extension) {
97
+ return callback(new Error(`Only files with extension ${extension} are allowed`));
98
+ }
99
+ return callback(null, true);
100
+ };
101
+ }
102
+ startTrackingSession(multerFile) {
103
+ return this.fileUploadTrackerCache.addUploadTracker(multerFile);
104
+ }
105
+ getSessions() {
106
+ return this.fileUploadTrackerCache.getUploads();
107
+ }
108
+ /**
109
+ *@param dir
110
+ * @returns {{file: *, mtime: Date}[]}
111
+ */ orderRecentFiles = (dir)=>{
112
+ return (0, _fs.readdirSync)(dir).filter((file)=>(0, _fs.lstatSync)((0, _path.join)(dir, file)).isFile()).map((file)=>({
113
+ file,
114
+ mtime: (0, _fs.lstatSync)((0, _path.join)(dir, file)).mtime
115
+ })).sort((a, b)=>b.mtime.getTime() - a.mtime.getTime());
116
+ };
117
+ collectionPath(collection) {
118
+ return (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultFileStorageFolder, collection);
119
+ }
120
+ }
121
+
122
+ //# sourceMappingURL=multer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/core/multer.service.ts"],"names":["MulterService","fileUploadTrackerCache","httpClient","constructor","getNewestFile","collection","dirPath","collectionPath","files","orderRecentFiles","latestFile","length","undefined","join","file","clearUploadsFolder","fileStoragePath","superRootPath","AppConstants","defaultFileStorageFolder","existsSync","readdirSync","withFileTypes","filter","item","isDirectory","map","name","unlink","err","fileExists","downloadFilename","downloadPath","downloadFile","downloadUrl","downloadFolder","mkdirSync","recursive","fileStream","createWriteStream","res","get","Promise","resolve","reject","write","data","on","getMulterGCodeFileFilter","storeAsFile","getMulterFileFilter","multerLoadFileAsync","req","fileExtension","multer","storage","diskStorage","destination","memoryStorage","fileFilter","multerFileFilter","any","extension","callback","ext","extname","originalname","Error","startTrackingSession","multerFile","addUploadTracker","getSessions","getUploads","dir","lstatSync","isFile","mtime","sort","a","b","getTime"],"mappings":"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"}