@fdm-monster/server 1.8.2 → 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 (460) 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 +69 -7
  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 +11 -19
  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 +15 -24
  27. package/dist/container.js.map +1 -1
  28. package/dist/container.tokens.js +4 -5
  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 +61 -50
  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 +76 -29
  53. package/dist/controllers/printer-settings.controller.js.map +1 -1
  54. package/dist/controllers/printer.controller.js +62 -197
  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 -113
  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 -31
  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 +40 -0
  197. package/dist/services/core/http-client.factory.js.map +1 -0
  198. package/dist/services/core/logs-manager.service.js +7 -6
  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 +79 -28
  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/file-upload-tracker.interface.js +6 -0
  212. package/dist/services/interfaces/file-upload-tracker.interface.js.map +1 -0
  213. package/dist/services/interfaces/floor.dto.js +5 -47
  214. package/dist/services/interfaces/floor.dto.js.map +1 -1
  215. package/dist/services/interfaces/login.dto.js +2 -0
  216. package/dist/services/interfaces/login.dto.js.map +1 -1
  217. package/dist/services/interfaces/print-completion.dto.js.map +1 -1
  218. package/dist/services/interfaces/printer-group.dto.js +0 -14
  219. package/dist/services/interfaces/printer-group.dto.js.map +1 -1
  220. package/dist/services/interfaces/printer.dto.js +11 -5
  221. package/dist/services/interfaces/printer.dto.js.map +1 -1
  222. package/dist/services/interfaces/settings.dto.js.map +1 -1
  223. package/dist/services/interfaces/task.interfaces.js +6 -0
  224. package/dist/services/interfaces/task.interfaces.js.map +1 -0
  225. package/dist/services/mongoose/camera-stream.service.js +17 -15
  226. package/dist/services/mongoose/camera-stream.service.js.map +1 -1
  227. package/dist/services/mongoose/custom-gcode.service.js +4 -2
  228. package/dist/services/mongoose/custom-gcode.service.js.map +1 -1
  229. package/dist/services/mongoose/floor.service.js +37 -30
  230. package/dist/services/mongoose/floor.service.js.map +1 -1
  231. package/dist/services/mongoose/permission.service.js +1 -1
  232. package/dist/services/mongoose/permission.service.js.map +1 -1
  233. package/dist/services/mongoose/print-completion.service.js +2 -2
  234. package/dist/services/mongoose/print-completion.service.js.map +1 -1
  235. package/dist/services/mongoose/print-completion.shared.js +2 -2
  236. package/dist/services/mongoose/print-completion.shared.js.map +1 -1
  237. package/dist/services/mongoose/printer.service.js +40 -45
  238. package/dist/services/mongoose/printer.service.js.map +1 -1
  239. package/dist/services/mongoose/refresh-token.service.js +5 -8
  240. package/dist/services/mongoose/refresh-token.service.js.map +1 -1
  241. package/dist/services/mongoose/role.service.js +14 -5
  242. package/dist/services/mongoose/role.service.js.map +1 -1
  243. package/dist/services/mongoose/settings.service.js +35 -62
  244. package/dist/services/mongoose/settings.service.js.map +1 -1
  245. package/dist/services/mongoose/user.service.js +8 -7
  246. package/dist/services/mongoose/user.service.js.map +1 -1
  247. package/dist/services/moonraker/constants/{websocket.constants.js → moonraker.constants.js} +1 -1
  248. package/dist/services/moonraker/constants/{websocket.constants.js.map → moonraker.constants.js.map} +1 -1
  249. package/dist/services/moonraker/moonraker-websocket.adapter.js +108 -96
  250. package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
  251. package/dist/services/moonraker/moonraker.client.js +212 -167
  252. package/dist/services/moonraker/moonraker.client.js.map +1 -1
  253. package/dist/services/moonraker.api.js +3 -5
  254. package/dist/services/moonraker.api.js.map +1 -1
  255. package/dist/services/octoprint/constants/octoprint-service.constants.js +7 -36
  256. package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -1
  257. package/dist/services/octoprint/constants/octoprint-websocket.constants.js +12 -3
  258. package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -1
  259. package/dist/services/octoprint/dto/octoprint-event.dto.js +2 -1
  260. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
  261. package/dist/services/octoprint/octoprint-api.routes.js +0 -98
  262. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  263. package/dist/services/octoprint/octoprint-websocket.adapter.js +72 -72
  264. package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
  265. package/dist/services/octoprint/octoprint.client.js +87 -343
  266. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  267. package/dist/services/octoprint/utils/octoprint-http-client.builder.js +31 -0
  268. package/dist/services/octoprint/utils/octoprint-http-client.builder.js.map +1 -0
  269. package/dist/services/octoprint.api.js +14 -18
  270. package/dist/services/octoprint.api.js.map +1 -1
  271. package/dist/services/orm/base.service.js +11 -12
  272. package/dist/services/orm/base.service.js.map +1 -1
  273. package/dist/services/orm/camera-stream.service.js +5 -1
  274. package/dist/services/orm/camera-stream.service.js.map +1 -1
  275. package/dist/services/orm/custom-gcode.service.js +2 -2
  276. package/dist/services/orm/custom-gcode.service.js.map +1 -1
  277. package/dist/services/orm/floor-position.service.js +0 -5
  278. package/dist/services/orm/floor-position.service.js.map +1 -1
  279. package/dist/services/orm/floor.service.js +43 -39
  280. package/dist/services/orm/floor.service.js.map +1 -1
  281. package/dist/services/orm/permission.service.js +3 -4
  282. package/dist/services/orm/permission.service.js.map +1 -1
  283. package/dist/services/orm/print-completion.service.js +2 -4
  284. package/dist/services/orm/print-completion.service.js.map +1 -1
  285. package/dist/services/orm/printer-group.service.js +2 -7
  286. package/dist/services/orm/printer-group.service.js.map +1 -1
  287. package/dist/services/orm/printer.service.js +29 -39
  288. package/dist/services/orm/printer.service.js.map +1 -1
  289. package/dist/services/orm/refresh-token.service.js +5 -11
  290. package/dist/services/orm/refresh-token.service.js.map +1 -1
  291. package/dist/services/orm/role.service.js +11 -10
  292. package/dist/services/orm/role.service.js.map +1 -1
  293. package/dist/services/orm/settings.service.js +37 -133
  294. package/dist/services/orm/settings.service.js.map +1 -1
  295. package/dist/services/orm/user.service.js +13 -15
  296. package/dist/services/orm/user.service.js.map +1 -1
  297. package/dist/services/printer-api.factory.js +9 -6
  298. package/dist/services/printer-api.factory.js.map +1 -1
  299. package/dist/services/printer-api.interface.js +13 -6
  300. package/dist/services/printer-api.interface.js.map +1 -1
  301. package/dist/services/prusa-link/constants/prusalink-event.dto.js +18 -0
  302. package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -0
  303. package/dist/services/prusa-link/constants/prusalink.constants.js +13 -0
  304. package/dist/services/prusa-link/constants/prusalink.constants.js.map +1 -0
  305. package/dist/services/prusa-link/dto/file-response.dto.js +6 -0
  306. package/dist/services/prusa-link/dto/file-response.dto.js.map +1 -0
  307. package/dist/services/prusa-link/dto/file.dto.js +6 -0
  308. package/dist/services/prusa-link/dto/file.dto.js.map +1 -0
  309. package/dist/services/prusa-link/dto/job-state.dto.js +6 -0
  310. package/dist/services/prusa-link/dto/job-state.dto.js.map +1 -0
  311. package/dist/services/prusa-link/dto/printer-state.dto.js +6 -0
  312. package/dist/services/prusa-link/dto/printer-state.dto.js.map +1 -0
  313. package/dist/services/prusa-link/dto/status.dto.js +6 -0
  314. package/dist/services/prusa-link/dto/status.dto.js.map +1 -0
  315. package/dist/services/prusa-link/dto/version.dto.js +6 -0
  316. package/dist/services/prusa-link/dto/version.dto.js.map +1 -0
  317. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +142 -0
  318. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -0
  319. package/dist/services/prusa-link/prusa-link.api.js +233 -0
  320. package/dist/services/prusa-link/prusa-link.api.js.map +1 -0
  321. package/dist/services/prusa-link/utils/digest-auth.params.js +6 -0
  322. package/dist/services/prusa-link/utils/digest-auth.params.js.map +1 -0
  323. package/dist/services/prusa-link/utils/digest-auth.util.js +28 -0
  324. package/dist/services/prusa-link/utils/digest-auth.util.js.map +1 -0
  325. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js +131 -0
  326. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -0
  327. package/dist/services/socket.factory.js +9 -6
  328. package/dist/services/socket.factory.js.map +1 -1
  329. package/dist/services/{core/task-manager.service.js → task-manager.service.js} +72 -78
  330. package/dist/services/task-manager.service.js.map +1 -0
  331. package/dist/services/validators/camera-service.validation.js +19 -0
  332. package/dist/services/validators/camera-service.validation.js.map +1 -0
  333. package/dist/services/validators/floor-service.validation.js +47 -36
  334. package/dist/services/validators/floor-service.validation.js.map +1 -1
  335. package/dist/services/validators/print-completion-service.validation.js +22 -9
  336. package/dist/services/validators/print-completion-service.validation.js.map +1 -1
  337. package/dist/services/validators/printer-service.validation.js +112 -29
  338. package/dist/services/validators/printer-service.validation.js.map +1 -1
  339. package/dist/services/validators/settings-service.validation.js +78 -66
  340. package/dist/services/validators/settings-service.validation.js.map +1 -1
  341. package/dist/services/validators/user-service.validation.js +17 -16
  342. package/dist/services/validators/user-service.validation.js.map +1 -1
  343. package/dist/services/validators/yaml-service.validation.js +94 -51
  344. package/dist/services/validators/yaml-service.validation.js.map +1 -1
  345. package/dist/shared/default-http-client.builder.js +94 -0
  346. package/dist/shared/default-http-client.builder.js.map +1 -0
  347. package/dist/shared/load-controllers.js +20 -0
  348. package/dist/shared/load-controllers.js.map +1 -0
  349. package/dist/shared/runtime-settings.migration.js +46 -0
  350. package/dist/shared/runtime-settings.migration.js.map +1 -0
  351. package/dist/shared/websocket-rpc-extended.adapter.js +15 -14
  352. package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
  353. package/dist/shared/websocket.adapter.js +4 -5
  354. package/dist/shared/websocket.adapter.js.map +1 -1
  355. package/dist/state/file-upload-tracker.cache.js +33 -42
  356. package/dist/state/file-upload-tracker.cache.js.map +1 -1
  357. package/dist/state/file.cache.js +1 -1
  358. package/dist/state/file.cache.js.map +1 -1
  359. package/dist/state/floor.store.js +6 -6
  360. package/dist/state/floor.store.js.map +1 -1
  361. package/dist/state/printer-events.cache.js +21 -22
  362. package/dist/state/printer-events.cache.js.map +1 -1
  363. package/dist/state/printer-files.store.js +6 -8
  364. package/dist/state/printer-files.store.js.map +1 -1
  365. package/dist/state/printer-socket.store.js +27 -50
  366. package/dist/state/printer-socket.store.js.map +1 -1
  367. package/dist/state/printer-thumbnail.cache.js +5 -9
  368. package/dist/state/printer-thumbnail.cache.js.map +1 -1
  369. package/dist/state/printer.cache.js +14 -12
  370. package/dist/state/printer.cache.js.map +1 -1
  371. package/dist/state/settings.store.js +78 -51
  372. package/dist/state/settings.store.js.map +1 -1
  373. package/dist/state/socket-io.gateway.js +39 -36
  374. package/dist/state/socket-io.gateway.js.map +1 -1
  375. package/dist/state/test-printer-socket.store.js +20 -15
  376. package/dist/state/test-printer-socket.store.js.map +1 -1
  377. package/dist/state/validation/create-test-printer.validation.js +13 -10
  378. package/dist/state/validation/create-test-printer.validation.js.map +1 -1
  379. package/dist/task.presets.js.map +1 -1
  380. package/dist/tasks/boot.task.js +14 -19
  381. package/dist/tasks/boot.task.js.map +1 -1
  382. package/dist/tasks/client-bundle.task.js +1 -3
  383. package/dist/tasks/client-bundle.task.js.map +1 -1
  384. package/dist/tasks/print-completion.socketio.task.js +27 -28
  385. package/dist/tasks/print-completion.socketio.task.js.map +1 -1
  386. package/dist/tasks/printer-file-clean.task.js +6 -10
  387. package/dist/tasks/printer-file-clean.task.js.map +1 -1
  388. package/dist/tasks/printer-websocket-restore.task.js +4 -15
  389. package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
  390. package/dist/tasks/printer-websocket.task.js +2 -14
  391. package/dist/tasks/printer-websocket.task.js.map +1 -1
  392. package/dist/tasks/socketio.task.js +8 -35
  393. package/dist/tasks/socketio.task.js.map +1 -1
  394. package/dist/tasks/software-update.task.js +1 -1
  395. package/dist/tasks/software-update.task.js.map +1 -1
  396. package/dist/tasks.js +3 -3
  397. package/dist/tasks.js.map +1 -1
  398. package/dist/utils/array.util.js.map +1 -1
  399. package/dist/utils/cache/key-diff.cache.js.map +1 -1
  400. package/dist/utils/env.utils.js +0 -2
  401. package/dist/utils/env.utils.js.map +1 -1
  402. package/dist/utils/normalize-url.js +6 -3
  403. package/dist/utils/normalize-url.js.map +1 -1
  404. package/dist/utils/pretty-print.utils.js +1 -1
  405. package/dist/utils/pretty-print.utils.js.map +1 -1
  406. package/dist/utils/printer-type.utils.js.map +1 -1
  407. package/dist/utils/time.utils.js +7 -17
  408. package/dist/utils/time.utils.js.map +1 -1
  409. package/dist/utils/url.utils.js +11 -14
  410. package/dist/utils/url.utils.js.map +1 -1
  411. package/package.json +53 -55
  412. package/tsconfig.json +2 -1
  413. package/.yarn/releases/yarn-4.6.0.cjs +0 -934
  414. package/dist/consoles/check-ports.js +0 -170
  415. package/dist/consoles/check-ports.js.map +0 -1
  416. package/dist/consoles/sqlite-torm.js +0 -31
  417. package/dist/consoles/sqlite-torm.js.map +0 -1
  418. package/dist/consoles/upload-test.js +0 -52
  419. package/dist/consoles/upload-test.js.map +0 -1
  420. package/dist/controllers/plugin-firmware-update.controller.js +0 -236
  421. package/dist/controllers/plugin-firmware-update.controller.js.map +0 -1
  422. package/dist/entities/base.entity.js +0 -29
  423. package/dist/entities/base.entity.js.map +0 -1
  424. package/dist/entities/printer-file.entity.js +0 -140
  425. package/dist/entities/printer-file.entity.js.map +0 -1
  426. package/dist/handlers/cache-manager.js +0 -18
  427. package/dist/handlers/cache-manager.js.map +0 -1
  428. package/dist/models/PrinterFile.js +0 -44
  429. package/dist/models/PrinterFile.js.map +0 -1
  430. package/dist/services/core/task-manager.service.js.map +0 -1
  431. package/dist/services/octoprint/plugin-base.service.js +0 -101
  432. package/dist/services/octoprint/plugin-base.service.js.map +0 -1
  433. package/dist/services/octoprint/plugin-firmware-update.service.js +0 -100
  434. package/dist/services/octoprint/plugin-firmware-update.service.js.map +0 -1
  435. package/dist/services/octoprint/plugin-repository.cache.js +0 -45
  436. package/dist/services/octoprint/plugin-repository.cache.js.map +0 -1
  437. package/dist/utils/benchmark.util.js +0 -39
  438. package/dist/utils/benchmark.util.js.map +0 -1
  439. package/dist/utils/is-docker.js +0 -40
  440. package/dist/utils/is-docker.js.map +0 -1
  441. package/dist/utils/metric.utils.js +0 -35
  442. package/dist/utils/metric.utils.js.map +0 -1
  443. package/requests/moonraker/api_job.http +0 -5
  444. package/requests/moonraker/api_printer.http +0 -5
  445. package/requests/moonraker/api_settings.http +0 -5
  446. package/requests/moonraker/printer_info.http +0 -5
  447. package/requests/moonraker/printer_objects_list.http +0 -6
  448. package/requests/moonraker/printer_objects_pause_resume.http +0 -6
  449. package/requests/moonraker/printer_objects_print_stats.http +0 -6
  450. package/requests/moonraker/printer_objects_webhooks.http +0 -6
  451. package/requests/moonraker/server_info.http +0 -5
  452. package/requests/octoprint/octoprint-api-printer-current.http +0 -7
  453. package/requests/octoprint/octoprint-pluginmanager-plugins.http +0 -7
  454. package/requests/printer-file/get-partial-file-moonraker.http +0 -5
  455. package/requests/printer-file/get-thumbnails.http +0 -5
  456. package/requests/printer-file/reload-printer-thumbnails.http +0 -10
  457. package/requests/printer-file/testfile.gcode +0 -5665
  458. package/requests/printer-file/upload-file.http +0 -11
  459. package/requests/printer-file/upload-slicer-file.http +0 -11
  460. package/requests/printers/list.http +0 -5
