@fdm-monster/server 1.9.4 → 2.0.0

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 (393) hide show
  1. package/.env.template +8 -7
  2. package/.yarn/install-state.gz +0 -0
  3. package/CONTRIBUTING.md +5 -5
  4. package/README.md +9 -8
  5. package/RELEASE_NOTES.MD +52 -0
  6. package/SECURITY.md +1 -1
  7. package/biome.json +8 -5
  8. package/dist/consoles/download-github-releases.js +3 -3
  9. package/dist/consoles/launch-http-servers.js +4 -4
  10. package/dist/consoles/launch-http-servers.js.map +1 -1
  11. package/dist/consoles/mock-bambu.server.js +50 -30
  12. package/dist/consoles/mock-bambu.server.js.map +1 -1
  13. package/dist/consoles/mock-camera/default-image.js +13 -0
  14. package/dist/consoles/mock-camera/default-image.js.map +1 -0
  15. package/dist/consoles/mock-camera/mock-camera.server.js +160 -0
  16. package/dist/consoles/mock-camera/mock-camera.server.js.map +1 -0
  17. package/dist/consoles/mock-octoprint.server.js +281 -73
  18. package/dist/consoles/mock-octoprint.server.js.map +1 -1
  19. package/dist/consoles/mock-prusalink.server.js +17 -17
  20. package/dist/consoles/mock-prusalink.server.js.map +1 -1
  21. package/dist/consoles/typeorm-create.js +135 -0
  22. package/dist/consoles/typeorm-create.js.map +1 -0
  23. package/dist/consoles/typeorm-generate.js +8 -8
  24. package/dist/consoles/typeorm-generate.js.map +1 -1
  25. package/dist/consoles/utils/api-messages.js.map +1 -1
  26. package/dist/constants/authorization.constants.js +25 -31
  27. package/dist/constants/authorization.constants.js.map +1 -1
  28. package/dist/constants/event.constants.js.map +1 -1
  29. package/dist/constants/server-settings.constants.js +3 -19
  30. package/dist/constants/server-settings.constants.js.map +1 -1
  31. package/dist/container.js +43 -59
  32. package/dist/container.js.map +1 -1
  33. package/dist/container.tokens.js +9 -6
  34. package/dist/container.tokens.js.map +1 -1
  35. package/dist/controllers/auth.controller.js +1 -1
  36. package/dist/controllers/auth.controller.js.map +1 -1
  37. package/dist/controllers/batch-call.controller.js +7 -25
  38. package/dist/controllers/batch-call.controller.js.map +1 -1
  39. package/dist/controllers/file-storage.controller.js +248 -0
  40. package/dist/controllers/file-storage.controller.js.map +1 -0
  41. package/dist/controllers/first-time-setup.controller.js +6 -5
  42. package/dist/controllers/first-time-setup.controller.js.map +1 -1
  43. package/dist/controllers/floor.controller.js +12 -12
  44. package/dist/controllers/floor.controller.js.map +1 -1
  45. package/dist/controllers/metrics.controller.js.map +1 -1
  46. package/dist/controllers/print-job.controller.js +666 -0
  47. package/dist/controllers/print-job.controller.js.map +1 -0
  48. package/dist/controllers/print-queue.controller.js +375 -0
  49. package/dist/controllers/print-queue.controller.js.map +1 -0
  50. package/dist/controllers/printer-files.controller.js +88 -59
  51. package/dist/controllers/printer-files.controller.js.map +1 -1
  52. package/dist/controllers/printer-settings.controller.js +0 -21
  53. package/dist/controllers/printer-settings.controller.js.map +1 -1
  54. package/dist/controllers/{printer-group.controller.js → printer-tag.controller.js} +51 -34
  55. package/dist/controllers/printer-tag.controller.js.map +1 -0
  56. package/dist/controllers/printer.controller.js +21 -7
  57. package/dist/controllers/printer.controller.js.map +1 -1
  58. package/dist/controllers/server-private.controller.js +2 -1
  59. package/dist/controllers/server-private.controller.js.map +1 -1
  60. package/dist/controllers/server-public.controller.js +11 -15
  61. package/dist/controllers/server-public.controller.js.map +1 -1
  62. package/dist/controllers/settings.controller.js +0 -68
  63. package/dist/controllers/settings.controller.js.map +1 -1
  64. package/dist/controllers/slicer-compat.controller.js +216 -0
  65. package/dist/controllers/slicer-compat.controller.js.map +1 -0
  66. package/dist/controllers/user.controller.js +8 -12
  67. package/dist/controllers/user.controller.js.map +1 -1
  68. package/dist/controllers/validation/batch-controller.validation.js +13 -13
  69. package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
  70. package/dist/controllers/validation/generic.validation.js +4 -8
  71. package/dist/controllers/validation/generic.validation.js.map +1 -1
  72. package/dist/controllers/validation/printer-files-controller.validation.js +2 -2
  73. package/dist/controllers/validation/user-controller.validation.js +14 -9
  74. package/dist/controllers/validation/user-controller.validation.js.map +1 -1
  75. package/dist/data-source.js +25 -12
  76. package/dist/data-source.js.map +1 -1
  77. package/dist/entities/camera-stream.entity.js +2 -1
  78. package/dist/entities/camera-stream.entity.js.map +1 -1
  79. package/dist/entities/floor.entity.js +3 -5
  80. package/dist/entities/floor.entity.js.map +1 -1
  81. package/dist/entities/index.js +15 -11
  82. package/dist/entities/index.js.map +1 -1
  83. package/dist/entities/print-job.entity.js +195 -0
  84. package/dist/entities/print-job.entity.js.map +1 -0
  85. package/dist/entities/{printer-group.entity.js → printer-tag.entity.js} +17 -17
  86. package/dist/entities/printer-tag.entity.js.map +1 -0
  87. package/dist/entities/printer.entity.js +4 -10
  88. package/dist/entities/printer.entity.js.map +1 -1
  89. package/dist/entities/settings.entity.js +3 -12
  90. package/dist/entities/settings.entity.js.map +1 -1
  91. package/dist/entities/{group.entity.js → tag.entity.js} +15 -8
  92. package/dist/entities/tag.entity.js.map +1 -0
  93. package/dist/handlers/logging/file-logging.transport.js.map +1 -1
  94. package/dist/handlers/logging/static.logger.js.map +1 -1
  95. package/dist/index.js +8 -2
  96. package/dist/index.js.map +1 -1
  97. package/dist/middleware/authenticate.js +4 -4
  98. package/dist/middleware/authenticate.js.map +1 -1
  99. package/dist/middleware/database.js +1 -1
  100. package/dist/middleware/exception.filter.js +114 -90
  101. package/dist/middleware/exception.filter.js.map +1 -1
  102. package/dist/middleware/global.middleware.js +10 -18
  103. package/dist/middleware/global.middleware.js.map +1 -1
  104. package/dist/middleware/param-converter.middleware.js +5 -13
  105. package/dist/middleware/param-converter.middleware.js.map +1 -1
  106. package/dist/middleware/passport.js +2 -2
  107. package/dist/middleware/passport.js.map +1 -1
  108. package/dist/middleware/printer-resolver.js.map +1 -1
  109. package/dist/middleware/printer.js +3 -2
  110. package/dist/middleware/printer.js.map +1 -1
  111. package/dist/middleware/socketio.middleware.js.map +1 -1
  112. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +1 -1
  113. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -1
  114. package/dist/migrations/1766576698569-DropPermissions.js +28 -0
  115. package/dist/migrations/1766576698569-DropPermissions.js.map +1 -0
  116. package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js +186 -0
  117. package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -0
  118. package/dist/migrations/1767279607392-DropCustomGcode.js +31 -0
  119. package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -0
  120. package/dist/migrations/1767291804417-DropPrintCompletions.js +37 -0
  121. package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -0
  122. package/dist/migrations/1767352862576-DropSettingsFileClean.js +88 -0
  123. package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -0
  124. package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js +107 -0
  125. package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -0
  126. package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js +62 -0
  127. package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -0
  128. package/dist/migrations/1767432108916-RenameGroupToTag.js +86 -0
  129. package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -0
  130. package/dist/migrations/1767451444137-AddPrintJob.js +207 -0
  131. package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -0
  132. package/dist/server.constants.js +9 -17
  133. package/dist/server.constants.js.map +1 -1
  134. package/dist/server.core.js +3 -7
  135. package/dist/server.core.js.map +1 -1
  136. package/dist/server.env.js +4 -49
  137. package/dist/server.env.js.map +1 -1
  138. package/dist/server.host.js +26 -44
  139. package/dist/server.host.js.map +1 -1
  140. package/dist/services/authentication/auth.service.js.map +1 -1
  141. package/dist/services/authentication/jwt.service.js.map +1 -1
  142. package/dist/services/bambu/bambu-ftp.adapter.js +3 -3
  143. package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
  144. package/dist/services/bambu/bambu-mqtt.adapter.js +74 -77
  145. package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
  146. package/dist/services/bambu/bambu.client.js.map +1 -1
  147. package/dist/services/bambu.api.js +11 -0
  148. package/dist/services/bambu.api.js.map +1 -1
  149. package/dist/services/core/batch-call.service.js +0 -25
  150. package/dist/services/core/batch-call.service.js.map +1 -1
  151. package/dist/services/core/multer.service.js +5 -9
  152. package/dist/services/core/multer.service.js.map +1 -1
  153. package/dist/services/core/yaml.service.js +219 -187
  154. package/dist/services/core/yaml.service.js.map +1 -1
  155. package/dist/services/file-analysis.service.js +146 -0
  156. package/dist/services/file-analysis.service.js.map +1 -0
  157. package/dist/services/file-storage.service.js +386 -0
  158. package/dist/services/file-storage.service.js.map +1 -0
  159. package/dist/services/interfaces/camera-stream.dto.js +2 -2
  160. package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
  161. package/dist/services/interfaces/floor.dto.js +3 -3
  162. package/dist/services/interfaces/floor.dto.js.map +1 -1
  163. package/dist/services/interfaces/{printer-group.dto.js → printer-tag.dto.js} +9 -8
  164. package/dist/services/interfaces/printer-tag.dto.js.map +1 -0
  165. package/dist/services/interfaces/{print-completion.interface.js → printer-tag.service.interface.js} +1 -1
  166. package/dist/services/interfaces/{printer-group.service.interface.js.map → printer-tag.service.interface.js.map} +1 -1
  167. package/dist/services/interfaces/printer.dto.js +2 -2
  168. package/dist/services/interfaces/printer.dto.js.map +1 -1
  169. package/dist/services/interfaces/refresh-token.dto.js.map +1 -1
  170. package/dist/services/interfaces/role.dto.js.map +1 -1
  171. package/dist/services/interfaces/settings.dto.js +0 -1
  172. package/dist/services/interfaces/settings.dto.js.map +1 -1
  173. package/dist/services/interfaces/{group.dto.js → tag.dto.js} +1 -1
  174. package/dist/services/interfaces/tag.dto.js.map +1 -0
  175. package/dist/services/interfaces/user.dto.js.map +1 -1
  176. package/dist/services/moonraker/constants/moonraker-event.dto.js.map +1 -1
  177. package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
  178. package/dist/services/moonraker/moonraker.client.js.map +1 -1
  179. package/dist/services/moonraker.api.js +3 -0
  180. package/dist/services/moonraker.api.js.map +1 -1
  181. package/dist/services/octoprint/dto/files/gcode-analysis.dto.js.map +1 -0
  182. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
  183. package/dist/services/octoprint/octoprint-api.routes.js +0 -7
  184. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  185. package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
  186. package/dist/services/octoprint/octoprint.client.js +0 -4
  187. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  188. package/dist/services/octoprint.api.js +3 -0
  189. package/dist/services/octoprint.api.js.map +1 -1
  190. package/dist/services/orm/base.service.js.map +1 -1
  191. package/dist/services/orm/camera-stream.service.js.map +1 -1
  192. package/dist/services/orm/floor-position.service.js.map +1 -1
  193. package/dist/services/orm/floor.service.js +12 -19
  194. package/dist/services/orm/floor.service.js.map +1 -1
  195. package/dist/services/orm/permission.service.js +3 -54
  196. package/dist/services/orm/permission.service.js.map +1 -1
  197. package/dist/services/orm/print-job.service.js +539 -0
  198. package/dist/services/orm/print-job.service.js.map +1 -0
  199. package/dist/services/orm/printer-tag.service.js +120 -0
  200. package/dist/services/orm/printer-tag.service.js.map +1 -0
  201. package/dist/services/orm/printer.service.js.map +1 -1
  202. package/dist/services/orm/refresh-token.service.js.map +1 -1
  203. package/dist/services/orm/role.service.js +25 -39
  204. package/dist/services/orm/role.service.js.map +1 -1
  205. package/dist/services/orm/settings.service.js +4 -15
  206. package/dist/services/orm/settings.service.js.map +1 -1
  207. package/dist/services/orm/user.service.js +17 -13
  208. package/dist/services/orm/user.service.js.map +1 -1
  209. package/dist/services/print-file-downloader.service.js +169 -0
  210. package/dist/services/print-file-downloader.service.js.map +1 -0
  211. package/dist/services/print-queue.service.js +268 -0
  212. package/dist/services/print-queue.service.js.map +1 -0
  213. package/dist/services/printer-api.factory.js +1 -1
  214. package/dist/services/printer-api.factory.js.map +1 -1
  215. package/dist/services/printer-api.interface.js.map +1 -1
  216. package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -1
  217. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +1 -3
  218. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
  219. package/dist/services/prusa-link/prusa-link.api.js +4 -1
  220. package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
  221. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -1
  222. package/dist/services/validators/floor-service.validation.js +25 -31
  223. package/dist/services/validators/floor-service.validation.js.map +1 -1
  224. package/dist/services/validators/print-job.validation.js +31 -0
  225. package/dist/services/validators/print-job.validation.js.map +1 -0
  226. package/dist/services/validators/settings-service.validation.js +0 -22
  227. package/dist/services/validators/settings-service.validation.js.map +1 -1
  228. package/dist/services/validators/user-service.validation.js +15 -10
  229. package/dist/services/validators/user-service.validation.js.map +1 -1
  230. package/dist/services/validators/yaml-service.validation.js +8 -14
  231. package/dist/services/validators/yaml-service.validation.js.map +1 -1
  232. package/dist/shared/load-controllers.js +2 -1
  233. package/dist/shared/load-controllers.js.map +1 -1
  234. package/dist/shared/runtime-settings.migration.js +1 -11
  235. package/dist/shared/runtime-settings.migration.js.map +1 -1
  236. package/dist/shared/websocket-rpc-extended.adapter.js +13 -4
  237. package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
  238. package/dist/shared/websocket.adapter.js.map +1 -1
  239. package/dist/state/file-upload-tracker.cache.js.map +1 -1
  240. package/dist/state/file.cache.js +6 -6
  241. package/dist/state/file.cache.js.map +1 -1
  242. package/dist/state/floor.store.js +3 -10
  243. package/dist/state/floor.store.js.map +1 -1
  244. package/dist/state/printer-events.cache.js +180 -20
  245. package/dist/state/printer-events.cache.js.map +1 -1
  246. package/dist/state/printer-files.store.js.map +1 -1
  247. package/dist/state/printer-socket.store.js +25 -20
  248. package/dist/state/printer-socket.store.js.map +1 -1
  249. package/dist/state/printer-thumbnail.cache.js +98 -188
  250. package/dist/state/printer-thumbnail.cache.js.map +1 -1
  251. package/dist/state/printer.cache.js +3 -13
  252. package/dist/state/printer.cache.js.map +1 -1
  253. package/dist/state/settings.store.js +4 -42
  254. package/dist/state/settings.store.js.map +1 -1
  255. package/dist/state/socket-io.gateway.js +1 -1
  256. package/dist/state/socket-io.gateway.js.map +1 -1
  257. package/dist/state/test-printer-socket.store.js +6 -3
  258. package/dist/state/test-printer-socket.store.js.map +1 -1
  259. package/dist/tasks/boot.task.js +11 -91
  260. package/dist/tasks/boot.task.js.map +1 -1
  261. package/dist/tasks/print-job-analysis.task.js +116 -0
  262. package/dist/tasks/print-job-analysis.task.js.map +1 -0
  263. package/dist/tasks/printer-files-load.task.js +29 -0
  264. package/dist/tasks/printer-files-load.task.js.map +1 -0
  265. package/dist/tasks/socketio.task.js +1 -1
  266. package/dist/tasks/socketio.task.js.map +1 -1
  267. package/dist/tasks.js +3 -2
  268. package/dist/tasks.js.map +1 -1
  269. package/dist/utils/cache/key-diff.cache.js +20 -61
  270. package/dist/utils/cache/key-diff.cache.js.map +1 -1
  271. package/dist/utils/parsers/3mf.parser.js +337 -0
  272. package/dist/utils/parsers/3mf.parser.js.map +1 -0
  273. package/dist/utils/parsers/bgcode.parser.js +223 -0
  274. package/dist/utils/parsers/bgcode.parser.js.map +1 -0
  275. package/dist/utils/parsers/gcode.parser.js +254 -0
  276. package/dist/utils/parsers/gcode.parser.js.map +1 -0
  277. package/dist/utils/swagger/decorators.js +39 -0
  278. package/dist/utils/swagger/decorators.js.map +1 -0
  279. package/dist/utils/swagger/generator.js +196 -0
  280. package/dist/utils/swagger/generator.js.map +1 -0
  281. package/dist/utils/swagger/swagger.js +93 -0
  282. package/dist/utils/swagger/swagger.js.map +1 -0
  283. package/package.json +24 -30
  284. package/dist/controllers/custom-gcode.controller.js +0 -150
  285. package/dist/controllers/custom-gcode.controller.js.map +0 -1
  286. package/dist/controllers/print-completion.controller.js +0 -118
  287. package/dist/controllers/print-completion.controller.js.map +0 -1
  288. package/dist/controllers/printer-group.controller.js.map +0 -1
  289. package/dist/entities/custom-gcode.entity.js +0 -49
  290. package/dist/entities/custom-gcode.entity.js.map +0 -1
  291. package/dist/entities/group.entity.js.map +0 -1
  292. package/dist/entities/permission.entity.js +0 -37
  293. package/dist/entities/permission.entity.js.map +0 -1
  294. package/dist/entities/print-completion.entity.js +0 -90
  295. package/dist/entities/print-completion.entity.js.map +0 -1
  296. package/dist/entities/printer-group.entity.js.map +0 -1
  297. package/dist/models/Auth/Permission.js +0 -20
  298. package/dist/models/Auth/Permission.js.map +0 -1
  299. package/dist/models/Auth/RefreshToken.js +0 -41
  300. package/dist/models/Auth/RefreshToken.js.map +0 -1
  301. package/dist/models/Auth/Role.js +0 -20
  302. package/dist/models/Auth/Role.js.map +0 -1
  303. package/dist/models/Auth/User.js +0 -49
  304. package/dist/models/Auth/User.js.map +0 -1
  305. package/dist/models/CameraStream.js +0 -49
  306. package/dist/models/CameraStream.js.map +0 -1
  307. package/dist/models/CustomGcode.js +0 -28
  308. package/dist/models/CustomGcode.js.map +0 -1
  309. package/dist/models/Floor.js +0 -33
  310. package/dist/models/Floor.js.map +0 -1
  311. package/dist/models/FloorPrinter.js +0 -38
  312. package/dist/models/FloorPrinter.js.map +0 -1
  313. package/dist/models/PrintCompletion.js +0 -40
  314. package/dist/models/PrintCompletion.js.map +0 -1
  315. package/dist/models/Printer.js +0 -78
  316. package/dist/models/Printer.js.map +0 -1
  317. package/dist/models/Settings.js +0 -150
  318. package/dist/models/Settings.js.map +0 -1
  319. package/dist/models/index.js +0 -54
  320. package/dist/models/index.js.map +0 -1
  321. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js +0 -45
  322. package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +0 -1
  323. package/dist/mongo-migrations/20210907173950-printers-enabled.js +0 -35
  324. package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +0 -1
  325. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js +0 -35
  326. package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +0 -1
  327. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js +0 -60
  328. package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +0 -1
  329. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js +0 -30
  330. package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +0 -1
  331. package/dist/mongo-migrations/20230716065316-user-remove-name.js +0 -30
  332. package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +0 -1
  333. package/dist/mongo-migrations/20231111081809-printer-flatten-name.js +0 -35
  334. package/dist/mongo-migrations/20231111081809-printer-flatten-name.js.map +0 -1
  335. package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js +0 -41
  336. package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js.map +0 -1
  337. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js +0 -41
  338. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +0 -1
  339. package/dist/services/interfaces/custom-gcode.dto.js +0 -18
  340. package/dist/services/interfaces/custom-gcode.dto.js.map +0 -1
  341. package/dist/services/interfaces/custom-gcode.service.interface.js +0 -6
  342. package/dist/services/interfaces/custom-gcode.service.interface.js.map +0 -1
  343. package/dist/services/interfaces/gcode-analysis.dto.js.map +0 -1
  344. package/dist/services/interfaces/group.dto.js.map +0 -1
  345. package/dist/services/interfaces/permission.dto.js +0 -16
  346. package/dist/services/interfaces/permission.dto.js.map +0 -1
  347. package/dist/services/interfaces/print-completion-context.dto.js +0 -6
  348. package/dist/services/interfaces/print-completion-context.dto.js.map +0 -1
  349. package/dist/services/interfaces/print-completion.dto.js +0 -38
  350. package/dist/services/interfaces/print-completion.dto.js.map +0 -1
  351. package/dist/services/interfaces/print-completion.interface.js.map +0 -1
  352. package/dist/services/interfaces/printer-group.dto.js.map +0 -1
  353. package/dist/services/interfaces/printer-group.service.interface.js +0 -6
  354. package/dist/services/mongoose/camera-stream.service.js +0 -67
  355. package/dist/services/mongoose/camera-stream.service.js.map +0 -1
  356. package/dist/services/mongoose/custom-gcode.service.js +0 -50
  357. package/dist/services/mongoose/custom-gcode.service.js.map +0 -1
  358. package/dist/services/mongoose/floor.service.js +0 -139
  359. package/dist/services/mongoose/floor.service.js.map +0 -1
  360. package/dist/services/mongoose/permission.service.js +0 -73
  361. package/dist/services/mongoose/permission.service.js.map +0 -1
  362. package/dist/services/mongoose/print-completion.service.js +0 -134
  363. package/dist/services/mongoose/print-completion.service.js.map +0 -1
  364. package/dist/services/mongoose/print-completion.shared.js +0 -59
  365. package/dist/services/mongoose/print-completion.shared.js.map +0 -1
  366. package/dist/services/mongoose/printer.service.js +0 -216
  367. package/dist/services/mongoose/printer.service.js.map +0 -1
  368. package/dist/services/mongoose/refresh-token.service.js +0 -104
  369. package/dist/services/mongoose/refresh-token.service.js.map +0 -1
  370. package/dist/services/mongoose/role.service.js +0 -132
  371. package/dist/services/mongoose/role.service.js.map +0 -1
  372. package/dist/services/mongoose/settings.service.js +0 -124
  373. package/dist/services/mongoose/settings.service.js.map +0 -1
  374. package/dist/services/mongoose/user.service.js +0 -180
  375. package/dist/services/mongoose/user.service.js.map +0 -1
  376. package/dist/services/orm/custom-gcode.service.js +0 -42
  377. package/dist/services/orm/custom-gcode.service.js.map +0 -1
  378. package/dist/services/orm/print-completion.service.js +0 -87
  379. package/dist/services/orm/print-completion.service.js.map +0 -1
  380. package/dist/services/orm/printer-group.service.js +0 -109
  381. package/dist/services/orm/printer-group.service.js.map +0 -1
  382. package/dist/services/validators/camera-service.validation.js +0 -19
  383. package/dist/services/validators/camera-service.validation.js.map +0 -1
  384. package/dist/services/validators/print-completion-service.validation.js +0 -33
  385. package/dist/services/validators/print-completion-service.validation.js.map +0 -1
  386. package/dist/shared.constants.js +0 -15
  387. package/dist/shared.constants.js.map +0 -1
  388. package/dist/tasks/print-completion.socketio.task.js +0 -91
  389. package/dist/tasks/print-completion.socketio.task.js.map +0 -1
  390. package/dist/tasks/printer-file-clean.task.js +0 -74
  391. package/dist/tasks/printer-file-clean.task.js.map +0 -1
  392. package/migrate-mongo-config.js +0 -45
  393. /package/dist/services/{interfaces → octoprint/dto/files}/gcode-analysis.dto.js +0 -0
