@fdm-monster/server 1.8.3 → 1.9.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 (439) hide show
  1. package/.env.template +5 -3
  2. package/.gitattributes +4 -2
  3. package/.yarn/install-state.gz +0 -0
  4. package/.yarn/releases/yarn-4.9.1.cjs +948 -0
  5. package/.yarnrc.yml +1 -1
  6. package/README.md +25 -26
  7. package/RELEASE_NOTES.MD +50 -1
  8. package/biome.json +33 -0
  9. package/dist/consoles/download-github-releases.js.map +1 -1
  10. package/dist/consoles/launch-http-servers.js +31 -0
  11. package/dist/consoles/launch-http-servers.js.map +1 -0
  12. package/dist/consoles/mock-octoprint.server.js +291 -0
  13. package/dist/consoles/mock-octoprint.server.js.map +1 -0
  14. package/dist/consoles/mock-prusalink.server.js +57 -0
  15. package/dist/consoles/mock-prusalink.server.js.map +1 -0
  16. package/dist/consoles/utils/api-messages.js +856 -0
  17. package/dist/consoles/utils/api-messages.js.map +1 -0
  18. package/dist/consoles/utils/delayed-memory.storage.js +42 -0
  19. package/dist/consoles/utils/delayed-memory.storage.js.map +1 -0
  20. package/dist/consoles/utils/ws-messages.js +88 -0
  21. package/dist/consoles/utils/ws-messages.js.map +1 -0
  22. package/dist/constants/event.constants.js +5 -21
  23. package/dist/constants/event.constants.js.map +1 -1
  24. package/dist/constants/server-settings.constants.js +6 -11
  25. package/dist/constants/server-settings.constants.js.map +1 -1
  26. package/dist/container.js +13 -14
  27. package/dist/container.js.map +1 -1
  28. package/dist/container.tokens.js +3 -4
  29. package/dist/container.tokens.js.map +1 -1
  30. package/dist/controllers/auth.controller.js +114 -24
  31. package/dist/controllers/auth.controller.js.map +1 -1
  32. package/dist/controllers/batch-call.controller.js +95 -24
  33. package/dist/controllers/batch-call.controller.js.map +1 -1
  34. package/dist/controllers/camera-stream.controller.js +16 -12
  35. package/dist/controllers/camera-stream.controller.js.map +1 -1
  36. package/dist/controllers/custom-gcode.controller.js +116 -40
  37. package/dist/controllers/custom-gcode.controller.js.map +1 -1
  38. package/dist/controllers/dto/update-client-dist.dto.js +0 -21
  39. package/dist/controllers/dto/update-client-dist.dto.js.map +1 -1
  40. package/dist/controllers/first-time-setup.controller.js +54 -18
  41. package/dist/controllers/first-time-setup.controller.js.map +1 -1
  42. package/dist/controllers/floor.controller.js +154 -43
  43. package/dist/controllers/floor.controller.js.map +1 -1
  44. package/dist/controllers/metrics.controller.js +56 -0
  45. package/dist/controllers/metrics.controller.js.map +1 -0
  46. package/dist/controllers/print-completion.controller.js +81 -18
  47. package/dist/controllers/print-completion.controller.js.map +1 -1
  48. package/dist/controllers/printer-files.controller.js +42 -28
  49. package/dist/controllers/printer-files.controller.js.map +1 -1
  50. package/dist/controllers/printer-group.controller.js +123 -33
  51. package/dist/controllers/printer-group.controller.js.map +1 -1
  52. package/dist/controllers/printer-settings.controller.js +73 -26
  53. package/dist/controllers/printer-settings.controller.js.map +1 -1
  54. package/dist/controllers/printer.controller.js +57 -198
  55. package/dist/controllers/printer.controller.js.map +1 -1
  56. package/dist/controllers/server-private.controller.js +153 -39
  57. package/dist/controllers/server-private.controller.js.map +1 -1
  58. package/dist/controllers/server-public.controller.js +79 -84
  59. package/dist/controllers/server-public.controller.js.map +1 -1
  60. package/dist/controllers/settings.controller.js +222 -79
  61. package/dist/controllers/settings.controller.js.map +1 -1
  62. package/dist/controllers/user.controller.js +67 -57
  63. package/dist/controllers/user.controller.js.map +1 -1
  64. package/dist/controllers/validation/auth-controller.validation.js +6 -5
  65. package/dist/controllers/validation/auth-controller.validation.js.map +1 -1
  66. package/dist/controllers/validation/batch-controller.validation.js +17 -18
  67. package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
  68. package/dist/controllers/validation/generic.validation.js +8 -3
  69. package/dist/controllers/validation/generic.validation.js.map +1 -1
  70. package/dist/controllers/validation/printer-completion-controller.validation.js +16 -0
  71. package/dist/controllers/validation/printer-completion-controller.validation.js.map +1 -0
  72. package/dist/controllers/validation/printer-controller.validation.js +31 -50
  73. package/dist/controllers/validation/printer-controller.validation.js.map +1 -1
  74. package/dist/controllers/validation/printer-files-controller.validation.js +16 -15
  75. package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -1
  76. package/dist/controllers/validation/printer-settings-controller.validation.js +6 -5
  77. package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -1
  78. package/dist/controllers/validation/server-private.validation.js +17 -0
  79. package/dist/controllers/validation/server-private.validation.js.map +1 -0
  80. package/dist/controllers/validation/setting.validation.js +28 -10
  81. package/dist/controllers/validation/setting.validation.js.map +1 -1
  82. package/dist/controllers/validation/user-controller.validation.js +44 -13
  83. package/dist/controllers/validation/user-controller.validation.js.map +1 -1
  84. package/dist/data-source.js +10 -6
  85. package/dist/data-source.js.map +1 -1
  86. package/dist/entities/camera-stream.entity.js +2 -3
  87. package/dist/entities/camera-stream.entity.js.map +1 -1
  88. package/dist/entities/custom-gcode.entity.js +1 -2
  89. package/dist/entities/custom-gcode.entity.js.map +1 -1
  90. package/dist/entities/floor-position.entity.js.map +1 -1
  91. package/dist/entities/floor.entity.js +1 -2
  92. package/dist/entities/floor.entity.js.map +1 -1
  93. package/dist/entities/group.entity.js +6 -2
  94. package/dist/entities/group.entity.js.map +1 -1
  95. package/dist/entities/permission.entity.js +1 -2
  96. package/dist/entities/permission.entity.js.map +1 -1
  97. package/dist/entities/print-completion.entity.js +1 -2
  98. package/dist/entities/print-completion.entity.js.map +1 -1
  99. package/dist/entities/printer-group.entity.js +6 -2
  100. package/dist/entities/printer-group.entity.js.map +1 -1
  101. package/dist/entities/printer.entity.js +22 -4
  102. package/dist/entities/printer.entity.js.map +1 -1
  103. package/dist/entities/refresh-token.entity.js +1 -2
  104. package/dist/entities/refresh-token.entity.js.map +1 -1
  105. package/dist/entities/role.entity.js +1 -2
  106. package/dist/entities/role.entity.js.map +1 -1
  107. package/dist/entities/settings.entity.js +1 -2
  108. package/dist/entities/settings.entity.js.map +1 -1
  109. package/dist/entities/user-role.entity.js +1 -2
  110. package/dist/entities/user-role.entity.js.map +1 -1
  111. package/dist/entities/user.entity.js +1 -2
  112. package/dist/entities/user.entity.js.map +1 -1
  113. package/dist/exceptions/runtime.exceptions.js.map +1 -1
  114. package/dist/handlers/logger.js +131 -36
  115. package/dist/handlers/logger.js.map +1 -1
  116. package/dist/handlers/validators.js +7 -116
  117. package/dist/handlers/validators.js.map +1 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/middleware/authenticate.js +11 -22
  120. package/dist/middleware/authenticate.js.map +1 -1
  121. package/dist/middleware/database.js.map +1 -1
  122. package/dist/middleware/demo.middleware.js +4 -17
  123. package/dist/middleware/demo.middleware.js.map +1 -1
  124. package/dist/middleware/exception.filter.js +23 -23
  125. package/dist/middleware/exception.filter.js.map +1 -1
  126. package/dist/middleware/global.middleware.js +4 -4
  127. package/dist/middleware/global.middleware.js.map +1 -1
  128. package/dist/middleware/param-converter.middleware.js +81 -0
  129. package/dist/middleware/param-converter.middleware.js.map +1 -0
  130. package/dist/middleware/passport.js +3 -5
  131. package/dist/middleware/passport.js.map +1 -1
  132. package/dist/middleware/printer-resolver.js +37 -0
  133. package/dist/middleware/printer-resolver.js.map +1 -0
  134. package/dist/middleware/printer.js +22 -10
  135. package/dist/middleware/printer.js.map +1 -1
  136. package/dist/middleware/socketio.middleware.js +27 -0
  137. package/dist/middleware/socketio.middleware.js.map +1 -0
  138. package/dist/migrations/1706829146617-InitSqlite.js +1 -1
  139. package/dist/migrations/1706829146617-InitSqlite.js.map +1 -1
  140. package/dist/migrations/1707494762198-PrinterGroup.js +1 -1
  141. package/dist/migrations/1707494762198-PrinterGroup.js.map +1 -1
  142. package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js +1 -1
  143. package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js.map +1 -1
  144. package/dist/migrations/1713897879622-AddPrinterType.js +1 -1
  145. package/dist/migrations/1713897879622-AddPrinterType.js.map +1 -1
  146. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +229 -0
  147. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -0
  148. package/dist/models/Auth/Permission.js.map +1 -1
  149. package/dist/models/Auth/RefreshToken.js +1 -1
  150. package/dist/models/Auth/RefreshToken.js.map +1 -1
  151. package/dist/models/Auth/Role.js.map +1 -1
  152. package/dist/models/Auth/User.js.map +1 -1
  153. package/dist/models/CameraStream.js +20 -0
  154. package/dist/models/CameraStream.js.map +1 -1
  155. package/dist/models/CustomGcode.js.map +1 -1
  156. package/dist/models/Floor.js.map +1 -1
  157. package/dist/models/FloorPrinter.js +10 -1
  158. package/dist/models/FloorPrinter.js.map +1 -1
  159. package/dist/models/PrintCompletion.js.map +1 -1
  160. package/dist/models/Printer.js +12 -5
  161. package/dist/models/Printer.js.map +1 -1
  162. package/dist/models/Settings.js +5 -42
  163. package/dist/models/Settings.js.map +1 -1
  164. package/dist/models/index.js +0 -4
  165. package/dist/models/index.js.map +1 -1
  166. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +1 -1
  167. package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +1 -1
  168. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +1 -1
  169. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +1 -1
  170. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +1 -1
  171. package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +1 -1
  172. package/dist/mongo-migrations/20231111081809-printer-flatten-name.js.map +1 -1
  173. package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js.map +1 -1
  174. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +1 -1
  175. package/dist/server.constants.js +7 -4
  176. package/dist/server.constants.js.map +1 -1
  177. package/dist/server.core.js +29 -2
  178. package/dist/server.core.js.map +1 -1
  179. package/dist/server.env.js +13 -8
  180. package/dist/server.env.js.map +1 -1
  181. package/dist/server.host.js +24 -33
  182. package/dist/server.host.js.map +1 -1
  183. package/dist/services/authentication/auth.service.js +15 -20
  184. package/dist/services/authentication/auth.service.js.map +1 -1
  185. package/dist/services/authentication/jwt.service.js +1 -1
  186. package/dist/services/authentication/jwt.service.js.map +1 -1
  187. package/dist/services/core/batch-call.service.js +23 -25
  188. package/dist/services/core/batch-call.service.js.map +1 -1
  189. package/dist/services/core/client-bundle.service.js +78 -136
  190. package/dist/services/core/client-bundle.service.js.map +1 -1
  191. package/dist/services/core/config.service.js.map +1 -1
  192. package/dist/services/core/cradle.service.js +21 -0
  193. package/dist/services/core/cradle.service.js.map +1 -0
  194. package/dist/services/core/github.service.js +2 -2
  195. package/dist/services/core/github.service.js.map +1 -1
  196. package/dist/services/core/http-client.factory.js +1 -1
  197. package/dist/services/core/http-client.factory.js.map +1 -1
  198. package/dist/services/core/logs-manager.service.js +3 -3
  199. package/dist/services/core/logs-manager.service.js.map +1 -1
  200. package/dist/services/core/monsterpi.service.js +1 -1
  201. package/dist/services/core/monsterpi.service.js.map +1 -1
  202. package/dist/services/core/multer.service.js +8 -7
  203. package/dist/services/core/multer.service.js.map +1 -1
  204. package/dist/services/core/server-release.service.js +14 -8
  205. package/dist/services/core/server-release.service.js.map +1 -1
  206. package/dist/services/core/yaml.service.js +16 -17
  207. package/dist/services/core/yaml.service.js.map +1 -1
  208. package/dist/services/interfaces/camera-stream.dto.js +4 -34
  209. package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
  210. package/dist/services/interfaces/custom-gcode.dto.js.map +1 -1
  211. package/dist/services/interfaces/floor.dto.js +5 -47
  212. package/dist/services/interfaces/floor.dto.js.map +1 -1
  213. package/dist/services/interfaces/login.dto.js +2 -0
  214. package/dist/services/interfaces/login.dto.js.map +1 -1
  215. package/dist/services/interfaces/print-completion.dto.js.map +1 -1
  216. package/dist/services/interfaces/printer-group.dto.js +0 -14
  217. package/dist/services/interfaces/printer-group.dto.js.map +1 -1
  218. package/dist/services/interfaces/printer.dto.js +11 -11
  219. package/dist/services/interfaces/printer.dto.js.map +1 -1
  220. package/dist/services/interfaces/settings.dto.js.map +1 -1
  221. package/dist/services/interfaces/task.interfaces.js +6 -0
  222. package/dist/services/interfaces/task.interfaces.js.map +1 -0
  223. package/dist/services/mongoose/camera-stream.service.js +17 -15
  224. package/dist/services/mongoose/camera-stream.service.js.map +1 -1
  225. package/dist/services/mongoose/custom-gcode.service.js +4 -2
  226. package/dist/services/mongoose/custom-gcode.service.js.map +1 -1
  227. package/dist/services/mongoose/floor.service.js +37 -30
  228. package/dist/services/mongoose/floor.service.js.map +1 -1
  229. package/dist/services/mongoose/permission.service.js +1 -1
  230. package/dist/services/mongoose/permission.service.js.map +1 -1
  231. package/dist/services/mongoose/print-completion.service.js +2 -2
  232. package/dist/services/mongoose/print-completion.service.js.map +1 -1
  233. package/dist/services/mongoose/print-completion.shared.js +2 -2
  234. package/dist/services/mongoose/print-completion.shared.js.map +1 -1
  235. package/dist/services/mongoose/printer.service.js +33 -45
  236. package/dist/services/mongoose/printer.service.js.map +1 -1
  237. package/dist/services/mongoose/refresh-token.service.js +5 -8
  238. package/dist/services/mongoose/refresh-token.service.js.map +1 -1
  239. package/dist/services/mongoose/role.service.js +14 -5
  240. package/dist/services/mongoose/role.service.js.map +1 -1
  241. package/dist/services/mongoose/settings.service.js +35 -62
  242. package/dist/services/mongoose/settings.service.js.map +1 -1
  243. package/dist/services/mongoose/user.service.js +8 -7
  244. package/dist/services/mongoose/user.service.js.map +1 -1
  245. package/dist/services/moonraker/constants/{websocket.constants.js → moonraker.constants.js} +1 -1
  246. package/dist/services/moonraker/constants/{websocket.constants.js.map → moonraker.constants.js.map} +1 -1
  247. package/dist/services/moonraker/moonraker-websocket.adapter.js +102 -94
  248. package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
  249. package/dist/services/moonraker/moonraker.client.js +19 -14
  250. package/dist/services/moonraker/moonraker.client.js.map +1 -1
  251. package/dist/services/moonraker.api.js +3 -5
  252. package/dist/services/moonraker.api.js.map +1 -1
  253. package/dist/services/octoprint/constants/octoprint-service.constants.js +7 -36
  254. package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -1
  255. package/dist/services/octoprint/constants/octoprint-websocket.constants.js +12 -3
  256. package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -1
  257. package/dist/services/octoprint/dto/octoprint-event.dto.js +2 -1
  258. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
  259. package/dist/services/octoprint/octoprint-api.routes.js +0 -37
  260. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  261. package/dist/services/octoprint/octoprint-websocket.adapter.js +66 -72
  262. package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
  263. package/dist/services/octoprint/octoprint.client.js +12 -185
  264. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  265. package/dist/services/octoprint/utils/octoprint-http-client.builder.js.map +1 -1
  266. package/dist/services/octoprint.api.js +8 -14
  267. package/dist/services/octoprint.api.js.map +1 -1
  268. package/dist/services/orm/base.service.js +11 -12
  269. package/dist/services/orm/base.service.js.map +1 -1
  270. package/dist/services/orm/camera-stream.service.js +5 -1
  271. package/dist/services/orm/camera-stream.service.js.map +1 -1
  272. package/dist/services/orm/custom-gcode.service.js +2 -2
  273. package/dist/services/orm/custom-gcode.service.js.map +1 -1
  274. package/dist/services/orm/floor-position.service.js +0 -5
  275. package/dist/services/orm/floor-position.service.js.map +1 -1
  276. package/dist/services/orm/floor.service.js +43 -39
  277. package/dist/services/orm/floor.service.js.map +1 -1
  278. package/dist/services/orm/permission.service.js +3 -4
  279. package/dist/services/orm/permission.service.js.map +1 -1
  280. package/dist/services/orm/print-completion.service.js +2 -4
  281. package/dist/services/orm/print-completion.service.js.map +1 -1
  282. package/dist/services/orm/printer-group.service.js +2 -7
  283. package/dist/services/orm/printer-group.service.js.map +1 -1
  284. package/dist/services/orm/printer.service.js +21 -36
  285. package/dist/services/orm/printer.service.js.map +1 -1
  286. package/dist/services/orm/refresh-token.service.js +5 -11
  287. package/dist/services/orm/refresh-token.service.js.map +1 -1
  288. package/dist/services/orm/role.service.js +11 -10
  289. package/dist/services/orm/role.service.js.map +1 -1
  290. package/dist/services/orm/settings.service.js +37 -133
  291. package/dist/services/orm/settings.service.js.map +1 -1
  292. package/dist/services/orm/user.service.js +13 -15
  293. package/dist/services/orm/user.service.js.map +1 -1
  294. package/dist/services/printer-api.factory.js +9 -6
  295. package/dist/services/printer-api.factory.js.map +1 -1
  296. package/dist/services/printer-api.interface.js +13 -6
  297. package/dist/services/printer-api.interface.js.map +1 -1
  298. package/dist/services/prusa-link/constants/prusalink-event.dto.js +18 -0
  299. package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -0
  300. package/dist/services/prusa-link/constants/prusalink.constants.js +13 -0
  301. package/dist/services/prusa-link/constants/prusalink.constants.js.map +1 -0
  302. package/dist/services/prusa-link/dto/file-response.dto.js +6 -0
  303. package/dist/services/prusa-link/dto/file-response.dto.js.map +1 -0
  304. package/dist/services/{octoprint/dto/plugin.dto.js → prusa-link/dto/file.dto.js} +1 -1
  305. package/dist/services/prusa-link/dto/file.dto.js.map +1 -0
  306. package/dist/services/prusa-link/dto/job-state.dto.js +6 -0
  307. package/dist/services/prusa-link/dto/job-state.dto.js.map +1 -0
  308. package/dist/services/prusa-link/dto/printer-state.dto.js +6 -0
  309. package/dist/services/prusa-link/dto/printer-state.dto.js.map +1 -0
  310. package/dist/services/prusa-link/dto/status.dto.js +6 -0
  311. package/dist/services/prusa-link/dto/status.dto.js.map +1 -0
  312. package/dist/services/prusa-link/dto/version.dto.js +6 -0
  313. package/dist/services/prusa-link/dto/version.dto.js.map +1 -0
  314. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +142 -0
  315. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -0
  316. package/dist/services/prusa-link/prusa-link.api.js +233 -0
  317. package/dist/services/prusa-link/prusa-link.api.js.map +1 -0
  318. package/dist/services/prusa-link/utils/digest-auth.params.js +6 -0
  319. package/dist/services/prusa-link/utils/digest-auth.params.js.map +1 -0
  320. package/dist/services/prusa-link/utils/digest-auth.util.js +28 -0
  321. package/dist/services/prusa-link/utils/digest-auth.util.js.map +1 -0
  322. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js +131 -0
  323. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -0
  324. package/dist/services/socket.factory.js +9 -6
  325. package/dist/services/socket.factory.js.map +1 -1
  326. package/dist/services/{core/task-manager.service.js → task-manager.service.js} +72 -78
  327. package/dist/services/task-manager.service.js.map +1 -0
  328. package/dist/services/validators/camera-service.validation.js +19 -0
  329. package/dist/services/validators/camera-service.validation.js.map +1 -0
  330. package/dist/services/validators/floor-service.validation.js +47 -36
  331. package/dist/services/validators/floor-service.validation.js.map +1 -1
  332. package/dist/services/validators/print-completion-service.validation.js +22 -9
  333. package/dist/services/validators/print-completion-service.validation.js.map +1 -1
  334. package/dist/services/validators/printer-service.validation.js +112 -29
  335. package/dist/services/validators/printer-service.validation.js.map +1 -1
  336. package/dist/services/validators/settings-service.validation.js +78 -66
  337. package/dist/services/validators/settings-service.validation.js.map +1 -1
  338. package/dist/services/validators/user-service.validation.js +17 -16
  339. package/dist/services/validators/user-service.validation.js.map +1 -1
  340. package/dist/services/validators/yaml-service.validation.js +94 -51
  341. package/dist/services/validators/yaml-service.validation.js.map +1 -1
  342. package/dist/shared/default-http-client.builder.js.map +1 -1
  343. package/dist/shared/load-controllers.js +20 -0
  344. package/dist/shared/load-controllers.js.map +1 -0
  345. package/dist/shared/runtime-settings.migration.js +46 -0
  346. package/dist/shared/runtime-settings.migration.js.map +1 -0
  347. package/dist/shared/websocket-rpc-extended.adapter.js +15 -14
  348. package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
  349. package/dist/shared/websocket.adapter.js +4 -5
  350. package/dist/shared/websocket.adapter.js.map +1 -1
  351. package/dist/state/file-upload-tracker.cache.js +5 -4
  352. package/dist/state/file-upload-tracker.cache.js.map +1 -1
  353. package/dist/state/file.cache.js +1 -1
  354. package/dist/state/file.cache.js.map +1 -1
  355. package/dist/state/floor.store.js +6 -6
  356. package/dist/state/floor.store.js.map +1 -1
  357. package/dist/state/printer-events.cache.js +21 -22
  358. package/dist/state/printer-events.cache.js.map +1 -1
  359. package/dist/state/printer-files.store.js +6 -8
  360. package/dist/state/printer-files.store.js.map +1 -1
  361. package/dist/state/printer-socket.store.js +27 -50
  362. package/dist/state/printer-socket.store.js.map +1 -1
  363. package/dist/state/printer-thumbnail.cache.js +5 -9
  364. package/dist/state/printer-thumbnail.cache.js.map +1 -1
  365. package/dist/state/printer.cache.js +14 -12
  366. package/dist/state/printer.cache.js.map +1 -1
  367. package/dist/state/settings.store.js +74 -50
  368. package/dist/state/settings.store.js.map +1 -1
  369. package/dist/state/socket-io.gateway.js +39 -36
  370. package/dist/state/socket-io.gateway.js.map +1 -1
  371. package/dist/state/test-printer-socket.store.js +20 -15
  372. package/dist/state/test-printer-socket.store.js.map +1 -1
  373. package/dist/state/validation/create-test-printer.validation.js +13 -11
  374. package/dist/state/validation/create-test-printer.validation.js.map +1 -1
  375. package/dist/task.presets.js.map +1 -1
  376. package/dist/tasks/boot.task.js +14 -19
  377. package/dist/tasks/boot.task.js.map +1 -1
  378. package/dist/tasks/client-bundle.task.js +1 -3
  379. package/dist/tasks/client-bundle.task.js.map +1 -1
  380. package/dist/tasks/print-completion.socketio.task.js +27 -28
  381. package/dist/tasks/print-completion.socketio.task.js.map +1 -1
  382. package/dist/tasks/printer-file-clean.task.js +6 -10
  383. package/dist/tasks/printer-file-clean.task.js.map +1 -1
  384. package/dist/tasks/printer-websocket-restore.task.js +3 -14
  385. package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
  386. package/dist/tasks/printer-websocket.task.js +2 -14
  387. package/dist/tasks/printer-websocket.task.js.map +1 -1
  388. package/dist/tasks/socketio.task.js +6 -33
  389. package/dist/tasks/socketio.task.js.map +1 -1
  390. package/dist/tasks/software-update.task.js +1 -1
  391. package/dist/tasks/software-update.task.js.map +1 -1
  392. package/dist/tasks.js +3 -3
  393. package/dist/tasks.js.map +1 -1
  394. package/dist/utils/array.util.js.map +1 -1
  395. package/dist/utils/cache/key-diff.cache.js.map +1 -1
  396. package/dist/utils/env.utils.js +0 -2
  397. package/dist/utils/env.utils.js.map +1 -1
  398. package/dist/utils/normalize-url.js +3 -2
  399. package/dist/utils/normalize-url.js.map +1 -1
  400. package/dist/utils/printer-type.utils.js.map +1 -1
  401. package/dist/utils/time.utils.js +7 -17
  402. package/dist/utils/time.utils.js.map +1 -1
  403. package/dist/utils/url.utils.js +3 -4
  404. package/dist/utils/url.utils.js.map +1 -1
  405. package/package.json +44 -47
  406. package/tsconfig.json +2 -1
  407. package/.yarn/releases/yarn-4.7.0.cjs +0 -935
  408. package/dist/consoles/check-ports.js +0 -170
  409. package/dist/consoles/check-ports.js.map +0 -1
  410. package/dist/consoles/http-file-receiver.console.js +0 -81
  411. package/dist/consoles/http-file-receiver.console.js.map +0 -1
  412. package/dist/consoles/sqlite-torm.js +0 -31
  413. package/dist/consoles/sqlite-torm.js.map +0 -1
  414. package/dist/consoles/upload-test.js +0 -52
  415. package/dist/consoles/upload-test.js.map +0 -1
  416. package/dist/controllers/plugin-firmware-update.controller.js +0 -234
  417. package/dist/controllers/plugin-firmware-update.controller.js.map +0 -1
  418. package/dist/entities/base.entity.js +0 -29
  419. package/dist/entities/base.entity.js.map +0 -1
  420. package/dist/entities/printer-file.entity.js +0 -140
  421. package/dist/entities/printer-file.entity.js.map +0 -1
  422. package/dist/handlers/cache-manager.js +0 -18
  423. package/dist/handlers/cache-manager.js.map +0 -1
  424. package/dist/models/PrinterFile.js +0 -44
  425. package/dist/models/PrinterFile.js.map +0 -1
  426. package/dist/services/core/task-manager.service.js.map +0 -1
  427. package/dist/services/octoprint/dto/plugin.dto.js.map +0 -1
  428. package/dist/services/octoprint/plugin-base.service.js +0 -101
  429. package/dist/services/octoprint/plugin-base.service.js.map +0 -1
  430. package/dist/services/octoprint/plugin-firmware-update.service.js +0 -100
  431. package/dist/services/octoprint/plugin-firmware-update.service.js.map +0 -1
  432. package/dist/services/octoprint/plugin-repository.cache.js +0 -46
  433. package/dist/services/octoprint/plugin-repository.cache.js.map +0 -1
  434. package/dist/utils/benchmark.util.js +0 -39
  435. package/dist/utils/benchmark.util.js.map +0 -1
  436. package/dist/utils/is-docker.js +0 -40
  437. package/dist/utils/is-docker.js.map +0 -1
  438. package/dist/utils/metric.utils.js +0 -35
  439. package/dist/utils/metric.utils.js.map +0 -1
