@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,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ constructHeaders: function() {
13
+ return constructHeaders;
14
+ },
15
+ processGotResponse: function() {
16
+ return processGotResponse;
17
+ },
18
+ processResponse: function() {
19
+ return processResponse;
20
+ },
21
+ validateLogin: function() {
22
+ return validateLogin;
23
+ }
24
+ });
25
+ const _octoprintserviceconstants = require("../constants/octoprint-service.constants");
26
+ const _runtimeexceptions = require("../../../exceptions/runtime.exceptions");
27
+ function validateLogin(login) {
28
+ if (!login.apiKey || !login.printerURL) {
29
+ throw new _runtimeexceptions.ValidationException("printer apiKey or printerURL undefined");
30
+ }
31
+ return {
32
+ apiKey: login.apiKey,
33
+ printerURL: login.printerURL
34
+ };
35
+ }
36
+ function constructHeaders(apiKey, contentType = _octoprintserviceconstants.jsonContentType) {
37
+ return {
38
+ [_octoprintserviceconstants.contentTypeHeaderKey]: contentType,
39
+ [_octoprintserviceconstants.apiKeyHeaderKey]: apiKey
40
+ };
41
+ }
42
+ function processResponse(response, options = {
43
+ unwrap: true
44
+ }) {
45
+ if (options.unwrap) {
46
+ return response?.data;
47
+ }
48
+ if (options.simple) {
49
+ return {
50
+ status: response.status,
51
+ data: response.data
52
+ };
53
+ }
54
+ return response;
55
+ }
56
+ async function processGotResponse(response, options = {
57
+ unwrap: true
58
+ }) {
59
+ if (options.unwrap) {
60
+ return JSON.parse(response.body);
61
+ }
62
+ if (options.simple) {
63
+ const data = JSON.parse(response.body);
64
+ return {
65
+ status: response.statusCode,
66
+ data
67
+ };
68
+ }
69
+ return response;
70
+ }
71
+
72
+ //# sourceMappingURL=api.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/services/octoprint/utils/api.utils.ts"],"names":["constructHeaders","processGotResponse","processResponse","validateLogin","login","apiKey","printerURL","ValidationException","contentType","jsonContentType","contentTypeHeaderKey","apiKeyHeaderKey","response","options","unwrap","data","simple","status","JSON","parse","body","statusCode"],"mappings":";;;;;;;;;;;IAmBgBA,gBAAgB;eAAhBA;;IA6BMC,kBAAkB;eAAlBA;;IAhBNC,eAAe;eAAfA;;IAxBAC,aAAa;eAAbA;;;2CAJT;mCAC6B;AAG7B,SAASA,cAAcC,KAAe;IAC3C,IAAI,CAACA,MAAMC,MAAM,IAAI,CAACD,MAAME,UAAU,EAAE;QACtC,MAAM,IAAIC,sCAAmB,CAAC;IAChC;IAEA,OAAO;QACLF,QAAQD,MAAMC,MAAM;QACpBC,YAAYF,MAAME,UAAU;IAC9B;AACF;AAEO,SAASN,iBAAiBK,MAAc,EAAEG,cAAcC,0CAAe;IAC5E,OAAO;QACL,CAACC,+CAAoB,CAAC,EAAEF;QACxB,CAACG,0CAAe,CAAC,EAAEN;IACrB;AACF;AAQO,SAASH,gBAAgBU,QAAQ,EAAEC,UAAU;IAAEC,QAAQ;AAAK,CAAC;IAClE,IAAID,QAAQC,MAAM,EAAE;QAClB,OAAOF,UAAUG;IACnB;IACA,IAAIF,QAAQG,MAAM,EAAE;QAClB,OAAO;YAAEC,QAAQL,SAASK,MAAM;YAAEF,MAAMH,SAASG,IAAI;QAAC;IACxD;IACA,OAAOH;AACT;AAQO,eAAeX,mBAAmBW,QAAQ,EAAEC,UAAU;IAAEC,QAAQ;AAAK,CAAC;IAC3E,IAAID,QAAQC,MAAM,EAAE;QAClB,OAAOI,KAAKC,KAAK,CAACP,SAASQ,IAAI;IACjC;IACA,IAAIP,QAAQG,MAAM,EAAE;QAClB,MAAMD,OAAOG,KAAKC,KAAK,CAACP,SAASQ,IAAI;QACrC,OAAO;YAAEH,QAAQL,SAASS,UAAU;YAAEN;QAAK;IAC7C;IACA,OAAOH;AACT"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ IdDto: function() {
13
+ return IdDto;
14
+ },
15
+ PrinterDto: function() {
16
+ return PrinterDto;
17
+ },
18
+ PositionDto: function() {
19
+ return PositionDto;
20
+ },
21
+ PrinterInFloorDto: function() {
22
+ return PrinterInFloorDto;
23
+ },
24
+ FloorDto: function() {
25
+ return FloorDto;
26
+ },
27
+ CreateFloorDto: function() {
28
+ return CreateFloorDto;
29
+ },
30
+ UpdateFloorDto: function() {
31
+ return UpdateFloorDto;
32
+ },
33
+ AddOrUpdatePrinterDto: function() {
34
+ return AddOrUpdatePrinterDto;
35
+ }
36
+ });
37
+ class IdDto {
38
+ id;
39
+ }
40
+ class PrinterDto extends IdDto {
41
+ name;
42
+ disabledReason;
43
+ dateAdded;
44
+ }
45
+ class PositionDto {
46
+ x;
47
+ y;
48
+ printerId;
49
+ floorId;
50
+ }
51
+ class PrinterInFloorDto extends IdDto {
52
+ x;
53
+ y;
54
+ printerId;
55
+ }
56
+ class FloorDto extends IdDto {
57
+ name;
58
+ level;
59
+ positions;
60
+ }
61
+ class CreateFloorDto {
62
+ name;
63
+ floor;
64
+ }
65
+ class UpdateFloorDto {
66
+ name;
67
+ floor;
68
+ }
69
+ class AddOrUpdatePrinterDto {
70
+ printerId;
71
+ }
72
+
73
+ //# sourceMappingURL=floor.service.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/floor.service.interface.ts"],"names":["IdDto","PrinterDto","PositionDto","PrinterInFloorDto","FloorDto","CreateFloorDto","UpdateFloorDto","AddOrUpdatePrinterDto","id","name","disabledReason","dateAdded","x","y","printerId","floorId","level","positions","floor"],"mappings":";;;;;;;;;;;IA2BaA,KAAK;eAALA;;IAIAC,UAAU;eAAVA;;IAMAC,WAAW;eAAXA;;IAQAC,iBAAiB;eAAjBA;;IAMAC,QAAQ;eAARA;;IAMAC,cAAc;eAAdA;;IAKAC,cAAc;eAAdA;;IAKAC,qBAAqB;eAArBA;;;AAxCN,MAAMP;IACXQ,GAAW;AACb;AAEO,MAAMP,mBAAmBD;IAC9BS,KAAa;IACbC,eAAuB;IACvBC,UAAkB;AACpB;AAEO,MAAMT;IACXU,EAAU;IACVC,EAAU;IACVC,UAAkB;IAClBC,QAAgB;AAClB;AAGO,MAAMZ,0BAA0BH;IACrCY,EAAU;IACVC,EAAU;IACVC,UAAkB;AACpB;AAEO,MAAMV,iBAAiBJ;IAC5BS,KAAa;IACbO,MAAc;IACdC,UAAyB;AAC3B;AAEO,MAAMZ;IACXI,KAAa;IACbS,MAAc;AAChB;AAEO,MAAMZ;IACXG,KAAc;IACdS,MAAe;AACjB;AAEO,MAAMX;IACXO,UAAkB;AACpB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=printer.service.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/printer.service.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrintCompletionService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrintCompletionService;
9
+ }
10
+ });
11
+ const _models = require("../models");
12
+ const _printcompletionservicevalidation = require("./validators/print-completion-service.validation");
13
+ const _validators = require("../handlers/validators");
14
+ const _arrayutil = require("../utils/array.util");
15
+ const _octoprintwebsocketconstants = require("./octoprint/constants/octoprint-websocket.constants");
16
+ class PrintCompletionService {
17
+ logger;
18
+ constructor({ loggerFactory }){
19
+ this.logger = loggerFactory(PrintCompletionService.name);
20
+ }
21
+ async create(input) {
22
+ const { printerId, fileName, completionLog, status, context } = await (0, _validators.validateInput)(input, _printcompletionservicevalidation.createPrintCompletionRules);
23
+ return _models.PrintCompletion.create({
24
+ printerId,
25
+ fileName,
26
+ completionLog,
27
+ status,
28
+ createdAt: Date.now(),
29
+ context
30
+ });
31
+ }
32
+ async list() {
33
+ return _models.PrintCompletion.find({});
34
+ }
35
+ async findPrintCompletion(correlationId) {
36
+ return _models.PrintCompletion.find({
37
+ "context.correlationId": correlationId
38
+ });
39
+ }
40
+ async updateContext(correlationId, context) {
41
+ const completionEntry = await _models.PrintCompletion.findOne({
42
+ "context.correlationId": correlationId,
43
+ status: _octoprintwebsocketconstants.EVENT_TYPES.PrintStarted
44
+ });
45
+ if (!completionEntry) {
46
+ this.logger.warn(`Print with correlationId ${correlationId} could not be updated with new context as it was not found`);
47
+ return;
48
+ }
49
+ completionEntry.context = context;
50
+ await completionEntry.save();
51
+ }
52
+ async loadPrintContexts() {
53
+ const contexts = await _models.PrintCompletion.aggregate([
54
+ {
55
+ $sort: {
56
+ printerId: 1,
57
+ createdAt: -1
58
+ }
59
+ },
60
+ {
61
+ $group: {
62
+ _id: "$printerId",
63
+ createdAt: {
64
+ $first: "$createdAt"
65
+ },
66
+ context: {
67
+ $first: "$context"
68
+ },
69
+ status: {
70
+ $first: "$status"
71
+ },
72
+ fileName: {
73
+ $first: "$fileName"
74
+ }
75
+ }
76
+ },
77
+ {
78
+ $match: {
79
+ status: {
80
+ $nin: [
81
+ _octoprintwebsocketconstants.EVENT_TYPES.PrintDone,
82
+ _octoprintwebsocketconstants.EVENT_TYPES.PrintFailed
83
+ ]
84
+ }
85
+ }
86
+ }
87
+ ]);
88
+ return Object.fromEntries(contexts.map((c)=>{
89
+ c.printerId = c._id;
90
+ delete c._id;
91
+ return [
92
+ c.printerId,
93
+ c
94
+ ];
95
+ }));
96
+ }
97
+ async listGroupByPrinterStatus() {
98
+ const printCompletionsAggr = await _models.PrintCompletion.aggregate([
99
+ {
100
+ $group: {
101
+ _id: "$printerId",
102
+ eventCount: {
103
+ $sum: 1
104
+ },
105
+ printEvents: {
106
+ $push: {
107
+ printerId: "$printerId",
108
+ context: "$context",
109
+ completionLog: "$completionLog",
110
+ fileName: "$fileName",
111
+ status: "$status",
112
+ createdAt: "$createdAt"
113
+ }
114
+ }
115
+ }
116
+ }
117
+ ]);
118
+ const durationDayMSec = 24 * 60 * 60 * 1000;
119
+ return printCompletionsAggr.map((pc)=>{
120
+ const jobs = (0, _arrayutil.groupArrayBy)(pc.printEvents, (e)=>e.context?.correlationId);
121
+ pc.printJobs = Object.entries(jobs).map(([id, events])=>{
122
+ const eventMap = events.map(({ status, createdAt, fileName, completionLog })=>({
123
+ status,
124
+ createdAt,
125
+ fileName,
126
+ completionLog
127
+ }));
128
+ return {
129
+ correlationId: id,
130
+ events: eventMap,
131
+ lastEvent: eventMap.reduce((e1, e2)=>e1.createdAt > e2.createdAt ? e1 : e2)
132
+ };
133
+ });
134
+ pc.correlationIds = pc.printJobs.map((j)=>j.correlationId);
135
+ pc.printCount = pc.correlationIds?.length;
136
+ const mappedEvents = pc.printEvents.map(({ status, createdAt, fileName, context, completionLog })=>({
137
+ status,
138
+ createdAt,
139
+ fileName,
140
+ context,
141
+ completionLog
142
+ }));
143
+ const failureEvents = mappedEvents.filter((e)=>e.status === _octoprintwebsocketconstants.EVENT_TYPES.PrintFailed);
144
+ pc.failureCount = failureEvents?.length;
145
+ pc.lastFailure = failureEvents?.length ? failureEvents.reduce((j1, j2)=>j1.createdAt > j2.createdAt ? j1 : j2) : null;
146
+ pc.failureEventsLastWeek = failureEvents.filter((e)=>e.createdAt > Date.now() - 7 * durationDayMSec)?.length;
147
+ pc.failureEventsLast48H = failureEvents.filter((e)=>e.createdAt > Date.now() - 2 * durationDayMSec)?.length;
148
+ pc.failureEventsLast24H = failureEvents.filter((e)=>e.createdAt > Date.now() - durationDayMSec)?.length;
149
+ const successEvents = mappedEvents.filter((e)=>e.status === _octoprintwebsocketconstants.EVENT_TYPES.PrintDone);
150
+ pc.successCount = successEvents?.length;
151
+ pc.lastSuccess = successEvents?.length ? successEvents?.reduce((j1, j2)=>j1.createdAt > j2.createdAt ? j1 : j2) : null;
152
+ pc.successEventsLastWeek = successEvents.filter((e)=>e.createdAt > Date.now() - 7 * durationDayMSec)?.length;
153
+ pc.successEventsLast48H = successEvents.filter((e)=>e.createdAt > Date.now() - 2 * durationDayMSec)?.length;
154
+ pc.successEventsLast24H = successEvents.filter((e)=>e.createdAt > Date.now() - durationDayMSec)?.length;
155
+ // Explodes in size quickly, remove the event timeline
156
+ delete pc.printEvents;
157
+ return pc;
158
+ });
159
+ }
160
+ }
161
+
162
+ //# sourceMappingURL=print-completion.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/print-completion.service.ts"],"names":["PrintCompletionService","logger","constructor","loggerFactory","name","create","input","printerId","fileName","completionLog","status","context","validateInput","createPrintCompletionRules","PrintCompletion","createdAt","Date","now","list","find","findPrintCompletion","correlationId","updateContext","completionEntry","findOne","EVENT_TYPES","PrintStarted","warn","save","loadPrintContexts","contexts","aggregate","$sort","$group","_id","$first","$match","$nin","PrintDone","PrintFailed","Object","fromEntries","map","c","listGroupByPrinterStatus","printCompletionsAggr","eventCount","$sum","printEvents","$push","durationDayMSec","pc","jobs","groupArrayBy","e","printJobs","entries","id","events","eventMap","lastEvent","reduce","e1","e2","correlationIds","j","printCount","length","mappedEvents","failureEvents","filter","failureCount","lastFailure","j1","j2","failureEventsLastWeek","failureEventsLast48H","failureEventsLast24H","successEvents","successCount","lastSuccess","successEventsLastWeek","successEventsLast48H","successEventsLast24H"],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrinterFilesService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrinterFilesService;
9
+ }
10
+ });
11
+ const _runtimeexceptions = require("../exceptions/runtime.exceptions");
12
+ const _findpredicateutils = require("../utils/find-predicate.utils");
13
+ class PrinterFilesService {
14
+ printerService;
15
+ logger;
16
+ constructor({ printerService, loggerFactory }){
17
+ this.printerService = printerService;
18
+ this.logger = loggerFactory(PrinterFilesService.name);
19
+ }
20
+ async getPrinterFilesStorage(printerId) {
21
+ const printer = await this.printerService.get(printerId);
22
+ return {
23
+ fileList: printer.fileList,
24
+ storage: printer.storage
25
+ };
26
+ }
27
+ async updateFiles(printerId, fileList) {
28
+ const printer = await this.printerService.get(printerId);
29
+ printer.fileList = fileList;
30
+ printer.markModified("fileList");
31
+ await printer.save();
32
+ return printer.fileList;
33
+ }
34
+ async appendOrReplaceFile(printerId, addedFile) {
35
+ const printer = await this.printerService.get(printerId);
36
+ // TODO replace with file storage
37
+ const foundFileIndex = printer.fileList.files.findIndex((f)=>f.path === addedFile.path);
38
+ if (foundFileIndex === -1) {
39
+ printer.fileList.files.push(addedFile);
40
+ } else {
41
+ printer.fileList.files[foundFileIndex] = addedFile;
42
+ }
43
+ printer.markModified("fileList");
44
+ await printer.save();
45
+ // Only now are we allowed to adjust the last uploaded printer file
46
+ let lastPrintedFile = {};
47
+ try {
48
+ lastPrintedFile = await this.setPrinterLastPrintedFile(printerId, addedFile.name);
49
+ } catch (e) {
50
+ this.logger.warn(`Parsing printer file did not succeed. Filename: ${addedFile}`);
51
+ }
52
+ return {
53
+ fileList: printer.fileList,
54
+ lastPrintedFile
55
+ };
56
+ }
57
+ async setPrinterLastPrintedFile(printerId, fileName) {
58
+ await this.printerService.get(printerId);
59
+ const lastPrintedFile = {
60
+ fileName,
61
+ editTimestamp: Date.now()
62
+ };
63
+ const printer = await this.printerService.updateLastPrintedFile(printerId, lastPrintedFile);
64
+ this.logger.log("Parsed and updated printer file", printer.lastPrintedFile);
65
+ return printer.lastPrintedFile;
66
+ }
67
+ async clearFiles(printerId) {
68
+ const printer = await this.printerService.get(printerId);
69
+ printer.fileList.files = [];
70
+ printer.markModified("fileList");
71
+ await printer.save();
72
+ }
73
+ /**
74
+ * Perform delete action on database
75
+ **/ async deleteFile(printerId, filePath, throwError = true) {
76
+ const printer = await this.printerService.get(printerId);
77
+ const fileIndex = (0, _findpredicateutils.findFileIndex)(printer.fileList, filePath);
78
+ if (fileIndex === -1) {
79
+ if (throwError) {
80
+ throw new _runtimeexceptions.NotFoundException(`A file removal was ordered but this file was not found in database for printer Id ${printerId}`, filePath);
81
+ } else {
82
+ this.logger.warn("File was not found in printer fileList");
83
+ }
84
+ }
85
+ printer.fileList.files.splice(fileIndex, 1);
86
+ printer.markModified("fileList");
87
+ await printer.save();
88
+ }
89
+ }
90
+
91
+ //# sourceMappingURL=printer-files.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/printer-files.service.ts"],"names":["PrinterFilesService","printerService","logger","constructor","loggerFactory","name","getPrinterFilesStorage","printerId","printer","get","fileList","storage","updateFiles","markModified","save","appendOrReplaceFile","addedFile","foundFileIndex","files","findIndex","f","path","push","lastPrintedFile","setPrinterLastPrintedFile","e","warn","fileName","editTimestamp","Date","now","updateLastPrintedFile","log","clearFiles","deleteFile","filePath","throwError","fileIndex","findFileIndex","NotFoundException","splice"],"mappings":";;;;+BAUaA;;;eAAAA;;;mCAVqB;oCACJ;AASvB,MAAMA;IACXC,eAA+B;IACvBC,OAAsB;IAE9BC,YAAY,EAAEF,cAAc,EAAEG,aAAa,EAAqE,CAAE;QAChH,IAAI,CAACH,cAAc,GAAGA;QACtB,IAAI,CAACC,MAAM,GAAGE,cAAcJ,oBAAoBK,IAAI;IACtD;IAEA,MAAMC,uBAAuBC,SAAsB,EAAE;QACnD,MAAMC,UAAU,MAAM,IAAI,CAACP,cAAc,CAACQ,GAAG,CAACF;QAE9C,OAAO;YACLG,UAAUF,QAAQE,QAAQ;YAC1BC,SAASH,QAAQG,OAAO;QAC1B;IACF;IAEA,MAAMC,YAAYL,SAAsB,EAAEG,QAAQ,EAAE;QAClD,MAAMF,UAAU,MAAM,IAAI,CAACP,cAAc,CAACQ,GAAG,CAACF;QAE9CC,QAAQE,QAAQ,GAAGA;QAEnBF,QAAQK,YAAY,CAAC;QACrB,MAAML,QAAQM,IAAI;QAElB,OAAON,QAAQE,QAAQ;IACzB;IAEA,MAAMK,oBAAoBR,SAAsB,EAAES,SAAS,EAAE;QAC3D,MAAMR,UAAU,MAAM,IAAI,CAACP,cAAc,CAACQ,GAAG,CAACF;QAE9C,iCAAiC;QACjC,MAAMU,iBAAiBT,QAAQE,QAAQ,CAACQ,KAAK,CAACC,SAAS,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKL,UAAUK,IAAI;QACxF,IAAIJ,mBAAmB,CAAC,GAAG;YACzBT,QAAQE,QAAQ,CAACQ,KAAK,CAACI,IAAI,CAACN;QAC9B,OAAO;YACLR,QAAQE,QAAQ,CAACQ,KAAK,CAACD,eAAe,GAAGD;QAC3C;QAEAR,QAAQK,YAAY,CAAC;QACrB,MAAML,QAAQM,IAAI;QAElB,mEAAmE;QACnE,IAAIS,kBAAkB,CAAC;QACvB,IAAI;YACFA,kBAAkB,MAAM,IAAI,CAACC,yBAAyB,CAACjB,WAAWS,UAAUX,IAAI;QAClF,EAAE,OAAOoB,GAAG;YACV,IAAI,CAACvB,MAAM,CAACwB,IAAI,CAAC,CAAC,gDAAgD,EAAEV,UAAU,CAAC;QACjF;QAEA,OAAO;YAAEN,UAAUF,QAAQE,QAAQ;YAAEa;QAAgB;IACvD;IAEA,MAAMC,0BAA0BjB,SAAsB,EAAEoB,QAAQ,EAAE;QAChE,MAAM,IAAI,CAAC1B,cAAc,CAACQ,GAAG,CAACF;QAC9B,MAAMgB,kBAAkB;YACtBI;YACAC,eAAeC,KAAKC,GAAG;QACzB;QACA,MAAMtB,UAAU,MAAM,IAAI,CAACP,cAAc,CAAC8B,qBAAqB,CAACxB,WAAWgB;QAC3E,IAAI,CAACrB,MAAM,CAAC8B,GAAG,CAAC,mCAAmCxB,QAAQe,eAAe;QAC1E,OAAOf,QAAQe,eAAe;IAChC;IAEA,MAAMU,WAAW1B,SAAsB,EAAE;QACvC,MAAMC,UAAU,MAAM,IAAI,CAACP,cAAc,CAACQ,GAAG,CAACF;QAC9CC,QAAQE,QAAQ,CAACQ,KAAK,GAAG,EAAE;QAC3BV,QAAQK,YAAY,CAAC;QACrB,MAAML,QAAQM,IAAI;IACpB;IAEA;;IAEE,GACF,MAAMoB,WAAW3B,SAAsB,EAAE4B,QAAgB,EAAEC,aAAa,IAAI,EAAE;QAC5E,MAAM5B,UAAU,MAAM,IAAI,CAACP,cAAc,CAACQ,GAAG,CAACF;QAE9C,MAAM8B,YAAYC,IAAAA,iCAAa,EAAC9B,QAAQE,QAAQ,EAAEyB;QAElD,IAAIE,cAAc,CAAC,GAAG;YACpB,IAAID,YAAY;gBACd,MAAM,IAAIG,oCAAiB,CACzB,CAAC,kFAAkF,EAAEhC,UAAU,CAAC,EAChG4B;YAEJ,OAAO;gBACL,IAAI,CAACjC,MAAM,CAACwB,IAAI,CAAC;YACnB;QACF;QAEAlB,QAAQE,QAAQ,CAACQ,KAAK,CAACsB,MAAM,CAACH,WAAW;QACzC7B,QAAQK,YAAY,CAAC;QACrB,MAAML,QAAQM,IAAI;IACpB;AACF"}
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrinterService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrinterService;
9
+ }
10
+ });
11
+ const _models = require("../models");
12
+ const _runtimeexceptions = require("../exceptions/runtime.exceptions");
13
+ const _validators = require("../handlers/validators");
14
+ const _printerservicevalidation = require("./validators/printer-service.validation");
15
+ const _serviceconstants = require("../constants/service.constants");
16
+ const _eventconstants = require("../constants/event.constants");
17
+ const _urlutils = require("../utils/url.utils");
18
+ class PrinterService {
19
+ eventEmitter2;
20
+ logger;
21
+ constructor({ eventEmitter2, loggerFactory }){
22
+ this.eventEmitter2 = eventEmitter2;
23
+ this.logger = loggerFactory(PrinterService.name);
24
+ }
25
+ async list() {
26
+ return _models.Printer.find({}, null, {
27
+ sort: {
28
+ dateAdded: 1
29
+ }
30
+ });
31
+ }
32
+ async get(printerId) {
33
+ const filter = {
34
+ _id: printerId
35
+ };
36
+ const printer = await _models.Printer.findOne(filter);
37
+ if (!printer) {
38
+ throw new _runtimeexceptions.NotFoundException(`The printer ID '${printerId}' is not an existing printer.`);
39
+ }
40
+ return printer;
41
+ }
42
+ /**
43
+ * Stores a new printer into the database.
44
+ * @param {Object} newPrinter object to create.
45
+ * @param {boolean} emitEvent
46
+ * @throws {Error} If the printer is not correctly provided.
47
+ */ async create(newPrinter, emitEvent = true) {
48
+ if (!newPrinter) throw new Error("Missing printer");
49
+ const mergedPrinter = await this.validateAndDefault(newPrinter);
50
+ mergedPrinter.dateAdded = Date.now();
51
+ const printer = await _models.Printer.create(mergedPrinter);
52
+ if (emitEvent) {
53
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerCreated, {
54
+ printer
55
+ });
56
+ }
57
+ return printer;
58
+ }
59
+ /**
60
+ * Explicit patching of printer document
61
+ * @param printerId
62
+ * @param updateData
63
+ * @returns {Promise<Query<Document<any, any, unknown> | null, Document<any, any, unknown>, {}, unknown>>}
64
+ */ async update(printerId, updateData) {
65
+ const printer = await this.get(printerId);
66
+ updateData.printerURL = (0, _urlutils.normalizeURLWithProtocol)(updateData.printerURL);
67
+ const { printerURL, apiKey, enabled, settingsAppearance } = await (0, _validators.validateInput)(updateData, _printerservicevalidation.createMongoPrinterRules);
68
+ printer.printerURL = printerURL;
69
+ printer.apiKey = apiKey;
70
+ if (enabled !== undefined) {
71
+ printer.enabled = enabled;
72
+ }
73
+ printer.settingsAppearance.name = settingsAppearance.name;
74
+ await printer.save();
75
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
76
+ printer
77
+ });
78
+ return printer;
79
+ }
80
+ async deleteMany(printerIds, emitEvent = true) {
81
+ await _models.Printer.deleteMany({
82
+ _id: {
83
+ $in: printerIds
84
+ }
85
+ });
86
+ if (emitEvent) {
87
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printersDeleted, {
88
+ printerIds
89
+ });
90
+ }
91
+ }
92
+ async delete(printerId, emitEvent = true) {
93
+ const filter = {
94
+ _id: printerId
95
+ };
96
+ await _models.Printer.findOneAndDelete(filter);
97
+ if (emitEvent) {
98
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printersDeleted, {
99
+ printerIds: [
100
+ printerId
101
+ ]
102
+ });
103
+ }
104
+ }
105
+ async batchImport(printers) {
106
+ if (!printers?.length) return [];
107
+ this.logger.log(`Validating ${printers.length} printer objects`);
108
+ for (let printer of printers){
109
+ await this.validateAndDefault(printer);
110
+ }
111
+ this.logger.log(`Validation passed. Creating ${printers.length} printers`);
112
+ // We've passed validation completely - creation will likely succeed
113
+ const newPrinters = [];
114
+ for (let printer of printers){
115
+ const createdPrinter = await this.create(printer, false);
116
+ newPrinters.push(createdPrinter);
117
+ }
118
+ this.logger.log(`Successfully created ${printers.length} printers`);
119
+ this.eventEmitter2.emit(_eventconstants.printerEvents.batchPrinterCreated, {
120
+ printers: newPrinters
121
+ });
122
+ return newPrinters;
123
+ }
124
+ async updateLastPrintedFile(printerId, lastPrintedFile) {
125
+ const update = {
126
+ lastPrintedFile
127
+ };
128
+ await this.get(printerId);
129
+ const printer = await _models.Printer.findByIdAndUpdate(printerId, update, {
130
+ new: true,
131
+ useFindAndModify: false
132
+ });
133
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
134
+ printer
135
+ });
136
+ return printer;
137
+ }
138
+ async updateFlowRate(printerId, flowRate) {
139
+ const update = {
140
+ flowRate
141
+ };
142
+ await this.get(printerId);
143
+ const printer = await _models.Printer.findByIdAndUpdate(printerId, update, {
144
+ new: true,
145
+ useFindAndModify: false
146
+ });
147
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
148
+ printer
149
+ });
150
+ return printer;
151
+ }
152
+ async updateFeedRate(printerId, feedRate) {
153
+ const update = {
154
+ feedRate
155
+ };
156
+ await this.get(printerId);
157
+ const printer = await _models.Printer.findByIdAndUpdate(printerId, update, {
158
+ new: true,
159
+ useFindAndModify: false
160
+ });
161
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
162
+ printer
163
+ });
164
+ return printer;
165
+ }
166
+ async updateConnectionSettings(printerId, { printerURL, apiKey }) {
167
+ const update = {
168
+ printerURL: (0, _urlutils.normalizeURLWithProtocol)(printerURL),
169
+ apiKey
170
+ };
171
+ await (0, _validators.validateInput)(update, _printerservicevalidation.createMongoPrinterRules);
172
+ await this.get(printerId);
173
+ const printer = await _models.Printer.findByIdAndUpdate(printerId, update, {
174
+ new: true,
175
+ useFindAndModify: false
176
+ });
177
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
178
+ printer
179
+ });
180
+ return printer;
181
+ }
182
+ async updateEnabled(printerId, enabled) {
183
+ const update = enabled ? {
184
+ enabled,
185
+ disabledReason: null
186
+ } : {
187
+ enabled
188
+ };
189
+ await (0, _validators.validateInput)(update, _printerservicevalidation.updatePrinterEnabledRule);
190
+ await this.get(printerId);
191
+ const printer = await _models.Printer.findByIdAndUpdate(printerId, update, {
192
+ new: true,
193
+ useFindAndModify: false
194
+ });
195
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
196
+ printer
197
+ });
198
+ return printer;
199
+ }
200
+ async updateDisabledReason(printerId, disabledReason) {
201
+ const enabled = !disabledReason?.length;
202
+ const update = {
203
+ disabledReason,
204
+ enabled
205
+ };
206
+ await (0, _validators.validateInput)(update, _printerservicevalidation.updatePrinterDisabledReasonRule);
207
+ await this.get(printerId);
208
+ const printer = await _models.Printer.findByIdAndUpdate(printerId, update, {
209
+ new: true,
210
+ useFindAndModify: false
211
+ });
212
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
213
+ printer
214
+ });
215
+ return printer;
216
+ }
217
+ async validateAndDefault(printer) {
218
+ const mergedPrinter = {
219
+ ...(0, _serviceconstants.getDefaultPrinterEntry)(),
220
+ enabled: true,
221
+ ...printer
222
+ };
223
+ if (mergedPrinter.printerURL?.length) {
224
+ mergedPrinter.printerURL = (0, _urlutils.normalizeURLWithProtocol)(mergedPrinter.printerURL);
225
+ }
226
+ return await (0, _validators.validateInput)(mergedPrinter, _printerservicevalidation.createMongoPrinterRules);
227
+ }
228
+ }
229
+
230
+ //# sourceMappingURL=printer.service.js.map