package/.env.template CHANGED
@@ -2,8 +2,6 @@
2
2
  SERVER_PORT=4000
3
3
  # Optional, default: production, possible values: "development", "production"
4
4
  NODE_ENV=development
5
- # Optional, default: mongodb://127.0.0.1:27017/fdm-monster
6
- MONGO=mongodb://127.0.0.1:27017/fdm-monster
7
5
  ENABLE_COLORED_LOGS=false
8
6
 
9
7
  # Github Personal Access Token, allows downloading the Client bundle without hitting a Github API rate limit
@@ -26,7 +24,7 @@ OVERRIDE_JWT_EXPIRES_IN=3600
26
24
  # Optional, changing this will invalidate all existing logins
27
25
  OVERRIDE_JWT_ISSUER=fdm-monster-server-2023
28
26
  # Optional, changing this will invalidate all existing logins
29
- OVERRIDE_JWT_AUDIENCE=fdm-monster-client-2023
27
+ OVERRIDE_JWT_AUDIENCE=fdm-monster-client-next-2026
30
28
 
31
29
  # Demo mode, will set wizard to completed
32
30
  OVERRIDE_IS_DEMO_MODE=true
@@ -37,12 +35,9 @@ OVERRIDE_DEMO_PASSWORD=demo2023
37
35
  # Optional, default: ADMIN, logical values: "ADMIN", "OPERATOR"
