@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/consoles/mock-camera/default-image.ts"],"names":["DEFAULT_IMAGE_BASE64"],"mappings":";;;;+BAGaA;;;eAAAA;;;AAAN,MAAMA,uBAAuB"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _express = /*#__PURE__*/ _interop_require_default(require("express"));
6
+ const _nodehttp = /*#__PURE__*/ _interop_require_default(require("node:http"));
7
+ const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs"));
8
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
9
+ const _defaultimage = require("./default-image.js");
10
+ function _interop_require_default(obj) {
11
+ return obj && obj.__esModule ? obj : {
12
+ default: obj
13
+ };
14
+ }
15
+ const port = process.argv[2] ? Number.parseInt(process.argv[2]) : 8181;
16
+ const fps = process.argv[3] ? Number.parseInt(process.argv[3]) : 10;
17
+ const frameInterval = 1000 / fps;
18
+ const app = (0, _express.default)();
19
+ const server = _nodehttp.default.createServer(app);
20
+ const activeIntervals = new Set();
21
+ const framesDir = _nodepath.default.join(process.cwd(), "media", "mock-camera");
22
+ if (!_nodefs.default.existsSync(framesDir)) {
23
+ console.log(`[CAMERA:${port}] Creating frames folder ${framesDir}`);
24
+ console.log(`[CAMERA:${port}] You can place custom .jpg/.jpeg/.png images here to use as frames`);
25
+ _nodefs.default.mkdirSync(framesDir, {
26
+ recursive: true
27
+ });
28
+ }
29
+ let customFrames = [];
30
+ try {
31
+ const files = _nodefs.default.readdirSync(framesDir).filter((f)=>{
32
+ const lower = f.toLowerCase();
33
+ return lower.endsWith('.jpg') || lower.endsWith('.jpeg') || lower.endsWith('.png');
34
+ }).sort((a, b)=>a.localeCompare(b));
35
+ if (files.length > 0) {
36
+ console.log(`[CAMERA:${port}] Loading ${files.length} custom frame(s) from ${framesDir}`);
37
+ customFrames = files.map((f)=>{
38
+ const filePath = _nodepath.default.join(framesDir, f);
39
+ const data = _nodefs.default.readFileSync(filePath);
40
+ const contentType = f.toLowerCase().endsWith('.png') ? 'image/png' : 'image/jpeg';
41
+ return {
42
+ data,
43
+ contentType
44
+ };
45
+ });
46
+ console.log(`[CAMERA:${port}] Loaded custom frames: ${files.join(', ')}`);
47
+ }
48
+ } catch (error) {
49
+ console.error(`[CAMERA:${port}] Error loading custom frames:`, error);
50
+ }
51
+ const defaultFrame = {
52
+ data: Buffer.from(_defaultimage.DEFAULT_IMAGE_BASE64, 'base64'),
53
+ contentType: 'image/jpeg'
54
+ };
55
+ console.log(`[CAMERA:${port}] Loaded default frame from embedded image`);
56
+ function generateFrame() {
57
+ if (customFrames.length > 0) {
58
+ const frameIndex = Math.floor(Date.now() / 1000) % customFrames.length;
59
+ return customFrames[frameIndex];
60
+ }
61
+ return defaultFrame;
62
+ }
63
+ app.get("/", (req, res)=>{
64
+ console.log(`[CAMERA:${port}] New MJPEG stream connection from ${req.ip}`);
65
+ res.writeHead(200, {
66
+ 'Content-Type': 'multipart/x-mixed-replace; boundary=--FRAME',
67
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
68
+ 'Pragma': 'no-cache',
69
+ 'Expires': '0',
70
+ 'Connection': 'close'
71
+ });
72
+ const intervalId = setInterval(()=>{
73
+ try {
74
+ const frame = generateFrame();
75
+ res.write('--FRAME\r\n');
76
+ res.write(`Content-Type: ${frame.contentType}\r\n`);
77
+ res.write(`Content-Length: ${frame.data.length}\r\n`);
78
+ res.write('\r\n');
79
+ res.write(frame.data);
80
+ res.write('\r\n');
81
+ } catch (error) {
82
+ console.error(`[CAMERA:${port}] Error sending frame:`, error);
83
+ clearInterval(intervalId);
84
+ activeIntervals.delete(intervalId);
85
+ res.end();
86
+ }
87
+ }, frameInterval);
88
+ activeIntervals.add(intervalId);
89
+ req.on('close', ()=>{
90
+ console.log(`[CAMERA:${port}] Client disconnected`);
91
+ clearInterval(intervalId);
92
+ activeIntervals.delete(intervalId);
93
+ });
94
+ res.on('error', (error)=>{
95
+ console.error(`[CAMERA:${port}] Response error:`, error);
96
+ clearInterval(intervalId);
97
+ activeIntervals.delete(intervalId);
98
+ });
99
+ });
100
+ app.get("/snapshot", (req, res)=>{
101
+ console.log(`[CAMERA:${port}] Snapshot request from ${req.ip}`);
102
+ try {
103
+ const frame = generateFrame();
104
+ res.writeHead(200, {
105
+ 'Content-Type': frame.contentType,
106
+ 'Content-Length': frame.data.length,
107
+ 'Cache-Control': 'no-cache'
108
+ });
109
+ res.end(frame.data);
110
+ } catch (error) {
111
+ console.error(`[CAMERA:${port}] Error generating snapshot:`, error);
112
+ res.status(500).json({
113
+ error: 'Failed to generate snapshot'
114
+ });
115
+ }
116
+ });
117
+ app.get("/status", (req, res)=>{
118
+ res.json({
119
+ status: 'online',
120
+ fps: fps,
121
+ customFrames: customFrames.length,
122
+ framesDir: framesDir
123
+ });
124
+ });
125
+ app.use((req, res)=>{
126
+ console.log(`[CAMERA:${port}] ${req.method.toUpperCase()} ${req.url} Not found`);
127
+ res.status(404).json({
128
+ error: 'Not Found'
129
+ });
130
+ });
131
+ server.listen(port, ()=>{
132
+ console.log(`[CAMERA:${port}] Mock camera server running on http://localhost:${port}`);
133
+ console.log(`[CAMERA:${port}] MJPEG stream: http://localhost:${port}/`);
134
+ console.log(`[CAMERA:${port}] Snapshot: http://localhost:${port}/snapshot`);
135
+ console.log(`[CAMERA:${port}] Status: http://localhost:${port}/status`);
136
+ console.log(`[CAMERA:${port}] FPS: ${fps}`);
137
+ const framesString = customFrames.length > 0 ? `${customFrames.length} loaded` : 'none (using placeholder)';
138
+ console.log(`[CAMERA:${port}] Custom frames: ${framesString}`);
139
+ if (customFrames.length === 0) {
140
+ console.log(`[CAMERA:${port}] Tip: Add .jpg or .png files to ${framesDir} to use custom frames`);
141
+ }
142
+ });
143
+ function shutdown(signal) {
144
+ console.log(`\n[CAMERA:${port}] Received ${signal} signal. Shutting down gracefully...`);
145
+ console.log(`[CAMERA:${port}] Clearing ${activeIntervals.size} active stream(s)...`);
146
+ activeIntervals.forEach((interval)=>clearInterval(interval));
147
+ activeIntervals.clear();
148
+ server.close(()=>{
149
+ console.log(`[CAMERA:${port}] Server closed`);
150
+ process.exit(0);
151
+ });
152
+ setTimeout(()=>{
153
+ console.error(`[CAMERA:${port}] Could not close connections in time, forcefully shutting down`);
154
+ process.exit(1);
155
+ }, 5000);
156
+ }
157
+ process.on('SIGINT', ()=>shutdown('SIGINT'));
158
+ process.on('SIGTERM', ()=>shutdown('SIGTERM'));
159
+
160
+ //# sourceMappingURL=mock-camera.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/consoles/mock-camera/mock-camera.server.ts"],"names":["port","process","argv","Number","parseInt","fps","frameInterval","app","express","server","http","createServer","activeIntervals","Set","framesDir","path","join","cwd","fs","existsSync","console","log","mkdirSync","recursive","customFrames","files","readdirSync","filter","f","lower","toLowerCase","endsWith","sort","a","b","localeCompare","length","map","filePath","data","readFileSync","contentType","error","defaultFrame","Buffer","from","DEFAULT_IMAGE_BASE64","generateFrame","frameIndex","Math","floor","Date","now","get","req","res","ip","writeHead","intervalId","setInterval","frame","write","clearInterval","delete","end","add","on","status","json","use","method","toUpperCase","url","listen","framesString","shutdown","signal","size","forEach","interval","clear","close","exit","setTimeout"],"mappings":"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"}
@@ -4,14 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  const _express = /*#__PURE__*/ _interop_require_default(require("express"));
6
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"));
7
+ const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs"));
8
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
9
9
  const _ws = require("ws");
