@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,309 @@
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
+ API_STATE: function() {
13
+ return API_STATE;
14
+ },
15
+ Message: function() {
16
+ return Message;
17
+ },
18
+ OctoPrintSockIoAdapter: function() {
19
+ return OctoPrintSockIoAdapter;
20
+ },
21
+ SOCKET_STATE: function() {
22
+ return SOCKET_STATE;
23
+ },
24
+ octoPrintEvent: function() {
25
+ return octoPrintEvent;
26
+ }
27
+ });
28
+ const _websocketadapter = require("../../utils/websocket.adapter");
29
+ const _httpstatuscodesconstants = require("../../constants/http-status-codes.constants");
30
+ const _serverconstants = require("../../server.constants");
31
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
32
+ const _urlutils = require("../../utils/url.utils");
33
+ const _normalizeurl = require("../../utils/normalize-url");
34
+ const Message = {
35
+ connected: "connected",
36
+ reauthRequired: "reauthRequired",
37
+ current: "current",
38
+ history: "history",
39
+ event: "event",
40
+ plugin: "plugin",
41
+ timelapse: "timelapse",
42
+ slicingProgress: "slicingProgress",
43
+ // Custom events
44
+ WS_OPENED: "WS_OPENED",
45
+ WS_CLOSED: "WS_CLOSED",
46
+ WS_ERROR: "WS_ERROR",
47
+ API_STATE_UPDATED: "API_STATE_UPDATED",
48
+ WS_STATE_UPDATED: "WS_STATE_UPDATED"
49
+ };
50
+ const SOCKET_STATE = {
51
+ unopened: "unopened",
52
+ opening: "opening",
53
+ authenticating: "authenticating",
54
+ opened: "opened",
55
+ authenticated: "authenticated",
56
+ aborted: "aborted",
57
+ error: "error",
58
+ closed: "closed"
59
+ };
60
+ const API_STATE = {
61
+ unset: "unset",
62
+ noResponse: "noResponse",
63
+ globalKey: "globalKey",
64
+ authFail: "authFail",
65
+ responding: "responding"
66
+ };
67
+ const octoPrintEvent = (event)=>`octoprint.${event}`;
68
+ class OctoPrintSockIoAdapter extends _websocketadapter.WebsocketAdapter {
69
+ printerId;
70
+ loginDto;
71
+ socketURL;
72
+ sessionDto;
73
+ username;
74
+ octoPrintApiService;
75
+ eventEmitter;
76
+ logger;
77
+ configService;
78
+ stateUpdated = false;
79
+ stateUpdateTimestamp = null;
80
+ socketState = SOCKET_STATE.unopened;
81
+ apiStateUpdated = false;
82
+ apiStateUpdateTimestamp = null;
83
+ apiState = API_STATE.unset;
84
+ lastMessageReceivedTimestamp = null;
85
+ reauthRequired = false;
86
+ reauthRequiredTimestamp = null;
87
+ constructor({ loggerFactory, octoPrintApiService, eventEmitter2, configService }){
88
+ super({
89
+ loggerFactory
90
+ });
91
+ this.logger = loggerFactory(OctoPrintSockIoAdapter.name);
92
+ this.octoPrintApiService = octoPrintApiService;
93
+ this.eventEmitter = eventEmitter2;
94
+ this.configService = configService;
95
+ }
96
+ get _debugMode() {
97
+ return this.configService.get(_serverconstants.AppConstants.debugSocketStatesKey, _serverconstants.AppConstants.defaultDebugSocketStates) === "true";
98
+ }
99
+ needsReopen() {
100
+ const isApiOnline = this.apiState === API_STATE.responding;
101
+ return isApiOnline && (this.socketState === SOCKET_STATE.closed || this.socketState === SOCKET_STATE.error);
102
+ }
103
+ needsSetup() {
104
+ return this.socketState === SOCKET_STATE.unopened;
105
+ }
106
+ needsReauth() {
107
+ return this.reauthRequired;
108
+ }
109
+ isClosedOrAborted() {
110
+ return this.socketState === SOCKET_STATE.closed || this.socketState === SOCKET_STATE.aborted;
111
+ }
112
+ /**
113
+ * @param {CredentialsDto} socketLogin
114
+ */ registerCredentials(socketLogin) {
115
+ const { printerId, loginDto, protocol } = socketLogin;
116
+ this.printerId = printerId;
117
+ this.loginDto = loginDto;
118
+ const httpUrl = (0, _normalizeurl.normalizeUrl)(this.loginDto.printerURL);
119
+ const wsUrl = (0, _urlutils.httpToWsUrl)(httpUrl, protocol);
120
+ wsUrl.pathname = "/sockjs/websocket";
121
+ this.socketURL = wsUrl;
122
+ }
123
+ open(_) {
124
+ if (this.socket) {
125
+ throw new Error(`Socket already exists (printerId: ${this.printerId}, ignoring open request`);
126
+ }
127
+ super.open(this.socketURL);
128
+ }
129
+ close() {
130
+ super.close();
131
+ }
132
+ async sendThrottle(throttle = _serverconstants.AppConstants.defaultSocketThrottleRate) {
133
+ return await this.sendMessage(JSON.stringify({
134
+ throttle
135
+ }));
136
+ }
137
+ async reauthSession() {
138
+ await this.setupSocketSession();
139
+ await this.sendAuth();
140
+ this.resetReauthRequired();
141
+ }
142
+ /**
143
+ * Retrieve session token by authenticating with OctoPrint API
144
+ * @returns {Promise<void>}
145
+ */ async setupSocketSession() {
146
+ this.resetSocketState();
147
+ this.sessionDto = await this.octoPrintApiService.login(this.loginDto).then((r)=>{
148
+ // Check response for red flags
149
+ if (r.name === "_api") {
150
+ this.setApiState(API_STATE.globalKey);
151
+ this.setSocketState(SOCKET_STATE.aborted);
152
+ throw new _runtimeexceptions.AuthenticationError("Global API Key detected, aborting socket connection");
153
+ } else if (r.needs?.group[0] === "guests") {
154
+ this.logger.warn("Detected group guests in OctoPrint login response, marking as unauthorized");
155
+ // This doesn't occur often (instead a 400 with CSRF failed is returned)
156
+ this.setApiState(API_STATE.authFail);
157
+ this.setSocketState(SOCKET_STATE.aborted);
158
+ throw new _runtimeexceptions.AuthenticationError("Guest group detected, authentication failed, aborting socket connection");
159
+ }
160
+ this.setApiState(API_STATE.responding);
161
+ this.setSocketState(SOCKET_STATE.opening);
162
+ return r;
163
+ }).catch(/**
164
+ * @param {ExternalHttpError|AxiosError} e
165
+ */ (e)=>{
166
+ this.setSocketState(SOCKET_STATE.aborted);
167
+ if (e instanceof _runtimeexceptions.AuthenticationError) {
168
+ this.logger.warn(`Printer authorization error (id: ${this.printerId}), apiState: ${this.apiState}`);
169
+ throw e;
170
+ } else {
171
+ if (e?.response?.status === 403) {
172
+ this.setApiState(API_STATE.authFail);
173
+ this.setSocketState(SOCKET_STATE.aborted);
174
+ throw new _runtimeexceptions.AuthenticationError(e);
175
+ }
176
+ this.logger.error(`Printer (${this.printerId}) network or transport error, marking it as unreachable; ${e}`);
177
+ this.setApiState(API_STATE.noResponse);
178
+ }
179
+ throw e;
180
+ });
181
+ this.username = await this.octoPrintApiService.getAdminUserOrDefault(this.loginDto).catch(/**
182
+ * @param {ExternalHttpError|AxiosError} e
183
+ */ (e)=>{
184
+ const status = e.response?.status;
185
+ if (status === _httpstatuscodesconstants.HttpStatusCode.FORBIDDEN) {
186
+ this.setApiState(API_STATE.authFail);
187
+ this.setSocketState(SOCKET_STATE.aborted);
188
+ } else {
189
+ this.setApiState(API_STATE.authFail);
190
+ this.setSocketState(SOCKET_STATE.aborted);
191
+ }
192
+ if ([
193
+ _httpstatuscodesconstants.HttpStatusCode.BAD_GATEWAY,
194
+ _httpstatuscodesconstants.HttpStatusCode.NOT_IMPLEMENTED,
195
+ _httpstatuscodesconstants.HttpStatusCode.SERVICE_UNAVAILABLE,
196
+ _httpstatuscodesconstants.HttpStatusCode.GATEWAY_TIMEOUT
197
+ ].includes(status)) {
198
+ this.logger.error(`Detected a 501-504 error (${status}) probably OctoPrint has crashed or is restarting`);
199
+ }
200
+ throw e;
201
+ });
202
+ }
203
+ /**
204
+ * @private
205
+ * @returns {Promise<void>}
206
+ */ async afterOpened(event) {
207
+ this.setSocketState(SOCKET_STATE.opened);
208
+ await this.sendAuth();
209
+ await this.sendThrottle(_serverconstants.AppConstants.defaultSocketThrottleRate);
210
+ }
211
+ /**
212
+ * @private
213
+ * @returns {Promise<void>}
214
+ */ async onMessage(message) {
215
+ this.lastMessageReceivedTimestamp = Date.now();
216
+ if (this.socketState !== SOCKET_STATE.authenticated) {
217
+ this.setSocketState(SOCKET_STATE.authenticated);
218
+ }
219
+ const data = JSON.parse(message);
220
+ /**
221
+ * @type {Message}
222
+ */ const eventName = Object.keys(data)[0];
223
+ const payload = data[eventName];
224
+ if (eventName === Message.reauthRequired) {
225
+ this.setReauthRequired();
226
+ }
227
+ // Emit the message to the event bus
228
+ await this.emitEvent(eventName, payload);
229
+ }
230
+ /**
231
+ * @private
232
+ * @returns {Promise<void>}
233
+ */ async sendAuth() {
234
+ this.setSocketState(SOCKET_STATE.authenticating);
235
+ await this.sendMessage(JSON.stringify({
236
+ auth: `${this.username}:${this.sessionDto.session}`
237
+ }));
238
+ // TODO what if bad auth? => pure silence right?
239
+ }
240
+ async afterClosed(event) {
241
+ this.setSocketState(SOCKET_STATE.closed);
242
+ delete this.socket;
243
+ await this.emitEvent(Message.WS_CLOSED);
244
+ }
245
+ async onError(error) {
246
+ this.setSocketState(SOCKET_STATE.error);
247
+ await this.emitEvent(Message.WS_ERROR, error);
248
+ }
249
+ setReauthRequired() {
250
+ this.reauthRequired = true;
251
+ this.reauthRequiredTimestamp = Date.now();
252
+ }
253
+ resetReauthRequired() {
254
+ this.reauthRequired = false;
255
+ this.reauthRequiredTimestamp = null;
256
+ }
257
+ resetSocketState() {
258
+ this.setSocketState(SOCKET_STATE.unopened);
259
+ this.setApiState(API_STATE.unset);
260
+ }
261
+ /**
262
+ * @private
263
+ * @param {API_STATE} state
264
+ */ setApiState(state) {
265
+ this.apiState = state;
266
+ this.apiStateUpdated = true;
267
+ this.apiStateUpdateTimestamp = Date.now();
268
+ if (this._debugMode) {
269
+ this.logger.log(`${this.printerId} API state updated to: ` + state);
270
+ }
271
+ this.emitEventSync(Message.API_STATE_UPDATED, state);
272
+ }
273
+ /**
274
+ * @private
275
+ * @param {SOCKET_STATE} state
276
+ */ setSocketState(state) {
277
+ this.socketState = state;
278
+ this.stateUpdated = true;
279
+ this.stateUpdateTimestamp = Date.now();
280
+ if (this._debugMode) {
281
+ this.logger.log(`${this.printerId} Socket state updated to: ` + state);
282
+ }
283
+ this.emitEventSync(Message.WS_STATE_UPDATED, state);
284
+ }
285
+ /**
286
+ * @private
287
+ * @param {Message} event
288
+ * @param {?Object} payload
289
+ */ async emitEvent(event, payload) {
290
+ /**
291
+ * @type {OctoPrintEventDto}
292
+ */ const data = {
293
+ event,
294
+ payload,
295
+ printerId: this.printerId
296
+ };
297
+ await this.eventEmitter.emitAsync(octoPrintEvent(event), data);
298
+ }
299
+ emitEventSync(event, payload) {
300
+ const data = {
301
+ event,
302
+ payload,
303
+ printerId: this.printerId
304
+ };
305
+ this.eventEmitter.emit(octoPrintEvent(event), data);
306
+ }
307
+ }
308
+
309
+ //# sourceMappingURL=octoprint-sockio.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/octoprint/octoprint-sockio.adapter.ts"],"names":["API_STATE","Message","OctoPrintSockIoAdapter","SOCKET_STATE","octoPrintEvent","connected","reauthRequired","current","history","event","plugin","timelapse","slicingProgress","WS_OPENED","WS_CLOSED","WS_ERROR","API_STATE_UPDATED","WS_STATE_UPDATED","unopened","opening","authenticating","opened","authenticated","aborted","error","closed","unset","noResponse","globalKey","authFail","responding","WebsocketAdapter","printerId","loginDto","socketURL","sessionDto","username","octoPrintApiService","eventEmitter","logger","configService","stateUpdated","stateUpdateTimestamp","socketState","apiStateUpdated","apiStateUpdateTimestamp","apiState","lastMessageReceivedTimestamp","reauthRequiredTimestamp","constructor","loggerFactory","eventEmitter2","name","_debugMode","get","AppConstants","debugSocketStatesKey","defaultDebugSocketStates","needsReopen","isApiOnline","needsSetup","needsReauth","isClosedOrAborted","registerCredentials","socketLogin","protocol","httpUrl","normalizeUrl","printerURL","wsUrl","httpToWsUrl","pathname","open","_","socket","Error","close","sendThrottle","throttle","defaultSocketThrottleRate","sendMessage","JSON","stringify","reauthSession","setupSocketSession","sendAuth","resetReauthRequired","resetSocketState","login","then","r","setApiState","setSocketState","AuthenticationError","needs","group","warn","catch","e","response","status","getAdminUserOrDefault","HttpStatusCode","FORBIDDEN","BAD_GATEWAY","NOT_IMPLEMENTED","SERVICE_UNAVAILABLE","GATEWAY_TIMEOUT","includes","afterOpened","onMessage","message","Date","now","data","parse","eventName","Object","keys","payload","setReauthRequired","emitEvent","auth","session","afterClosed","onError","state","log","emitEventSync","emitAsync","emit"],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PluginBaseService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PluginBaseService;
9
+ }
10
+ });
11
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
12
+ const _octoprintserviceconstants = require("./constants/octoprint-service.constants");
13
+ class PluginBaseService {
14
+ // https://github.com/OctoPrint/OctoPrint/blob/76e87ba81329e6ce761c9307d3e80c291000871e/src/octoprint/plugins/pluginmanager/__init__.py#L609
15
+ octoPrintApiService;
16
+ pluginRepositoryCache;
17
+ _pluginName;
18
+ _pluginUrl;
19
+ logger;
20
+ constructor({ octoPrintApiService, pluginRepositoryCache, loggerFactory }, { pluginName, pluginUrl }){
21
+ this.octoPrintApiService = octoPrintApiService;
22
+ this.pluginRepositoryCache = pluginRepositoryCache;
23
+ this._pluginName = pluginName;
24
+ this.logger = loggerFactory(`Plugin-${pluginName}`);
25
+ const pluginReference = pluginRepositoryCache.getPlugin(pluginName);
26
+ this._pluginUrl = pluginUrl || pluginReference.archive;
27
+ if (!pluginName || !pluginUrl) {
28
+ throw new _runtimeexceptions.ValidationException("OctoPrint Plugin not configured correctly");
29
+ }
30
+ }
31
+ get pluginName() {
32
+ return this._pluginName;
33
+ }
34
+ async isPluginUpToDate(printerLogin) {
35
+ const response = await this.#queryInstalledPlugin(printerLogin);
36
+ const result = this.pluginRepositoryCache.getPlugin(this.pluginName);
37
+ return result?.github?.latest_release.name === response.version;
38
+ }
39
+ async #queryInstalledPlugin(printerLogin) {
40
+ const response = await this.octoPrintApiService.getPluginManagerPlugin(printerLogin, this.pluginName);
41
+ if (!response) {
42
+ throw new _runtimeexceptions.InternalServerException("Plugin query response was empty");
43
+ }
44
+ return response.plugin;
45
+ }
46
+ async isPluginInstalled(printerLogin) {
47
+ const foundPlugin = await this.#findPluginFromListQuery(printerLogin);
48
+ return !!foundPlugin;
49
+ }
50
+ async #findPluginFromListQuery(printerLogin) {
51
+ const response = await this.octoPrintApiService.getPluginManagerPlugins(printerLogin);
52
+ if (!response?.plugins?.length) {
53
+ throw new _runtimeexceptions.InternalServerException("Plugin query response was empty");
54
+ }
55
+ return this.findPluginInList(response.plugins);
56
+ }
57
+ findPluginInList(pluginList) {
58
+ return pluginList.find((p)=>p.key.toLowerCase() === this.pluginName.toLowerCase());
59
+ }
60
+ async updatePlugin(login) {
61
+ return await this.octoPrintApiService.postSoftwareUpdate(login, [
62
+ this.pluginName
63
+ ], this._pluginUrl);
64
+ }
65
+ async installPlugin(login, restartAfter = false) {
66
+ const command = _octoprintserviceconstants.pluginManagerCommands.install.name;
67
+ const plugin = this.pluginRepositoryCache.getPlugin(this.pluginName);
68
+ await this.octoPrintApiService.postApiPluginManagerCommand(login, command, plugin.archive);
69
+ await this.#conditionalRestartCommand(login, restartAfter);
70
+ }
71
+ async uninstallPlugin(login, restartAfter = false) {
72
+ const command = _octoprintserviceconstants.pluginManagerCommands.uninstall.name;
73
+ await this.octoPrintApiService.postApiPluginManagerCommand(login, command, this.pluginName);
74
+ await this.#conditionalRestartCommand(login, restartAfter);
75
+ }
76
+ async enablePlugin(login, restartAfter = false) {
77
+ const command = _octoprintserviceconstants.pluginManagerCommands.enable.name;
78
+ await this.octoPrintApiService.postApiPluginManagerCommand(login, command, this.pluginName);
79
+ await this.#conditionalRestartCommand(login, restartAfter);
80
+ }
81
+ async disablePlugin(login, restartAfter = false) {
82
+ const command = _octoprintserviceconstants.pluginManagerCommands.disable.name;
83
+ await this.octoPrintApiService.postApiPluginManagerCommand(login, command, this.pluginName);
84
+ await this.#conditionalRestartCommand(login, restartAfter);
85
+ }
86
+ async cleanupPlugin(login, restartAfter = false) {
87
+ const command = _octoprintserviceconstants.pluginManagerCommands.cleanup.name;
88
+ await this.octoPrintApiService.postApiPluginManagerCommand(login, command, this.pluginName);
89
+ await this.#conditionalRestartCommand(login, restartAfter);
90
+ }
91
+ async cleanupAllPlugins(login, restartAfter = false) {
92
+ const command = _octoprintserviceconstants.pluginManagerCommands.cleanup_all.name;
93
+ await this.octoPrintApiService.postApiPluginManagerCommand(login, command);
94
+ await this.#conditionalRestartCommand(login, restartAfter);
95
+ }
96
+ async #conditionalRestartCommand(printerLogin, restartAfter = false) {
97
+ if (!restartAfter) return;
98
+ await this.octoPrintApiService.postSystemRestartCommand(printerLogin);
99
+ }
100
+ }
101
+
102
+ //# sourceMappingURL=plugin-base.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/octoprint/plugin-base.service.ts"],"names":["PluginBaseService","octoPrintApiService","pluginRepositoryCache","_pluginName","_pluginUrl","logger","constructor","loggerFactory","pluginName","pluginUrl","pluginReference","getPlugin","archive","ValidationException","isPluginUpToDate","printerLogin","response","queryInstalledPlugin","result","github","latest_release","name","version","getPluginManagerPlugin","InternalServerException","plugin","isPluginInstalled","foundPlugin","findPluginFromListQuery","getPluginManagerPlugins","plugins","length","findPluginInList","pluginList","find","p","key","toLowerCase","updatePlugin","login","postSoftwareUpdate","installPlugin","restartAfter","command","pluginManagerCommands","install","postApiPluginManagerCommand","conditionalRestartCommand","uninstallPlugin","uninstall","enablePlugin","enable","disablePlugin","disable","cleanupPlugin","cleanup","cleanupAllPlugins","cleanup_all","postSystemRestartCommand"],"mappings":";;;;+BAQaA;;;eAAAA;;;mCARgD;2CACvB;AAO/B,MAAMA;IACX,4IAA4I;IAC5IC,oBAAyC;IACzCC,sBAA6C;IACrCC,YAAoB;IACpBC,WAAmB;IAEjBC,OAAsB;IAEhCC,YACE,EACEL,mBAAmB,EACnBC,qBAAqB,EACrBK,aAAa,EAKd,EACD,EAAEC,UAAU,EAAEC,SAAS,EAA8C,CACrE;QACA,IAAI,CAACR,mBAAmB,GAAGA;QAC3B,IAAI,CAACC,qBAAqB,GAAGA;QAC7B,IAAI,CAACC,WAAW,GAAGK;QACnB,IAAI,CAACH,MAAM,GAAGE,cAAc,CAAC,OAAO,EAAEC,WAAW,CAAC;QAElD,MAAME,kBAAkBR,sBAAsBS,SAAS,CAACH;QACxD,IAAI,CAACJ,UAAU,GAAGK,aAAaC,gBAAgBE,OAAO;QAEtD,IAAI,CAACJ,cAAc,CAACC,WAAW;YAC7B,MAAM,IAAII,sCAAmB,CAAC;QAChC;IACF;IAEA,IAAIL,aAAa;QACf,OAAO,IAAI,CAACL,WAAW;IACzB;IAEA,MAAMW,iBAAiBC,YAAsB,EAAE;QAC7C,MAAMC,WAAW,MAAM,IAAI,CAAC,CAACC,oBAAoB,CAACF;QAElD,MAAMG,SAAS,IAAI,CAAChB,qBAAqB,CAACS,SAAS,CAAC,IAAI,CAACH,UAAU;QACnE,OAAOU,QAAQC,QAAQC,eAAeC,SAASL,SAASM,OAAO;IACjE;IAEA,MAAM,CAACL,oBAAoB,CAACF,YAAsB;QAChD,MAAMC,WAAW,MAAM,IAAI,CAACf,mBAAmB,CAACsB,sBAAsB,CAACR,cAAc,IAAI,CAACP,UAAU;QACpG,IAAI,CAACQ,UAAU;YACb,MAAM,IAAIQ,0CAAuB,CAAC;QACpC;QACA,OAAOR,SAASS,MAAM;IACxB;IAEA,MAAMC,kBAAkBX,YAAsB,EAAE;QAC9C,MAAMY,cAAc,MAAM,IAAI,CAAC,CAACC,uBAAuB,CAACb;QACxD,OAAO,CAAC,CAACY;IACX;IAEA,MAAM,CAACC,uBAAuB,CAACb,YAAsB;QACnD,MAAMC,WAAW,MAAM,IAAI,CAACf,mBAAmB,CAAC4B,uBAAuB,CAACd;QACxE,IAAI,CAACC,UAAUc,SAASC,QAAQ;YAC9B,MAAM,IAAIP,0CAAuB,CAAC;QACpC;QACA,OAAO,IAAI,CAACQ,gBAAgB,CAAChB,SAASc,OAAO;IAC/C;IAEQE,iBAAiBC,UAAU,EAAE;QACnC,OAAOA,WAAWC,IAAI,CAAC,CAACC,IAAMA,EAAEC,GAAG,CAACC,WAAW,OAAO,IAAI,CAAC7B,UAAU,CAAC6B,WAAW;IACnF;IAEA,MAAMC,aAAaC,KAAe,EAAE;QAClC,OAAO,MAAM,IAAI,CAACtC,mBAAmB,CAACuC,kBAAkB,CAACD,OAAO;YAAC,IAAI,CAAC/B,UAAU;SAAC,EAAE,IAAI,CAACJ,UAAU;IACpG;IAEA,MAAMqC,cAAcF,KAAe,EAAEG,eAAe,KAAK,EAAE;QACzD,MAAMC,UAAUC,gDAAqB,CAACC,OAAO,CAACxB,IAAI;QAClD,MAAMI,SAAS,IAAI,CAACvB,qBAAqB,CAACS,SAAS,CAAC,IAAI,CAACH,UAAU;QACnE,MAAM,IAAI,CAACP,mBAAmB,CAAC6C,2BAA2B,CAACP,OAAOI,SAASlB,OAAOb,OAAO;QAEzF,MAAM,IAAI,CAAC,CAACmC,yBAAyB,CAACR,OAAOG;IAC/C;IAEA,MAAMM,gBAAgBT,KAAe,EAAEG,eAAe,KAAK,EAAE;QAC3D,MAAMC,UAAUC,gDAAqB,CAACK,SAAS,CAAC5B,IAAI;QACpD,MAAM,IAAI,CAACpB,mBAAmB,CAAC6C,2BAA2B,CAACP,OAAOI,SAAS,IAAI,CAACnC,UAAU;QAE1F,MAAM,IAAI,CAAC,CAACuC,yBAAyB,CAACR,OAAOG;IAC/C;IAEA,MAAMQ,aAAaX,KAAe,EAAEG,eAAe,KAAK,EAAE;QACxD,MAAMC,UAAUC,gDAAqB,CAACO,MAAM,CAAC9B,IAAI;QACjD,MAAM,IAAI,CAACpB,mBAAmB,CAAC6C,2BAA2B,CAACP,OAAOI,SAAS,IAAI,CAACnC,UAAU;QAE1F,MAAM,IAAI,CAAC,CAACuC,yBAAyB,CAACR,OAAOG;IAC/C;IAEA,MAAMU,cAAcb,KAAe,EAAEG,eAAe,KAAK,EAAE;QACzD,MAAMC,UAAUC,gDAAqB,CAACS,OAAO,CAAChC,IAAI;QAClD,MAAM,IAAI,CAACpB,mBAAmB,CAAC6C,2BAA2B,CAACP,OAAOI,SAAS,IAAI,CAACnC,UAAU;QAE1F,MAAM,IAAI,CAAC,CAACuC,yBAAyB,CAACR,OAAOG;IAC/C;IAEA,MAAMY,cAAcf,KAAe,EAAEG,eAAe,KAAK,EAAE;QACzD,MAAMC,UAAUC,gDAAqB,CAACW,OAAO,CAAClC,IAAI;QAClD,MAAM,IAAI,CAACpB,mBAAmB,CAAC6C,2BAA2B,CAACP,OAAOI,SAAS,IAAI,CAACnC,UAAU;QAE1F,MAAM,IAAI,CAAC,CAACuC,yBAAyB,CAACR,OAAOG;IAC/C;IAEA,MAAMc,kBAAkBjB,KAAe,EAAEG,eAAe,KAAK,EAAE;QAC7D,MAAMC,UAAUC,gDAAqB,CAACa,WAAW,CAACpC,IAAI;QACtD,MAAM,IAAI,CAACpB,mBAAmB,CAAC6C,2BAA2B,CAACP,OAAOI;QAElE,MAAM,IAAI,CAAC,CAACI,yBAAyB,CAACR,OAAOG;IAC/C;IAEA,MAAM,CAACK,yBAAyB,CAAChC,YAAsB,EAAE2B,eAAe,KAAK;QAC3E,IAAI,CAACA,cAAc;QAEnB,MAAM,IAAI,CAACzC,mBAAmB,CAACyD,wBAAwB,CAAC3C;IAC1D;AACF"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PluginFirmwareUpdateService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PluginFirmwareUpdateService;
9
+ }
10
+ });
11
+ const _pluginbaseservice = require("./plugin-base.service");
12
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
13
+ const _firmwareupdatesettingsconstants = require("./constants/firmware-update-settings.constants");
14
+ const config = {
15
+ pluginName: "firmwareupdater",
16
+ pluginUrl: "https://github.com/OctoPrint/OctoPrint-FirmwareUpdater/archive/master.zip"
17
+ };
18
+ const defaultRepos = {
19
+ prusaFirmwareOwner: "prusa3d",
20
+ prusaFirmwareRepo: "Prusa-Firmware"
21
+ };
22
+ const connectivityProp = "connectivity.connection_ok";
23
+ const firmwareProp = "printer.firmware";
24
+ const firmwareDownloadPath = "firmware-downloads";
25
+ class PluginFirmwareUpdateService extends _pluginbaseservice.PluginBaseService {
26
+ octoPrintApiService;
27
+ githubService;
28
+ multerService;
29
+ prusaFirmwareReleases;
30
+ latestFirmware;
31
+ constructor({ octoPrintApiService, pluginRepositoryCache, githubService, multerService, loggerFactory }){
32
+ super({
33
+ octoPrintApiService,
34
+ pluginRepositoryCache,
35
+ loggerFactory
36
+ }, config);
37
+ this.octoPrintApiService = octoPrintApiService;
38
+ this.githubService = githubService;
39
+ this.multerService = multerService;
40
+ }
41
+ async queryGithubPrusaFirmwareReleasesCache() {
42
+ try {
43
+ const response = await this.githubService.getReleases(defaultRepos.prusaFirmwareOwner, defaultRepos.prusaFirmwareRepo);
44
+ this.prusaFirmwareReleases = response.data;
45
+ } catch (e) {
46
+ return this.logger.error("Github fetch error. Probably rate limited, skipping firmware dowmload");
47
+ }
48
+ if (!this.prusaFirmwareReleases?.length) return [];
49
+ this.latestFirmware = this.prusaFirmwareReleases[0];
50
+ this.logger.log(`Plugin Cache filled with ${this.prusaFirmwareReleases?.length || "?"} firmware releases`, {
51
+ url: this.latestFirmware.url,
52
+ tag_name: this.latestFirmware.tag_name
53
+ });
54
+ return this.prusaFirmwareReleases;
55
+ }
56
+ async downloadFirmware() {
57
+ if (!this.prusaFirmwareReleases?.length || !this.latestFirmware) {
58
+ throw new _runtimeexceptions.ValidationException("No firmware releases were scanned. Download was not successful");
59
+ }
60
+ const latestFirmware = this.prusaFirmwareReleases[0];
61
+ // Download the latest firmware asset
62
+ const firmwareAsset = latestFirmware.assets.find((asset)=>asset.name.includes("MK3S_MK3S+"));
63
+ const downloadUrl = firmwareAsset.browser_download_url;
64
+ const downloadName = firmwareAsset.name;
65
+ this.logger.log(`Checking firmware ${downloadName}`);
66
+ if (!this.multerService.fileExists(downloadName, firmwareDownloadPath)) {
67
+ this.logger.log(`Downloading firmware from ${downloadUrl}`);
68
+ await this.multerService.downloadFile(downloadUrl, downloadName, firmwareDownloadPath);
69
+ this.logger.log(`Downloaded firmware ${downloadName}`);
70
+ } else {
71
+ this.logger.log(`Found firmware ${downloadName}`);
72
+ }
73
+ }
74
+ async getPrinterFirmwareVersion(printerLogin) {
75
+ const response = await this.octoPrintApiService.getSystemInfo(printerLogin);
76
+ const systemInfo = response.systeminfo;
77
+ // @todo If this fails, the printer most likely is not connected...
78
+ if (!Object.keys(systemInfo).includes(connectivityProp) || !Object.keys(systemInfo).includes(firmwareProp)) {
79
+ throw new _runtimeexceptions.ValidationException("Could not retrieve printer firmware version as the OctoPrint response was not recognized. Is it connected?");
80
+ }
81
+ const connected = systemInfo[connectivityProp];
82
+ if (!connected) {
83
+ throw new _runtimeexceptions.ValidationException("OctoPrint printer is not connected and firmware cannot be checked");
84
+ }
85
+ const firmware = systemInfo[firmwareProp];
86
+ if (!firmware?.length) {
87
+ throw new _runtimeexceptions.ValidationException("OctoPrint firmware version property was not recognized");
88
+ }
89
+ return firmware;
90
+ }
91
+ async getPluginFirmwareStatus(printerLogin) {
92
+ return await this.octoPrintApiService.getPluginFirmwareUpdateStatus(printerLogin);
93
+ }
94
+ async configureFirmwareUpdaterSettings(printerLogin) {
95
+ return await this.octoPrintApiService.updateFirmwareUpdaterSettings(printerLogin, _firmwareupdatesettingsconstants.defaultFirmwareUpdaterSettings);
96
+ }
97
+ async flashPrusaFirmware(currentPrinterId, printerLogin) {
98
+ const latestHexFilePath = this.multerService.getNewestFile(firmwareDownloadPath);
99
+ // todo setup BG task to track progress
100
+ return await this.octoPrintApiService.postPluginFirmwareUpdateFlash(currentPrinterId, printerLogin, latestHexFilePath);
101
+ }
102
+ }
103
+
104
+ //# sourceMappingURL=plugin-firmware-update.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/octoprint/plugin-firmware-update.service.ts"],"names":["PluginFirmwareUpdateService","config","pluginName","pluginUrl","defaultRepos","prusaFirmwareOwner","prusaFirmwareRepo","connectivityProp","firmwareProp","firmwareDownloadPath","PluginBaseService","octoPrintApiService","githubService","multerService","prusaFirmwareReleases","latestFirmware","constructor","pluginRepositoryCache","loggerFactory","queryGithubPrusaFirmwareReleasesCache","response","getReleases","data","e","logger","error","length","log","url","tag_name","downloadFirmware","ValidationException","firmwareAsset","assets","find","asset","name","includes","downloadUrl","browser_download_url","downloadName","fileExists","downloadFile","getPrinterFirmwareVersion","printerLogin","getSystemInfo","systemInfo","systeminfo","Object","keys","connected","firmware","getPluginFirmwareStatus","getPluginFirmwareUpdateStatus","configureFirmwareUpdaterSettings","updateFirmwareUpdaterSettings","defaultFirmwareUpdaterSettings","flashPrusaFirmware","currentPrinterId","latestHexFilePath","getNewestFile","postPluginFirmwareUpdateFlash"],"mappings":";;;;+BAyBaA;;;eAAAA;;;mCAzBqB;mCACE;iDACW;AAS/C,MAAMC,SAAS;IACbC,YAAY;IACZC,WAAW;AACb;AAEA,MAAMC,eAAe;IACnBC,oBAAoB;IACpBC,mBAAmB;AACrB;AAEA,MAAMC,mBAAmB;AACzB,MAAMC,eAAe;AACrB,MAAMC,uBAAuB;AAEtB,MAAMT,oCAAoCU,oCAAiB;IAChEC,oBAAyC;IACzCC,cAA6B;IACrBC,cAA6B;IAE7BC,sBAAsB;IACtBC,eAAe;IAEvBC,YAAY,EACVL,mBAAmB,EACnBM,qBAAqB,EACrBL,aAAa,EACbC,aAAa,EACbK,aAAa,EAOd,CAAE;QACD,KAAK,CAAC;YAAEP;YAAqBM;YAAuBC;QAAc,GAAGjB;QACrE,IAAI,CAACU,mBAAmB,GAAGA;QAC3B,IAAI,CAACC,aAAa,GAAGA;QACrB,IAAI,CAACC,aAAa,GAAGA;IACvB;IAEA,MAAMM,wCAAwC;QAC5C,IAAI;YACF,MAAMC,WAAW,MAAM,IAAI,CAACR,aAAa,CAACS,WAAW,CAACjB,aAAaC,kBAAkB,EAAED,aAAaE,iBAAiB;YACrH,IAAI,CAACQ,qBAAqB,GAAGM,SAASE,IAAI;QAC5C,EAAE,OAAOC,GAAG;YACV,OAAO,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC;QAC3B;QAEA,IAAI,CAAC,IAAI,CAACX,qBAAqB,EAAEY,QAAQ,OAAO,EAAE;QAElD,IAAI,CAACX,cAAc,GAAG,IAAI,CAACD,qBAAqB,CAAC,EAAE;QACnD,IAAI,CAACU,MAAM,CAACG,GAAG,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAACb,qBAAqB,EAAEY,UAAU,IAAI,kBAAkB,CAAC,EAAE;YACzGE,KAAK,IAAI,CAACb,cAAc,CAACa,GAAG;YAC5BC,UAAU,IAAI,CAACd,cAAc,CAACc,QAAQ;QACxC;QAEA,OAAO,IAAI,CAACf,qBAAqB;IACnC;IAEA,MAAMgB,mBAAmB;QACvB,IAAI,CAAC,IAAI,CAAChB,qBAAqB,EAAEY,UAAU,CAAC,IAAI,CAACX,cAAc,EAAE;YAC/D,MAAM,IAAIgB,sCAAmB,CAAC;QAChC;QAEA,MAAMhB,iBAAiB,IAAI,CAACD,qBAAqB,CAAC,EAAE;QAEpD,qCAAqC;QACrC,MAAMkB,gBAAgBjB,eAAekB,MAAM,CAACC,IAAI,CAAC,CAACC,QAAUA,MAAMC,IAAI,CAACC,QAAQ,CAAC;QAChF,MAAMC,cAAcN,cAAcO,oBAAoB;QACtD,MAAMC,eAAeR,cAAcI,IAAI;QACvC,IAAI,CAACZ,MAAM,CAACG,GAAG,CAAC,CAAC,kBAAkB,EAAEa,aAAa,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC3B,aAAa,CAAC4B,UAAU,CAACD,cAAc/B,uBAAuB;YACtE,IAAI,CAACe,MAAM,CAACG,GAAG,CAAC,CAAC,0BAA0B,EAAEW,YAAY,CAAC;YAC1D,MAAM,IAAI,CAACzB,aAAa,CAAC6B,YAAY,CAACJ,aAAaE,cAAc/B;YACjE,IAAI,CAACe,MAAM,CAACG,GAAG,CAAC,CAAC,oBAAoB,EAAEa,aAAa,CAAC;QACvD,OAAO;YACL,IAAI,CAAChB,MAAM,CAACG,GAAG,CAAC,CAAC,eAAe,EAAEa,aAAa,CAAC;QAClD;IACF;IAEA,MAAMG,0BAA0BC,YAAsB,EAAE;QACtD,MAAMxB,WAAW,MAAM,IAAI,CAACT,mBAAmB,CAACkC,aAAa,CAACD;QAC9D,MAAME,aAAa1B,SAAS2B,UAAU;QAEtC,mEAAmE;QACnE,IAAI,CAACC,OAAOC,IAAI,CAACH,YAAYT,QAAQ,CAAC9B,qBAAqB,CAACyC,OAAOC,IAAI,CAACH,YAAYT,QAAQ,CAAC7B,eAAe;YAC1G,MAAM,IAAIuB,sCAAmB,CAC3B;QAEJ;QAEA,MAAMmB,YAAYJ,UAAU,CAACvC,iBAAiB;QAC9C,IAAI,CAAC2C,WAAW;YACd,MAAM,IAAInB,sCAAmB,CAAC;QAChC;QAEA,MAAMoB,WAAWL,UAAU,CAACtC,aAAa;QACzC,IAAI,CAAC2C,UAAUzB,QAAQ;YACrB,MAAM,IAAIK,sCAAmB,CAAC;QAChC;QAEA,OAAOoB;IACT;IAEA,MAAMC,wBAAwBR,YAAsB,EAAE;QACpD,OAAO,MAAM,IAAI,CAACjC,mBAAmB,CAAC0C,6BAA6B,CAACT;IACtE;IAEA,MAAMU,iCAAiCV,YAAsB,EAAE;QAC7D,OAAO,MAAM,IAAI,CAACjC,mBAAmB,CAAC4C,6BAA6B,CAACX,cAAcY,+DAA8B;IAClH;IAEA,MAAMC,mBAAmBC,gBAAwB,EAAEd,YAAsB,EAAE;QACzE,MAAMe,oBAAoB,IAAI,CAAC9C,aAAa,CAAC+C,aAAa,CAACnD;QAC3D,uCAAuC;QACvC,OAAO,MAAM,IAAI,CAACE,mBAAmB,CAACkD,6BAA6B,CAACH,kBAAkBd,cAAce;IACtG;AACF"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PluginRepositoryCache", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PluginRepositoryCache;
9
+ }
10
+ });
11
+ const _envutils = require("../../utils/env.utils");
12
+ class PluginRepositoryCache {
13
+ octoPrintApiService;
14
+ logger;
15
+ wasCached = false;
16
+ pluginCache = [];
17
+ lastQueried = undefined;
18
+ constructor({ octoPrintApiService, loggerFactory }){
19
+ this.octoPrintApiService = octoPrintApiService;
20
+ this.logger = loggerFactory(PluginRepositoryCache.name);
21
+ }
22
+ getPlugin(pluginName) {
23
+ if (!this.wasCached) {
24
+ if (!(0, _envutils.isTestEnvironment)()) {
25
+ this.logger.warn(`Could not check plugin '${pluginName}', as cache was not loaded.`);
26
+ }
27
+ return;
28
+ }
29
+ return this.getCache().find((p)=>p.id.toLowerCase() === pluginName.toLowerCase());
30
+ }
31
+ getCache() {
32
+ return [
33
+ ...this.pluginCache
34
+ ];
35
+ }
36
+ async queryCache() {
37
+ this.pluginCache = await this.octoPrintApiService.fetchOctoPrintPlugins() || [];
38
+ this.wasCached = true;
39
+ this.lastQueried = Date.now();
40
+ this.logger.log(`Plugin Cache filled with ${this.pluginCache?.length || "?"} plugins`);
41
+ return this.getCache();
42
+ }
43
+ }
44
+
45
+ //# sourceMappingURL=plugin-repository.cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/octoprint/plugin-repository.cache.ts"],"names":["PluginRepositoryCache","octoPrintApiService","logger","wasCached","pluginCache","lastQueried","undefined","constructor","loggerFactory","name","getPlugin","pluginName","isTestEnvironment","warn","getCache","find","p","id","toLowerCase","queryCache","fetchOctoPrintPlugins","Date","now","log","length"],"mappings":";;;;+BAKaA;;;eAAAA;;;0BALqB;AAK3B,MAAMA;IACXC,oBAAyC;IACzCC,OAAsB;IAEtBC,YAAY,MAAM;IAClBC,cAAc,EAAE,CAAC;IACjBC,cAAcC,UAAU;IAExBC,YAAY,EACVN,mBAAmB,EACnBO,aAAa,EAId,CAAE;QACD,IAAI,CAACP,mBAAmB,GAAGA;QAC3B,IAAI,CAACC,MAAM,GAAGM,cAAcR,sBAAsBS,IAAI;IACxD;IAEAC,UAAUC,UAAkB,EAAE;QAC5B,IAAI,CAAC,IAAI,CAACR,SAAS,EAAE;YACnB,IAAI,CAACS,IAAAA,2BAAiB,KAAI;gBACxB,IAAI,CAACV,MAAM,CAACW,IAAI,CAAC,CAAC,wBAAwB,EAAEF,WAAW,2BAA2B,CAAC;YACrF;YACA;QACF;QAEA,OAAO,IAAI,CAACG,QAAQ,GAAGC,IAAI,CAAC,CAACC,IAAMA,EAAEC,EAAE,CAACC,WAAW,OAAOP,WAAWO,WAAW;IAClF;IAEAJ,WAAW;QACT,OAAO;eAAI,IAAI,CAACV,WAAW;SAAC;IAC9B;IAEA,MAAMe,aAAa;QACjB,IAAI,CAACf,WAAW,GAAG,AAAC,MAAM,IAAI,CAACH,mBAAmB,CAACmB,qBAAqB,MAAO,EAAE;QACjF,IAAI,CAACjB,SAAS,GAAG;QACjB,IAAI,CAACE,WAAW,GAAGgB,KAAKC,GAAG;QAE3B,IAAI,CAACpB,MAAM,CAACqB,GAAG,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAACnB,WAAW,EAAEoB,UAAU,IAAI,QAAQ,CAAC;QAErF,OAAO,IAAI,CAACV,QAAQ;IACtB;AACF"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "SocketFactory", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return SocketFactory;
9
+ }
10
+ });
11
+ const _containertokens = require("../../container.tokens");
12
+ class SocketFactory {
13
+ cradle;
14
+ constructor(cradle){
15
+ this.cradle = cradle;
16
+ }
17
+ createInstance() {
18
+ return this.cradle[_containertokens.DITokens.octoPrintSockIoAdapter];
19
+ }
20
+ }
21
+
22
+ //# sourceMappingURL=socket.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/octoprint/socket.factory.ts"],"names":["SocketFactory","cradle","constructor","createInstance","DITokens","octoPrintSockIoAdapter"],"mappings":";;;;+BAGaA;;;eAAAA;;;iCAHY;AAGlB,MAAMA;IACXC,OAAY;IAEZC,YAAYD,MAAU,CAAE;QACtB,IAAI,CAACA,MAAM,GAAGA;IAChB;IAEAE,iBAAyC;QACvC,OAAO,IAAI,CAACF,MAAM,CAACG,yBAAQ,CAACC,sBAAsB,CAAC;IACrD;AACF"}