38
36
  OVERRIDE_DEMO_ROLE=ADMIN
39
37
 
40
- # Debug express routes
41
- DEBUG_ROUTES=false
38
+ # Debug socket states
42
39
  DEBUG_SOCKET_STATES=false
43
40
 
44
- # Enables TypeORM
45
- ENABLE_EXPERIMENTAL_TYPEORM=false
46
41
  # Saves SQLite database to ./database/fdm-monster.sqlite
47
42
  DATABASE_PATH=./database
48
43
  # Optional, default: fdm-monster.sqlite
@@ -52,3 +47,9 @@ ENABLE_PROMETHEUS=false
52
47
  ENABLE_LOKI=false
53
48
  LOKI_ADDRESS=
54
49
  ENABLE_PROMETHEUS_METRICS=false
50
+
51
+ # Swagger/OpenAPI Documentation
52
+ # Optional, default: false. Set to true to disable Swagger UI and OpenAPI documentation endpoints
53
+ DISABLE_SWAGGER_OPENAPI=false
54
+ # Optional, default: false. Set to true to generate swagger.json file in media folder
55
+ GENERATE_SWAGGER_JSON=false
Binary file
package/CONTRIBUTING.md CHANGED
@@ -35,7 +35,7 @@ Sorry we do not have a documentation with F.A.Q. yet. Please visit us on discord
35
35
  FDM Monster currently consists of two active repositories:
36
36
 
37
37
  - [FDM Monster](https://github.com/fdm-monster/fdm-monster) - the server
38
- - [FDM Monster Client](https://github.com/fdm-monster/fdm-monster-client) - the client UI
38
+ - [FDM Monster Client](https://github.com/fdm-monster/fdm-monster-client-next) - the client UI
39
39
  - [FDM Connector](https://github.com/fdm-monster/fdm-connector) - the OctoPrint plugin (not in use yet)
40
40
 
41
41
  ### Design decisions
@@ -43,7 +43,7 @@ FDM Monster currently consists of two active repositories:
43
43
  Server design
44
44
 
45
45
  - **FDM Monster server** was chosen to be a Node.js server. The backend is currently structured as a REST API. It might be surprising that we use `awilix` as Inversion-of-Control implementation, but if you study the resulting architecture it will show its fresh and quick-to-develop benefits rapidly.
46
- - **FDM Monster server** runs using MongoDB as database and Mongoose as ORM
46
+ - **FDM Monster server** runs using Sqlite as database and Typeorm as ORM
47
47
  - **FDM Monster server** caches data in-memory using a self-written store/cache system between the database (no redis!)
48
48
  - **FDM Monster server** API is built up using `awilix-express` and uses `node-input-validation` as API validation
49
49
  - **FDM Monster server** is equipped with a task scheduler (ToadScheduler) which gives the capability to run workloads in the background.
@@ -94,7 +94,7 @@ Explain the problem and include additional details to help maintainers reproduce
94
94
  You might be delighted to know that the FDM Monster server was structured consistently for other developers to be able to work with it rapidly.
95
95
 
96
96
  1. Clone the repository from the development branch (git clone https://github.com/fdm-monster/fdm-monster.git)
97
- 2. Ensure MongoDb (5+) and Node (v16) are installed
97
+ 2. Ensure Node (v24) is installed
98
98
  3. Adjust/create a `.env` with NODE_ENV=development **inside the server folder**
99
99
  4. `npm install` **inside the server folder** to create the `node_modules` folder
100
100
  5. Run the server with `npm run dev` to let nodemon detect and apply any changes you make
@@ -109,11 +109,11 @@ Please make sure you understand the meaning of these files/folders:
109
109
  - server.constants.js
110
110
  - constants
111
111
  - controllers (API)
112
+ - entities (typeorm)
112
113
  - exceptions
113
114
  - handlers
114
115
  - middleware
115
- - models (mongoose)
116
- - migrations (mongodb/mongoose)
116
+ - migrations (typeorm/sqlite)
117
117
  - services // services/octoprint/...
118
118
  - state // state/printer.state.js // state/files.store.js // state/data/...
119
119
  - tasks // tasks/boot.task.js // printer-websocket.task.js
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <p align="center" style="margin-bottom: 0">
2
2
  <a href="https://docs.fdm-monster.net/" target="_blank" rel="noopener noreferrer">
3
- <img width="150" src="https://github.com/fdm-monster/fdm-monster-client/blob/main/public/img/logo.png?raw=true" alt="FDM Monster">
3
+ <img width="150" src="https://github.com/fdm-monster/fdm-monster-client-next/blob/main/public/img/logo.png?raw=true" alt="FDM Monster">
4
4
  </a>
5
5
  </p>
6
6
  <h1 align="center" style="padding-top: 0; margin-top: 10px">FDM Monster</h1>
@@ -38,7 +38,7 @@ Here is a list of features that make FDM Monster stand out:
38
38
  - Import printers from software like OctoFarm
39
39
  - YAML backup and import
40
40
  - Thumbnail support
41
- - SQLite as well as MongoDB support
41
+ - SQLite database
42
42
 
43
43
  ## Installation methods ⚙️
44
44
 
@@ -75,7 +75,7 @@ Thanks to the following parties for their financial support:
75
75
 
76
76
  | Tier 1 | Tier 2 | Tier 3 | Tier 4 | One time |
77
77
  |--------|--------|--------|--------|-----------|
78
- | | [thatguymendel](https://github.com/thatguymendel) | | [doucettom](https://github.com/doucettom) | [th3dstudio](https://github.com/th3dstudio) |
78
+ | | [thatguymendel](https://github.com/thatguymendel) | [MrHitchcock](https://github.com/MrHitchcock) | [doucettom](https://github.com/doucettom) | [th3dstudio](https://github.com/th3dstudio) |
79
79
 
80
80
 
81
81
  ## Contributors ✨
@@ -83,7 +83,7 @@ Thanks to the following parties for their financial support:
83
83
  These are the people involved in the project. Find the meaning of the emoji keys [here](https://allcontributors.org/docs/en/emoji-key).
84
84
 
85
85
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
86
- [![All Contributors](https://img.shields.io/badge/all_contributors-23-orange.svg?style=flat-square)](#contributors-)
86
+ [![All Contributors](https://img.shields.io/badge/all_contributors-24-orange.svg?style=flat-square)](#contributors-)
87
87
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
88
88
 
89
89
  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
@@ -119,6 +119,7 @@ These are the people involved in the project. Find the meaning of the emoji keys
119
119
  <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>
120
120
  <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>
121
121
  <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
+ <td align="center" valign="top" width="10%"><a href="http://design.zagethy.com"><img src="https://avatars.githubusercontent.com/u/6075740?v=4?s=40" width="40px;" alt="Zagethy"/><br /><sub><b>Zagethy</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3AZagethy" title="Bug reports">🐛</a></td>
122
123
  </tr>
123
124
  </tbody>
124
125
  </table>
@@ -147,7 +148,6 @@ the [CONTRIBUTING](CONTRIBUTING.md) file.
147
148
  ### Development Progress
148
149
 
149
150
  - [x] :rocket: Docker amd64 image
150
- - [x] 🛡️ MongoDB 5 & 6 support
151
151
  - [x] :rocket: Quick copy paste of FDM Monster printers
152
152
  - [x] 🛡️ Complete API test coverage
153
153
  - [x] :rocket: Floor management
@@ -158,13 +158,14 @@ the [CONTRIBUTING](CONTRIBUTING.md) file.
158
158
  - [x] 🔌 Raspberry Pi image (https://github.com/fdm-monster/MonsterPi)
159
159
  - [x] :rocket: Documentation (https://docs.fdm-monster.net)
160
160
  - [x] 🛡️ Login and user management
161
- - [x] OctoFarm export
161
+ - [x] OctoFarm printer import
162
162
  - [x] Klipper and Moonraker API integration
163
163
  - [x] GCode Thumbnail support
164
164
  - [x] `.bgcode` support
165
165
  - [x] Modernized UI layout and tile design
166
- - [ ] History and statistics
167
- - [ ] Extended webcam integration
166
+ - [x] History and statistics
167
+ - [x] Print Queue
168
+ - [x] Extended webcam integration
168
169
  - [ ] Spoolman integration
169
170
 
170
171
  ## License
package/RELEASE_NOTES.MD CHANGED
@@ -1,5 +1,57 @@
1
1
  # Develop
2
2
 
3
+ # FDM Monster 2.0.0
4
+
5
+ ## Feat
6
+
7
+ - All UI features in https://github.com/fdm-monster/fdm-monster-client-next/blob/main/RELEASE_NOTES.MD
8
+ - Add mock camera console to project (for development)
9
+ - Add swagger and OpenAPI integration
10
+ - UI Client is now fdm-monster-client-next at v2.0.0
11
+ - Add color option to tag
12
+ - Add API to upload from slicer
13
+ - Change API to /api/v2
14
+ - Queue
15
+ - PrintJob
16
+ - File Analysis
17
+
18
+ ## Fixes
19
+
20
+ - Renames PrinterFloors permission group to Floors
21
+ - Load printer files in background instead of synchronously
22
+ - BambuLab connection rejections cannot cause server crashes anymore
23
+ - Default grid size is now 4 by 2 (which is less overwhelming)
24
+ - Floor service wouldn't update printer position, comparison was x==x, y==x
25
+ - ExceptionFilter now logs using loggerFactory
26
+ - YAML import service was brittle against printer type failures, added robustness
27
+ - Camera should tolerate printer deletion: SET NULL applied to Foreign Key
28
+ - Quick stop API endpoint moved to printer controller, removing the need for custom gcode api controller.
29
+ - Drop printer file clean task, outdated concept
30
+ - File uploads now go to media/file-uploads instead of media
31
+ - First-time-setup api filter now allows swagger endpoints
32
+ - Floor order change not properly implemented in API service
33
+ - Remove experimental thumbnail support
34
+
35
+ ## Chore
36
+ - Remove batch/single set gcode analysis to false
37
+ - Removed client next experimental setting
38
+ - Drop unused Custom Gcode table
39
+ - Drop broken PrintCompletion table
40
+ - Rename PrinterGroup to PrinterTag, and Group to Tag
41
+
42
+ # FDM Monster 2.0.0-rc1
43
+
44
+ ## Features
45
+
46
+ - Remove mongodb support (breaking change)
47
+ - Reimplement role system based on RoleName (not id and name)
48
+ - Cleanup and remove unused permission table
49
+ - Key-diff cache is now Map instead of Object
50
+
51
+ ## Fixes
52
+
53
+ - Update printer now replaces old socket with new one
54
+
3
55
  # FDM Monster 1.9.4
4
56
 
5
57
  ## Fixes
package/SECURITY.md CHANGED
@@ -7,7 +7,7 @@ currently being supported with security updates.
7
7
 
8
8
  | Version | Supported |
9
9
  | ------- | ------------------ |
10
- | 1.3.x | :white_check_mark: |
10
+ | 1.9.x | :white_check_mark: |
11
11
  | 1.0.0 | :x: |
12
12
  | < 1.0 | :x: |
13
13
 
package/biome.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.3.10/schema.json",
3
3
  "vcs": {
4
4
  "enabled": false,
5
5
  "clientKind": "git",
6
6
  "useIgnoreFile": false
7
7
  },
8
8
  "files": {
9
- "ignoreUnknown": false,
10
- "ignore": []
9
+ "ignoreUnknown": false
11
10
  },
12
11
  "formatter": {
13
12
  "enabled": true,
@@ -15,8 +14,12 @@
15
14
  "indentWidth": 2,
16
15
  "lineWidth": 120
17
16
  },
18
- "organizeImports": {
19
- "enabled": true
17
+ "assist": {
18
+ "actions": {
19
+ "source": {
20
+ "organizeImports": "on"
21
+ }
22
+ }
20
23
  },
21
24
  "linter": {
22
25
  "enabled": true,
@@ -12,7 +12,7 @@ function _interop_require_default(obj) {
12
12
  }
13
13
  const fetchReleases = async ()=>{
14
14
  try {
15
- const response = await _axios.default.get("https://api.github.com/repos/fdm-monster/fdm-monster-client/releases");
15
+ const response = await _axios.default.get("https://api.github.com/repos/fdm-monster/fdm-monster-client-next/releases");
16
16
  const releases = response.data;
17
17
  const releaseData = releases.map((release)=>({
18
18
  tag_name: release.tag_name,
@@ -29,7 +29,7 @@ const fetchReleases = async ()=>{
29
29
  };
30
30
  const fetchLatest = async ()=>{
31
31
  try {
32
- const response = await _axios.default.get("https://api.github.com/repos/fdm-monster/fdm-monster-client/releases/latest");
32
+ const response = await _axios.default.get("https://api.github.com/repos/fdm-monster/fdm-monster-client-next/releases/latest");
33
33
  const release = response.data;
34
34
  const releaseData = {
35
35
  tag_name: release.tag_name,
@@ -37,7 +37,7 @@ const fetchLatest = async ()=>{
37
37
  published_at: release.published_at,
38
38
  body: release.body
39
39
  };
40
- const outputPath = _path.default.join(__dirname, "github-releases-latest-client-slim-oct-2024.data.json");
40
+ const outputPath = _path.default.join(__dirname, "github-releases-latest-client-slim.data.json");
41
41
  _fs.default.writeFileSync(outputPath, JSON.stringify(releaseData, null, 2));
42
42
  console.log(`Releases data written to ${outputPath}`);
43
43
  } catch (error) {
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- const _child_process = require("child_process");
6
- const _path = /*#__PURE__*/ _interop_require_default(require("path"));
5
+ const _nodechild_process = require("node:child_process");
6
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
7
7
  function _interop_require_default(obj) {
8
8
  return obj && obj.__esModule ? obj : {
9
9
  default: obj
@@ -14,8 +14,8 @@ const instanceCount = 10;
14
14
  console.log(`Starting ${instanceCount} fake OctoPrint servers...`);
15
15
  for(let i = 0; i < instanceCount; i++){
16
16
  const port = startPort + i;
17
- const process = (0, _child_process.spawn)("node", [
18
- _path.default.join(__dirname, "./mock-octoprint.server.js"),
17
+ const process = (0, _nodechild_process.spawn)("node", [
18
+ _nodepath.default.join(__dirname, "./mock-octoprint.server.js"),
19
19
  port.toString()
20
20
  ]);
21
21
  process.stdout.on("data", (data)=>{
@@ -1 +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"}
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":";;;;mCAAsB;iEACL;;;;;;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,wBAAK,EAAC,QAAQ;QAACC,iBAAI,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"}
@@ -18,7 +18,7 @@ const DEFAULT_MQTT_PORT = 8883;
18
18
  const DEFAULT_SERIAL = "01P00A000000001";
19
19
  const DEFAULT_ACCESS_CODE = "12345678";
20
20
  const MESSAGE_INTERVAL = 1000;
21
- const DEFAULT_USERNAME = 'bblp';
21
+ const DEFAULT_USERNAME = "bblp";
22
22
  const port = process.argv[2] ? Number.parseInt(process.argv[2]) : DEFAULT_PORT;
23
23
  const mqttPort = process.argv[3] ? Number.parseInt(process.argv[3]) : DEFAULT_MQTT_PORT;
24
24
  const serial = process.argv[4] || DEFAULT_SERIAL;
@@ -48,21 +48,21 @@ async function generateSelfSignedCert() {
48
48
  console.log(`[BAMBU MOCK] Generating self-signed certificate for TLS...`);
49
49
  const attrs = [
50
50
  {
51
- name: 'commonName',
52
- value: 'BambuLab Mock Printer'
51
+ name: "commonName",
52
+ value: "BambuLab Mock Printer"
53
53
  },
54
54
  {
55
- name: 'countryName',
56
- value: 'US'
55
+ name: "countryName",
56
+ value: "US"
57
57
  },
58
58
  {
59
- name: 'organizationName',
60
- value: 'Bambu Lab Mock'
59
+ name: "organizationName",
60
+ value: "Bambu Lab Mock"
61
61
  }
62
62
  ];
63
63
  const options = {
64
64
  days: 365,
65
- algorithm: 'sha256',
65
+ algorithm: "sha256",
66
66
  keySize: 2048
67
67
  };
68
68
  const pems = await _selfsigned.default.generate(attrs, options);
@@ -70,12 +70,14 @@ async function generateSelfSignedCert() {
70
70
  return {
71
71
  key: pems.private,
72
72
  cert: pems.cert,
73
- minVersion: 'TLSv1.2',
74
- ciphers: 'HIGH:!aNULL:!MD5'
73
+ minVersion: "TLSv1.2",
74
+ ciphers: "HIGH:!aNULL:!MD5"
75
75
  };
76
76
  }
77
77
  let isPrinting = false;
78
+ let isFinished = false;
78
79
  let currentPrintFile = "";
80
+ let finishedFileName = "";
79
81
  let printProgress = 0;
80
82
  let isPaused = false;
81
83
  let nozzleTemp = 25;
@@ -95,7 +97,7 @@ const PRINT_DURATION = 20;
95
97
  "Welcome to Bambu Lab Mock FTP Server"
96
98
  ]
97
99
  });
98
- ftpServer.on("login", ({ connection, username, password }, resolve, reject)=>{
100
+ ftpServer.on("login", ({ username, password }, resolve, reject)=>{
99
101
  console.log(`[BAMBU MOCK FTP] Login attempt - Username: ${username}`);
100
102
  if (username === "bblp" && password === accessCode) {
101
103
  console.log(`[BAMBU MOCK FTP] Authentication successful`);
@@ -107,7 +109,7 @@ const PRINT_DURATION = 20;
107
109
  reject(new Error("Invalid username or password"));
108
110
  }
109
111
  });
110
- ftpServer.on("client-error", ({ connection, context, error })=>{
112
+ ftpServer.on("client-error", ({ error })=>{
111
113
  console.error(`[BAMBU MOCK FTP] Client error:`, error);
112
114
  });
113
115
  ftpServer.listen().then(()=>{
@@ -133,7 +135,12 @@ const PRINT_DURATION = 20;
133
135
  }
134
136
  });
135
137
  const publishState = ()=>{
136
- if (isPrinting && !isPaused) {
138
+ if (isFinished) {
139
+ isFinished = false;
140
+ finishedFileName = "";
141
+ currentPrintFile = "";
142
+ printProgress = 0;
143
+ } else if (isPrinting && !isPaused) {
137
144
  const elapsedSeconds = (Date.now() - printStartTime) / 1000;
138
145
  printProgress = Math.min(elapsedSeconds / PRINT_DURATION * 100, 100);
139
146
  if (printProgress < 10) {
@@ -144,16 +151,24 @@ const PRINT_DURATION = 20;
144
151
  bedTemp = 60;
145
152
  }
146
153
  if (printProgress >= 100) {
154
+ isFinished = true;
155
+ finishedFileName = currentPrintFile;
147
156
  isPrinting = false;
148
- printProgress = 0;
149
- currentPrintFile = "";
150
- console.log(`[BAMBU MOCK MQTT] Print completed`);
157
+ printProgress = 100;
158
+ console.log(`[BAMBU MOCK MQTT] Print completed: ${currentPrintFile}`);
151
159
  }
152
160
  }
153
- if (!isPrinting && nozzleTemp > 25) {
161
+ if (!isPrinting && !isFinished && nozzleTemp > 25) {
154
162
  nozzleTemp = Math.max(nozzleTemp - 2, 25);
155
163
  bedTemp = Math.max(bedTemp - 1, 25);
156
164
  }
165
+ let gcodeState = "IDLE";
166
+ if (isFinished) gcodeState = "FINISHED";
167
+ else if (isPrinting && isPaused) gcodeState = "PAUSE";
168
+ else if (isPrinting) gcodeState = "PRINTING";
169
+ const fileName = isFinished ? finishedFileName : currentPrintFile;
170
+ const hasJob = isPrinting || isFinished;
171
+ const printingLabel = isPaused ? "paused" : isFinished ? "finished" : "printing";
157
172
  const state = {
158
173
  print: {
159
174
  nozzle_temper: Math.round(nozzleTemp),
@@ -161,15 +176,15 @@ const PRINT_DURATION = 20;
161
176
  bed_temper: Math.round(bedTemp),
162
177
  bed_target_temper: isPrinting ? 60 : 0,
163
178
  chamber_temper: 30,
164
- mc_percent: Math.round(printProgress),
165
- mc_remaining_time: isPrinting ? Math.round(PRINT_DURATION - (Date.now() - printStartTime) / 1000) : 0,
166
- mc_print_stage: isPrinting ? isPaused ? "paused" : "printing" : "idle",
167
- gcode_state: isPrinting ? "PRINTING" : "IDLE",
168
- gcode_file: isPrinting ? currentPrintFile : "",
179
+ mc_percent: isFinished ? 100 : Math.round(printProgress),
180
+ mc_remaining_time: hasJob ? Math.round(Math.max(0, (PRINT_DURATION - (Date.now() - printStartTime) / 1000) / 60)) : 0,
181
+ mc_print_stage: hasJob ? printingLabel : "idle",
182
+ gcode_state: gcodeState,
183
+ gcode_file: fileName || "",
169
184
  wifi_signal: "-45dBm",
170
- layer_num: isPrinting ? Math.floor(printProgress / 2) : 0,
171
- total_layer_num: isPrinting ? 50 : 0,
172
- subtask_name: isPrinting ? currentPrintFile : "",
185
+ layer_num: hasJob ? Math.floor((isFinished ? 100 : printProgress) / 2) : 0,
186
+ total_layer_num: hasJob ? 50 : 0,
187
+ subtask_name: fileName || "",
173
188
  heatbreak_fan_speed: isPrinting ? "5000" : "0",
174
189
  cooling_fan_speed: isPrinting ? "8000" : "0",
175
190
  big_fan1_speed: isPrinting ? "3000" : "0",
@@ -198,12 +213,12 @@ const PRINT_DURATION = 20;
198
213
  try {
199
214
  const payload = JSON.parse(message.toString());
200
215
  console.log(`[BAMBU MOCK MQTT] Received command on ${topic}:`, JSON.stringify(payload));
201
- if (payload.print && payload.print.command) {
216
+ if (payload.print?.command) {
202
217
  const command = payload.print.command;
203
218
  console.log(`[BAMBU MOCK MQTT] Processing command: ${command}`);
204
219
  if (command === "project_file" || command === "start") {
205
220
  const filename = payload.print.param || payload.print.subtask_name || "unknown.gcode";
206
- if (filename.endsWith('.gcode') || filename.endsWith('.3mf')) {
221
+ if (filename.endsWith(".gcode") || filename.endsWith(".3mf")) {
207
222
  isPrinting = true;
208
223
  isPaused = false;
209
224
  printStartTime = Date.now();
@@ -227,11 +242,16 @@ const PRINT_DURATION = 20;
227
242
  }
228
243
  } else if (command === "stop") {
229
244
  if (isPrinting) {
245
+ const stoppedFile = currentPrintFile;
230
246
  isPrinting = false;
231
247
  isPaused = false;
232
248
  printProgress = 0;
233
- currentPrintFile = "";
234
- console.log(`[BAMBU MOCK MQTT] Stopping print`);
249
+ console.log(`[BAMBU MOCK MQTT] Stopping print: ${stoppedFile}`);
250
+ setTimeout(()=>{
251
+ if (!isPrinting) {
252
+ currentPrintFile = "";
253
+ }
254
+ }, MESSAGE_INTERVAL * 2);
235
255
  }
236
256
  }
237
257
  }
@@ -266,7 +286,7 @@ const PRINT_DURATION = 20;
266
286
  });
267
287
  console.log(`[BAMBU MOCK] Mock server is running. Press Ctrl+C to stop.`);
268
288
  })().catch((error)=>{
269
- console.error('[BAMBU MOCK] Fatal error during startup:', error);
289
+ console.error("[BAMBU MOCK] Fatal error during startup:", error);
270
290
  process.exit(1);
271
291
  });
272
292
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/consoles/mock-bambu.server.ts"],"names":["DEFAULT_PORT","DEFAULT_MQTT_PORT","DEFAULT_SERIAL","DEFAULT_ACCESS_CODE","MESSAGE_INTERVAL","DEFAULT_USERNAME","port","process","argv","Number","parseInt","mqttPort","serial","accessCode","console","log","ftpDir","path","join","os","tmpdir","sdcardDir","fs","existsSync","mkdirSync","recursive","generateSelfSignedCert","attrs","name","value","options","days","algorithm","keySize","pems","selfsigned","generate","key","private","cert","minVersion","ciphers","isPrinting","currentPrintFile","printProgress","isPaused","nozzleTemp","bedTemp","printStartTime","PRINT_DURATION","tlsCerts","ftpServer","FtpSrv","url","pasv_url","pasv_min","pasv_max","tls","anonymous","greeting","on","connection","username","password","resolve","reject","root","Error","context","error","listen","then","mqttClient","mqtt","connect","clientId","Date","now","rejectUnauthorized","reportTopic","requestTopic","subscribe","err","publishState","elapsedSeconds","Math","min","max","state","print","nozzle_temper","round","nozzle_target_temper","bed_temper","bed_target_temper","chamber_temper","mc_percent","mc_remaining_time","mc_print_stage","gcode_state","gcode_file","wifi_signal","layer_num","floor","total_layer_num","subtask_name","heatbreak_fan_speed","cooling_fan_speed","big_fan1_speed","big_fan2_speed","spd_lvl","spd_mag","print_error","lifecycle","command","msg","sequence_id","String","publish","JSON","stringify","qos","setInterval","topic","message","payload","parse","toString","filename","param","endsWith","pausedProgress","connected","endAsync","close","exit","catch"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/consoles/mock-bambu.server.ts"],"names":["DEFAULT_PORT","DEFAULT_MQTT_PORT","DEFAULT_SERIAL","DEFAULT_ACCESS_CODE","MESSAGE_INTERVAL","DEFAULT_USERNAME","port","process","argv","Number","parseInt","mqttPort","serial","accessCode","console","log","ftpDir","path","join","os","tmpdir","sdcardDir","fs","existsSync","mkdirSync","recursive","generateSelfSignedCert","attrs","name","value","options","days","algorithm","keySize","pems","selfsigned","generate","key","private","cert","minVersion","ciphers","isPrinting","isFinished","currentPrintFile","finishedFileName","printProgress","isPaused","nozzleTemp","bedTemp","printStartTime","PRINT_DURATION","tlsCerts","ftpServer","FtpSrv","url","pasv_url","pasv_min","pasv_max","tls","anonymous","greeting","on","username","password","resolve","reject","root","Error","error","listen","then","mqttClient","mqtt","connect","clientId","Date","now","rejectUnauthorized","reportTopic","requestTopic","subscribe","err","publishState","elapsedSeconds","Math","min","max","gcodeState","fileName","hasJob","printingLabel","state","print","nozzle_temper","round","nozzle_target_temper","bed_temper","bed_target_temper","chamber_temper","mc_percent","mc_remaining_time","mc_print_stage","gcode_state","gcode_file","wifi_signal","layer_num","floor","total_layer_num","subtask_name","heatbreak_fan_speed","cooling_fan_speed","big_fan1_speed","big_fan2_speed","spd_lvl","spd_mag","print_error","lifecycle","command","msg","sequence_id","String","publish","JSON","stringify","qos","setInterval","topic","message","payload","parse","toString","filename","param","endsWith","pausedProgress","stoppedFile","setTimeout","connected","endAsync","close","exit","catch"],"mappings":"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"}