package/.yarnrc.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  nodeLinker: node-modules
2
2
 
3
- yarnPath: .yarn/releases/yarn-4.7.0.cjs
3
+ yarnPath: .yarn/releases/yarn-4.9.1.cjs
4
4
  httpTimeout: 1000000
package/README.md CHANGED
@@ -74,7 +74,7 @@ Thanks to the following parties for their financial support:
74
74
 
75
75
  | Tier 1 | Tier 2 | Tier 3 | Tier 4 | One time |
76
76
  |--------|--------|--------|--------|-----------|
77
- | | [WindArrow3d](https://github.com/WindArrow3d), [thatguymendel](https://github.com/thatguymendel) | | [doucettom](https://github.com/doucettom) | [th3dstudio](https://github.com/th3dstudio) |
77
+ | | [thatguymendel](https://github.com/thatguymendel) | | [doucettom](https://github.com/doucettom) | [th3dstudio](https://github.com/th3dstudio) |
78
78
 
79
79
 
80
80
  ## Contributors ✨
@@ -82,7 +82,7 @@ Thanks to the following parties for their financial support:
82
82
  These are the people involved in the project. Find the meaning of the emoji keys [here](https://allcontributors.org/docs/en/emoji-key).
83
83
 
84
84
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
85
- [![All Contributors](https://img.shields.io/badge/all_contributors-22-orange.svg?style=flat-square)](#contributors-)
85
+ [![All Contributors](https://img.shields.io/badge/all_contributors-23-orange.svg?style=flat-square)](#contributors-)
86
86
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
87
87
 
88
88
  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
@@ -91,34 +91,33 @@ These are the people involved in the project. Find the meaning of the emoji keys
91
91
  <table>
92
92
  <tbody>
93
93
  <tr>
94
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/davidzwa"><img src="https://avatars.githubusercontent.com/u/6005355?v=4?s=80" width="80px;" alt="David Zwart"/><br /><sub><b>David Zwart</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Adavidzwa" title="Bug reports">🐛</a> <a href="https://github.com/fdm-monster/fdm-monster/commits?author=davidzwa" title="Code">💻</a> <a href="#maintenance-davidzwa" title="Maintenance">🚧</a> <a href="#userTesting-davidzwa" title="User Testing">📓</a></td>
95
- <td align="center" valign="top" width="14.28%"><a href="https://kevenaar.name"><img src="https://avatars.githubusercontent.com/u/834643?v=4?s=80" width="80px;" alt="Maurice Kevenaar"/><br /><sub><b>Maurice Kevenaar</b></sub></a><br /><a href="#security-mkevenaar" title="Security">🛡️</a> <a href="#maintenance-mkevenaar" title="Maintenance">🚧</a> <a href="#ideas-mkevenaar" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Amkevenaar" title="Bug reports">🐛</a> <a href="https://github.com/fdm-monster/fdm-monster/pulls?q=is%3Apr+reviewed-by%3Amkevenaar" title="Reviewed Pull Requests">👀</a> <a href="#infra-mkevenaar" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
96
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Tobikisss"><img src="https://avatars.githubusercontent.com/u/45754890?v=4?s=80" width="80px;" alt="Tobias"/><br /><sub><b>Tobias</b></sub></a><br /><a href="#ideas-Tobikisss" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-Tobikisss" title="Maintenance">🚧</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3ATobikisss" title="Bug reports">🐛</a></td>
97
- <td align="center" valign="top" width="14.28%"><a href="https://tideline3d.com"><img src="https://avatars.githubusercontent.com/u/12903320?v=4?s=80" width="80px;" alt="tideline3d"/><br /><sub><b>tideline3d</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Atideline3d" title="Bug reports">🐛</a> <a href="#ideas-tideline3d" title="Ideas, Planning, & Feedback">🤔</a></td>
98
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/windarrow3d"><img src="https://avatars.githubusercontent.com/u/91099282?v=4?s=80" width="80px;" alt="WindArrow3d"/><br /><sub><b>WindArrow3d</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Awindarrow3d" title="Bug reports">🐛</a> <a href="#financial-windarrow3d" title="Financial">💵</a> <a href="#ideas-windarrow3d" title="Ideas, Planning, & Feedback">🤔</a> <a href="#userTesting-windarrow3d" title="User Testing">📓</a> <a href="#platform-windarrow3d" title="Packaging/porting to new platform">📦</a></td>
99
- <td align="center" valign="top" width="14.28%"><a href="http://lucianchapar.com"><img src="https://avatars.githubusercontent.com/u/33263520?v=4?s=80" width="80px;" alt="Lucian Chapar"/><br /><sub><b>Lucian Chapar</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Alucian151" title="Bug reports">🐛</a></td>
100
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Dumnersm580"><img src="https://avatars.githubusercontent.com/u/80608783?v=4?s=80" width="80px;" alt="Dumnersm580"/><br /><sub><b>Dumnersm580</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/commits?author=Dumnersm580" title="Documentation">📖</a> <a href="#ideas-Dumnersm580" title="Ideas, Planning, & Feedback">🤔</a></td>
94
+ <td align="center" valign="top" width="10%"><a href="https://github.com/davidzwa"><img src="https://avatars.githubusercontent.com/u/6005355?v=4?s=40" width="40px;" alt="David Zwart"/><br /><sub><b>David Zwart</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Adavidzwa" title="Bug reports">🐛</a> <a href="https://github.com/fdm-monster/fdm-monster/commits?author=davidzwa" title="Code">💻</a> <a href="#maintenance-davidzwa" title="Maintenance">🚧</a> <a href="#userTesting-davidzwa" title="User Testing">📓</a></td>
95
+ <td align="center" valign="top" width="10%"><a href="https://kevenaar.name"><img src="https://avatars.githubusercontent.com/u/834643?v=4?s=40" width="40px;" alt="Maurice Kevenaar"/><br /><sub><b>Maurice Kevenaar</b></sub></a><br /><a href="#security-mkevenaar" title="Security">🛡️</a> <a href="#maintenance-mkevenaar" title="Maintenance">🚧</a> <a href="#ideas-mkevenaar" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Amkevenaar" title="Bug reports">🐛</a> <a href="https://github.com/fdm-monster/fdm-monster/pulls?q=is%3Apr+reviewed-by%3Amkevenaar" title="Reviewed Pull Requests">👀</a> <a href="#infra-mkevenaar" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
96
+ <td align="center" valign="top" width="10%"><a href="https://github.com/Tobikisss"><img src="https://avatars.githubusercontent.com/u/45754890?v=4?s=40" width="40px;" alt="Tobias"/><br /><sub><b>Tobias</b></sub></a><br /><a href="#ideas-Tobikisss" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-Tobikisss" title="Maintenance">🚧</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3ATobikisss" title="Bug reports">🐛</a></td>
97
+ <td align="center" valign="top" width="10%"><a href="https://tideline3d.com"><img src="https://avatars.githubusercontent.com/u/12903320?v=4?s=40" width="40px;" alt="tideline3d"/><br /><sub><b>tideline3d</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Atideline3d" title="Bug reports">🐛</a> <a href="#ideas-tideline3d" title="Ideas, Planning, & Feedback">🤔</a></td>
98
+ <td align="center" valign="top" width="10%"><a href="https://github.com/windarrow3d"><img src="https://avatars.githubusercontent.com/u/91099282?v=4?s=40" width="40px;" alt="WindArrow3d"/><br /><sub><b>WindArrow3d</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Awindarrow3d" title="Bug reports">🐛</a> <a href="#financial-windarrow3d" title="Financial">💵</a> <a href="#ideas-windarrow3d" title="Ideas, Planning, & Feedback">🤔</a> <a href="#userTesting-windarrow3d" title="User Testing">📓</a> <a href="#platform-windarrow3d" title="Packaging/porting to new platform">📦</a></td>
99
+ <td align="center" valign="top" width="10%"><a href="http://lucianchapar.com"><img src="https://avatars.githubusercontent.com/u/33263520?v=4?s=40" width="40px;" alt="Lucian Chapar"/><br /><sub><b>Lucian Chapar</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Alucian151" title="Bug reports">🐛</a></td>
100
+ <td align="center" valign="top" width="10%"><a href="https://github.com/Dumnersm580"><img src="https://avatars.githubusercontent.com/u/80608783?v=4?s=40" width="40px;" alt="Dumnersm580"/><br /><sub><b>Dumnersm580</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/commits?author=Dumnersm580" title="Documentation">📖</a> <a href="#ideas-Dumnersm580" title="Ideas, Planning, & Feedback">🤔</a></td>
101
+ <td align="center" valign="top" width="10%"><a href="http://www.tophattwaffle.com"><img src="https://avatars.githubusercontent.com/u/6774125?v=4?s=40" width="40px;" alt="tophattwaffle"/><br /><sub><b>tophattwaffle</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Atophattwaffle" title="Bug reports">🐛</a> <a href="#ideas-tophattwaffle" title="Ideas, Planning, & Feedback">🤔</a></td>
102
+ <td align="center" valign="top" width="10%"><a href="https://github.com/rmhenn"><img src="https://avatars.githubusercontent.com/u/22482801?v=4?s=40" width="40px;" alt="rmhenn"/><br /><sub><b>rmhenn</b></sub></a><br /><a href="#ideas-rmhenn" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Armhenn" title="Bug reports">🐛</a></td>
103
+ <td align="center" valign="top" width="10%"><a href="https://github.com/cyrixdx4"><img src="https://avatars.githubusercontent.com/u/62126724?v=4?s=40" width="40px;" alt="cyrixdx4"/><br /><sub><b>cyrixdx4</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Acyrixdx4" title="Bug reports">🐛</a></td>
101
104
  </tr>
102
105
  <tr>
103
- <td align="center" valign="top" width="14.28%"><a href="http://www.tophattwaffle.com"><img src="https://avatars.githubusercontent.com/u/6774125?v=4?s=80" width="80px;" alt="tophattwaffle"/><br /><sub><b>tophattwaffle</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Atophattwaffle" title="Bug reports">🐛</a> <a href="#ideas-tophattwaffle" title="Ideas, Planning, & Feedback">🤔</a></td>
104
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/rmhenn"><img src="https://avatars.githubusercontent.com/u/22482801?v=4?s=80" width="80px;" alt="rmhenn"/><br /><sub><b>rmhenn</b></sub></a><br /><a href="#ideas-rmhenn" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Armhenn" title="Bug reports">🐛</a></td>
105
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/cyrixdx4"><img src="https://avatars.githubusercontent.com/u/62126724?v=4?s=80" width="80px;" alt="cyrixdx4"/><br /><sub><b>cyrixdx4</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Acyrixdx4" title="Bug reports">🐛</a></td>
106
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/doucettom"><img src="https://avatars.githubusercontent.com/u/6595645?v=4?s=80" width="80px;" alt="doucettom"/><br /><sub><b>doucettom</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Adoucettom" title="Bug reports">🐛</a> <a href="#ideas-doucettom" title="Ideas, Planning, & Feedback">🤔</a></td>
107
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/ZombiesLoveMe"><img src="https://avatars.githubusercontent.com/u/35661391?v=4?s=80" width="80px;" alt="Callum"/><br /><sub><b>Callum</b></sub></a><br /><a href="#ideas-ZombiesLoveMe" title="Ideas, Planning, & Feedback">🤔</a></td>
108
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/bharvey88"><img src="https://avatars.githubusercontent.com/u/8107750?v=4?s=80" width="80px;" alt="bharvey88"/><br /><sub><b>bharvey88</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Abharvey88" title="Bug reports">🐛</a> <a href="#infra-bharvey88" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#platform-bharvey88" title="Packaging/porting to new platform">📦</a></td>
109
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Mikec78660"><img src="https://avatars.githubusercontent.com/u/108021920?v=4?s=80" width="80px;" alt="Mikec78660"/><br /><sub><b>Mikec78660</b></sub></a><br /><a href="#ideas-Mikec78660" title="Ideas, Planning, & Feedback">🤔</a></td>
106
+ <td align="center" valign="top" width="10%"><a href="https://github.com/doucettom"><img src="https://avatars.githubusercontent.com/u/6595645?v=4?s=40" width="40px;" alt="doucettom"/><br /><sub><b>doucettom</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Adoucettom" title="Bug reports">🐛</a> <a href="#ideas-doucettom" title="Ideas, Planning, & Feedback">🤔</a></td>
107
+ <td align="center" valign="top" width="10%"><a href="https://github.com/ZombiesLoveMe"><img src="https://avatars.githubusercontent.com/u/35661391?v=4?s=40" width="40px;" alt="Callum"/><br /><sub><b>Callum</b></sub></a><br /><a href="#ideas-ZombiesLoveMe" title="Ideas, Planning, & Feedback">🤔</a></td>
108
+ <td align="center" valign="top" width="10%"><a href="https://github.com/bharvey88"><img src="https://avatars.githubusercontent.com/u/8107750?v=4?s=40" width="40px;" alt="bharvey88"/><br /><sub><b>bharvey88</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Abharvey88" title="Bug reports">🐛</a> <a href="#infra-bharvey88" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#platform-bharvey88" title="Packaging/porting to new platform">📦</a></td>
109
+ <td align="center" valign="top" width="10%"><a href="https://github.com/Mikec78660"><img src="https://avatars.githubusercontent.com/u/108021920?v=4?s=40" width="40px;" alt="Mikec78660"/><br /><sub><b>Mikec78660</b></sub></a><br /><a href="#ideas-Mikec78660" title="Ideas, Planning, & Feedback">🤔</a></td>
110
+ <td align="center" valign="top" width="10%"><a href="https://techinterview.guide"><img src="https://avatars.githubusercontent.com/u/168030?v=4?s=40" width="40px;" alt="w. ian douglas"/><br /><sub><b>w. ian douglas</b></sub></a><br /><a href="#ideas-iandouglas" title="Ideas, Planning, & Feedback">🤔</a></td>
111
+ <td align="center" valign="top" width="10%"><a href="http://insanityautomation.com/"><img src="https://avatars.githubusercontent.com/u/38436470?v=4?s=40" width="40px;" alt="InsanityAutomation"/><br /><sub><b>InsanityAutomation</b></sub></a><br /><a href="#ideas-InsanityAutomation" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3AInsanityAutomation" title="Bug reports">🐛</a></td>
112
+ <td align="center" valign="top" width="10%"><a href="https://github.com/LyfeOnEdge"><img src="https://avatars.githubusercontent.com/u/26140376?v=4?s=40" width="40px;" alt="Andrew (LyfeOnEdge) (ArcticGentoo)"/><br /><sub><b>Andrew (LyfeOnEdge) (ArcticGentoo)</b></sub></a><br /><a href="#ideas-LyfeOnEdge" title="Ideas, Planning, & Feedback">🤔</a></td>
113
+ <td align="center" valign="top" width="10%"><a href="https://github.com/callanova"><img src="https://avatars.githubusercontent.com/u/175639705?v=4?s=40" width="40px;" alt="callanova"/><br /><sub><b>callanova</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Acallanova" title="Bug reports">🐛</a></td>
114
+ <td align="center" valign="top" width="10%"><a href="https://github.com/thatguymendel"><img src="https://avatars.githubusercontent.com/u/67444998?v=4?s=40" width="40px;" alt="thatguymendel"/><br /><sub><b>thatguymendel</b></sub></a><br /><a href="#ideas-thatguymendel" title="Ideas, Planning, & Feedback">🤔</a></td>
115
+ <td align="center" valign="top" width="10%"><a href="https://github.com/julien-printerbox"><img src="https://avatars.githubusercontent.com/u/134132189?v=4?s=40" width="40px;" alt="julien-printerbox"/><br /><sub><b>julien-printerbox</b></sub></a><br /><a href="#ideas-julien-printerbox" title="Ideas, Planning, & Feedback">🤔</a></td>
110
116
  </tr>
111
117
  <tr>
112
- <td align="center" valign="top" width="14.28%"><a href="https://techinterview.guide"><img src="https://avatars.githubusercontent.com/u/168030?v=4?s=80" width="80px;" alt="w. ian douglas"/><br /><sub><b>w. ian douglas</b></sub></a><br /><a href="#ideas-iandouglas" title="Ideas, Planning, & Feedback">🤔</a></td>
113
- <td align="center" valign="top" width="14.28%"><a href="http://insanityautomation.com/"><img src="https://avatars.githubusercontent.com/u/38436470?v=4?s=80" width="80px;" alt="InsanityAutomation"/><br /><sub><b>InsanityAutomation</b></sub></a><br /><a href="#ideas-InsanityAutomation" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3AInsanityAutomation" title="Bug reports">🐛</a></td>
114
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/LyfeOnEdge"><img src="https://avatars.githubusercontent.com/u/26140376?v=4?s=80" width="80px;" alt="Andrew (LyfeOnEdge) (ArcticGentoo)"/><br /><sub><b>Andrew (LyfeOnEdge) (ArcticGentoo)</b></sub></a><br /><a href="#ideas-LyfeOnEdge" title="Ideas, Planning, & Feedback">🤔</a></td>
115
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/callanova"><img src="https://avatars.githubusercontent.com/u/175639705?v=4?s=80" width="80px;" alt="callanova"/><br /><sub><b>callanova</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Acallanova" title="Bug reports">🐛</a></td>
116
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/thatguymendel"><img src="https://avatars.githubusercontent.com/u/67444998?v=4?s=80" width="80px;" alt="thatguymendel"/><br /><sub><b>thatguymendel</b></sub></a><br /><a href="#ideas-thatguymendel" title="Ideas, Planning, & Feedback">🤔</a></td>
117
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/julien-printerbox"><img src="https://avatars.githubusercontent.com/u/134132189?v=4?s=80" width="80px;" alt="julien-printerbox"/><br /><sub><b>julien-printerbox</b></sub></a><br /><a href="#ideas-julien-printerbox" title="Ideas, Planning, & Feedback">🤔</a></td>
118
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Tbwan"><img src="https://avatars.githubusercontent.com/u/44231748?v=4?s=80" width="80px;" alt="Tbwan"/><br /><sub><b>Tbwan</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3ATbwan" title="Bug reports">🐛</a></td>
119
- </tr>
120
- <tr>
121
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/nuvious"><img src="https://avatars.githubusercontent.com/u/5287736?v=4?s=80" width="80px;" alt="David Cheeseman"/><br /><sub><b>David Cheeseman</b></sub></a><br /><a href="#ideas-nuvious" title="Ideas, Planning, & Feedback">🤔</a> <a href="#platform-nuvious" title="Packaging/porting to new platform">📦</a> <a href="#infra-nuvious" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
118
+ <td align="center" valign="top" width="10%"><a href="https://github.com/Tbwan"><img src="https://avatars.githubusercontent.com/u/44231748?v=4?s=40" width="40px;" alt="Tbwan"/><br /><sub><b>Tbwan</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3ATbwan" title="Bug reports">🐛</a></td>
119
+ <td align="center" valign="top" width="10%"><a href="https://github.com/nuvious"><img src="https://avatars.githubusercontent.com/u/5287736?v=4?s=40" width="40px;" alt="David Cheeseman"/><br /><sub><b>David Cheeseman</b></sub></a><br /><a href="#ideas-nuvious" title="Ideas, Planning, & Feedback">🤔</a> <a href="#platform-nuvious" title="Packaging/porting to new platform">📦</a> <a href="#infra-nuvious" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
120
+ <td align="center" valign="top" width="10%"><a href="https://github.com/thatguy-jaysenodell"><img src="https://avatars.githubusercontent.com/u/118288184?v=4?s=40" width="40px;" alt="That Guy Jaysen"/><br /><sub><b>That Guy Jaysen</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Athatguy-jaysenodell" title="Bug reports">🐛</a></td>
122
121
  </tr>
123
122
  </tbody>
124
123
  </table>
package/RELEASE_NOTES.MD CHANGED
@@ -1,5 +1,54 @@
1
1
  # Develop
2
2
 
3
+ ## Features
4
+ - Introduce PrusaLink adapter for limited printer support for these printers: MK3S(+) (needs PrusaLink extension with Raspberry Pi), Mini(+), MK4(S), XL, Core One
5
+ - Add opt-in Prometheus integration (still experimental)
6
+ - Add opt-in Loki integration (still experimental)
7
+
8
+ ## Chores
9
+
10
+ - Remove unused code for OctoPrint plugin support (this work needs to go through triage again)
11
+ - Remove unused code for OctoPrint plugin backup (this work needs to go through triage again)
12
+ - Remove unused code for OctoPrint plugin firmware update (this work needs to go through triage again)
13
+ - Remove unused code for OctoPrint plugin repository
14
+ - Remove unused code for Prusa firmware releases
15
+ - Remove printer API endpoints for OctoPrint plugins, backups and firmware updates
16
+ - Remove cache-manager package
17
+ - Remove unused console files
18
+ - Update .env.template
19
+ - Removed BaseEntity
20
+ - Make printerId camera nullish
21
+ - Merge create and update schema floor
22
+ - Schema printerPositionsSchema simplified
23
+ - Add biome linter/formatter, remove prettier and eslint
24
+
25
+ ## Changes
26
+
27
+ - `tsconfig.json` strictNullChecks and strictPropertyInitialization set to true for better null propagation logic.
28
+ - Update dependency injection with awilix, switch to CLASSIC mode for less verbose code
29
+ - Update API controller, use decorators over api builder
30
+ - Remove PrinterFile entity (unused)
31
+ - Remove printer/connection PATCH endpoint (unused)
32
+ - Remove debug settings from server settings database
33
+ - Remove all API compatibility feature flags except for printerGroupsApi and multiplePrinterServices
34
+
35
+ ## Fixes
36
+
37
+ - Fix punycode warning by pinning tr46 package
38
+ - Fix camera dto and entity to be consistent
39
+ - Make yaml import fill in default arrays
40
+ - Make printCompletionSchema context type any
41
+ - Enforce properties on camera stream Mongoose schema for consistency with TypeORM camera stream entity
42
+ - Enforce floor id on Mongoose schema for consistency with TypeORM floor entity
43
+ - Set floor id in Mongoose floor service for consistency with typeorm service
44
+ - Fix print completion interface and dto
45
+ - Improved API key validation: klipper validation completely isolated from OctoPrint api key validation
46
+ - Query parameter `forceSave` in printer create/update API was used incorrectly (flipped around)
47
+ - Fixed all typescript issues
48
+ - Server settings would not always migrate properly
49
+ - Printer files store will not cache files of disabled printers
50
+ - Klipper printer should print on upload
51
+
3
52
  # FDM Monster 19/03/2025 1.8.3
4
53
 
5
54
  ## Fixes
@@ -152,7 +201,7 @@
152
201
  - Used attributes for PrinterFilesController
153
202
  - Renamed OctoPrintApiService to OctoprintClient
154
203
  - Switch to 1.6.x client UI version range
155
- - Update Octoprint websocket with refresh interval, defaulting to 10sec. This loop will keep refresh attempts internal to the Websocket adapter of each service type (Octoprint, Moonraker, Bambu, etc).
204
+ - Update Octoprint websocket with refresh interval, defaulting to 10sec. This loop will keep refresh attempts internal to the Websocket adapter of each service type (Octoprint, Moonraker, etc).
156
205
 
157
206
  ## Fixes:
158
207
 
package/biome.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
+ "vcs": {
4
+ "enabled": false,
5
+ "clientKind": "git",
6
+ "useIgnoreFile": false
7
+ },
8
+ "files": {
9
+ "ignoreUnknown": false,
10
+ "ignore": []
11
+ },
12
+ "formatter": {
13
+ "enabled": true,
14
+ "indentStyle": "space",
15
+ "indentWidth": 2,
16
+ "lineWidth": 120
17
+ },
18
+ "organizeImports": {
19
+ "enabled": true
20
+ },
21
+ "linter": {
22
+ "enabled": true,
23
+ "rules": {
24
+ "recommended": true
25
+ }
26
+ },
27
+ "javascript": {
28
+ "formatter": {
29
+ "quoteStyle": "double",
30
+ "trailingCommas": "all"
31
+ }
32
+ }
33
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/consoles/download-github-releases.ts"],"names":["fetchReleases","response","axios","get","releases","data","releaseData","map","release","tag_name","name","published_at","body","outputPath","path","join","__dirname","fs","writeFileSync","JSON","stringify","console","log","error","fetchLatest"],"mappings":";;;;8DAAkB;2DACH;6DACE;;;;;;AASjB,MAAMA,gBAAgB;IACpB,IAAI;QACF,MAAMC,WAAW,MAAMC,cAAK,CAACC,GAAG,CAAY;QAC5C,MAAMC,WAAWH,SAASI,IAAI;QAG9B,MAAMC,cAAcF,SAASG,GAAG,CAAC,CAACC,UAAa,CAAA;gBAC7CC,UAAUD,QAAQC,QAAQ;gBAC1BC,MAAMF,QAAQE,IAAI;gBAClBC,cAAcH,QAAQG,YAAY;gBAClCC,MAAMJ,QAAQI,IAAI;YACpB,CAAA;QAGA,MAAMC,aAAaC,aAAI,CAACC,IAAI,CAACC,WAAW;QACxCC,WAAE,CAACC,aAAa,CAACL,YAAYM,KAAKC,SAAS,CAACd,aAAa,MAAM;QAC/De,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAET,YAAY;IACtD,EAAE,OAAOU,OAAO;QACdF,QAAQE,KAAK,CAAC,4BAA4BA;IAC5C;AACF;AAEA,MAAMC,cAAc;IAClB,IAAI;QACF,MAAMvB,WAAW,MAAMC,cAAK,CAACC,GAAG,CAAU;QAC1C,MAAMK,UAAUP,SAASI,IAAI;QAG7B,MAAMC,cAAc;YAClBG,UAAUD,QAAQC,QAAQ;YAC1BC,MAAMF,QAAQE,IAAI;YAClBC,cAAcH,QAAQG,YAAY;YAClCC,MAAMJ,QAAQI,IAAI;QACpB;QAGA,MAAMC,aAAaC,aAAI,CAACC,IAAI,CAACC,WAAW;QACxCC,WAAE,CAACC,aAAa,CAACL,YAAYM,KAAKC,SAAS,CAACd,aAAa,MAAM;QAC/De,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAET,YAAY;IACtD,EAAE,OAAOU,OAAO;QACdF,QAAQE,KAAK,CAAC,4BAA4BA;IAC5C;AACF;AAEAvB;AACAwB"}
1
+ {"version":3,"sources":["../../src/consoles/download-github-releases.ts"],"names":["fetchReleases","response","axios","get","releases","data","releaseData","map","release","tag_name","name","published_at","body","outputPath","path","join","__dirname","fs","writeFileSync","JSON","stringify","console","log","error","fetchLatest"],"mappings":";;;;8DAAkB;2DACH;6DACE;;;;;;AASjB,MAAMA,gBAAgB;IACpB,IAAI;QACF,MAAMC,WAAW,MAAMC,cAAK,CAACC,GAAG,CAAY;QAC5C,MAAMC,WAAWH,SAASI,IAAI;QAG9B,MAAMC,cAAcF,SAASG,GAAG,CAAC,CAACC,UAAa,CAAA;gBAC7CC,UAAUD,QAAQC,QAAQ;gBAC1BC,MAAMF,QAAQE,IAAI;gBAClBC,cAAcH,QAAQG,YAAY;gBAClCC,MAAMJ,QAAQI,IAAI;YACpB,CAAA;QAGA,MAAMC,aAAaC,aAAI,CAACC,IAAI,CAACC,WAAW;QACxCC,WAAE,CAACC,aAAa,CAACL,YAAYM,KAAKC,SAAS,CAACd,aAAa,MAAM;QAC/De,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAET,YAAY;IACtD,EAAE,OAAOU,OAAO;QACdF,QAAQE,KAAK,CAAC,4BAA4BA;IAC5C;AACF;AAEA,MAAMC,cAAc;IAClB,IAAI;QACF,MAAMvB,WAAW,MAAMC,cAAK,CAACC,GAAG,CAC9B;QAEF,MAAMK,UAAUP,SAASI,IAAI;QAG7B,MAAMC,cAAc;YAClBG,UAAUD,QAAQC,QAAQ;YAC1BC,MAAMF,QAAQE,IAAI;YAClBC,cAAcH,QAAQG,YAAY;YAClCC,MAAMJ,QAAQI,IAAI;QACpB;QAGA,MAAMC,aAAaC,aAAI,CAACC,IAAI,CAACC,WAAW;QACxCC,WAAE,CAACC,aAAa,CAACL,YAAYM,KAAKC,SAAS,CAACd,aAAa,MAAM;QAC/De,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAET,YAAY;IACtD,EAAE,OAAOU,OAAO;QACdF,QAAQE,KAAK,CAAC,4BAA4BA;IAC5C;AACF;AAEAvB;AACAwB"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _child_process = require("child_process");
6
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
7
+ function _interop_require_default(obj) {
8
+ return obj && obj.__esModule ? obj : {
9
+ default: obj
10
+ };
11
+ }
12
+ const startPort = 1234;
13
+ const instanceCount = 10;
14
+ console.log(`Starting ${instanceCount} fake OctoPrint servers...`);
15
+ for(let i = 0; i < instanceCount; i++){
16
+ const port = startPort + i;
17
+ const process = (0, _child_process.spawn)("node", [
18
+ _path.default.join(__dirname, "./mock-octoprint.server.js"),
19
+ port.toString()
20
+ ]);
21
+ process.stdout.on("data", (data)=>{
22
+ console.log(`[Server ${i + 1} - Port ${port}]: ${data.toString().trim()}`);
23
+ });
24
+ process.stderr.on("data", (data)=>{
25
+ console.error(`[Server ${i + 1} - Port ${port}] ERROR: ${data.toString().trim()}`);
26
+ });
27
+ console.log(`Started server ${i + 1} on port ${port}`);
28
+ }
29
+ console.log("All servers started. Press Ctrl+C to stop all servers.");
30
+
31
+ //# sourceMappingURL=launch-http-servers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/consoles/launch-http-servers.ts"],"names":["startPort","instanceCount","console","log","i","port","process","spawn","path","join","__dirname","toString","stdout","on","data","trim","stderr","error"],"mappings":";;;;+BAAsB;6DACL;;;;;;AAEjB,MAAMA,YAAY;AAClB,MAAMC,gBAAgB;AAEtBC,QAAQC,GAAG,CAAC,CAAC,SAAS,EAAEF,cAAc,0BAA0B,CAAC;AAEjE,IAAK,IAAIG,IAAI,GAAGA,IAAIH,eAAeG,IAAK;IACtC,MAAMC,OAAOL,YAAYI;IACzB,MAAME,UAAUC,IAAAA,oBAAK,EAAC,QAAQ;QAACC,aAAI,CAACC,IAAI,CAACC,WAAW;QAA+BL,KAAKM,QAAQ;KAAG;IAEnGL,QAAQM,MAAM,CAACC,EAAE,CAAC,QAAQ,CAACC;QACzBZ,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEC,IAAI,EAAE,QAAQ,EAAEC,KAAK,GAAG,EAAES,KAAKH,QAAQ,GAAGI,IAAI,IAAI;IAC3E;IAEAT,QAAQU,MAAM,CAACH,EAAE,CAAC,QAAQ,CAACC;QACzBZ,QAAQe,KAAK,CAAC,CAAC,QAAQ,EAAEb,IAAI,EAAE,QAAQ,EAAEC,KAAK,SAAS,EAAES,KAAKH,QAAQ,GAAGI,IAAI,IAAI;IACnF;IAEAb,QAAQC,GAAG,CAAC,CAAC,eAAe,EAAEC,IAAI,EAAE,SAAS,EAAEC,MAAM;AACvD;AAEAH,QAAQC,GAAG,CAAC"}
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _express = /*#__PURE__*/ _interop_require_default(require("express"));
6
+ const _multer = /*#__PURE__*/ _interop_require_default(require("multer"));
7
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
8
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
9
+ const _ws = require("ws");
10
+ const _http = /*#__PURE__*/ _interop_require_default(require("http"));
11
+ const _zod = require("zod");
12
+ const _nodeconsole = /*#__PURE__*/ _interop_require_wildcard(require("node:console"));
13
+ const _apimessages = require("./utils/api-messages");
14
+ const _wsmessages = require("./utils/ws-messages");
15
+ function _interop_require_default(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
20
+ function _getRequireWildcardCache(nodeInterop) {
21
+ if (typeof WeakMap !== "function") return null;
22
+ var cacheBabelInterop = new WeakMap();
23
+ var cacheNodeInterop = new WeakMap();
24
+ return (_getRequireWildcardCache = function(nodeInterop) {
25
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
26
+ })(nodeInterop);
27
+ }
28
+ function _interop_require_wildcard(obj, nodeInterop) {
29
+ if (!nodeInterop && obj && obj.__esModule) {
30
+ return obj;
31
+ }
32
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
33
+ return {
34
+ default: obj
35
+ };
36
+ }
37
+ var cache = _getRequireWildcardCache(nodeInterop);
38
+ if (cache && cache.has(obj)) {
39
+ return cache.get(obj);
40
+ }
41
+ var newObj = {
42
+ __proto__: null
43
+ };
44
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
45
+ for(var key in obj){
46
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
47
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
48
+ if (desc && (desc.get || desc.set)) {
49
+ Object.defineProperty(newObj, key, desc);
50
+ } else {
51
+ newObj[key] = obj[key];
52
+ }
53
+ }
54
+ }
55
+ newObj.default = obj;
56
+ if (cache) {
57
+ cache.set(obj, newObj);
58
+ }
59
+ return newObj;
60
+ }
61
+ const port = process.argv[2] ? parseInt(process.argv[2]) : 1234;
62
+ const uploadsDir = _path.default.join(__dirname, "uploads", `server-${port.toString()}`);
63
+ const WS_MESSAGE_INTERVAL = 1000;
64
+ if (!_fs.default.existsSync(uploadsDir)) {
65
+ _nodeconsole.log(`[PORT ${port}] Creating uploads folder ${uploadsDir}`);
66
+ _fs.default.mkdirSync(uploadsDir, {
67
+ recursive: true
68
+ });
69
+ }
70
+ cleanupUploads();
71
+ const upload = (0, _multer.default)({
72
+ dest: uploadsDir
73
+ });
74
+ const app = (0, _express.default)();
75
+ const server = _http.default.createServer(app);
76
+ const wss = new _ws.Server({
77
+ server
78
+ });
79
+ const clients = new Map();
80
+ const AuthSchema = _zod.z.object({
81
+ command: _zod.z.literal("auth"),
82
+ user: _zod.z.literal("admin"),
83
+ token: _zod.z.string().regex(/^[a-zA-Z0-9]{32}$/)
84
+ });
85
+ wss.on("connection", (ws)=>{
86
+ const clientId = Date.now().toString();
87
+ _nodeconsole.log(`[PORT ${port}] New WebSocket connection established`);
88
+ let authenticated = false;
89
+ let messageInterval = null;
90
+ ws.on("message", async (message)=>{
91
+ try {
92
+ const msgString = message.toString();
93
+ if (msgString.includes("throttle")) {
94
+ _nodeconsole.log(`Throttle message received ${msgString}`);
95
+ return;
96
+ }
97
+ const json = JSON.parse(msgString);
98
+ if (!authenticated) {
99
+ if (!json) {
100
+ _nodeconsole.log(`[PORT ${port}] Invalid message JSON format`);
101
+ ws.close();
102
+ return;
103
+ }
104
+ try {
105
+ const parts = json.auth.split(":");
106
+ AuthSchema.parse({
107
+ command: "auth",
108
+ user: parts[0],
109
+ token: parts[1]
110
+ });
111
+ _nodeconsole.log(`[PORT ${port}] Authentication successful for admin`);
112
+ authenticated = true;
113
+ clients.set(clientId, {
114
+ ws,
115
+ authenticated
116
+ });
117
+ setTimeout(async ()=>{
118
+ try {
119
+ ws.send(JSON.stringify(_wsmessages.currentMessage));
120
+ } catch (fileError) {
121
+ _nodeconsole.error(`[PORT ${port}] Error reading message file:`, fileError);
122
+ ws.send(JSON.stringify({
123
+ error: "Failed to read message content"
124
+ }));
125
+ }
126
+ }, 500);
127
+ messageInterval = setupMessageInterval(ws, clientId, WS_MESSAGE_INTERVAL);
128
+ } catch (validationError) {
129
+ _nodeconsole.log(`[PORT ${port}] Authentication failed: Invalid token format ${JSON.stringify(json)} ${validationError}`);
130
+ ws.close();
131
+ }
132
+ } else {
133
+ _nodeconsole.log(`[PORT ${port}] Received message from authenticated client`);
134
+ }
135
+ } catch (error) {
136
+ _nodeconsole.error(`[PORT ${port}] Error processing message:`, error);
137
+ ws.close();
138
+ }
139
+ });
140
+ ws.on("close", ()=>{
141
+ _nodeconsole.log(`[PORT ${port}] WebSocket connection closed ${clientId}`);
142
+ if (messageInterval) {
143
+ clearInterval(messageInterval);
144
+ messageInterval = null;
145
+ }
146
+ clients.delete(clientId);
147
+ });
148
+ const setupMessageInterval = (ws, clientId, baseInterval)=>{
149
+ if (messageInterval) {
150
+ clearInterval(messageInterval);
151
+ messageInterval = null;
152
+ }
153
+ const getRandomizedInterval = (baseMs)=>{
154
+ const variationFactor = 0.85 + Math.random() * 0.3;
155
+ return Math.floor(baseMs * variationFactor);
156
+ };
157
+ const sendPeriodicMessage = ()=>{
158
+ try {
159
+ if (ws.readyState === ws.OPEN) {
160
+ ws.send(JSON.stringify(_wsmessages.currentMessage));
161
+ _nodeconsole.log(`[PORT ${port}] Periodic message sent to client (ID: ${clientId})`);
162
+ messageInterval = setTimeout(sendPeriodicMessage, getRandomizedInterval(baseInterval));
163
+ } else {
164
+ _nodeconsole.log(`[PORT ${port}] Stopped periodic messages for client (ID: ${clientId})`);
165
+ messageInterval = null;
166
+ }
167
+ } catch (error) {
168
+ _nodeconsole.error(`[PORT ${port}] Error sending periodic message:`, error);
169
+ messageInterval = null;
170
+ }
171
+ };
172
+ messageInterval = setTimeout(sendPeriodicMessage, getRandomizedInterval(baseInterval));
173
+ return messageInterval;
174
+ };
175
+ });
176
+ app.get("/api/version", async (req, res)=>{
177
+ res.send({
178
+ server: "1",
179
+ api: "2",
180
+ text: "3"
181
+ });
182
+ });
183
+ app.get("/api/currentuser", async (req, res)=>{
184
+ res.send({
185
+ name: "admin",
186
+ permissions: [],
187
+ groups: []
188
+ });
189
+ });
190
+ app.get("/api/printer", async (req, res)=>{
191
+ _nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
192
+ res.status(200).json(_apimessages.printerHistorySuccessResponse);
193
+ });
194
+ app.get("/api/connection", async (req, res)=>{
195
+ _nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
196
+ res.status(200).json(_apimessages.connectionSuccessResponse);
197
+ });
198
+ app.get("/api/job", async (req, res)=>{
199
+ _nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
200
+ res.status(200).json(_apimessages.jobSuccessResponse);
201
+ });
202
+ app.get("/api/files/local", async (req, res)=>{
203
+ _nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
204
+ res.status(200).json(_apimessages.filesSuccessResponse);
205
+ });
206
+ app.post("/api/login", async (req, res)=>{
207
+ res.send({
208
+ _is_external_client: true,
209
+ _login_mechanism: "apikey",
210
+ session: "123123abc123123abc123123abc123ab"
211
+ });
212
+ });
213
+ app.post("/api/files/local", upload.single("file"), (req, res)=>{
214
+ const { select, print } = req.body;
215
+ const file = req.file;
216
+ if (!file) {
217
+ return res.status(400).json({
218
+ error: "Missing file"
219
+ });
220
+ }
221
+ if (typeof select === "undefined" || typeof print === "undefined") {
222
+ return res.status(400).json({
223
+ error: "Missing required fields: select, print"
224
+ });
225
+ }
226
+ if (Object.keys(req.body).length !== 2) {
227
+ return res.status(400).json({
228
+ error: "Only fields 'select' and 'print' are allowed"
229
+ });
230
+ }
231
+ if (![
232
+ "true",
233
+ "false"
234
+ ].includes(select) || ![
235
+ "true",
236
+ "false"
237
+ ].includes(print)) {
238
+ return res.status(400).json({
239
+ error: "Fields 'select' and 'print' must be boolean values (true/false)"
240
+ });
241
+ }
242
+ _nodeconsole.log(`[PORT ${port}] Received file:`, file.originalname);
243
+ _nodeconsole.log(`[PORT ${port}] File size:`, file.size);
244
+ _nodeconsole.log(`[PORT ${port}] MIME type:`, file.mimetype);
245
+ _nodeconsole.log(`[PORT ${port}] select:`, select, `\n[PORT ${port}] print:`, print, `\n-----`);
246
+ res.json({
247
+ message: "File received successfully"
248
+ });
249
+ });
250
+ app.use((req, res)=>{
251
+ _nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} Not found`);
252
+ res.status(404).json({
253
+ error: "Not Found"
254
+ });
255
+ });
256
+ server.listen(port, ()=>{
257
+ _nodeconsole.log(`[PORT ${port}] Server is running on http://localhost:${port}`);
258
+ _nodeconsole.log(`[PORT ${port}] WebSocket server is available on ws://localhost:${port}`);
259
+ });
260
+ process.on("SIGINT", ()=>{
261
+ _nodeconsole.log("\n[PORT ${port}] Received SIGINT signal (Ctrl+C). Shutting down gracefully...");
262
+ cleanupUploads();
263
+ server.close(()=>{
264
+ _nodeconsole.log("[PORT ${port}] Server closed");
265
+ process.exit(0);
266
+ });
267
+ });
268
+ process.on("SIGTERM", ()=>{
269
+ _nodeconsole.log("\n[PORT ${port}] Received SIGTERM signal. Shutting down gracefully...");
270
+ cleanupUploads();
271
+ server.close(()=>{
272
+ _nodeconsole.log("[PORT ${port}] Server closed");
273
+ process.exit(0);
274
+ });
275
+ });
276
+ function cleanupUploads() {
277
+ try {
278
+ _nodeconsole.log(`[PORT ${port}] Cleaning up uploads folder...`);
279
+ const files = _fs.default.readdirSync(uploadsDir);
280
+ for (const file of files){
281
+ const filePath = _path.default.join(uploadsDir, file);
282
+ _fs.default.unlinkSync(filePath);
283
+ _nodeconsole.log(`[PORT ${port}] Deleted: ${filePath}`);
284
+ }
285
+ _nodeconsole.log(`[PORT ${port}] Uploads folder cleanup complete`);
286
+ } catch (error) {
287
+ _nodeconsole.error(`[PORT ${port}] Error cleaning up uploads folder:`, error);
288
+ }
289
+ }
290
+
291
+ //# sourceMappingURL=mock-octoprint.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/consoles/mock-octoprint.server.ts"],"names":["port","process","argv","parseInt","uploadsDir","path","join","__dirname","toString","WS_MESSAGE_INTERVAL","fs","existsSync","console","log","mkdirSync","recursive","cleanupUploads","upload","multer","dest","app","express","server","http","createServer","wss","WebSocketServer","clients","Map","AuthSchema","z","object","command","literal","user","token","string","regex","on","ws","clientId","Date","now","authenticated","messageInterval","message","msgString","includes","json","JSON","parse","close","parts","auth","split","set","setTimeout","send","stringify","currentMessage","fileError","error","setupMessageInterval","validationError","clearInterval","delete","baseInterval","getRandomizedInterval","baseMs","variationFactor","Math","random","floor","sendPeriodicMessage","readyState","OPEN","get","req","res","api","text","name","permissions","groups","method","toUpperCase","url","status","printerHistorySuccessResponse","connectionSuccessResponse","jobSuccessResponse","filesSuccessResponse","post","_is_external_client","_login_mechanism","session","single","select","print","body","file","Object","keys","length","originalname","size","mimetype","use","listen","exit","files","readdirSync","filePath","unlinkSync"],"mappings":"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"}