package/.yarnrc.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  nodeLinker: node-modules
2
2
 
3
- yarnPath: .yarn/releases/yarn-4.6.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,10 +1,72 @@
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
+
52
+ # FDM Monster 19/03/2025 1.8.3
53
+
54
+ ## Fixes
55
+
56
+ - Introduce HttpClientBuilder pattern for Octoprint client
57
+ - Fix Sentry usage has updated
58
+ - Fix upload progress was not updated properly
59
+ - Fix failures and completions in file upload to OctoPrint/Moonraker were not consistently pushed over SocketIO
60
+ - Fix Moonraker file upload did not track upload, failure or completion
61
+ - Fix Moonraker file upload did not try-catch failures
62
+ - Fix thumbnail is now parsed after file upload instead of before, preventing premature thumbnail switch in case of upload failure.
63
+ - Fix file uploads were never unlinked, except for server startup.
64
+
3
65
  # FDM Monster 03/01/2025 1.8.2
4
66
 
5
- ## Changes
67
+ ## Changes
6
68
 
7
- Update client to 1.8.8
69
+ - Update client to 1.8.8
8
70
 
9
71
  ## Chore
10
72
 
@@ -24,7 +86,7 @@ Update client to 1.8.8
24
86
 
25
87
  - Update to client 1.8.4