10
- const _http = /*#__PURE__*/ _interop_require_default(require("http"));
10
+ const _nodehttp = /*#__PURE__*/ _interop_require_default(require("node:http"));
11
11
  const _zod = require("zod");
12
12
  const _nodeconsole = /*#__PURE__*/ _interop_require_wildcard(require("node:console"));
13
13
  const _apimessages = require("./utils/api-messages");
14
- const _wsmessages = require("./utils/ws-messages");
15
14
  function _interop_require_default(obj) {
16
15
  return obj && obj.__esModule ? obj : {
17
16
  default: obj
@@ -58,12 +57,166 @@ function _interop_require_wildcard(obj, nodeInterop) {
58
57
  }
59
58
  return newObj;
60
59
  }
61
- const port = process.argv[2] ? parseInt(process.argv[2]) : 1234;
62
- const uploadsDir = _path.default.join(__dirname, "uploads", `server-${port.toString()}`);
60
+ let isPrinting = false;
61
+ let isPaused = false;
62
+ let isFinished = false;
63
+ let currentPrintFile = "";
64
+ let printProgress = 0;
65
+ let printStartTime = 0;
66
+ const PRINT_DURATION = 20;
67
+ function getCurrentMessage() {
68
+ updatePrintProgress();
69
+ const elapsedSeconds = isPrinting ? (Date.now() - printStartTime) / 1000 : 0;
70
+ const remainingSeconds = isPrinting ? Math.max(0, PRINT_DURATION - elapsedSeconds) : null;
71
+ let stateText = "Operational";
72
+ if (isPrinting && isPaused) stateText = "Paused";
73
+ else if (isPrinting) stateText = "Printing";
74
+ const fileName = isFinished ? finishedFileName : currentPrintFile || null;
75
+ const hasFile = isPrinting || isFinished;
76
+ return {
77
+ current: {
78
+ state: {
79
+ text: stateText,
80
+ flags: {
81
+ operational: true,
82
+ printing: isPrinting && !isPaused,
83
+ cancelling: false,
84
+ pausing: false,
85
+ resuming: false,
86
+ finishing: false,
87
+ closedOrError: false,
88
+ error: false,
89
+ paused: isPaused,
90
+ ready: !isPrinting && !isFinished,
91
+ sdReady: true,
92
+ finished: isFinished
93
+ },
94
+ error: ""
95
+ },
96
+ job: {
97
+ file: {
98
+ name: fileName,
99
+ path: fileName,
100
+ display: fileName,
101
+ origin: hasFile ? "local" : null,
102
+ size: hasFile ? 1024000 : null,
103
+ date: hasFile ? printStartTime / 1000 : null
104
+ },
105
+ estimatedPrintTime: hasFile ? PRINT_DURATION : null,
106
+ averagePrintTime: null,
107
+ lastPrintTime: null,
108
+ filament: hasFile ? {
109
+ tool0: {
110
+ length: 1000,
111
+ volume: 2.4
112
+ }
113
+ } : null,
114
+ user: null
115
+ },
116
+ currentZ: isPrinting ? Math.floor(printProgress / 5) : null,
117
+ progress: {
118
+ completion: isFinished ? 100 : isPrinting ? printProgress : null,
119
+ filepos: hasFile ? Math.floor((isFinished ? 100 : printProgress) / 100 * 1024000) : null,
120
+ printTime: isFinished ? PRINT_DURATION : isPrinting ? Math.floor(elapsedSeconds) : null,
121
+ printTimeLeft: isFinished ? 0 : remainingSeconds !== null ? Math.floor(remainingSeconds) : null,
122
+ printTimeLeftOrigin: hasFile ? "estimate" : null
123
+ },
124
+ offsets: {},
125
+ resends: {
126
+ count: 0,
127
+ transmitted: 8,
128
+ ratio: 0
129
+ },
130
+ serverTime: Date.now() / 1000,
131
+ temps: [],
132
+ busyFiles: [],
133
+ logs: [],
134
+ messages: []
135
+ }
136
+ };
137
+ }
138
+ let finishedFileName = "";
139
+ function updatePrintProgress() {
140
+ if (isFinished) {
141
+ isFinished = false;
142
+ finishedFileName = "";
143
+ currentPrintFile = "";
144
+ printProgress = 0;
145
+ return;
146
+ }
147
+ if (isPrinting && !isPaused) {
148
+ const elapsedSeconds = (Date.now() - printStartTime) / 1000;
149
+ printProgress = Math.min(elapsedSeconds / PRINT_DURATION * 100, 100);
150
+ if (printProgress >= 100) {
151
+ isFinished = true;
152
+ finishedFileName = currentPrintFile;
153
+ isPrinting = false;
154
+ printProgress = 100;
155
+ _nodeconsole.log(`[PORT] Print completed: ${currentPrintFile}`);
156
+ }
157
+ }
158
+ }
159
+ function getJobResponse() {
160
+ updatePrintProgress();
161
+ const fileName = isFinished ? finishedFileName : currentPrintFile;
162
+ const hasJob = isPrinting || isFinished;
163
+ if (!hasJob) {
164
+ return {
165
+ job: {
166
+ file: {
167
+ name: null,
168
+ origin: null,
169
+ size: null,
170
+ date: null
171
+ },
172
+ estimatedPrintTime: null,
173
+ filament: null
174
+ },
175
+ progress: {
176
+ completion: null,
177
+ filepos: null,
178
+ printTime: null,
179
+ printTimeLeft: null
180
+ },
181
+ state: "Operational"
182
+ };
183
+ }
184
+ const elapsedSeconds = (Date.now() - printStartTime) / 1000;
185
+ const remainingSeconds = Math.max(0, PRINT_DURATION - elapsedSeconds);
186
+ let state = "Printing";
187
+ if (isFinished) state = "Operational";
188
+ else if (isPaused) state = "Paused";
189
+ return {
190
+ job: {
191
+ file: {
192
+ name: fileName,
193
+ origin: "local",
194
+ size: 1024000,
195
+ date: printStartTime / 1000
196
+ },
197
+ estimatedPrintTime: PRINT_DURATION,
198
+ filament: {
199
+ tool0: {
200
+ length: 1000,
201
+ volume: 2.4
202
+ }
203
+ }
204
+ },
205
+ progress: {
206
+ completion: isFinished ? 100 : printProgress,
207
+ filepos: Math.floor((isFinished ? 100 : printProgress) / 100 * 1024000),
208
+ printTime: isFinished ? PRINT_DURATION : Math.floor(elapsedSeconds),
209
+ printTimeLeft: isFinished ? 0 : Math.floor(remainingSeconds)
210
+ },
211
+ state
212
+ };
213
+ }
214
+ const port = process.argv[2] ? Number.parseInt(process.argv[2]) : 1234;
215
+ const uploadsDir = _nodepath.default.join(__dirname, "uploads", `server-${port.toString()}`);
63
216
  const WS_MESSAGE_INTERVAL = 1000;
64
- if (!_fs.default.existsSync(uploadsDir)) {
217
+ if (!_nodefs.default.existsSync(uploadsDir)) {
65
218
  _nodeconsole.log(`[PORT ${port}] Creating uploads folder ${uploadsDir}`);
66
- _fs.default.mkdirSync(uploadsDir, {
219
+ _nodefs.default.mkdirSync(uploadsDir, {
67
220
  recursive: true
68
221
  });
69
222
  }
@@ -72,7 +225,7 @@ const upload = (0, _multer.default)({
72
225
  dest: uploadsDir
73
226
  });
74
227
  const app = (0, _express.default)();
75
- const server = _http.default.createServer(app);
228
+ const server = _nodehttp.default.createServer(app);
76
229
  const wss = new _ws.Server({
77
230
  server
78
231
  });
@@ -95,42 +248,42 @@ wss.on("connection", (ws)=>{
95
248
  return;
96
249
  }
97
250
  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 {
251
+ if (authenticated) {
133
252
  _nodeconsole.log(`[PORT ${port}] Received message from authenticated client`);
253
+ return;
254
+ }
255
+ if (!json) {
256
+ _nodeconsole.log(`[PORT ${port}] Invalid message JSON format`);
257
+ ws.close();
258
+ return;
259
+ }
260
+ try {
261
+ const parts = json.auth.split(":");
262
+ AuthSchema.parse({
263
+ command: "auth",
264
+ user: parts[0],
265
+ token: parts[1]
266
+ });
267
+ _nodeconsole.log(`[PORT ${port}] Authentication successful for admin`);
268
+ authenticated = true;
269
+ clients.set(clientId, {
270
+ ws,
271
+ authenticated
272
+ });
273
+ setTimeout(async ()=>{
274
+ try {
275
+ ws.send(JSON.stringify(getCurrentMessage()));
276
+ } catch (fileError) {
277
+ _nodeconsole.error(`[PORT ${port}] Error reading message file:`, fileError);
278
+ ws.send(JSON.stringify({
279
+ error: "Failed to read message content"
280
+ }));
281
+ }
282
+ }, 500);
283
+ messageInterval = setupMessageInterval(ws, clientId, WS_MESSAGE_INTERVAL);
284
+ } catch (validationError) {
285
+ _nodeconsole.log(`[PORT ${port}] Authentication failed: Invalid token format ${JSON.stringify(json)} ${validationError}`);
286
+ ws.close();
134
287
  }
135
288
  } catch (error) {
136
289
  _nodeconsole.error(`[PORT ${port}] Error processing message:`, error);
@@ -157,7 +310,7 @@ wss.on("connection", (ws)=>{
157
310
  const sendPeriodicMessage = ()=>{
158
311
  try {
159
312
  if (ws.readyState === ws.OPEN) {
160
- ws.send(JSON.stringify(_wsmessages.currentMessage));
313
+ ws.send(JSON.stringify(getCurrentMessage()));
161
314
  _nodeconsole.log(`[PORT ${port}] Periodic message sent to client (ID: ${clientId})`);
162
315
  messageInterval = setTimeout(sendPeriodicMessage, getRandomizedInterval(baseInterval));
163
316
  } else {
@@ -197,7 +350,36 @@ app.get("/api/connection", async (req, res)=>{
197
350
  });
198
351
  app.get("/api/job", async (req, res)=>{
199
352
  _nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
200
- res.status(200).json(_apimessages.jobSuccessResponse);
353
+ res.status(200).json(getJobResponse());
354
+ });
355
+ app.post("/api/job", _express.default.json(), async (req, res)=>{
356
+ const { command, action } = req.body;
357
+ _nodeconsole.log(`[PORT ${port}] POST /api/job - command: ${command}, action: ${action}`);
358
+ if (command === "cancel") {
359
+ if (isPrinting) {
360
+ isPrinting = false;
361
+ isPaused = false;
362
+ printProgress = 0;
363
+ currentPrintFile = "";
364
+ _nodeconsole.log(`[PORT ${port}] Print cancelled`);
365
+ }
366
+ return res.status(204).send();
367
+ }
368
+ if (command === "pause") {
369
+ if (action === "pause" && isPrinting && !isPaused) {
370
+ isPaused = true;
371
+ _nodeconsole.log(`[PORT ${port}] Print paused at ${Math.round(printProgress)}%`);
372
+ } else if (action === "resume" && isPrinting && isPaused) {
373
+ isPaused = false;
374
+ const pausedProgress = printProgress;
375
+ printStartTime = Date.now() - pausedProgress / 100 * PRINT_DURATION * 1000;
376
+ _nodeconsole.log(`[PORT ${port}] Print resumed from ${Math.round(pausedProgress)}%`);
377
+ }
378
+ return res.status(204).send();
379
+ }
380
+ res.status(400).json({
381
+ error: "Unknown command"
382
+ });
201
383
  });
202
384
  app.get("/api/files/local", async (req, res)=>{
203
385
  _nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
@@ -210,41 +392,67 @@ app.post("/api/login", async (req, res)=>{
210
392
  session: "123123abc123123abc123123abc123ab"
211
393
  });
212
394
  });
395
+ app.post("/api/files/local/:path(*)", _express.default.json(), (req, res)=>{
396
+ const filePath = req.params.path;
397
+ const { command, print } = req.body;
398
+ _nodeconsole.log(`[PORT ${port}] POST /api/files/local/${filePath} - command: ${command}, print: ${print}`);
399
+ if (command === "select") {
400
+ if (!filePath.endsWith(".gcode") && !filePath.endsWith(".bgcode") && !filePath.endsWith(".3mf")) {
401
+ _nodeconsole.log(`[PORT ${port}] Rejected - invalid file extension: ${filePath}`);
402
+ return res.status(400).json({
403
+ error: "Invalid file extension. Only .gcode, .bgcode, and .3mf files are supported"
404
+ });
405
+ }
406
+ currentPrintFile = filePath;
407
+ _nodeconsole.log(`[PORT ${port}] File selected: ${filePath}`);
408
+ if (print === true) {
409
+ isPrinting = true;
410
+ isPaused = false;
411
+ printStartTime = Date.now();
412
+ printProgress = 0;
413
+ _nodeconsole.log(`[PORT ${port}] Starting print: ${filePath} (${PRINT_DURATION} second duration)`);
414
+ }
415
+ return res.status(204).send();
416
+ }
417
+ if (command === "move") {
418
+ _nodeconsole.log(`[PORT ${port}] Move command received for: ${filePath}`);
419
+ return res.status(204).send();
420
+ }
421
+ res.status(400).json({
422
+ error: "Unknown command"
423
+ });
424
+ });
213
425
  app.post("/api/files/local", upload.single("file"), (req, res)=>{
214
- const { select, print } = req.body;
426
+ const { print } = req.body;
215
427
  const file = req.file;
216
428
  if (!file) {
217
429
  return res.status(400).json({
218
430
  error: "Missing file"
219
431
  });
220
432
  }
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
433
  _nodeconsole.log(`[PORT ${port}] Received file:`, file.originalname);
243
434
  _nodeconsole.log(`[PORT ${port}] File size:`, file.size);
244
435
  _nodeconsole.log(`[PORT ${port}] MIME type:`, file.mimetype);
245
- _nodeconsole.log(`[PORT ${port}] select:`, select, `\n[PORT ${port}] print:`, print, `\n-----`);
436
+ _nodeconsole.log(`[PORT ${port}] print:`, print, `\n-----`);
437
+ if (print === "true") {
438
+ currentPrintFile = file.originalname;
439
+ isPrinting = true;
440
+ isPaused = false;
441
+ printStartTime = Date.now();
442
+ printProgress = 0;
443
+ _nodeconsole.log(`[PORT ${port}] Starting print: ${file.originalname} (${PRINT_DURATION} second duration)`);
444
+ }
246
445
  res.json({
247
- message: "File received successfully"
446
+ done: true,
447
+ files: {
448
+ local: {
449
+ name: file.originalname,
450
+ origin: "local",
451
+ refs: {
452
+ resource: `/api/files/local/${file.originalname}`
453
+ }
454
+ }
455
+ }
248
456
  });
249
457
  });
250
458
  app.use((req, res)=>{
@@ -276,10 +484,10 @@ process.on("SIGTERM", ()=>{
276
484
  function cleanupUploads() {
277
485
  try {
278
486
  _nodeconsole.log(`[PORT ${port}] Cleaning up uploads folder...`);
279
- const files = _fs.default.readdirSync(uploadsDir);
487
+ const files = _nodefs.default.readdirSync(uploadsDir);
280
488
  for (const file of files){
281
- const filePath = _path.default.join(uploadsDir, file);
282
- _fs.default.unlinkSync(filePath);
489
+ const filePath = _nodepath.default.join(uploadsDir, file);
490
+ _nodefs.default.unlinkSync(filePath);
283
491
  _nodeconsole.log(`[PORT ${port}] Deleted: ${filePath}`);
284
492
  }
285
493
  _nodeconsole.log(`[PORT ${port}] Uploads folder cleanup complete`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/consoles/mock-octoprint.server.ts"],"names":["port","process","argv","parseInt","uploadsDir","path","join","__dirname","toString","WS_MESSAGE_INTERVAL","fs","existsSync","console","log","mkdirSync","recursive","cleanupUploads","upload","multer","dest","app","express","server","http","createServer","wss","WebSocketServer","clients","Map","AuthSchema","z","object","command","literal","user","token","string","regex","on","ws","clientId","Date","now","authenticated","messageInterval","message","msgString","includes","json","JSON","parse","close","parts","auth","split","set","setTimeout","send","stringify","currentMessage","fileError","error","setupMessageInterval","validationError","clearInterval","delete","baseInterval","getRandomizedInterval","baseMs","variationFactor","Math","random","floor","sendPeriodicMessage","readyState","OPEN","get","req","res","api","text","name","permissions","groups","method","toUpperCase","url","status","printerHistorySuccessResponse","connectionSuccessResponse","jobSuccessResponse","filesSuccessResponse","post","_is_external_client","_login_mechanism","session","single","select","print","body","file","Object","keys","length","originalname","size","mimetype","use","listen","exit","files","readdirSync","filePath","unlinkSync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/consoles/mock-octoprint.server.ts"],"names":["isPrinting","isPaused","isFinished","currentPrintFile","printProgress","printStartTime","PRINT_DURATION","getCurrentMessage","updatePrintProgress","elapsedSeconds","Date","now","remainingSeconds","Math","max","stateText","fileName","finishedFileName","hasFile","current","state","text","flags","operational","printing","cancelling","pausing","resuming","finishing","closedOrError","error","paused","ready","sdReady","finished","job","file","name","path","display","origin","size","date","estimatedPrintTime","averagePrintTime","lastPrintTime","filament","tool0","length","volume","user","currentZ","floor","progress","completion","filepos","printTime","printTimeLeft","printTimeLeftOrigin","offsets","resends","count","transmitted","ratio","serverTime","temps","busyFiles","logs","messages","min","console","log","getJobResponse","hasJob","port","process","argv","Number","parseInt","uploadsDir","join","__dirname","toString","WS_MESSAGE_INTERVAL","fs","existsSync","mkdirSync","recursive","cleanupUploads","upload","multer","dest","app","express","server","http","createServer","wss","WebSocketServer","clients","Map","AuthSchema","z","object","command","literal","token","string","regex","on","ws","clientId","authenticated","messageInterval","message","msgString","includes","json","JSON","parse","close","parts","auth","split","set","setTimeout","send","stringify","fileError","setupMessageInterval","validationError","clearInterval","delete","baseInterval","getRandomizedInterval","baseMs","variationFactor","random","sendPeriodicMessage","readyState","OPEN","get","req","res","api","permissions","groups","method","toUpperCase","url","status","printerHistorySuccessResponse","connectionSuccessResponse","post","action","body","round","pausedProgress","filesSuccessResponse","_is_external_client","_login_mechanism","session","filePath","params","print","endsWith","single","originalname","mimetype","done","files","local","refs","resource","use","listen","exit","readdirSync","unlinkSync"],"mappings":"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"}