26
88
 
27
- ## Fixes
89
+ ## Fixes
28
90
 
29
91
  - YAML import: regression caused all imports to fail validation
30
92
  - YAML import: a bug caused all import with printers without api key to fail validation
@@ -52,7 +114,7 @@ Update client to 1.8.8
52
114
 
53
115
  ## Fixes
54
116
 
55
- - UserService: MongoDB had incorrect root user checks and SQLite user service missed the check altogether. Now root user checks are robust.
117
+ - UserService: MongoDB had incorrect root user checks and SQLite user service missed the check altogether. Now root user checks are robust.
56
118
  - Camera API: GUEST should not have access to change cameras
57
119
  - YAML import validation: new API keys are not accepted by outdated YAML validation
58
120
 
@@ -73,7 +135,7 @@ Update client to 1.8.8
73
135
 
74
136
  - User API: new endpoint which registers user directly with roles and without verification step
75
137
 
76
- ## Fixes:
138
+ ## Fixes:
77
139
 
78
140
  - PrinterEventsCache: when printers and test printers are deleted, the printer events cache should not be allowed to be filled by late update events
79
141
 
@@ -90,7 +152,7 @@ Update client to 1.8.8
90
152
  ## Fixes:
91
153
 
92
154
  - API & Service validators: adjust max length of apiKey property validation to 43 to allow new `secrets` based OctoPrint api keys
93
-
155
+
94
156
  # FDM Monster 04/11/2024 1.7.1
95
157
 
96
158
  ## Changes:
@@ -139,7 +201,7 @@ Update client to 1.8.8
139
201
  - Used attributes for PrinterFilesController
140
202
  - Renamed OctoPrintApiService to OctoprintClient
141
203
  - Switch to 1.6.x client UI version range
142
- - 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).
143
205
 
144
206
  ## Fixes:
145
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