@fdm-monster/server 2.0.10 → 2.0.11

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 (929) hide show
  1. package/.claude/CLAUDE.md +76 -0
  2. package/.vite-hooks/pre-commit +1 -0
  3. package/.yarn/install-state.gz +0 -0
  4. package/.yarn/releases/yarn-4.13.0.cjs +940 -0
  5. package/.yarnrc.yml +1 -1
  6. package/README.md +1 -1
  7. package/RELEASE_NOTES.MD +14 -0
  8. package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js +9 -0
  9. package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorateMetadata.js +6 -0
  10. package/dist/_virtual/_rolldown/runtime.js +13 -0
  11. package/dist/_virtual/_virtual_controllers.js +43 -0
  12. package/dist/consoles/typeorm-create.js +51 -112
  13. package/dist/consoles/typeorm-create.js.map +1 -1
  14. package/dist/consoles/typeorm-generate.js +99 -165
  15. package/dist/consoles/typeorm-generate.js.map +1 -1
  16. package/dist/consoles/typeorm-migrate.js +35 -43
  17. package/dist/consoles/typeorm-migrate.js.map +1 -1
  18. package/dist/constants/authorization.constants.js +75 -97
  19. package/dist/constants/authorization.constants.js.map +1 -1
  20. package/dist/constants/event.constants.js +11 -41
  21. package/dist/constants/event.constants.js.map +1 -1
  22. package/dist/constants/http-status-codes.constants.js +319 -71
  23. package/dist/constants/http-status-codes.constants.js.map +1 -1
  24. package/dist/constants/server-settings.constants.js +45 -87
  25. package/dist/constants/server-settings.constants.js.map +1 -1
  26. package/dist/constants/service.constants.js +3 -21
  27. package/dist/constants/service.constants.js.map +1 -1
  28. package/dist/container.js +167 -181
  29. package/dist/container.js.map +1 -1
  30. package/dist/container.tokens.js +78 -85
  31. package/dist/container.tokens.js.map +1 -1
  32. package/dist/controllers/auth.controller.js +156 -225
  33. package/dist/controllers/auth.controller.js.map +1 -1
  34. package/dist/controllers/batch-call.controller.js +79 -116
  35. package/dist/controllers/batch-call.controller.js.map +1 -1
  36. package/dist/controllers/camera-stream.controller.js +74 -119
  37. package/dist/controllers/camera-stream.controller.js.map +1 -1
  38. package/dist/controllers/dto/update-client-dist.dto.js +8 -15
  39. package/dist/controllers/dto/update-client-dist.dto.js.map +1 -1
  40. package/dist/controllers/file-storage.controller.js +251 -312
  41. package/dist/controllers/file-storage.controller.js.map +1 -1
  42. package/dist/controllers/first-time-setup.controller.js +83 -135
  43. package/dist/controllers/first-time-setup.controller.js.map +1 -1
  44. package/dist/controllers/floor.controller.js +111 -175
  45. package/dist/controllers/floor.controller.js.map +1 -1
  46. package/dist/controllers/metrics.controller.js +27 -53
  47. package/dist/controllers/metrics.controller.js.map +1 -1
  48. package/dist/controllers/print-job.controller.js +366 -451
  49. package/dist/controllers/print-job.controller.js.map +1 -1
  50. package/dist/controllers/print-queue.controller.js +329 -427
  51. package/dist/controllers/print-queue.controller.js.map +1 -1
  52. package/dist/controllers/printer-files.controller.js +244 -305
  53. package/dist/controllers/printer-files.controller.js.map +1 -1
  54. package/dist/controllers/printer-maintenance-log.controller.js +109 -165
  55. package/dist/controllers/printer-maintenance-log.controller.js.map +1 -1
  56. package/dist/controllers/printer-settings.controller.js +50 -81
  57. package/dist/controllers/printer-settings.controller.js.map +1 -1
  58. package/dist/controllers/printer-tag.controller.js +104 -166
  59. package/dist/controllers/printer-tag.controller.js.map +1 -1
  60. package/dist/controllers/printer.controller.js +352 -469
  61. package/dist/controllers/printer.controller.js.map +1 -1
  62. package/dist/controllers/server-private.controller.js +182 -239
  63. package/dist/controllers/server-private.controller.js.map +1 -1
  64. package/dist/controllers/server-public.controller.js +104 -158
  65. package/dist/controllers/server-public.controller.js.map +1 -1
  66. package/dist/controllers/settings.controller.js +229 -364
  67. package/dist/controllers/settings.controller.js.map +1 -1
  68. package/dist/controllers/slicer-compat.controller.js +179 -206
  69. package/dist/controllers/slicer-compat.controller.js.map +1 -1
  70. package/dist/controllers/user.controller.js +226 -348
  71. package/dist/controllers/user.controller.js.map +1 -1
  72. package/dist/controllers/validation/auth-controller.validation.js +5 -14
  73. package/dist/controllers/validation/auth-controller.validation.js.map +1 -1
  74. package/dist/controllers/validation/batch-controller.validation.js +13 -35
  75. package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
  76. package/dist/controllers/validation/generic.validation.js +6 -23
  77. package/dist/controllers/validation/generic.validation.js.map +1 -1
  78. package/dist/controllers/validation/printer-completion-controller.validation.js +5 -14
  79. package/dist/controllers/validation/printer-completion-controller.validation.js.map +1 -1
  80. package/dist/controllers/validation/printer-controller.validation.js +16 -48
  81. package/dist/controllers/validation/printer-controller.validation.js.map +1 -1
  82. package/dist/controllers/validation/printer-files-controller.validation.js +12 -47
  83. package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -1
  84. package/dist/controllers/validation/printer-settings-controller.validation.js +5 -14
  85. package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -1
  86. package/dist/controllers/validation/server-private.validation.js +7 -14
  87. package/dist/controllers/validation/server-private.validation.js.map +1 -1
  88. package/dist/controllers/validation/setting.validation.js +12 -34
  89. package/dist/controllers/validation/setting.validation.js.map +1 -1
  90. package/dist/controllers/validation/user-controller.validation.js +27 -65
  91. package/dist/controllers/validation/user-controller.validation.js.map +1 -1
  92. package/dist/data-source.js +74 -79
  93. package/dist/data-source.js.map +1 -1
  94. package/dist/entities/camera-stream.entity.js +49 -91
  95. package/dist/entities/camera-stream.entity.js.map +1 -1
  96. package/dist/entities/floor-position.entity.js +38 -75
  97. package/dist/entities/floor-position.entity.js.map +1 -1
  98. package/dist/entities/floor.entity.js +18 -48
  99. package/dist/entities/floor.entity.js.map +1 -1
  100. package/dist/entities/index.js +14 -66
  101. package/dist/entities/print-job.entity.js +114 -196
  102. package/dist/entities/print-job.entity.js.map +1 -1
  103. package/dist/entities/printer-maintenance-log.entity.js +61 -140
  104. package/dist/entities/printer-maintenance-log.entity.js.map +1 -1
  105. package/dist/entities/printer-tag.entity.js +33 -66
  106. package/dist/entities/printer-tag.entity.js.map +1 -1
  107. package/dist/entities/printer.entity.js +67 -124
  108. package/dist/entities/printer.entity.js.map +1 -1
  109. package/dist/entities/refresh-token.entity.js +31 -66
  110. package/dist/entities/refresh-token.entity.js.map +1 -1
  111. package/dist/entities/role.entity.js +16 -45
  112. package/dist/entities/role.entity.js.map +1 -1
  113. package/dist/entities/settings.entity.js +38 -77
  114. package/dist/entities/settings.entity.js.map +1 -1
  115. package/dist/entities/tag.entity.js +19 -43
  116. package/dist/entities/tag.entity.js.map +1 -1
  117. package/dist/entities/user-role.entity.js +30 -67
  118. package/dist/entities/user-role.entity.js.map +1 -1
  119. package/dist/entities/user.entity.js +32 -87
  120. package/dist/entities/user.entity.js.map +1 -1
  121. package/dist/exceptions/failed-dependency.exception.js +11 -18
  122. package/dist/exceptions/failed-dependency.exception.js.map +1 -1
  123. package/dist/exceptions/job.exceptions.js +9 -16
  124. package/dist/exceptions/job.exceptions.js.map +1 -1
  125. package/dist/exceptions/runtime.exceptions.js +82 -121
  126. package/dist/exceptions/runtime.exceptions.js.map +1 -1
  127. package/dist/handlers/event-emitter.js +13 -20
  128. package/dist/handlers/event-emitter.js.map +1 -1
  129. package/dist/handlers/logger-factory.js +7 -14
  130. package/dist/handlers/logger-factory.js.map +1 -1
  131. package/dist/handlers/logger.js +26 -36
  132. package/dist/handlers/logger.js.map +1 -1
  133. package/dist/handlers/logging/file-logging.transport.js +17 -31
  134. package/dist/handlers/logging/file-logging.transport.js.map +1 -1
  135. package/dist/handlers/logging/loki-logging.transport.js +34 -50
  136. package/dist/handlers/logging/loki-logging.transport.js.map +1 -1
  137. package/dist/handlers/logging/static.logger.js +83 -124
  138. package/dist/handlers/logging/static.logger.js.map +1 -1
  139. package/dist/handlers/validators.js +8 -25
  140. package/dist/handlers/validators.js.map +1 -1
  141. package/dist/index.js +23 -26
  142. package/dist/index.js.map +1 -1
  143. package/dist/middleware/authenticate.js +26 -69
  144. package/dist/middleware/authenticate.js.map +1 -1
  145. package/dist/middleware/database.js +16 -22
  146. package/dist/middleware/database.js.map +1 -1
  147. package/dist/middleware/demo.middleware.js +19 -27
  148. package/dist/middleware/demo.middleware.js.map +1 -1
  149. package/dist/middleware/exception.filter.js +109 -133
  150. package/dist/middleware/exception.filter.js.map +1 -1
  151. package/dist/middleware/global.middleware.js +28 -47
  152. package/dist/middleware/global.middleware.js.map +1 -1
  153. package/dist/middleware/param-converter.middleware.js +31 -69
  154. package/dist/middleware/param-converter.middleware.js.map +1 -1
  155. package/dist/middleware/passport.js +38 -64
  156. package/dist/middleware/passport.js.map +1 -1
  157. package/dist/middleware/printer-resolver.js +26 -33
  158. package/dist/middleware/printer-resolver.js.map +1 -1
  159. package/dist/middleware/printer.js +56 -94
  160. package/dist/middleware/printer.js.map +1 -1
  161. package/dist/middleware/slicer-api-key.middleware.js +23 -26
  162. package/dist/middleware/slicer-api-key.middleware.js.map +1 -1
  163. package/dist/middleware/socketio.middleware.js +21 -32
  164. package/dist/middleware/socketio.middleware.js.map +1 -1
  165. package/dist/migrations/1706829146617-InitSqlite.js +84 -91
  166. package/dist/migrations/1706829146617-InitSqlite.js.map +1 -1
  167. package/dist/migrations/1707494762198-PrinterGroup.js +22 -29
  168. package/dist/migrations/1707494762198-PrinterGroup.js.map +1 -1
  169. package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js +26 -33
  170. package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js.map +1 -1
  171. package/dist/migrations/1713300747465-ChangeRoleNameUnique.js +27 -34
  172. package/dist/migrations/1713300747465-ChangeRoleNameUnique.js.map +1 -1
  173. package/dist/migrations/1713897879622-AddPrinterType.js +34 -41
  174. package/dist/migrations/1713897879622-AddPrinterType.js.map +1 -1
  175. package/dist/migrations/1720338804844-RemovePrinterFile.js +12 -19
  176. package/dist/migrations/1720338804844-RemovePrinterFile.js.map +1 -1
  177. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +26 -33
  178. package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -1
  179. package/dist/migrations/1766576698569-DropPermissions.js +11 -18
  180. package/dist/migrations/1766576698569-DropPermissions.js.map +1 -1
  181. package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js +26 -33
  182. package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -1
  183. package/dist/migrations/1767279607392-DropCustomGcode.js +12 -19
  184. package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -1
  185. package/dist/migrations/1767291804417-DropPrintCompletions.js +12 -19
  186. package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -1
  187. package/dist/migrations/1767352862576-DropSettingsFileClean.js +18 -25
  188. package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -1
  189. package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js +26 -33
  190. package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -1
  191. package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js +18 -25
  192. package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -1
  193. package/dist/migrations/1767432108916-RenameGroupToTag.js +22 -29
  194. package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -1
  195. package/dist/migrations/1767451444137-AddPrintJob.js +20 -27
  196. package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -1
  197. package/dist/migrations/1767909428129-AddPrinterMaintenanceLog.js +14 -21
  198. package/dist/migrations/1767909428129-AddPrinterMaintenanceLog.js.map +1 -1
  199. package/dist/plugins/controllers-plugin.js +21 -0
  200. package/dist/plugins/controllers-plugin.js.map +1 -0
  201. package/dist/server.constants.js +79 -91
  202. package/dist/server.constants.js.map +1 -1
  203. package/dist/server.core.js +56 -122
  204. package/dist/server.core.js.map +1 -1
  205. package/dist/server.env.js +56 -121
  206. package/dist/server.env.js.map +1 -1
  207. package/dist/server.host.js +66 -99
  208. package/dist/server.host.js.map +1 -1
  209. package/dist/services/authentication/auth.service.js +103 -126
  210. package/dist/services/authentication/auth.service.js.map +1 -1
  211. package/dist/services/authentication/jwt.service.js +23 -32
  212. package/dist/services/authentication/jwt.service.js.map +1 -1
  213. package/dist/services/bambu/bambu-ftp.adapter.js +194 -236
  214. package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
  215. package/dist/services/bambu/bambu-mqtt.adapter.js +394 -449
  216. package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
  217. package/dist/services/bambu/bambu.client.js +64 -65
  218. package/dist/services/bambu/bambu.client.js.map +1 -1
  219. package/dist/services/bambu/mqtt-message.types.js +1 -6
  220. package/dist/services/bambu.api.js +230 -247
  221. package/dist/services/bambu.api.js.map +1 -1
  222. package/dist/services/core/batch-call.service.js +139 -163
  223. package/dist/services/core/batch-call.service.js.map +1 -1
  224. package/dist/services/core/client-bundle.service.js +126 -165
  225. package/dist/services/core/client-bundle.service.js.map +1 -1
  226. package/dist/services/core/config.service.js +16 -26
  227. package/dist/services/core/config.service.js.map +1 -1
  228. package/dist/services/core/cradle.service.js +11 -19
  229. package/dist/services/core/cradle.service.js.map +1 -1
  230. package/dist/services/core/github.service.js +59 -79
  231. package/dist/services/core/github.service.js.map +1 -1
  232. package/dist/services/core/http-client.factory.js +30 -38
  233. package/dist/services/core/http-client.factory.js.map +1 -1
  234. package/dist/services/core/logs-manager.service.js +61 -84
  235. package/dist/services/core/logs-manager.service.js.map +1 -1
  236. package/dist/services/core/monsterpi.service.js +26 -36
  237. package/dist/services/core/monsterpi.service.js.map +1 -1
  238. package/dist/services/core/multer.service.js +69 -129
  239. package/dist/services/core/multer.service.js.map +1 -1
  240. package/dist/services/core/server-release.service.js +77 -99
  241. package/dist/services/core/server-release.service.js.map +1 -1
  242. package/dist/services/core/yaml.service.js +443 -573
  243. package/dist/services/core/yaml.service.js.map +1 -1
  244. package/dist/services/file-analysis.service.js +134 -144
  245. package/dist/services/file-analysis.service.js.map +1 -1
  246. package/dist/services/file-storage.service.js +324 -423
  247. package/dist/services/file-storage.service.js.map +1 -1
  248. package/dist/services/interfaces/auth.service.interface.js +1 -6
  249. package/dist/services/interfaces/camera-stream.dto.js +23 -41
  250. package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
  251. package/dist/services/interfaces/camera-stream.service.interface.js +1 -6
  252. package/dist/services/interfaces/file-upload-tracker.interface.js +1 -6
  253. package/dist/services/interfaces/floor.dto.js +31 -55
  254. package/dist/services/interfaces/floor.dto.js.map +1 -1
  255. package/dist/services/interfaces/floor.service.interface.js +1 -6
  256. package/dist/services/interfaces/jwt.service.interface.js +1 -6
  257. package/dist/services/interfaces/login.dto.js +10 -17
  258. package/dist/services/interfaces/login.dto.js.map +1 -1
  259. package/dist/services/interfaces/page.interface.js +5 -12
  260. package/dist/services/interfaces/page.interface.js.map +1 -1
  261. package/dist/services/interfaces/permission.service.interface.js +1 -6
  262. package/dist/services/interfaces/printer-file.dto.js +1 -6
  263. package/dist/services/interfaces/printer-maintenance-log.dto.js +1 -6
  264. package/dist/services/interfaces/printer-tag.dto.js +11 -26
  265. package/dist/services/interfaces/printer-tag.dto.js.map +1 -1
  266. package/dist/services/interfaces/printer-tag.service.interface.js +1 -6
  267. package/dist/services/interfaces/printer.dto.js +21 -36
  268. package/dist/services/interfaces/printer.dto.js.map +1 -1
  269. package/dist/services/interfaces/printer.service.interface.js +1 -6
  270. package/dist/services/interfaces/refresh-token.dto.js +9 -16
  271. package/dist/services/interfaces/refresh-token.dto.js.map +1 -1
  272. package/dist/services/interfaces/refresh-token.service.interface.js +1 -6
  273. package/dist/services/interfaces/role-service.interface.js +1 -6
  274. package/dist/services/interfaces/role.dto.js +7 -14
  275. package/dist/services/interfaces/role.dto.js.map +1 -1
  276. package/dist/services/interfaces/settings.dto.js +10 -17
  277. package/dist/services/interfaces/settings.dto.js.map +1 -1
  278. package/dist/services/interfaces/settings.service.interface.js +1 -6
  279. package/dist/services/interfaces/tag.dto.js +1 -6
  280. package/dist/services/interfaces/task.interfaces.js +1 -6
  281. package/dist/services/interfaces/user-role.dto.js +9 -16
  282. package/dist/services/interfaces/user-role.dto.js.map +1 -1
  283. package/dist/services/interfaces/user-service.interface.js +1 -6
  284. package/dist/services/interfaces/user.dto.js +22 -37
  285. package/dist/services/interfaces/user.dto.js.map +1 -1
  286. package/dist/services/moonraker/constants/moonraker-event.dto.js +16 -31
  287. package/dist/services/moonraker/constants/moonraker-event.dto.js.map +1 -1
  288. package/dist/services/moonraker/constants/moonraker.constants.js +4 -11
  289. package/dist/services/moonraker/constants/moonraker.constants.js.map +1 -1
  290. package/dist/services/moonraker/dto/access/access-info.dto.js +1 -6
  291. package/dist/services/moonraker/dto/access/access-login-refresh.dto.js +1 -6
  292. package/dist/services/moonraker/dto/access/access-login-result.dto.js +1 -6
  293. package/dist/services/moonraker/dto/access/access-user-result.dto.js +1 -6
  294. package/dist/services/moonraker/dto/access/access-user.dto.js +1 -6
  295. package/dist/services/moonraker/dto/database/database-namespace-item.dto.js +1 -6
  296. package/dist/services/moonraker/dto/database/database-namespace-list.dto.js +1 -6
  297. package/dist/services/moonraker/dto/gcode-help.dto.js +1 -6
  298. package/dist/services/moonraker/dto/gcode-store.dto.js +1 -6
  299. package/dist/services/moonraker/dto/job-queue/enqueue-job.dto.js +1 -6
  300. package/dist/services/moonraker/dto/job-queue/job-queue-status.dto.js +1 -6
  301. package/dist/services/moonraker/dto/machine/machine-device-power-device-state.dto.js +1 -6
  302. package/dist/services/moonraker/dto/machine/machine-device-power-devices.dto.js +1 -6
  303. package/dist/services/moonraker/dto/machine/machine-peripherals-canbus.dto.js +1 -6
  304. package/dist/services/moonraker/dto/machine/machine-peripherals-serial.dto.js +1 -6
  305. package/dist/services/moonraker/dto/machine/machine-peripherals-usb.dto.js +1 -6
  306. package/dist/services/moonraker/dto/machine/machine-peripherals-video.dto.js +1 -6
  307. package/dist/services/moonraker/dto/machine/machine-system-info.dto.js +1 -6
  308. package/dist/services/moonraker/dto/machine/machine-update-status.dto.js +1 -6
  309. package/dist/services/moonraker/dto/machine/machine-wled-strips.dto.js +1 -6
  310. package/dist/services/moonraker/dto/notifier-list.dto.js +1 -6
  311. package/dist/services/moonraker/dto/objects/bed-mesh.dto.js +1 -6
  312. package/dist/services/moonraker/dto/objects/configfile.dto.js +1 -6
  313. package/dist/services/moonraker/dto/objects/display-status.dto.js +1 -6
  314. package/dist/services/moonraker/dto/objects/extruder.dto.js +1 -6
  315. package/dist/services/moonraker/dto/objects/fan.dto.js +1 -6
  316. package/dist/services/moonraker/dto/objects/filament-motion-sensor.dto.js +1 -6
  317. package/dist/services/moonraker/dto/objects/filament-switch-sensor.dto.js +1 -6
  318. package/dist/services/moonraker/dto/objects/gcode-move.dto.js +1 -6
  319. package/dist/services/moonraker/dto/objects/gcode.dto.js +1 -6
  320. package/dist/services/moonraker/dto/objects/heater-bed.dto.js +1 -6
  321. package/dist/services/moonraker/dto/objects/heaters.dto.js +1 -6
  322. package/dist/services/moonraker/dto/objects/idle-timeout.dto.js +6 -21
  323. package/dist/services/moonraker/dto/objects/idle-timeout.dto.js.map +1 -1
  324. package/dist/services/moonraker/dto/objects/mcu.dto.js +1 -6
  325. package/dist/services/moonraker/dto/objects/motion-report.dto.js +1 -6
  326. package/dist/services/moonraker/dto/objects/output-pin.dto.js +1 -6
  327. package/dist/services/moonraker/dto/objects/pause-resume.dto.js +1 -6
  328. package/dist/services/moonraker/dto/objects/print-stats.dto.js +9 -24
  329. package/dist/services/moonraker/dto/objects/print-stats.dto.js.map +1 -1
  330. package/dist/services/moonraker/dto/objects/printer-object.dto.js +1 -6
  331. package/dist/services/moonraker/dto/objects/printer-object.types.js +1 -6
  332. package/dist/services/moonraker/dto/objects/printer-objects-list.dto.js +28 -43
  333. package/dist/services/moonraker/dto/objects/printer-objects-list.dto.js.map +1 -1
  334. package/dist/services/moonraker/dto/objects/printer-objects-query.dto.js +1 -6
  335. package/dist/services/moonraker/dto/objects/stepper-enable.dto.js +1 -6
  336. package/dist/services/moonraker/dto/objects/system-stats.dto.js +1 -6
  337. package/dist/services/moonraker/dto/objects/temperature-fan.dto.js +1 -6
  338. package/dist/services/moonraker/dto/objects/temperature-sensor.dto.js +1 -6
  339. package/dist/services/moonraker/dto/objects/toolhead.dto.js +1 -6
  340. package/dist/services/moonraker/dto/objects/virtual-sdcard.dto.js +1 -6
  341. package/dist/services/moonraker/dto/objects/webhooks.dto.js +1 -6
  342. package/dist/services/moonraker/dto/octoprint-compat/api-job.dto.js +1 -6
  343. package/dist/services/moonraker/dto/octoprint-compat/api-login.dto.js +1 -6
  344. package/dist/services/moonraker/dto/octoprint-compat/api-printer.dto.js +1 -6
  345. package/dist/services/moonraker/dto/octoprint-compat/api-profiles.dto.js +1 -6
  346. package/dist/services/moonraker/dto/octoprint-compat/api-settings.dto.js +1 -6
  347. package/dist/services/moonraker/dto/octoprint-compat/api-version.dto.js +1 -6
  348. package/dist/services/moonraker/dto/octoprint-compat/server-version.dto.js +1 -6
  349. package/dist/services/moonraker/dto/printer-info.dto.js +7 -22
  350. package/dist/services/moonraker/dto/printer-info.dto.js.map +1 -1
  351. package/dist/services/moonraker/dto/printer-query-endstops.dto.js +1 -6
  352. package/dist/services/moonraker/dto/process-stats.dto.js +1 -6
  353. package/dist/services/moonraker/dto/rest/action-result.dto.js +1 -6
  354. package/dist/services/moonraker/dto/rest/error.dto.js +1 -6
  355. package/dist/services/moonraker/dto/rest/result.dto.js +6 -13
  356. package/dist/services/moonraker/dto/rest/result.dto.js.map +1 -1
  357. package/dist/services/moonraker/dto/rollover-logs.dto.js +1 -6
  358. package/dist/services/moonraker/dto/rpc/json-rpc-error.dto.js +1 -6
  359. package/dist/services/moonraker/dto/rpc/json-rpc-request.dto.js +1 -6
  360. package/dist/services/moonraker/dto/rpc/json-rpc-response.dto.js +1 -6
  361. package/dist/services/moonraker/dto/server/server-config.dto.js +1 -6
  362. package/dist/services/moonraker/dto/server/server-info.dto.js +7 -14
  363. package/dist/services/moonraker/dto/server/server-info.dto.js.map +1 -1
  364. package/dist/services/moonraker/dto/server-announcements/announcement-action.dto.js +1 -6
  365. package/dist/services/moonraker/dto/server-announcements/announcement-entry-id.dto.js +1 -6
  366. package/dist/services/moonraker/dto/server-announcements/announcement-feeds.dto.js +1 -6
  367. package/dist/services/moonraker/dto/server-announcements/announcement-list.dto.js +1 -6
  368. package/dist/services/moonraker/dto/server-files/server-file-directory-action.dto.js +1 -6
  369. package/dist/services/moonraker/dto/server-files/server-file-directory-info.dto.js +1 -6
  370. package/dist/services/moonraker/dto/server-files/server-file-metadata.dto.js +1 -6
  371. package/dist/services/moonraker/dto/server-files/server-file-root.dto.js +1 -6
  372. package/dist/services/moonraker/dto/server-files/server-file-thumbnail.dto.js +1 -6
  373. package/dist/services/moonraker/dto/server-files/server-file-zip-action.dto.js +1 -6
  374. package/dist/services/moonraker/dto/server-files/server-file.dto.js +1 -6
  375. package/dist/services/moonraker/dto/server-history/history-job.dto.js +1 -6
  376. package/dist/services/moonraker/dto/server-history/history-last-totals.dto.js +1 -6
  377. package/dist/services/moonraker/dto/server-history/history-list.dto.js +1 -6
  378. package/dist/services/moonraker/dto/server-history/history-totals.dto.js +1 -6
  379. package/dist/services/moonraker/dto/server-history/job.dto.js +6 -21
  380. package/dist/services/moonraker/dto/server-history/job.dto.js.map +1 -1
  381. package/dist/services/moonraker/dto/server-sensors/sensor-info.dto.js +1 -6
  382. package/dist/services/moonraker/dto/server-sensors/sensor-list.dto.js +1 -6
  383. package/dist/services/moonraker/dto/server-sensors/sensor-measurements.dto.js +1 -6
  384. package/dist/services/moonraker/dto/server-webcams/webcam-item.dto.js +1 -6
  385. package/dist/services/moonraker/dto/server-webcams/webcam-list.dto.js +1 -6
  386. package/dist/services/moonraker/dto/server-webcams/webcam-test.dto.js +1 -6
  387. package/dist/services/moonraker/dto/spoolman/spoolman-active-spool.dto.js +1 -6
  388. package/dist/services/moonraker/dto/spoolman/spoolman-proxy-request.dto.js +1 -6
  389. package/dist/services/moonraker/dto/spoolman/spoolman-response.dto.js +1 -6
  390. package/dist/services/moonraker/dto/spoolman/spoolman-status.dto.js +1 -6
  391. package/dist/services/moonraker/dto/sudo-info.dto.js +1 -6
  392. package/dist/services/moonraker/dto/sudo-response.dto.js +1 -6
  393. package/dist/services/moonraker/dto/temperature-store.dto.js +1 -6
  394. package/dist/services/moonraker/dto/websocket/connection-identify-response.dto.js +1 -6
  395. package/dist/services/moonraker/dto/websocket/connection-identify.dto.js +1 -6
  396. package/dist/services/moonraker/dto/websocket/json-rpc-event.dto.js +1 -6
  397. package/dist/services/moonraker/dto/websocket/message.types.js +1 -6
  398. package/dist/services/moonraker/dto/websocket/methods.js +29 -44
  399. package/dist/services/moonraker/dto/websocket/methods.js.map +1 -1
  400. package/dist/services/moonraker/dto/websocket/notify-active-spool-set.params.js +1 -6
  401. package/dist/services/moonraker/dto/websocket/notify-agent-event.params.js +1 -6
  402. package/dist/services/moonraker/dto/websocket/notify-announcement-update.params.js +1 -6
  403. package/dist/services/moonraker/dto/websocket/notify-announcement.params.js +1 -6
  404. package/dist/services/moonraker/dto/websocket/notify-button-event.params.js +1 -6
  405. package/dist/services/moonraker/dto/websocket/notify-filelist-changed.params.js +11 -18
  406. package/dist/services/moonraker/dto/websocket/notify-filelist-changed.params.js.map +1 -1
  407. package/dist/services/moonraker/dto/websocket/notify-history-changed.params.js +1 -6
  408. package/dist/services/moonraker/dto/websocket/notify-job-queue-changed.params.js +1 -6
  409. package/dist/services/moonraker/dto/websocket/notify-proc-stat-update.params.js +1 -6
  410. package/dist/services/moonraker/dto/websocket/notify-sensor-update.params.js +1 -6
  411. package/dist/services/moonraker/dto/websocket/notify-service-state-changed.params.js +1 -6
  412. package/dist/services/moonraker/dto/websocket/notify-spoolman-status-changed.js +1 -6
  413. package/dist/services/moonraker/dto/websocket/notify-sudo-alert.params.js +1 -6
  414. package/dist/services/moonraker/dto/websocket/notify-update-response.params.js +7 -22
  415. package/dist/services/moonraker/dto/websocket/notify-update-response.params.js.map +1 -1
  416. package/dist/services/moonraker/dto/websocket/notify-user-change.params.js +1 -6
  417. package/dist/services/moonraker/moonraker-websocket.adapter.js +313 -348
  418. package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
  419. package/dist/services/moonraker/moonraker.client.js +536 -559
  420. package/dist/services/moonraker/moonraker.client.js.map +1 -1
  421. package/dist/services/moonraker.api.js +167 -192
  422. package/dist/services/moonraker.api.js.map +1 -1
  423. package/dist/services/octoprint/constants/firmware-update-settings.constants.js +19 -28
  424. package/dist/services/octoprint/constants/firmware-update-settings.constants.js.map +1 -1
  425. package/dist/services/octoprint/constants/octoprint-service.constants.js +3 -30
  426. package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -1
  427. package/dist/services/octoprint/constants/octoprint-websocket.constants.js +41 -56
  428. package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -1
  429. package/dist/services/octoprint/dto/access/user-list.dto.js +1 -6
  430. package/dist/services/octoprint/dto/access/user.dto.js +1 -6
  431. package/dist/services/octoprint/dto/auth/current-user.dto.js +1 -6
  432. package/dist/services/octoprint/dto/auth/login.dto.js +1 -6
  433. package/dist/services/octoprint/dto/connection/connection-state.type.js +23 -30
  434. package/dist/services/octoprint/dto/connection/connection-state.type.js.map +1 -1
  435. package/dist/services/octoprint/dto/connection/connection.dto.js +1 -6
  436. package/dist/services/octoprint/dto/events/client-authed.dto.js +1 -6
  437. package/dist/services/octoprint/dto/events/client-closed.dto.js +1 -6
  438. package/dist/services/octoprint/dto/events/client-opened.dto.js +1 -6
  439. package/dist/services/octoprint/dto/events/dwelling.dto.js +1 -6
  440. package/dist/services/octoprint/dto/events/file-added.dto.js +1 -6
  441. package/dist/services/octoprint/dto/events/file-deselected.dto.js +1 -6
  442. package/dist/services/octoprint/dto/events/file-removed.dto.js +1 -6
  443. package/dist/services/octoprint/dto/events/folder-added.dto.js +1 -6
  444. package/dist/services/octoprint/dto/events/home.dto.js +1 -6
  445. package/dist/services/octoprint/dto/events/metadata-analysis-finished.dto.js +1 -6
  446. package/dist/services/octoprint/dto/events/metadata-analysis-started.dto.js +1 -6
  447. package/dist/services/octoprint/dto/events/metadata-statistics-updated.dto.js +1 -6
  448. package/dist/services/octoprint/dto/events/position-update.dto.js +1 -6
  449. package/dist/services/octoprint/dto/events/print-cancelled.dto.js +1 -6
  450. package/dist/services/octoprint/dto/events/print-cancelling.dto.js +1 -6
  451. package/dist/services/octoprint/dto/events/print-done.dto.js +1 -6
  452. package/dist/services/octoprint/dto/events/print-failed.dto.js +1 -6
  453. package/dist/services/octoprint/dto/events/print-paused.dto.js +1 -6
  454. package/dist/services/octoprint/dto/events/print-resumed.dto.js +1 -6
  455. package/dist/services/octoprint/dto/events/print-started.dto.js +1 -6
  456. package/dist/services/octoprint/dto/events/printer-state-changed.dto.js +1 -6
  457. package/dist/services/octoprint/dto/events/transfer-done.dto.js +1 -6
  458. package/dist/services/octoprint/dto/events/transfer-started.dto.js +1 -6
  459. package/dist/services/octoprint/dto/events/updated-files.dto.js +1 -6
  460. package/dist/services/octoprint/dto/events/upload.dto.js +1 -6
  461. package/dist/services/octoprint/dto/events/user-logged-in.dto.js +1 -6
  462. package/dist/services/octoprint/dto/events/z-change.dto.js +1 -6
  463. package/dist/services/octoprint/dto/files/gcode-analysis.dto.js +1 -6
  464. package/dist/services/octoprint/dto/files/octoprint-file.dto.js +1 -6
  465. package/dist/services/octoprint/dto/files/octoprint-files-response.dto.js +1 -6
  466. package/dist/services/octoprint/dto/job/current-job.dto.js +8 -15
  467. package/dist/services/octoprint/dto/job/current-job.dto.js.map +1 -1
  468. package/dist/services/octoprint/dto/job/job.dto.js +1 -6
  469. package/dist/services/octoprint/dto/octoprint-event.dto.js +21 -39
  470. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
  471. package/dist/services/octoprint/dto/printer/busy-file.dto.js +1 -6
  472. package/dist/services/octoprint/dto/printer/current-printer-state.dto.js +1 -6
  473. package/dist/services/octoprint/dto/printer/flags.dto.js +1 -6
  474. package/dist/services/octoprint/dto/printer/markings.dto.js +1 -6
  475. package/dist/services/octoprint/dto/printer/progress.dto.js +1 -6
  476. package/dist/services/octoprint/dto/printer/resends.dto.js +1 -6
  477. package/dist/services/octoprint/dto/printer/state.dto.js +1 -6
  478. package/dist/services/octoprint/dto/printer/temps.dto.js +1 -6
  479. package/dist/services/octoprint/dto/rest/error.dto.js +1 -6
  480. package/dist/services/octoprint/dto/server/server.dto.js +1 -6
  481. package/dist/services/octoprint/dto/server/version.dto.js +1 -6
  482. package/dist/services/octoprint/dto/settings/serial-settings.dto.js +1 -6
  483. package/dist/services/octoprint/dto/settings/settings-parts.type.js +1 -6
  484. package/dist/services/octoprint/dto/settings/settings.dto.js +1 -6
  485. package/dist/services/octoprint/dto/settings/virtual-printer-settings.dto.js +1 -6
  486. package/dist/services/octoprint/dto/system/system-info.dto.js +32 -39
  487. package/dist/services/octoprint/dto/system/system-info.dto.js.map +1 -1
  488. package/dist/services/octoprint/dto/websocket/connection-message.dto.js +1 -6
  489. package/dist/services/octoprint/dto/websocket/current-message.dto.js +1 -6
  490. package/dist/services/octoprint/dto/websocket/event-message.dto.js +1 -6
  491. package/dist/services/octoprint/dto/websocket/event.type.js +42 -49
  492. package/dist/services/octoprint/dto/websocket/event.type.js.map +1 -1
  493. package/dist/services/octoprint/dto/websocket/history-message.dto.js +1 -6
  494. package/dist/services/octoprint/dto/websocket/plugin-message.dto.js +1 -6
  495. package/dist/services/octoprint/dto/websocket/timelapse-message.dto.js +1 -6
  496. package/dist/services/octoprint/octoprint-api.routes.js +77 -94
  497. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  498. package/dist/services/octoprint/octoprint-websocket.adapter.js +265 -315
  499. package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
  500. package/dist/services/octoprint/octoprint.client.js +220 -261
  501. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  502. package/dist/services/octoprint/utils/api.utils.js +15 -32
  503. package/dist/services/octoprint/utils/api.utils.js.map +1 -1
  504. package/dist/services/octoprint/utils/file.utils.js +44 -67
  505. package/dist/services/octoprint/utils/file.utils.js.map +1 -1
  506. package/dist/services/octoprint/utils/octoprint-http-client.builder.js +16 -29
  507. package/dist/services/octoprint/utils/octoprint-http-client.builder.js.map +1 -1
  508. package/dist/services/octoprint.api.js +113 -128
  509. package/dist/services/octoprint.api.js.map +1 -1
  510. package/dist/services/orm/base.interface.js +1 -6
  511. package/dist/services/orm/base.service.js +57 -73
  512. package/dist/services/orm/base.service.js.map +1 -1
  513. package/dist/services/orm/camera-stream.service.js +21 -27
  514. package/dist/services/orm/camera-stream.service.js.map +1 -1
  515. package/dist/services/orm/floor-position.service.js +42 -49
  516. package/dist/services/orm/floor-position.service.js.map +1 -1
  517. package/dist/services/orm/floor.service.js +110 -138
  518. package/dist/services/orm/floor.service.js.map +1 -1
  519. package/dist/services/orm/permission.service.js +16 -23
  520. package/dist/services/orm/permission.service.js.map +1 -1
  521. package/dist/services/orm/print-job.service.js +443 -545
  522. package/dist/services/orm/print-job.service.js.map +1 -1
  523. package/dist/services/orm/printer-maintenance-log.service.js +102 -149
  524. package/dist/services/orm/printer-maintenance-log.service.js.map +1 -1
  525. package/dist/services/orm/printer-tag.service.js +93 -118
  526. package/dist/services/orm/printer-tag.service.js.map +1 -1
  527. package/dist/services/orm/printer.service.js +110 -158
  528. package/dist/services/orm/printer.service.js.map +1 -1
  529. package/dist/services/orm/refresh-token.service.js +69 -99
  530. package/dist/services/orm/refresh-token.service.js.map +1 -1
  531. package/dist/services/orm/role.service.js +99 -116
  532. package/dist/services/orm/role.service.js.map +1 -1
  533. package/dist/services/orm/settings.service.js +84 -94
  534. package/dist/services/orm/settings.service.js.map +1 -1
  535. package/dist/services/orm/user-role.service.js +39 -53
  536. package/dist/services/orm/user-role.service.js.map +1 -1
  537. package/dist/services/orm/user.service.js +142 -189
  538. package/dist/services/orm/user.service.js.map +1 -1
  539. package/dist/services/print-file-downloader.service.js +153 -167
  540. package/dist/services/print-file-downloader.service.js.map +1 -1
  541. package/dist/services/print-queue.service.js +240 -326
  542. package/dist/services/print-queue.service.js.map +1 -1
  543. package/dist/services/printer-api.factory.js +26 -43
  544. package/dist/services/printer-api.factory.js.map +1 -1
  545. package/dist/services/printer-api.interface.js +23 -53
  546. package/dist/services/printer-api.interface.js.map +1 -1
  547. package/dist/services/prusa-link/constants/prusalink-event.dto.js +9 -16
  548. package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -1
  549. package/dist/services/prusa-link/constants/prusalink.constants.js +4 -11
  550. package/dist/services/prusa-link/constants/prusalink.constants.js.map +1 -1
  551. package/dist/services/prusa-link/dto/file-response.dto.js +1 -6
  552. package/dist/services/prusa-link/dto/file.dto.js +1 -6
  553. package/dist/services/prusa-link/dto/job-state.dto.js +1 -6
  554. package/dist/services/prusa-link/dto/printer-state.dto.js +1 -6
  555. package/dist/services/prusa-link/dto/status.dto.js +1 -6
  556. package/dist/services/prusa-link/dto/version.dto.js +1 -6
  557. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +141 -157
  558. package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
  559. package/dist/services/prusa-link/prusa-link.api.js +206 -240
  560. package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
  561. package/dist/services/prusa-link/utils/digest-auth.params.js +1 -6
  562. package/dist/services/prusa-link/utils/digest-auth.util.js +17 -24
  563. package/dist/services/prusa-link/utils/digest-auth.util.js.map +1 -1
  564. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js +92 -129
  565. package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -1
  566. package/dist/services/socket.factory.js +21 -36
  567. package/dist/services/socket.factory.js.map +1 -1
  568. package/dist/services/task-manager.service.js +190 -174
  569. package/dist/services/task-manager.service.js.map +1 -1
  570. package/dist/services/typeorm/typeorm.service.js +31 -46
  571. package/dist/services/typeorm/typeorm.service.js.map +1 -1
  572. package/dist/services/validators/floor-service.validation.js +26 -63
  573. package/dist/services/validators/floor-service.validation.js.map +1 -1
  574. package/dist/services/validators/print-job.validation.js +11 -26
  575. package/dist/services/validators/print-job.validation.js.map +1 -1
  576. package/dist/services/validators/printer-maintenance-log.validation.js +17 -37
  577. package/dist/services/validators/printer-maintenance-log.validation.js.map +1 -1
  578. package/dist/services/validators/printer-service.validation.js +60 -125
  579. package/dist/services/validators/printer-service.validation.js.map +1 -1
  580. package/dist/services/validators/settings-service.validation.js +46 -106
  581. package/dist/services/validators/settings-service.validation.js.map +1 -1
  582. package/dist/services/validators/user-service.validation.js +19 -36
  583. package/dist/services/validators/user-service.validation.js.map +1 -1
  584. package/dist/services/validators/yaml-service.validation.js +96 -132
  585. package/dist/services/validators/yaml-service.validation.js.map +1 -1
  586. package/dist/services/websocket-adapter.interface.js +1 -6
  587. package/dist/shared/default-http-client.builder.js +74 -92
  588. package/dist/shared/default-http-client.builder.js.map +1 -1
  589. package/dist/shared/dtos/api-state.type.js +8 -15
  590. package/dist/shared/dtos/api-state.type.js.map +1 -1
  591. package/dist/shared/dtos/socket-login.dto.js +1 -6
  592. package/dist/shared/dtos/socket-state.type.js +11 -18
  593. package/dist/shared/dtos/socket-state.type.js.map +1 -1
  594. package/dist/shared/load-controllers.js +41 -19
  595. package/dist/shared/load-controllers.js.map +1 -1
  596. package/dist/shared/runtime-settings.migration.js +43 -50
  597. package/dist/shared/runtime-settings.migration.js.map +1 -1
  598. package/dist/shared/websocket-rpc-extended.adapter.js +74 -75
  599. package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
  600. package/dist/shared/websocket.adapter.js +78 -63
  601. package/dist/shared/websocket.adapter.js.map +1 -1
  602. package/dist/state/file-upload-tracker.cache.js +63 -75
  603. package/dist/state/file-upload-tracker.cache.js.map +1 -1
  604. package/dist/state/floor.store.js +77 -89
  605. package/dist/state/floor.store.js.map +1 -1
  606. package/dist/state/printer-events.cache.js +237 -295
  607. package/dist/state/printer-events.cache.js.map +1 -1
  608. package/dist/state/printer-socket.store.js +156 -174
  609. package/dist/state/printer-socket.store.js.map +1 -1
  610. package/dist/state/printer-thumbnail.cache.js +129 -130
  611. package/dist/state/printer-thumbnail.cache.js.map +1 -1
  612. package/dist/state/printer.cache.js +87 -102
  613. package/dist/state/printer.cache.js.map +1 -1
  614. package/dist/state/settings.store.js +211 -234
  615. package/dist/state/settings.store.js.map +1 -1
  616. package/dist/state/socket-io.gateway.js +58 -87
  617. package/dist/state/socket-io.gateway.js.map +1 -1
  618. package/dist/state/test-printer-socket.store.js +116 -137
  619. package/dist/state/test-printer-socket.store.js.map +1 -1
  620. package/dist/state/validation/create-test-printer.validation.js +14 -21
  621. package/dist/state/validation/create-test-printer.validation.js.map +1 -1
  622. package/dist/task.presets.js +30 -37
  623. package/dist/task.presets.js.map +1 -1
  624. package/dist/tasks/boot.task.js +100 -128
  625. package/dist/tasks/boot.task.js.map +1 -1
  626. package/dist/tasks/client-bundle.task.js +20 -28
  627. package/dist/tasks/client-bundle.task.js.map +1 -1
  628. package/dist/tasks/print-job-analysis.task.js +88 -113
  629. package/dist/tasks/print-job-analysis.task.js.map +1 -1
  630. package/dist/tasks/printer-websocket-restore.task.js +41 -54
  631. package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
  632. package/dist/tasks/printer-websocket.task.js +11 -19
  633. package/dist/tasks/printer-websocket.task.js.map +1 -1
  634. package/dist/tasks/socketio.task.js +35 -53
  635. package/dist/tasks/socketio.task.js.map +1 -1
  636. package/dist/tasks/software-update.task.js +12 -20
  637. package/dist/tasks/software-update.task.js.map +1 -1
  638. package/dist/tasks.js +27 -41
  639. package/dist/tasks.js.map +1 -1
  640. package/dist/types/express/index.d.js +1 -6
  641. package/dist/types/virtual-modules.d.js +1 -0
  642. package/dist/utils/array.util.js +9 -24
  643. package/dist/utils/array.util.js.map +1 -1
  644. package/dist/utils/bgcode/bgcode-thumbnail.parser.js +26 -44
  645. package/dist/utils/bgcode/bgcode-thumbnail.parser.js.map +1 -1
  646. package/dist/utils/bgcode/bgcode.constants.js +9 -45
  647. package/dist/utils/bgcode/bgcode.constants.js.map +1 -1
  648. package/dist/utils/bgcode/bgcode.types.js +57 -106
  649. package/dist/utils/bgcode/bgcode.types.js.map +1 -1
  650. package/dist/utils/bgcode/bgcode.utils.js +167 -256
  651. package/dist/utils/bgcode/bgcode.utils.js.map +1 -1
  652. package/dist/utils/bgcode/heatshrink-decoder.js +130 -170
  653. package/dist/utils/bgcode/heatshrink-decoder.js.map +1 -1
  654. package/dist/utils/bgcode/png-encoder.js +53 -66
  655. package/dist/utils/bgcode/png-encoder.js.map +1 -1
  656. package/dist/utils/bgcode/qoi-decoder.js +116 -135
  657. package/dist/utils/bgcode/qoi-decoder.js.map +1 -1
  658. package/dist/utils/cache/key-diff.cache.js +56 -85
  659. package/dist/utils/cache/key-diff.cache.js.map +1 -1
  660. package/dist/utils/correlation-token.util.js +4 -11
  661. package/dist/utils/correlation-token.util.js.map +1 -1
  662. package/dist/utils/crypto.utils.js +7 -23
  663. package/dist/utils/crypto.utils.js.map +1 -1
  664. package/dist/utils/env.utils.js +14 -49
  665. package/dist/utils/env.utils.js.map +1 -1
  666. package/dist/utils/error.utils.js +4 -11
  667. package/dist/utils/error.utils.js.map +1 -1
  668. package/dist/utils/fs.utils.js +26 -49
  669. package/dist/utils/fs.utils.js.map +1 -1
  670. package/dist/utils/gcode.utils.js +30 -43
  671. package/dist/utils/gcode.utils.js.map +1 -1
  672. package/dist/utils/image-dimensions.js +39 -54
  673. package/dist/utils/image-dimensions.js.map +1 -1
  674. package/dist/utils/job-stats.util.js +41 -72
  675. package/dist/utils/job-stats.util.js.map +1 -1
  676. package/dist/utils/normalize-url.js +135 -203
  677. package/dist/utils/normalize-url.js.map +1 -1
  678. package/dist/utils/parsers/3mf.parser.js +298 -365
  679. package/dist/utils/parsers/3mf.parser.js.map +1 -1
  680. package/dist/utils/parsers/bgcode.parser.js +149 -202
  681. package/dist/utils/parsers/bgcode.parser.js.map +1 -1
  682. package/dist/utils/parsers/gcode.parser.js +200 -263
  683. package/dist/utils/parsers/gcode.parser.js.map +1 -1
  684. package/dist/utils/parsers/parser.types.js +1 -6
  685. package/dist/utils/pretty-print.utils.js +5 -20
  686. package/dist/utils/pretty-print.utils.js.map +1 -1
  687. package/dist/utils/semver.utils.js +10 -26
  688. package/dist/utils/semver.utils.js.map +1 -1
  689. package/dist/utils/swagger/decorators.js +14 -32
  690. package/dist/utils/swagger/decorators.js.map +1 -1
  691. package/dist/utils/swagger/generator.js +151 -194
  692. package/dist/utils/swagger/generator.js.map +1 -1
  693. package/dist/utils/swagger/swagger.js +40 -51
  694. package/dist/utils/swagger/swagger.js.map +1 -1
  695. package/dist/utils/thumbnail.util.js +11 -20
  696. package/dist/utils/thumbnail.util.js.map +1 -1
  697. package/dist/utils/time.utils.js +4 -12
  698. package/dist/utils/time.utils.js.map +1 -1
  699. package/dist/utils/url.utils.js +9 -27
  700. package/dist/utils/url.utils.js.map +1 -1
  701. package/package.json +79 -90
  702. package/packages/consoles/package.json +44 -0
  703. package/packages/consoles/tsconfig.json +23 -0
  704. package/packages/consoles/vite.config.ts +15 -0
  705. package/tsconfig.json +10 -6
  706. package/vite.config.ts +62 -0
  707. package/.swcrc +0 -33
  708. package/.yarn/releases/yarn-4.12.0.cjs +0 -942
  709. package/biome.json +0 -36
  710. package/dist/consoles/bambu-mqtt-diagnostic.console.js +0 -565
  711. package/dist/consoles/bambu-mqtt-diagnostic.console.js.map +0 -1
  712. package/dist/consoles/download-github-releases.js +0 -50
  713. package/dist/consoles/download-github-releases.js.map +0 -1
  714. package/dist/consoles/gcode-scanner-poc.console.js +0 -52
  715. package/dist/consoles/gcode-scanner-poc.console.js.map +0 -1
  716. package/dist/consoles/launch-http-servers.js +0 -31
  717. package/dist/consoles/launch-http-servers.js.map +0 -1
  718. package/dist/consoles/mock-bambu.server.js +0 -319
  719. package/dist/consoles/mock-bambu.server.js.map +0 -1
  720. package/dist/consoles/mock-camera/default-image.js +0 -13
  721. package/dist/consoles/mock-camera/default-image.js.map +0 -1
  722. package/dist/consoles/mock-camera/mock-camera.server.js +0 -160
  723. package/dist/consoles/mock-camera/mock-camera.server.js.map +0 -1
  724. package/dist/consoles/mock-octoprint.server.js +0 -499
  725. package/dist/consoles/mock-octoprint.server.js.map +0 -1
  726. package/dist/consoles/mock-prusalink.server.js +0 -57
  727. package/dist/consoles/mock-prusalink.server.js.map +0 -1
  728. package/dist/consoles/moonraker-test.console.js +0 -3
  729. package/dist/consoles/moonraker-test.console.js.map +0 -1
  730. package/dist/consoles/utils/api-messages.js +0 -856
  731. package/dist/consoles/utils/api-messages.js.map +0 -1
  732. package/dist/consoles/utils/delayed-memory.storage.js +0 -42
  733. package/dist/consoles/utils/delayed-memory.storage.js.map +0 -1
  734. package/dist/consoles/utils/ws-messages.js +0 -88
  735. package/dist/consoles/utils/ws-messages.js.map +0 -1
  736. package/dist/entities/index.js.map +0 -1
  737. package/dist/services/bambu/mqtt-message.types.js.map +0 -1
  738. package/dist/services/interfaces/auth.service.interface.js.map +0 -1
  739. package/dist/services/interfaces/camera-stream.service.interface.js.map +0 -1
  740. package/dist/services/interfaces/file-upload-tracker.interface.js.map +0 -1
  741. package/dist/services/interfaces/floor.service.interface.js.map +0 -1
  742. package/dist/services/interfaces/jwt.service.interface.js.map +0 -1
  743. package/dist/services/interfaces/permission.service.interface.js.map +0 -1
  744. package/dist/services/interfaces/printer-file.dto.js.map +0 -1
  745. package/dist/services/interfaces/printer-maintenance-log.dto.js.map +0 -1
  746. package/dist/services/interfaces/printer-tag.service.interface.js.map +0 -1
  747. package/dist/services/interfaces/printer.service.interface.js.map +0 -1
  748. package/dist/services/interfaces/refresh-token.service.interface.js.map +0 -1
  749. package/dist/services/interfaces/role-service.interface.js.map +0 -1
  750. package/dist/services/interfaces/settings.service.interface.js.map +0 -1
  751. package/dist/services/interfaces/tag.dto.js.map +0 -1
  752. package/dist/services/interfaces/task.interfaces.js.map +0 -1
  753. package/dist/services/interfaces/user-service.interface.js.map +0 -1
  754. package/dist/services/moonraker/dto/access/access-info.dto.js.map +0 -1
  755. package/dist/services/moonraker/dto/access/access-login-refresh.dto.js.map +0 -1
  756. package/dist/services/moonraker/dto/access/access-login-result.dto.js.map +0 -1
  757. package/dist/services/moonraker/dto/access/access-user-result.dto.js.map +0 -1
  758. package/dist/services/moonraker/dto/access/access-user.dto.js.map +0 -1
  759. package/dist/services/moonraker/dto/database/database-namespace-item.dto.js.map +0 -1
  760. package/dist/services/moonraker/dto/database/database-namespace-list.dto.js.map +0 -1
  761. package/dist/services/moonraker/dto/gcode-help.dto.js.map +0 -1
  762. package/dist/services/moonraker/dto/gcode-store.dto.js.map +0 -1
  763. package/dist/services/moonraker/dto/job-queue/enqueue-job.dto.js.map +0 -1
  764. package/dist/services/moonraker/dto/job-queue/job-queue-status.dto.js.map +0 -1
  765. package/dist/services/moonraker/dto/machine/machine-device-power-device-state.dto.js.map +0 -1
  766. package/dist/services/moonraker/dto/machine/machine-device-power-devices.dto.js.map +0 -1
  767. package/dist/services/moonraker/dto/machine/machine-peripherals-canbus.dto.js.map +0 -1
  768. package/dist/services/moonraker/dto/machine/machine-peripherals-serial.dto.js.map +0 -1
  769. package/dist/services/moonraker/dto/machine/machine-peripherals-usb.dto.js.map +0 -1
  770. package/dist/services/moonraker/dto/machine/machine-peripherals-video.dto.js.map +0 -1
  771. package/dist/services/moonraker/dto/machine/machine-system-info.dto.js.map +0 -1
  772. package/dist/services/moonraker/dto/machine/machine-update-status.dto.js.map +0 -1
  773. package/dist/services/moonraker/dto/machine/machine-wled-strips.dto.js.map +0 -1
  774. package/dist/services/moonraker/dto/notifier-list.dto.js.map +0 -1
  775. package/dist/services/moonraker/dto/objects/bed-mesh.dto.js.map +0 -1
  776. package/dist/services/moonraker/dto/objects/configfile.dto.js.map +0 -1
  777. package/dist/services/moonraker/dto/objects/display-status.dto.js.map +0 -1
  778. package/dist/services/moonraker/dto/objects/extruder.dto.js.map +0 -1
  779. package/dist/services/moonraker/dto/objects/fan.dto.js.map +0 -1
  780. package/dist/services/moonraker/dto/objects/filament-motion-sensor.dto.js.map +0 -1
  781. package/dist/services/moonraker/dto/objects/filament-switch-sensor.dto.js.map +0 -1
  782. package/dist/services/moonraker/dto/objects/gcode-move.dto.js.map +0 -1
  783. package/dist/services/moonraker/dto/objects/gcode.dto.js.map +0 -1
  784. package/dist/services/moonraker/dto/objects/heater-bed.dto.js.map +0 -1
  785. package/dist/services/moonraker/dto/objects/heaters.dto.js.map +0 -1
  786. package/dist/services/moonraker/dto/objects/mcu.dto.js.map +0 -1
  787. package/dist/services/moonraker/dto/objects/motion-report.dto.js.map +0 -1
  788. package/dist/services/moonraker/dto/objects/output-pin.dto.js.map +0 -1
  789. package/dist/services/moonraker/dto/objects/pause-resume.dto.js.map +0 -1
  790. package/dist/services/moonraker/dto/objects/printer-object.dto.js.map +0 -1
  791. package/dist/services/moonraker/dto/objects/printer-object.types.js.map +0 -1
  792. package/dist/services/moonraker/dto/objects/printer-objects-query.dto.js.map +0 -1
  793. package/dist/services/moonraker/dto/objects/stepper-enable.dto.js.map +0 -1
  794. package/dist/services/moonraker/dto/objects/system-stats.dto.js.map +0 -1
  795. package/dist/services/moonraker/dto/objects/temperature-fan.dto.js.map +0 -1
  796. package/dist/services/moonraker/dto/objects/temperature-sensor.dto.js.map +0 -1
  797. package/dist/services/moonraker/dto/objects/toolhead.dto.js.map +0 -1
  798. package/dist/services/moonraker/dto/objects/virtual-sdcard.dto.js.map +0 -1
  799. package/dist/services/moonraker/dto/objects/webhooks.dto.js.map +0 -1
  800. package/dist/services/moonraker/dto/octoprint-compat/api-job.dto.js.map +0 -1
  801. package/dist/services/moonraker/dto/octoprint-compat/api-login.dto.js.map +0 -1
  802. package/dist/services/moonraker/dto/octoprint-compat/api-printer.dto.js.map +0 -1
  803. package/dist/services/moonraker/dto/octoprint-compat/api-profiles.dto.js.map +0 -1
  804. package/dist/services/moonraker/dto/octoprint-compat/api-settings.dto.js.map +0 -1
  805. package/dist/services/moonraker/dto/octoprint-compat/api-version.dto.js.map +0 -1
  806. package/dist/services/moonraker/dto/octoprint-compat/server-version.dto.js.map +0 -1
  807. package/dist/services/moonraker/dto/printer-query-endstops.dto.js.map +0 -1
  808. package/dist/services/moonraker/dto/process-stats.dto.js.map +0 -1
  809. package/dist/services/moonraker/dto/rest/action-result.dto.js.map +0 -1
  810. package/dist/services/moonraker/dto/rest/error.dto.js.map +0 -1
  811. package/dist/services/moonraker/dto/rollover-logs.dto.js.map +0 -1
  812. package/dist/services/moonraker/dto/rpc/json-rpc-error.dto.js.map +0 -1
  813. package/dist/services/moonraker/dto/rpc/json-rpc-request.dto.js.map +0 -1
  814. package/dist/services/moonraker/dto/rpc/json-rpc-response.dto.js.map +0 -1
  815. package/dist/services/moonraker/dto/server/server-config.dto.js.map +0 -1
  816. package/dist/services/moonraker/dto/server-announcements/announcement-action.dto.js.map +0 -1
  817. package/dist/services/moonraker/dto/server-announcements/announcement-entry-id.dto.js.map +0 -1
  818. package/dist/services/moonraker/dto/server-announcements/announcement-feeds.dto.js.map +0 -1
  819. package/dist/services/moonraker/dto/server-announcements/announcement-list.dto.js.map +0 -1
  820. package/dist/services/moonraker/dto/server-files/server-file-directory-action.dto.js.map +0 -1
  821. package/dist/services/moonraker/dto/server-files/server-file-directory-info.dto.js.map +0 -1
  822. package/dist/services/moonraker/dto/server-files/server-file-metadata.dto.js.map +0 -1
  823. package/dist/services/moonraker/dto/server-files/server-file-root.dto.js.map +0 -1
  824. package/dist/services/moonraker/dto/server-files/server-file-thumbnail.dto.js.map +0 -1
  825. package/dist/services/moonraker/dto/server-files/server-file-zip-action.dto.js.map +0 -1
  826. package/dist/services/moonraker/dto/server-files/server-file.dto.js.map +0 -1
  827. package/dist/services/moonraker/dto/server-history/history-job.dto.js.map +0 -1
  828. package/dist/services/moonraker/dto/server-history/history-last-totals.dto.js.map +0 -1
  829. package/dist/services/moonraker/dto/server-history/history-list.dto.js.map +0 -1
  830. package/dist/services/moonraker/dto/server-history/history-totals.dto.js.map +0 -1
  831. package/dist/services/moonraker/dto/server-sensors/sensor-info.dto.js.map +0 -1
  832. package/dist/services/moonraker/dto/server-sensors/sensor-list.dto.js.map +0 -1
  833. package/dist/services/moonraker/dto/server-sensors/sensor-measurements.dto.js.map +0 -1
  834. package/dist/services/moonraker/dto/server-webcams/webcam-item.dto.js.map +0 -1
  835. package/dist/services/moonraker/dto/server-webcams/webcam-list.dto.js.map +0 -1
  836. package/dist/services/moonraker/dto/server-webcams/webcam-test.dto.js.map +0 -1
  837. package/dist/services/moonraker/dto/spoolman/spoolman-active-spool.dto.js.map +0 -1
  838. package/dist/services/moonraker/dto/spoolman/spoolman-proxy-request.dto.js.map +0 -1
  839. package/dist/services/moonraker/dto/spoolman/spoolman-response.dto.js.map +0 -1
  840. package/dist/services/moonraker/dto/spoolman/spoolman-status.dto.js.map +0 -1
  841. package/dist/services/moonraker/dto/sudo-info.dto.js.map +0 -1
  842. package/dist/services/moonraker/dto/sudo-response.dto.js.map +0 -1
  843. package/dist/services/moonraker/dto/temperature-store.dto.js.map +0 -1
  844. package/dist/services/moonraker/dto/websocket/connection-identify-response.dto.js.map +0 -1
  845. package/dist/services/moonraker/dto/websocket/connection-identify.dto.js.map +0 -1
  846. package/dist/services/moonraker/dto/websocket/json-rpc-event.dto.js.map +0 -1
  847. package/dist/services/moonraker/dto/websocket/message.types.js.map +0 -1
  848. package/dist/services/moonraker/dto/websocket/notify-active-spool-set.params.js.map +0 -1
  849. package/dist/services/moonraker/dto/websocket/notify-agent-event.params.js.map +0 -1
  850. package/dist/services/moonraker/dto/websocket/notify-announcement-update.params.js.map +0 -1
  851. package/dist/services/moonraker/dto/websocket/notify-announcement.params.js.map +0 -1
  852. package/dist/services/moonraker/dto/websocket/notify-button-event.params.js.map +0 -1
  853. package/dist/services/moonraker/dto/websocket/notify-history-changed.params.js.map +0 -1
  854. package/dist/services/moonraker/dto/websocket/notify-job-queue-changed.params.js.map +0 -1
  855. package/dist/services/moonraker/dto/websocket/notify-proc-stat-update.params.js.map +0 -1
  856. package/dist/services/moonraker/dto/websocket/notify-sensor-update.params.js.map +0 -1
  857. package/dist/services/moonraker/dto/websocket/notify-service-state-changed.params.js.map +0 -1
  858. package/dist/services/moonraker/dto/websocket/notify-spoolman-status-changed.js.map +0 -1
  859. package/dist/services/moonraker/dto/websocket/notify-sudo-alert.params.js.map +0 -1
  860. package/dist/services/moonraker/dto/websocket/notify-user-change.params.js.map +0 -1
  861. package/dist/services/octoprint/dto/access/user-list.dto.js.map +0 -1
  862. package/dist/services/octoprint/dto/access/user.dto.js.map +0 -1
  863. package/dist/services/octoprint/dto/auth/current-user.dto.js.map +0 -1
  864. package/dist/services/octoprint/dto/auth/login.dto.js.map +0 -1
  865. package/dist/services/octoprint/dto/connection/connection.dto.js.map +0 -1
  866. package/dist/services/octoprint/dto/events/client-authed.dto.js.map +0 -1
  867. package/dist/services/octoprint/dto/events/client-closed.dto.js.map +0 -1
  868. package/dist/services/octoprint/dto/events/client-opened.dto.js.map +0 -1
  869. package/dist/services/octoprint/dto/events/dwelling.dto.js.map +0 -1
  870. package/dist/services/octoprint/dto/events/file-added.dto.js.map +0 -1
  871. package/dist/services/octoprint/dto/events/file-deselected.dto.js.map +0 -1
  872. package/dist/services/octoprint/dto/events/file-removed.dto.js.map +0 -1
  873. package/dist/services/octoprint/dto/events/folder-added.dto.js.map +0 -1
  874. package/dist/services/octoprint/dto/events/home.dto.js.map +0 -1
  875. package/dist/services/octoprint/dto/events/metadata-analysis-finished.dto.js.map +0 -1
  876. package/dist/services/octoprint/dto/events/metadata-analysis-started.dto.js.map +0 -1
  877. package/dist/services/octoprint/dto/events/metadata-statistics-updated.dto.js.map +0 -1
  878. package/dist/services/octoprint/dto/events/position-update.dto.js.map +0 -1
  879. package/dist/services/octoprint/dto/events/print-cancelled.dto.js.map +0 -1
  880. package/dist/services/octoprint/dto/events/print-cancelling.dto.js.map +0 -1
  881. package/dist/services/octoprint/dto/events/print-done.dto.js.map +0 -1
  882. package/dist/services/octoprint/dto/events/print-failed.dto.js.map +0 -1
  883. package/dist/services/octoprint/dto/events/print-paused.dto.js.map +0 -1
  884. package/dist/services/octoprint/dto/events/print-resumed.dto.js.map +0 -1
  885. package/dist/services/octoprint/dto/events/print-started.dto.js.map +0 -1
  886. package/dist/services/octoprint/dto/events/printer-state-changed.dto.js.map +0 -1
  887. package/dist/services/octoprint/dto/events/transfer-done.dto.js.map +0 -1
  888. package/dist/services/octoprint/dto/events/transfer-started.dto.js.map +0 -1
  889. package/dist/services/octoprint/dto/events/updated-files.dto.js.map +0 -1
  890. package/dist/services/octoprint/dto/events/upload.dto.js.map +0 -1
  891. package/dist/services/octoprint/dto/events/user-logged-in.dto.js.map +0 -1
  892. package/dist/services/octoprint/dto/events/z-change.dto.js.map +0 -1
  893. package/dist/services/octoprint/dto/files/gcode-analysis.dto.js.map +0 -1
  894. package/dist/services/octoprint/dto/files/octoprint-file.dto.js.map +0 -1
  895. package/dist/services/octoprint/dto/files/octoprint-files-response.dto.js.map +0 -1
  896. package/dist/services/octoprint/dto/job/job.dto.js.map +0 -1
  897. package/dist/services/octoprint/dto/printer/busy-file.dto.js.map +0 -1
  898. package/dist/services/octoprint/dto/printer/current-printer-state.dto.js.map +0 -1
  899. package/dist/services/octoprint/dto/printer/flags.dto.js.map +0 -1
  900. package/dist/services/octoprint/dto/printer/markings.dto.js.map +0 -1
  901. package/dist/services/octoprint/dto/printer/progress.dto.js.map +0 -1
  902. package/dist/services/octoprint/dto/printer/resends.dto.js.map +0 -1
  903. package/dist/services/octoprint/dto/printer/state.dto.js.map +0 -1
  904. package/dist/services/octoprint/dto/printer/temps.dto.js.map +0 -1
  905. package/dist/services/octoprint/dto/rest/error.dto.js.map +0 -1
  906. package/dist/services/octoprint/dto/server/server.dto.js.map +0 -1
  907. package/dist/services/octoprint/dto/server/version.dto.js.map +0 -1
  908. package/dist/services/octoprint/dto/settings/serial-settings.dto.js.map +0 -1
  909. package/dist/services/octoprint/dto/settings/settings-parts.type.js.map +0 -1
  910. package/dist/services/octoprint/dto/settings/settings.dto.js.map +0 -1
  911. package/dist/services/octoprint/dto/settings/virtual-printer-settings.dto.js.map +0 -1
  912. package/dist/services/octoprint/dto/websocket/connection-message.dto.js.map +0 -1
  913. package/dist/services/octoprint/dto/websocket/current-message.dto.js.map +0 -1
  914. package/dist/services/octoprint/dto/websocket/event-message.dto.js.map +0 -1
  915. package/dist/services/octoprint/dto/websocket/history-message.dto.js.map +0 -1
  916. package/dist/services/octoprint/dto/websocket/plugin-message.dto.js.map +0 -1
  917. package/dist/services/octoprint/dto/websocket/timelapse-message.dto.js.map +0 -1
  918. package/dist/services/orm/base.interface.js.map +0 -1
  919. package/dist/services/prusa-link/dto/file-response.dto.js.map +0 -1
  920. package/dist/services/prusa-link/dto/file.dto.js.map +0 -1
  921. package/dist/services/prusa-link/dto/job-state.dto.js.map +0 -1
  922. package/dist/services/prusa-link/dto/printer-state.dto.js.map +0 -1
  923. package/dist/services/prusa-link/dto/status.dto.js.map +0 -1
  924. package/dist/services/prusa-link/dto/version.dto.js.map +0 -1
  925. package/dist/services/prusa-link/utils/digest-auth.params.js.map +0 -1
  926. package/dist/services/websocket-adapter.interface.js.map +0 -1
  927. package/dist/shared/dtos/socket-login.dto.js.map +0 -1
  928. package/dist/types/express/index.d.js.map +0 -1
  929. package/dist/utils/parsers/parser.types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/core/yaml.service.ts"],"names":["YamlService","logger","loggerFactory","printerTagService","printerService","printerCache","floorStore","floorService","userService","roleService","settingsStore","name","importYaml","yamlBuffer","importSpec","load","databaseTypeSqlite","databaseType","exportPrinters","exportFloorGrid","exportSettings","exportUsers","config","normalizeYamlData","importData","validateInput","importPrintersFloorsYamlSchema","hasSystemData","validateSystemTablesEmpty","settings","log","importSettings","users","length","importUsers","floors","floor","importPrinterPositionsSchema","updateByPropertyPrinters","insertPrinters","analysePrintersUpsert","printers","printerComparisonStrategiesByPriority","updateByPropertyFloors","insertFloors","analyseFloorsUpsert","floorComparisonStrategiesByPriority","updateByNameTags","insertTags","analyseUpsertTags","tags","printerIdMap","newPrinter","state","create","id","Error","JSON","stringify","error","updatePrinterSpec","updateId","printerId","updatedPrinter","value","originalPrinterId","update","floorIdMap","newFloor","originalFloorId","knownPrinterPositions","floorPosition","knownPrinterId","floorId","push","createdFloor","updateFloorSpec","updatedFloor","knownPrinters","loadStore","tag","createdTag","createTag","color","printer","addPrinterToTag","updateTagSpec","existingTag","getPrintersByTag","tagId","existingPrinterIds","map","p","wantedTargetPrinterIds","filter","unwantedId","eid","includes","removePrinterFromTag","nonExistingNewId","server","updateServerSettings","timeout","updateTimeoutSettings","frontend","updateFrontendSettings","wizard","wizardCompleted","importedWizardVersion","wizardVersion","setWizardCompleted","credential","jwtExpiresIn","refreshTokenAttempts","refreshTokenExpiry","slicerApiKey","updateCoreCredentialSettings","getCredentialSettings","setSlicerApiKey","loadSettings","allRoles","roles","user","Number","parseInt","roleNames","roleName","some","r","register","username","password","isRootUser","isDemoUser","isVerified","needsPasswordChange","updatePasswordHashUnsafeByUsername","passwordHash","errors","getWizardSettings","existingSettings","getSettings","Object","keys","existingUsers","listUsers","join","upsertPrinters","comparisonStrategies","existingPrinters","list","names","toLowerCase","urls","printerURL","ids","toString","strategy","comparedName","foundIndex","findIndex","n","upsertFloors","comparisonStrategy","existingFloors","floorLevels","order","comparedProperty","upsertTags","existingTags","listTags","indexOf","exportYaml","options","input","exportPrintersFloorsYamlSchema","exportFloors","exportTags","dumpedObject","version","process","env","npm_package_version","exportedAt","Date","undefined","user_roles","apiKey","getLoginDto","disabledReason","enabled","printerType","dateAdded","assignee","flowRate","feedRate","listCache","f","dumpedFloor","fPrinterId","x","y","t","getSettingsSensitive","u","userDto","toDto","createdAt","dump","printerName","settingsAppearance","OctoprintType","MoonrakerType","PrusaLinkType","BambuType","groups","exportGroups"],"mappings":";;;;+BAqBaA;;;eAAAA;;;4BArBiB;uCAMvB;wBACoB;qCAQ4C;AAMhE,MAAMA;;;;;;;;;IACMC,OAAsB;IAEvC,YACEC,aAA6B,EAC7B,AAAiBC,iBAAqC,EACtD,AAAiBC,cAA+B,EAChD,AAAiBC,YAA0B,EAC3C,AAAiBC,UAAsB,EACvC,AAAiBC,YAA2B,EAC5C,AAAiBC,WAAyB,EAC1C,AAAiBC,WAAyB,EAC1C,AAAiBC,aAA4B,CAC7C;aARiBP,oBAAAA;aACAC,iBAAAA;aACAC,eAAAA;aACAC,aAAAA;aACAC,eAAAA;aACAC,cAAAA;aACAC,cAAAA;aACAC,gBAAAA;QAEjB,IAAI,CAACT,MAAM,GAAGC,cAAcF,YAAYW,IAAI;IAC9C;IAEA,MAAMC,WAAWC,UAAkB,EAAE;QACnC,MAAMC,aAAc,MAAMC,IAAAA,YAAI,EAACF;QAC/B,MAAMG,qBAAqBF,WAAWG,YAAY,KAAK;QACvD,MAAM,EAAEC,cAAc,EAAEC,eAAe,EAAEC,cAAc,EAAEC,WAAW,EAAE,GAAGP,WAAWQ,MAAM;QAG1F,IAAI,CAACC,iBAAiB,CAACT,YAAYE;QAEnC,MAAMQ,aAAa,MAAMC,IAAAA,yBAAa,EAACX,YAAYY,qDAA8B;QAGjF,MAAMC,gBAAgBP,kBAAkBC;QACxC,IAAIM,eAAe;YACjB,MAAM,IAAI,CAACC,yBAAyB,CAACd;YAGrC,IAAIM,kBAAkBN,WAAWe,QAAQ,EAAE;gBACzC,IAAI,CAAC5B,MAAM,CAAC6B,GAAG,CAAC;gBAChB,MAAM,IAAI,CAACC,cAAc,CAACjB,WAAWe,QAAQ;YAC/C;YAEA,IAAIR,eAAeP,WAAWkB,KAAK,IAAIlB,WAAWkB,KAAK,CAACC,MAAM,GAAG,GAAG;gBAClE,IAAI,CAAChC,MAAM,CAAC6B,GAAG,CAAC,CAAC,iBAAiB,EAAGhB,WAAWkB,KAAK,CAACC,MAAM,CAAE,OAAO,CAAC;gBACtE,MAAM,IAAI,CAACC,WAAW,CAACpB,WAAWkB,KAAK,EAAEhB;YAC3C;QACF;QAGA,IAAIG,mBAAmBK,WAAWW,MAAM,EAAEF,QAAQ;YAChD,KAAK,MAAMG,SAASZ,WAAWW,MAAM,CAAE;gBACrC,MAAMV,IAAAA,yBAAa,EAACW,OAAOC,mDAA4B;YACzD;QACF;QAEA,IAAI,CAACpC,MAAM,CAAC6B,GAAG,CAAC;QAChB,MAAM,EAAEQ,wBAAwB,EAAEC,cAAc,EAAE,GAAG,MAAM,IAAI,CAACC,qBAAqB,CACnFhB,WAAWiB,QAAQ,IAAI,EAAE,EACzBjB,WAAWF,MAAM,CAACoB,qCAAqC;QAGzD,IAAI,CAACzC,MAAM,CAAC6B,GAAG,CAAC;QAChB,MAAM,EAAEa,sBAAsB,EAAEC,YAAY,EAAE,GAAG,MAAM,IAAI,CAACC,mBAAmB,CAC7ErB,WAAWW,MAAM,IAAI,EAAE,EACvBX,WAAWF,MAAM,CAACwB,mCAAmC;QAGvD,IAAI,CAAC7C,MAAM,CAAC6B,GAAG,CAAC;QAChB,MAAM,EAAEiB,gBAAgB,EAAEC,UAAU,EAAE,GAAG,MAAM,IAAI,CAACC,iBAAiB,CAACzB,WAAW0B,IAAI,IAAI,EAAE;QAE3F,IAAI,CAACjD,MAAM,CAAC6B,GAAG,CAAC,CAAC,iCAAiC,EAAGS,eAAeN,MAAM,CAAE,UAAU,CAAC;QACvF,MAAMkB,eAAwC,CAAC;QAC/C,KAAK,MAAMC,cAAcb,eAAgB;YACvC,IAAI;gBACF,MAAMc,QAAQ,MAAM,IAAI,CAACjD,cAAc,CAACkD,MAAM,CAAC;oBAAE,GAAGF,UAAU;gBAAC;gBAC/D,IAAI,CAACA,WAAWG,EAAE,EAAE;oBAClB,MAAM,IAAIC,MAAM,CAAC,mBAAmB,EAAGC,KAAKC,SAAS,CAACN,aAAc;gBACtE;gBACAD,YAAY,CAACC,WAAWG,EAAE,CAAC,GAAGF,MAAME,EAAE;YACxC,EAAE,OAAOI,OAAO;gBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,yBAAyB,EAAGP,WAAWzC,IAAI,CAAE,CAAC,CAAC,EAAEgD;YAEtE;QACF;QAEA,IAAI,CAAC1D,MAAM,CAAC6B,GAAG,CAAC,CAAC,mCAAmC,EAAGQ,yBAAyBL,MAAM,CAAE,UAAU,CAAC;QACnG,KAAK,MAAM2B,qBAAqBtB,yBAA0B;YACxD,IAAI;gBACF,MAAMuB,WAAWD,kBAAkBE,SAAS;gBAC5C,MAAMC,iBAAiBH,kBAAkBI,KAAK;gBAC9C,IAAI,OAAOH,aAAa,UAAU;oBAChC,MAAM,IAAIL,MAAM;gBAClB;gBAEA,MAAMS,oBAAoBF,eAAeR,EAAE;gBAC3C,OAAOK,kBAAkBI,KAAK,CAACT,EAAE;gBAEjCQ,eAAeR,EAAE,GAAGM;gBACpB,MAAMR,QAAQ,MAAM,IAAI,CAACjD,cAAc,CAAC8D,MAAM,CAACL,UAAUE;gBACzD,IAAI,CAACH,kBAAkBE,SAAS,EAAE;oBAChC,MAAM,IAAIN,MAAM;gBAClB;gBAEAL,YAAY,CAACc,kBAAkB,GAAGZ,MAAME,EAAE;YAC5C,EAAE,OAAOI,OAAO;gBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,yBAAyB,EAAGC,kBAAkBI,KAAK,CAACrD,IAAI,CAAE,CAAC,CAAC,EAAEgD;YAEnF;QACF;QAEA,IAAI,CAAC1D,MAAM,CAAC6B,GAAG,CAAC,CAAC,+BAA+B,EAAGc,aAAaX,MAAM,CAAE,QAAQ,CAAC;QACjF,MAAMkC,aAAsC,CAAC;QAC7C,KAAK,MAAMC,YAAYxB,aAAc;YACnC,IAAI;gBACF,MAAMyB,kBAAkBD,SAASb,EAAE;gBACnC,OAAOa,SAASb,EAAE;gBAGlB,MAAMe,wBAAwB,EAAE;gBAEhC,IAAInD,mBAAmBD,gBAAgB;oBACrC,KAAK,MAAMqD,iBAAiBH,SAAS3B,QAAQ,CAAE;wBAC7C,MAAM+B,iBAAiBrB,YAAY,CAACoB,cAAcT,SAAS,CAAC;wBAE5D,IAAI,CAACU,gBAAgB;4BACnB;wBACF;wBAEA,OAAOD,cAAchB,EAAE;wBACvB,OAAOgB,cAAcE,OAAO;wBAC5BF,cAAcT,SAAS,GAAGU;wBAC1BF,sBAAsBI,IAAI,CAACH;oBAC7B;oBACAH,SAAS3B,QAAQ,GAAG6B;gBACtB;gBAEA,MAAMK,eAAe,MAAM,IAAI,CAACrE,UAAU,CAACgD,MAAM,CAAC;oBAAE,GAAGc,QAAQ;gBAAC;gBAChED,UAAU,CAACE,gBAAgB,GAAGM,aAAapB,EAAE;YAC/C,EAAE,OAAOI,OAAO;gBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,uBAAuB,EAAGS,SAASzD,IAAI,CAAE,CAAC,CAAC,EAAEgD;YAElE;QACF;QAEA,IAAI,CAAC1D,MAAM,CAAC6B,GAAG,CAAC,CAAC,6BAA6B,EAAGa,uBAAuBV,MAAM,CAAE,QAAQ,CAAC;QACzF,KAAK,MAAM2C,mBAAmBjC,uBAAwB;YACpD,IAAI;gBACF,MAAMkB,WAAWe,gBAAgBH,OAAO;gBAExC,IAAI,OAAOZ,aAAa,UAAU;oBAChC,MAAM,IAAIL,MAAM;gBAClB;gBAEA,MAAMqB,eAAeD,gBAAgBZ,KAAK;gBAC1C,MAAMK,kBAAkBQ,aAAatB,EAAE;gBACvC,OAAOsB,aAAatB,EAAE;gBAEtB,MAAMuB,gBAAgB,EAAE;gBACxB,IAAI3D,mBAAmBD,gBAAgB;oBACrC,KAAK,MAAMqD,iBAAiBM,cAAcpC,SAAU;wBAClD,MAAM+B,iBAAiBrB,YAAY,CAACoB,cAAcT,SAAS,CAAC;wBAE5D,IAAI,CAACU,gBAAgB;4BACnB;wBACF;wBAGA,OAAOD,cAAchB,EAAE;wBACvB,OAAOgB,cAAcE,OAAO;wBAC5BF,cAAcT,SAAS,GAAGU;wBAC1BD,cAAcE,OAAO,GAAGZ;wBACxBiB,cAAcJ,IAAI,CAACH;oBACrB;oBACAM,aAAatB,EAAE,GAAGM;oBAClBgB,aAAapC,QAAQ,GAAGqC;gBAC1B;gBACA,MAAMV,WAAW,MAAM,IAAI,CAAC9D,UAAU,CAAC4D,MAAM,CAACL,UAAUgB;gBACxDV,UAAU,CAACE,gBAAgB,GAAGD,SAASb,EAAE;YAC3C,EAAE,OAAOI,OAAO;gBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,uBAAuB,EAAGiB,gBAAgBZ,KAAK,CAACrD,IAAI,CAAE,CAAC,CAAC,EAAEgD;YAE/E;QACF;QAEA,MAAM,IAAI,CAACrD,UAAU,CAACyE,SAAS;QAE/B,IAAI,CAAC9E,MAAM,CAAC6B,GAAG,CAAC,CAAC,6BAA6B,EAAGkB,WAAWf,MAAM,CAAE,MAAM,CAAC;QAC3E,KAAK,MAAM+C,OAAOhC,WAAY;YAC5B,IAAI;gBACF,MAAMiC,aAAa,MAAM,IAAI,CAAC9E,iBAAiB,CAAC+E,SAAS,CAAC;oBACxDvE,MAAMqE,IAAIrE,IAAI;oBACdwE,OAAOH,IAAIG,KAAK;gBAClB;gBACA,KAAK,MAAMC,WAAWJ,IAAIvC,QAAQ,CAAE;oBAClC,MAAM+B,iBAAiBrB,YAAY,CAACiC,QAAQtB,SAAS,CAAC;oBAEtD,IAAI,CAACU,gBAAgB;oBACrB,IAAI;wBACF,MAAM,IAAI,CAACrE,iBAAiB,CAACkF,eAAe,CAACJ,WAAW1B,EAAE,EAAEiB;oBAC9D,EAAE,OAAOb,OAAO;wBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,sBAAsB,EAAGa,eAAgB,QAAQ,EAAGQ,IAAIrE,IAAI,CAAE,CAAC,CAAC,EAAEgD;oBAEvF;gBACF;YACF,EAAE,OAAOA,OAAO;gBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,qBAAqB,EAAGqB,IAAIrE,IAAI,CAAE,CAAC,CAAC,EAAEgD;YAE3D;QACF;QAEA,IAAI,CAAC1D,MAAM,CAAC6B,GAAG,CAAC,CAAC,wCAAwC,EAAGiB,iBAAiBd,MAAM,CAAE,MAAM,CAAC;QAC5F,KAAK,MAAMqD,iBAAiBvC,iBAAkB;YAC5C,IAAI;gBACF,MAAMwC,cAAc,MAAM,IAAI,CAACpF,iBAAiB,CAACqF,gBAAgB,CAACF,cAAcG,KAAK;gBACrF,MAAMC,qBAAqBH,YAAY9C,QAAQ,CAACkD,GAAG,CAAC,CAACC,IAAMA,EAAE9B,SAAS;gBACtE,MAAM+B,yBAAyB,AAACP,cAActB,KAAK,CAACvB,QAAQ,CACzDqD,MAAM,CAAC,CAACF,IAAM,CAAC,CAACzC,YAAY,CAACyC,EAAE9B,SAAS,CAAC,EACzC6B,GAAG,CAAC,CAACC,IAAMzC,YAAY,CAACyC,EAAE9B,SAAS,CAAC;gBAEvC,KAAK,MAAMiC,cAAcL,mBAAmBI,MAAM,CAAC,CAACE,MAAQ,CAACH,uBAAuBI,QAAQ,CAACD,MAAO;oBAClG,IAAI;wBACF,MAAM,IAAI,CAAC7F,iBAAiB,CAAC+F,oBAAoB,CAACX,YAAYhC,EAAE,EAAEwC;oBACpE,EAAE,OAAOpC,OAAO;wBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,yBAAyB,EAAGoC,WAAY,UAAU,EAAGR,YAAY5E,IAAI,CAAE,CAAC,CAAC,EAAEgD;oBAEhG;gBACF;gBACA,KAAK,MAAMwC,oBAAoBN,uBAAuBC,MAAM,CAAC,CAACE,MAAQ,CAACN,mBAAmBO,QAAQ,CAACD,MAAO;oBACxG,IAAI;wBACF,MAAM,IAAI,CAAC7F,iBAAiB,CAACkF,eAAe,CAACE,YAAYhC,EAAE,EAAE4C;oBAC/D,EAAE,OAAOxC,OAAO;wBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,sBAAsB,EAAGwC,iBAAkB,QAAQ,EAAGZ,YAAY5E,IAAI,CAAE,CAAC,CAAC,EAAEgD;oBAEjG;gBACF;YACF,EAAE,OAAOA,OAAO;gBACd,IAAI,CAAC1D,MAAM,CAAC0D,KAAK,CAAC,CAAC,qBAAqB,EAAG2B,cAActB,KAAK,CAACrD,IAAI,CAAE,CAAC,CAAC,EAAEgD;YAE3E;QACF;QAEA,OAAO;YACLrB;YACAK;YACAJ;YACAK;YACAO;YACAgB;QACF;IACF;IAEA,MAAMpC,eAAeF,QAAa,EAAE;QAElC,IAAIA,SAASuE,MAAM,EAAE;YACnB,MAAM,IAAI,CAAC1F,aAAa,CAAC2F,oBAAoB,CAACxE,SAASuE,MAAM;QAC/D;QACA,IAAIvE,SAASyE,OAAO,EAAE;YACpB,MAAM,IAAI,CAAC5F,aAAa,CAAC6F,qBAAqB,CAAC1E,SAASyE,OAAO;QACjE;QACA,IAAIzE,SAAS2E,QAAQ,EAAE;YACrB,MAAM,IAAI,CAAC9F,aAAa,CAAC+F,sBAAsB,CAAC5E,SAAS2E,QAAQ;QACnE;QAEA,IAAI3E,SAAS6E,MAAM,EAAEC,iBAAiB;YACpC,MAAMC,wBAAgC/E,SAAS6E,MAAM,CAACG,aAAa;YACnE,IAAI,CAAC5G,MAAM,CAAC6B,GAAG,CAAC,CAAC,0CAA0C,EAAG8E,uBAAwB;YACtF,MAAM,IAAI,CAAClG,aAAa,CAACoG,kBAAkB,CAACF;QAC9C;QAEA,IAAI/E,SAASkF,UAAU,EAAE;YACvB,MAAM,EAAEC,YAAY,EAAEC,oBAAoB,EAAEC,kBAAkB,EAAEC,YAAY,EAAE,GAAGtF,SAASkF,UAAU;YACpG,IAAIC,gBAAgBC,wBAAwBC,oBAAoB;gBAC9D,MAAM,IAAI,CAACxG,aAAa,CAAC0G,4BAA4B,CAAC;oBACpDJ,cAAcA,gBAAgB,AAAC,CAAA,MAAM,IAAI,CAACtG,aAAa,CAAC2G,qBAAqB,EAAC,EAAGL,YAAY;oBAC7FC,sBAAsBA,wBAAwB,AAAC,CAAA,MAAM,IAAI,CAACvG,aAAa,CAAC2G,qBAAqB,EAAC,EAAGJ,oBAAoB;oBACrHC,oBAAoBA,sBAAsB,AAAC,CAAA,MAAM,IAAI,CAACxG,aAAa,CAAC2G,qBAAqB,EAAC,EAAGH,kBAAkB;gBACjH;gBACA,IAAI,CAACjH,MAAM,CAAC6B,GAAG,CAAC;YAClB;YAEA,IAAIqF,cAAc;gBAChB,MAAM,IAAI,CAACzG,aAAa,CAAC4G,eAAe,CAACH;gBACzC,IAAI,CAAClH,MAAM,CAAC6B,GAAG,CAAC;YAClB;QACF;QAEA,MAAM,IAAI,CAACpB,aAAa,CAAC6G,YAAY;QACrC,IAAI,CAACtH,MAAM,CAAC6B,GAAG,CAAC;IAClB;IAEA,MAAMI,YAAYF,KAAY,EAAEhB,kBAA2B,EAAE;QAC3D,MAAMwG,WAAW,IAAI,CAAC/G,WAAW,CAACgH,KAAK;QAEvC,KAAK,MAAMC,QAAQ1F,MAAO;YAExB,IAAIhB,sBAAsB,OAAO0G,KAAKnE,EAAE,KAAK,UAAU;gBACrDmE,KAAKnE,EAAE,GAAGoE,OAAOC,QAAQ,CAACF,KAAKnE,EAAE;YACnC;YAGA,MAAMsE,YAAY,AAACH,CAAAA,KAAKD,KAAK,IAAI,EAAE,AAAD,EAAG3B,MAAM,CAAC,CAACgC,WAAqBN,SAASO,IAAI,CAAC,CAACC,IAAMA,EAAErH,IAAI,KAAKmH;YAGlG,MAAM,IAAI,CAACtH,WAAW,CAACyH,QAAQ,CAAC;gBAC9BC,UAAUR,KAAKQ,QAAQ;gBACvBC,UAAU;gBACVV,OAAOI;gBACPO,YAAYV,KAAKU,UAAU,IAAI;gBAC/BC,YAAYX,KAAKW,UAAU,IAAI;gBAC/BC,YAAYZ,KAAKY,UAAU,IAAI;gBAC/BC,qBAAqBb,KAAKa,mBAAmB,IAAI;YACnD;YAGA,MAAM,IAAI,CAAC/H,WAAW,CAACgI,kCAAkC,CAACd,KAAKQ,QAAQ,EAAER,KAAKe,YAAY;QAC5F;QACA,IAAI,CAACxI,MAAM,CAAC6B,GAAG,CAAC,CAAC,SAAS,EAAGE,MAAMC,MAAM,CAAE,MAAM,CAAC;IACpD;IAEA,MAAML,0BAA0Bd,UAA4B,EAAE;QAC5D,MAAM4H,SAAmB,EAAE;QAG3B,MAAM/B,kBAAkB,IAAI,CAACjG,aAAa,CAACiI,iBAAiB,IAAIhC;QAChE,IAAI,CAACA,iBAAiB;YACpB;QACF;QAEA,IAAI7F,WAAWe,QAAQ,IAAIf,WAAWQ,MAAM,CAACF,cAAc,EAAE;YAC3D,MAAMwH,mBAAmB,IAAI,CAAClI,aAAa,CAACmI,WAAW;YACvD,IAAID,oBAAoBE,OAAOC,IAAI,CAACH,kBAAkB3G,MAAM,GAAG,GAAG;gBAChEyG,OAAOhE,IAAI,CAAC;YACd;QACF;QAEA,IAAI5D,WAAWkB,KAAK,IAAIlB,WAAWkB,KAAK,CAACC,MAAM,GAAG,KAAKnB,WAAWQ,MAAM,CAACD,WAAW,EAAE;YACpF,MAAM2H,gBAAgB,MAAM,IAAI,CAACxI,WAAW,CAACyI,SAAS,CAAC;YACvD,IAAID,cAAc/G,MAAM,GAAG,GAAG;gBAC5ByG,OAAOhE,IAAI,CAAC;YACd;QACF;QAEA,IAAIgE,OAAOzG,MAAM,GAAG,GAAG;YACrB,MAAM,IAAIuB,MAAM,CAAC,2BAA2B,EAAGkF,OAAOQ,IAAI,CAAC,OAAQ;QACrE;IACF;IAEA,MAAM1G,sBAAsB2G,cAAqB,EAAEC,oBAA8B,EAAE;QACjF,MAAMC,mBAAmB,MAAM,IAAI,CAACjJ,cAAc,CAACkJ,IAAI;QAEvD,MAAMC,QAAQF,iBAAiB1D,GAAG,CAAC,CAACC,IAAMA,EAAEjF,IAAI,CAAC6I,WAAW;QAC5D,MAAMC,OAAOJ,iBAAiB1D,GAAG,CAAC,CAACC,IAAMA,EAAE8D,UAAU;QACrD,MAAMC,MAAMN,iBAAiB1D,GAAG,CAAC,CAACC,IAAMA,EAAErC,EAAE,CAACqG,QAAQ;QAErD,MAAMrH,iBAAiB,EAAE;QACzB,MAAMD,2BAA2B,EAAE;QACnC,KAAK,MAAM8C,WAAW+D,eAAgB;YACpC,KAAK,MAAMU,YAAY;mBAAIT;gBAAsB;aAAM,CAAE;gBACvD,IAAIS,aAAa,QAAQ;oBACvB,MAAMC,eAAe1E,QAAQzE,IAAI,CAAC6I,WAAW;oBAC7C,MAAMO,aAAaR,MAAMS,SAAS,CAAC,CAACC,IAAMA,MAAMH;oBAChD,IAAIC,eAAe,CAAC,GAAG;wBACrB,IAAI,CAACJ,GAAG,CAACI,WAAW,EAAE;4BACpB,MAAM,IAAIvG,MAAM;wBAClB;wBACAlB,yBAAyBoC,IAAI,CAAC;4BAC5BmF,UAAU;4BACV/F,WAAW6D,OAAOC,QAAQ,CAAC+B,GAAG,CAACI,WAAW;4BAC1C/F,OAAOoB;wBACT;wBACA;oBACF;gBACF,OAAO,IAAIyE,aAAa,OAAO;oBAC7B,MAAMC,eAAe1E,QAAQsE,UAAU,CAACF,WAAW;oBACnD,MAAMO,aAAaN,KAAKO,SAAS,CAAC,CAACC,IAAMA,MAAMH;oBAC/C,IAAIC,eAAe,CAAC,GAAG;wBACrB,IAAI,CAACJ,GAAG,CAACI,WAAW,EAAE;4BACpB,MAAM,IAAIvG,MAAM;wBAClB;wBACAlB,yBAAyBoC,IAAI,CAAC;4BAC5BmF,UAAU;4BACV/F,WAAW6D,OAAOC,QAAQ,CAAC+B,GAAG,CAACI,WAAW;4BAC1C/F,OAAOoB;wBACT;wBACA;oBACF;gBACF,OAAO,IAAIyE,aAAa,OAAO;oBAC7B,IAAI,CAACzE,QAAQ7B,EAAE,EAAE;wBACf,MAAM,IAAIC,MAAMC,KAAKC,SAAS,CAAC0B;oBACjC;oBACA7C,eAAemC,IAAI,CAACU;oBACpB;gBACF;YACF;QACF;QAEA,OAAO;YACL9C;YACAC;QACF;IACF;IAEA,MAAMM,oBAAoBqH,YAAmB,EAAEC,kBAA0B,EAAE;QACzE,MAAMC,iBAAiB,MAAM,IAAI,CAAC7J,YAAY,CAAC+I,IAAI;QACnD,MAAMC,QAAQa,eAAezE,GAAG,CAAC,CAACC,IAAMA,EAAEjF,IAAI,CAAC6I,WAAW;QAC1D,MAAMa,cAAcD,eAAezE,GAAG,CAAC,CAACC,IAAMA,EAAE0E,KAAK;QACrD,MAAMX,MAAMS,eAAezE,GAAG,CAAC,CAACC,IAAMA,EAAErC,EAAE,CAACqG,QAAQ;QAEnD,MAAMhH,eAAe,EAAE;QACvB,MAAMD,yBAAyB,EAAE;QACjC,KAAK,MAAMP,SAAS8H,aAAc;YAChC,KAAK,MAAML,YAAY;gBAACM;gBAAoB;aAAM,CAAE;gBAClD,IAAIN,aAAa,QAAQ;oBACvB,MAAMU,mBAAmBnI,MAAMzB,IAAI,CAAC6I,WAAW;oBAC/C,MAAMO,aAAaR,MAAMS,SAAS,CAAC,CAACC,IAAMA,MAAMM;oBAChD,IAAIR,eAAe,CAAC,GAAG;wBACrB,IAAI,CAACJ,GAAG,CAACI,WAAW,EAAE;4BACpB,MAAM,IAAIvG,MAAM;wBAClB;wBACAb,uBAAuB+B,IAAI,CAAC;4BAC1BmF,UAAU;4BACVpF,SAASkD,OAAOC,QAAQ,CAAC+B,GAAG,CAACI,WAAW;4BACxC/F,OAAO5B;wBACT;wBACA;oBACF;gBACF,OAAO,IAAIyH,aAAa,SAAS;oBAC/B,MAAMU,mBAAmBnI,MAAMkI,KAAK;oBACpC,MAAMP,aAAaM,YAAYL,SAAS,CAAC,CAACC,IAAMA,MAAMM;oBACtD,IAAIR,eAAe,CAAC,GAAG;wBACrB,IAAI,CAACJ,GAAG,CAACI,WAAW,EAAE;4BACpB,MAAM,IAAIvG,MAAM;wBAClB;wBACAb,uBAAuB+B,IAAI,CAAC;4BAC1BmF,UAAU;4BACVpF,SAASkD,OAAOC,QAAQ,CAAC+B,GAAG,CAACI,WAAW;4BACxC/F,OAAO5B;wBACT;wBACA;oBACF;gBACF,OAAO,IAAIyH,aAAa,OAAO;oBAC7BjH,aAAa8B,IAAI,CAACtC;oBAClB;gBACF;YACF;QACF;QAEA,OAAO;YACLO;YACAC;QACF;IACF;IAEA,MAAMK,kBAAkBuH,UAAiB,EAAE;QACzC,IAAI,CAACA,YAAYvI,QAAQ;YACvB,OAAO;gBACLc,kBAAkB,EAAE;gBACpBC,YAAY,EAAE;YAChB;QACF;QAEA,MAAMyH,eAAe,MAAM,IAAI,CAACtK,iBAAiB,CAACuK,QAAQ;QAC1D,MAAMnB,QAAQkB,aAAa9E,GAAG,CAAC,CAACC,IAAMA,EAAEjF,IAAI,CAAC6I,WAAW;QACxD,MAAMG,MAAMc,aAAa9E,GAAG,CAAC,CAACC,IAAMA,EAAErC,EAAE,CAACqG,QAAQ;QAEjD,MAAM5G,aAAa,EAAE;QACrB,MAAMD,mBAAmB,EAAE;QAC3B,KAAK,MAAMiC,OAAOwF,WAAY;YAC5B,MAAMD,mBAAmBvF,IAAIrE,IAAI,CAAC6I,WAAW;YAC7C,MAAMO,aAAaR,MAAMoB,OAAO,CAACJ;YACjC,IAAIR,eAAe,CAAC,GAAG;gBACrB/G,WAAW0B,IAAI,CAACM;YAClB,OAAO;gBACL,IAAI,CAAC2E,GAAG,CAACI,WAAW,EAAE;oBACpB,MAAM,IAAIvG,MAAM;gBAClB;gBACAT,iBAAiB2B,IAAI,CAAC;oBACpBmF,UAAU;oBACVpE,OAAOkC,OAAOC,QAAQ,CAAC+B,GAAG,CAACI,WAAW;oBACtC/F,OAAOgB;gBACT;gBACA;YACF;QACF;QAEA,OAAO;YACLhC;YACAD;QACF;IACF;IAEA,MAAM6H,WAAWC,OAAuD,EAAE;QACxE,MAAMC,QAAQ,MAAMrJ,IAAAA,yBAAa,EAACoJ,SAASE,qDAA8B;QAEzE,MAAM,EAAEC,YAAY,EAAE9J,cAAc,EAAEC,eAAe,EAAE8J,UAAU,EAAE7J,cAAc,EAAEC,WAAW,EAAE,GAAGyJ;QAEnG,MAAMI,eAAe;YACnBC,SAASC,QAAQC,GAAG,CAACC,mBAAmB;YACxCC,YAAY,IAAIC;YAChBvK,cAAc;YACdK,QAAQwJ;YACRrI,UAAUgJ;YACVtJ,QAAQsJ;YACRvI,MAAMuI;YACN5J,UAAU4J;YACVzJ,OAAOyJ;YACPC,YAAYD;QACd;QAEA,IAAIvK,gBAAgB;YAClB,MAAMuB,WAAW,MAAM,IAAI,CAACrC,cAAc,CAACkJ,IAAI;YAC/C4B,aAAazI,QAAQ,GAAGA,SAASkD,GAAG,CAAC,CAACC;gBACpC,MAAM9B,YAAY8B,EAAErC,EAAE;gBACtB,MAAM,EAAEoI,MAAM,EAAEzD,QAAQ,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAAC9H,YAAY,CAACuL,WAAW,CAAC9H;gBACrE,OAAO;oBACLP,IAAIO;oBACJ+H,gBAAgBjG,EAAEiG,cAAc;oBAChCC,SAASlG,EAAEkG,OAAO;oBAClBC,aAAanG,EAAEmG,WAAW;oBAC1BC,WAAWpG,EAAEoG,SAAS;oBACtBrL,MAAMiF,EAAEjF,IAAI;oBACZ+I,YAAY9D,EAAE8D,UAAU;oBACxBiC;oBACAzD;oBACAC;oBACA8D,UAAUrG,EAAEqG,QAAQ;oBACpBC,UAAUtG,EAAEsG,QAAQ;oBACpBC,UAAUvG,EAAEuG,QAAQ;gBACtB;YACF;QACF;QAEA,IAAInB,cAAc;YAChB,MAAM7I,SAAS,MAAM,IAAI,CAAC7B,UAAU,CAAC8L,SAAS;YAC9ClB,aAAa/I,MAAM,GAAGA,OAAOwD,GAAG,CAAC,CAAC0G;gBAChC,MAAMC,cAAc;oBAClB/I,IAAI8I,EAAE9I,EAAE;oBACR+G,OAAO+B,EAAE/B,KAAK;oBACd3J,MAAM0L,EAAE1L,IAAI;oBACZ8B,UAAUgJ;gBACZ;gBAEA,IAAItK,iBAAiB;oBACnBmL,YAAY7J,QAAQ,GAAG4J,EAAE5J,QAAQ,CAACkD,GAAG,CAAC,CAACC;wBACrC,MAAM2G,aAAa3G,EAAE9B,SAAS;wBAC9B,OAAO;4BACLA,WAAWyI;4BACXC,GAAG5G,EAAE4G,CAAC;4BACNC,GAAG7G,EAAE6G,CAAC;wBACR;oBACF;gBACF;gBAEA,OAAOH;YACT;QACF;QAEA,IAAIrB,YAAY;YACd,MAAM/H,OAAO,MAAM,IAAI,CAAC/C,iBAAiB,CAACuK,QAAQ;YAClDQ,aAAahI,IAAI,GAAGA,KAAKyC,GAAG,CAAC,CAAC+G;gBAC5B,OAAO;oBACL/L,MAAM+L,EAAE/L,IAAI;oBACZ4C,IAAImJ,EAAEnJ,EAAE;oBACRd,UAAUiK,EAAEjK,QAAQ,CAACkD,GAAG,CAAC,CAACC;wBACxB,OAAO;4BACL9B,WAAW8B,EAAE9B,SAAS;wBACxB;oBACF;gBACF;YACF;QACF;QAEA,IAAI1C,gBAAgB;YAClB8J,aAAarJ,QAAQ,GAAG;gBACtB,GAAG,IAAI,CAACnB,aAAa,CAACmI,WAAW,EAAE;gBACnC,GAAG,IAAI,CAACnI,aAAa,CAACiM,oBAAoB,EAAE;YAC9C;QACF;QAEA,IAAItL,aAAa;YACf,MAAMW,QAAQ,MAAM,IAAI,CAACxB,WAAW,CAACyI,SAAS,CAAC;YAE/CiC,aAAalJ,KAAK,GAAGA,MAAM2D,GAAG,CAAC,CAACiH;gBAC9B,MAAMC,UAAU,IAAI,CAACrM,WAAW,CAACsM,KAAK,CAACF;gBACvC,OAAO;oBACLrJ,IAAIsJ,QAAQtJ,EAAE;oBACd2E,UAAU2E,QAAQ3E,QAAQ;oBAC1BG,YAAYwE,QAAQxE,UAAU;oBAC9BD,YAAYyE,QAAQzE,UAAU;oBAC9BE,YAAYuE,QAAQvE,UAAU;oBAC9BC,qBAAqBsE,QAAQtE,mBAAmB;oBAChDE,cAAcmE,EAAEnE,YAAY;oBAC5BsE,WAAWF,QAAQE,SAAS;oBAC5BtF,OAAOoF,QAAQpF,KAAK;gBACtB;YACF;QACF;QAEA,OAAOuF,IAAAA,YAAI,EAAC9B,cAAc,CAAC;IAC7B;IAEQ3J,kBAAkBT,UAA4B,EAAEE,kBAA2B,EAAE;QAEnF,KAAK,MAAMoE,WAAWtE,WAAW2B,QAAQ,CAAE;YAEzC,IAAI,CAAC2C,QAAQzE,IAAI,IAAIyE,QAAQ6H,WAAW,EAAE;gBACxC7H,QAAQzE,IAAI,GAAGyE,QAAQ6H,WAAW;gBAClC,OAAO7H,QAAQ6H,WAAW;YAC5B;YAEA,IAAI7H,QAAQ8H,kBAAkB,EAAEvM,MAAM;gBACpCyE,QAAQzE,IAAI,GAAGyE,QAAQ8H,kBAAkB,EAAEvM;gBAC3C,OAAOyE,QAAQ8H,kBAAkB,EAAEvM;YACrC;YAEA,IAAIK,sBAAsB,OAAOoE,QAAQ7B,EAAE,KAAK,UAAU;gBACxD6B,QAAQ7B,EAAE,GAAGoE,OAAOC,QAAQ,CAACxC,QAAQ7B,EAAE;YACzC;YAGA,IAAI,CAAC;gBAAC4J,kCAAa;gBAAEC,kCAAa;gBAAEC,kCAAa;gBAAEC,8BAAS;aAAC,CAACrH,QAAQ,CAACb,QAAQ2G,WAAW,GAAG;gBAC3F3G,QAAQ2G,WAAW,GAAGoB,kCAAa;YACrC;QACF;QAGA,KAAK,MAAM/K,SAAStB,WAAWqB,MAAM,CAAE;YAErC,IAAIC,MAAMA,KAAK,KAAKqJ,aAAarJ,MAAMkI,KAAK,KAAKmB,WAAW;gBAC1DrJ,MAAMkI,KAAK,GAAGlI,MAAMA,KAAK;gBACzB,OAAOA,MAAMA,KAAK;YACpB;YAGA,IAAIpB,oBAAoB;gBACtB,IAAI,OAAOoB,MAAMmB,EAAE,KAAK,UAAU;oBAChCnB,MAAMmB,EAAE,GAAGoE,OAAOC,QAAQ,CAACxF,MAAMmB,EAAE;gBACrC;gBAEA,KAAK,MAAM6B,WAAWhD,MAAMK,QAAQ,CAAE;oBACpC,IAAI,OAAO2C,QAAQtB,SAAS,KAAK,UAAU;wBACzCsB,QAAQtB,SAAS,GAAG6D,OAAOC,QAAQ,CAACxC,QAAQtB,SAAS;oBACvD;gBACF;YACF;QACF;QAGA,IAAI,AAAChD,WAAmByM,MAAM,IAAI,CAACzM,WAAWoC,IAAI,EAAE;YAClDpC,WAAWoC,IAAI,GAAG,AAACpC,WAAmByM,MAAM;YAC5C,OAAO,AAACzM,WAAmByM,MAAM;QACnC;QAGA,IAAI,AAACzM,WAAWQ,MAAM,CAASkM,YAAY,KAAK/B,aAAa3K,WAAWQ,MAAM,CAAC2J,UAAU,KAAKQ,WAAW;YACtG3K,WAAWQ,MAAM,CAAS2J,UAAU,GAAG,AAACnK,WAAWQ,MAAM,CAASkM,YAAY;YAC/E,OAAO,AAAC1M,WAAWQ,MAAM,CAASkM,YAAY;QAChD;IACF;AACF"}
1
+ {"version":3,"file":"yaml.service.js","names":[],"sources":["../../../src/services/core/yaml.service.ts"],"sourcesContent":["import { validateInput } from \"@/handlers/validators\";\nimport {\n exportPrintersFloorsYamlSchema,\n importPrinterPositionsSchema,\n importPrintersFloorsYamlSchema,\n YamlExportSchema,\n} from \"../validators/yaml-service.validation\";\nimport { dump, load } from \"js-yaml\";\nimport { LoggerService } from \"@/handlers/logger\";\nimport { PrinterCache } from \"@/state/printer.cache\";\nimport { FloorStore } from \"@/state/floor.store\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport type { IPrinterService } from \"@/services/interfaces/printer.service.interface\";\nimport type { IFloorService } from \"@/services/interfaces/floor.service.interface\";\nimport type { IPrinterTagService } from \"@/services/interfaces/printer-tag.service.interface\";\nimport { BambuType, MoonrakerType, OctoprintType, PrusaLinkType } from \"@/services/printer-api.interface\";\nimport { z } from \"zod\";\nimport type { IUserService } from \"@/services/interfaces/user-service.interface\";\nimport type { IRoleService } from \"@/services/interfaces/role-service.interface\";\nimport { SettingsStore } from \"@/state/settings.store\";\n\nexport class YamlService {\n private readonly logger: LoggerService;\n\n constructor(\n loggerFactory: ILoggerFactory,\n private readonly printerTagService: IPrinterTagService,\n private readonly printerService: IPrinterService,\n private readonly printerCache: PrinterCache,\n private readonly floorStore: FloorStore,\n private readonly floorService: IFloorService,\n private readonly userService: IUserService,\n private readonly roleService: IRoleService,\n private readonly settingsStore: SettingsStore,\n ) {\n this.logger = loggerFactory(YamlService.name);\n }\n\n async importYaml(yamlBuffer: string) {\n const importSpec = (await load(yamlBuffer)) as YamlExportSchema;\n const databaseTypeSqlite = importSpec.databaseType === \"sqlite\";\n const { exportPrinters, exportFloorGrid, exportSettings, exportUsers } = importSpec.config;\n\n // Normalize data before validation\n this.normalizeYamlData(importSpec, databaseTypeSqlite);\n\n const importData = await validateInput(importSpec, importPrintersFloorsYamlSchema);\n\n // Validate that system tables can be imported - always check if system data is present in backup\n const hasSystemData = exportSettings || exportUsers;\n if (hasSystemData) {\n await this.validateSystemTablesEmpty(importSpec);\n\n // Import system tables if present and validation passed\n if (exportSettings && importSpec.settings) {\n this.logger.log(\"Importing settings\");\n await this.importSettings(importSpec.settings);\n }\n\n if (exportUsers && importSpec.users && importSpec.users.length > 0) {\n this.logger.log(`Importing users (${importSpec.users.length} users)`);\n await this.importUsers(importSpec.users, databaseTypeSqlite);\n }\n }\n\n // Nested validation is manual (for now)\n if (exportFloorGrid && importData.floors?.length) {\n for (const floor of importData.floors) {\n await validateInput(floor, importPrinterPositionsSchema);\n }\n }\n\n this.logger.log(\"Analysing printers for import\");\n const { updateByPropertyPrinters, insertPrinters } = await this.analysePrintersUpsert(\n importData.printers ?? [],\n importData.config.printerComparisonStrategiesByPriority,\n );\n\n this.logger.log(\"Analysing floors for import\");\n const { updateByPropertyFloors, insertFloors } = await this.analyseFloorsUpsert(\n importData.floors ?? [],\n importData.config.floorComparisonStrategiesByPriority,\n );\n\n this.logger.log(\"Analysing tags for import\");\n const { updateByNameTags, insertTags } = await this.analyseUpsertTags(importData.tags ?? []);\n\n this.logger.log(`Performing pure insert printers (${insertPrinters.length} printers)`);\n const printerIdMap: { [k: number]: number } = {};\n for (const newPrinter of insertPrinters) {\n try {\n const state = await this.printerService.create({ ...newPrinter });\n if (!newPrinter.id) {\n throw new Error(`Saved ID was empty ${JSON.stringify(newPrinter)}`);\n }\n printerIdMap[newPrinter.id] = state.id;\n } catch (error) {\n this.logger.error(`Failed to create printer ${newPrinter.name}:`, error);\n // Continue with next printer - don't let one failure break the entire import\n }\n }\n\n this.logger.log(`Performing update import printers (${updateByPropertyPrinters.length} printers)`);\n for (const updatePrinterSpec of updateByPropertyPrinters) {\n try {\n const updateId = updatePrinterSpec.printerId;\n const updatedPrinter = updatePrinterSpec.value;\n if (typeof updateId === \"string\") {\n throw new Error(\"Cannot update a printer by string id in sqlite mode\");\n }\n\n const originalPrinterId = updatedPrinter.id;\n delete updatePrinterSpec.value.id;\n\n updatedPrinter.id = updateId;\n const state = await this.printerService.update(updateId, updatedPrinter);\n if (!updatePrinterSpec.printerId) {\n throw new Error(\"Saved ID was empty\");\n }\n\n printerIdMap[originalPrinterId] = state.id;\n } catch (error) {\n this.logger.error(`Failed to update printer ${updatePrinterSpec.value.name}:`, error);\n // Continue with next printer - don't let one failure break the entire import\n }\n }\n\n this.logger.log(`Performing pure create floors (${insertFloors.length} floors)`);\n const floorIdMap: { [k: number]: number } = {};\n for (const newFloor of insertFloors) {\n try {\n const originalFloorId = newFloor.id as number;\n delete newFloor.id;\n\n // Replace printerIds with newly mapped IDs\n const knownPrinterPositions = [];\n\n if (exportFloorGrid && exportPrinters) {\n for (const floorPosition of newFloor.printers) {\n const knownPrinterId = printerIdMap[floorPosition.printerId];\n // If the ID was not mapped, this position is considered discarded\n if (!knownPrinterId) {\n continue;\n }\n\n delete floorPosition.id;\n delete floorPosition.floorId;\n floorPosition.printerId = knownPrinterId;\n knownPrinterPositions.push(floorPosition);\n }\n newFloor.printers = knownPrinterPositions;\n }\n\n const createdFloor = await this.floorStore.create({ ...newFloor });\n floorIdMap[originalFloorId] = createdFloor.id;\n } catch (error) {\n this.logger.error(`Failed to create floor ${newFloor.name}:`, error);\n // Continue with next floor - don't let one failure break the entire import\n }\n }\n\n this.logger.log(`Performing update of floors (${updateByPropertyFloors.length} floors)`);\n for (const updateFloorSpec of updateByPropertyFloors) {\n try {\n const updateId = updateFloorSpec.floorId;\n\n if (typeof updateId === \"string\") {\n throw new Error(\"Cannot update a floor by string id in sqlite mode\");\n }\n\n const updatedFloor = updateFloorSpec.value;\n const originalFloorId = updatedFloor.id;\n delete updatedFloor.id;\n\n const knownPrinters = [];\n if (exportFloorGrid && exportPrinters) {\n for (const floorPosition of updatedFloor?.printers) {\n const knownPrinterId = printerIdMap[floorPosition.printerId];\n // If the ID was not mapped, this position is considered discarded\n if (!knownPrinterId) {\n continue;\n }\n\n // Purge ids that might be of wrong type or format\n delete floorPosition.id;\n delete floorPosition.floorId;\n floorPosition.printerId = knownPrinterId;\n floorPosition.floorId = updateId;\n knownPrinters.push(floorPosition);\n }\n updatedFloor.id = updateId;\n updatedFloor.printers = knownPrinters;\n }\n const newFloor = await this.floorStore.update(updateId, updatedFloor);\n floorIdMap[originalFloorId] = newFloor.id;\n } catch (error) {\n this.logger.error(`Failed to update floor ${updateFloorSpec.value.name}:`, error);\n // Continue with next floor - don't let one failure break the entire import\n }\n }\n\n await this.floorStore.loadStore();\n\n this.logger.log(`Performing pure create tags (${insertTags.length} tags)`);\n for (const tag of insertTags) {\n try {\n const createdTag = await this.printerTagService.createTag({\n name: tag.name,\n color: tag.color,\n });\n for (const printer of tag.printers) {\n const knownPrinterId = printerIdMap[printer.printerId] satisfies number | undefined;\n // If the ID was not mapped, this position is considered discarded\n if (!knownPrinterId) continue;\n try {\n await this.printerTagService.addPrinterToTag(createdTag.id, knownPrinterId);\n } catch (error) {\n this.logger.error(`Failed to add printer ${knownPrinterId} to tag ${tag.name}:`, error);\n // Continue with next printer in tag\n }\n }\n } catch (error) {\n this.logger.error(`Failed to create tag ${tag.name}:`, error);\n // Continue with next tag - don't let one failure break the entire import\n }\n }\n\n this.logger.log(`Performing update of tag printer links (${updateByNameTags.length} tags)`);\n for (const updateTagSpec of updateByNameTags) {\n try {\n const existingTag = await this.printerTagService.getPrintersByTag(updateTagSpec.tagId);\n const existingPrinterIds = existingTag.printers.map((p) => p.printerId);\n const wantedTargetPrinterIds = (updateTagSpec.value.printers as { printerId: number }[])\n .filter((p) => !!printerIdMap[p.printerId])\n .map((p) => printerIdMap[p.printerId]);\n\n for (const unwantedId of existingPrinterIds.filter((eid) => !wantedTargetPrinterIds.includes(eid))) {\n try {\n await this.printerTagService.removePrinterFromTag(existingTag.id, unwantedId);\n } catch (error) {\n this.logger.error(`Failed to remove printer ${unwantedId} from tag ${existingTag.name}:`, error);\n // Continue with next printer\n }\n }\n for (const nonExistingNewId of wantedTargetPrinterIds.filter((eid) => !existingPrinterIds.includes(eid))) {\n try {\n await this.printerTagService.addPrinterToTag(existingTag.id, nonExistingNewId);\n } catch (error) {\n this.logger.error(`Failed to add printer ${nonExistingNewId} to tag ${existingTag.name}:`, error);\n // Continue with next printer\n }\n }\n } catch (error) {\n this.logger.error(`Failed to update tag ${updateTagSpec.value.name}:`, error);\n // Continue with next tag - don't let one failure break the entire import\n }\n }\n\n return {\n updateByPropertyPrinters,\n updateByPropertyFloors,\n insertPrinters,\n insertFloors,\n printerIdMap,\n floorIdMap,\n };\n }\n\n async importSettings(settings: any) {\n // Update the settings store with imported settings using individual update methods\n if (settings.server) {\n await this.settingsStore.updateServerSettings(settings.server);\n }\n if (settings.timeout) {\n await this.settingsStore.updateTimeoutSettings(settings.timeout);\n }\n if (settings.frontend) {\n await this.settingsStore.updateFrontendSettings(settings.frontend);\n }\n\n if (settings.wizard?.wizardCompleted) {\n const importedWizardVersion: number = settings.wizard.wizardVersion;\n this.logger.log(`Marking wizard as completed with version: ${importedWizardVersion}`);\n await this.settingsStore.setWizardCompleted(importedWizardVersion);\n }\n\n if (settings.credential) {\n const { jwtExpiresIn, refreshTokenAttempts, refreshTokenExpiry, slicerApiKey } = settings.credential;\n if (jwtExpiresIn || refreshTokenAttempts || refreshTokenExpiry) {\n await this.settingsStore.updateCoreCredentialSettings({\n jwtExpiresIn: jwtExpiresIn ?? (await this.settingsStore.getCredentialSettings()).jwtExpiresIn,\n refreshTokenAttempts:\n refreshTokenAttempts ?? (await this.settingsStore.getCredentialSettings()).refreshTokenAttempts,\n refreshTokenExpiry:\n refreshTokenExpiry ?? (await this.settingsStore.getCredentialSettings()).refreshTokenExpiry,\n });\n this.logger.log(\"Imported credential settings\");\n }\n\n if (slicerApiKey) {\n await this.settingsStore.setSlicerApiKey(slicerApiKey);\n this.logger.log(\"Imported slicer API key\");\n }\n }\n\n await this.settingsStore.loadSettings();\n this.logger.log(\"Settings imported successfully\");\n }\n\n async importUsers(users: any[], databaseTypeSqlite: boolean) {\n const allRoles = this.roleService.roles;\n\n for (const user of users) {\n // Ensure ID type matches database type\n if (databaseTypeSqlite && typeof user.id === \"string\") {\n user.id = Number.parseInt(user.id);\n }\n\n // Filter to valid role names only\n const roleNames = (user.roles ?? []).filter((roleName: string) => allRoles.some((r) => r.name === roleName));\n\n // Register user with a temporary password (will be replaced with actual hash)\n await this.userService.register({\n username: user.username,\n password: \"temporary-password-to-be-replaced\",\n roles: roleNames,\n isRootUser: user.isRootUser ?? false,\n isDemoUser: user.isDemoUser ?? false,\n isVerified: user.isVerified ?? false,\n needsPasswordChange: user.needsPasswordChange ?? true,\n });\n\n // Update the password hash directly (without re-hashing)\n await this.userService.updatePasswordHashUnsafeByUsername(user.username, user.passwordHash);\n }\n this.logger.log(`Imported ${users.length} users`);\n }\n\n async validateSystemTablesEmpty(importSpec: YamlExportSchema) {\n const errors: string[] = [];\n\n // Only validate if wizard is completed - skip during first-time setup\n const wizardCompleted = this.settingsStore.getWizardSettings()?.wizardCompleted;\n if (!wizardCompleted) {\n return;\n }\n\n if (importSpec.settings && importSpec.config.exportSettings) {\n const existingSettings = this.settingsStore.getSettings();\n if (existingSettings && Object.keys(existingSettings).length > 0) {\n errors.push(\"Settings table is not empty. Cannot import settings when existing settings are present.\");\n }\n }\n\n if (importSpec.users && importSpec.users.length > 0 && importSpec.config.exportUsers) {\n const existingUsers = await this.userService.listUsers(1);\n if (existingUsers.length > 0) {\n errors.push(\"Users table is not empty. Cannot import users when existing users are present.\");\n }\n }\n\n if (errors.length > 0) {\n throw new Error(`Import validation failed:\\n${errors.join(\"\\n\")}`);\n }\n }\n\n async analysePrintersUpsert(upsertPrinters: any[], comparisonStrategies: string[]) {\n const existingPrinters = await this.printerService.list();\n\n const names = existingPrinters.map((p) => p.name.toLowerCase());\n const urls = existingPrinters.map((p) => p.printerURL);\n const ids = existingPrinters.map((p) => p.id.toString());\n\n const insertPrinters = [];\n const updateByPropertyPrinters = [];\n for (const printer of upsertPrinters) {\n for (const strategy of [...comparisonStrategies, \"new\"]) {\n if (strategy === \"name\") {\n const comparedName = printer.name.toLowerCase();\n const foundIndex = names.findIndex((n) => n === comparedName);\n if (foundIndex !== -1) {\n if (!ids[foundIndex]) {\n throw new Error(\"Update ID is undefined\");\n }\n updateByPropertyPrinters.push({\n strategy: \"name\",\n printerId: Number.parseInt(ids[foundIndex]),\n value: printer,\n });\n break;\n }\n } else if (strategy === \"url\") {\n const comparedName = printer.printerURL.toLowerCase();\n const foundIndex = urls.findIndex((n) => n === comparedName);\n if (foundIndex !== -1) {\n if (!ids[foundIndex]) {\n throw new Error(\"Update ID is undefined\");\n }\n updateByPropertyPrinters.push({\n strategy: \"url\",\n printerId: Number.parseInt(ids[foundIndex]),\n value: printer,\n });\n break;\n }\n } else if (strategy === \"new\") {\n if (!printer.id) {\n throw new Error(JSON.stringify(printer));\n }\n insertPrinters.push(printer);\n break;\n }\n }\n }\n\n return {\n updateByPropertyPrinters,\n insertPrinters,\n };\n }\n\n async analyseFloorsUpsert(upsertFloors: any[], comparisonStrategy: string) {\n const existingFloors = await this.floorService.list();\n const names = existingFloors.map((p) => p.name.toLowerCase());\n const floorLevels = existingFloors.map((p) => p.order);\n const ids = existingFloors.map((p) => p.id.toString());\n\n const insertFloors = [];\n const updateByPropertyFloors = [];\n for (const floor of upsertFloors) {\n for (const strategy of [comparisonStrategy, \"new\"]) {\n if (strategy === \"name\") {\n const comparedProperty = floor.name.toLowerCase();\n const foundIndex = names.findIndex((n) => n === comparedProperty);\n if (foundIndex !== -1) {\n if (!ids[foundIndex]) {\n throw new Error(\"IDS not found, floor name\");\n }\n updateByPropertyFloors.push({\n strategy: \"name\",\n floorId: Number.parseInt(ids[foundIndex]),\n value: floor,\n });\n break;\n }\n } else if (strategy === \"floor\") {\n const comparedProperty = floor.order;\n const foundIndex = floorLevels.findIndex((n) => n === comparedProperty);\n if (foundIndex !== -1) {\n if (!ids[foundIndex]) {\n throw new Error(\"IDS not found, floor level\");\n }\n updateByPropertyFloors.push({\n strategy: \"floor\",\n floorId: Number.parseInt(ids[foundIndex]),\n value: floor,\n });\n break;\n }\n } else if (strategy === \"new\") {\n insertFloors.push(floor);\n break;\n }\n }\n }\n\n return {\n updateByPropertyFloors,\n insertFloors,\n };\n }\n\n async analyseUpsertTags(upsertTags: any[]) {\n if (!upsertTags?.length) {\n return {\n updateByNameTags: [],\n insertTags: [],\n };\n }\n\n const existingTags = await this.printerTagService.listTags();\n const names = existingTags.map((p) => p.name.toLowerCase());\n const ids = existingTags.map((p) => p.id.toString());\n\n const insertTags = [];\n const updateByNameTags = [];\n for (const tag of upsertTags) {\n const comparedProperty = tag.name.toLowerCase();\n const foundIndex = names.indexOf(comparedProperty);\n if (foundIndex === -1) {\n insertTags.push(tag);\n } else {\n if (!ids[foundIndex]) {\n throw new Error(\"IDS not found, tag name\");\n }\n updateByNameTags.push({\n strategy: \"name\",\n tagId: Number.parseInt(ids[foundIndex]),\n value: tag,\n });\n break;\n }\n }\n\n return {\n insertTags,\n updateByNameTags,\n };\n }\n\n async exportYaml(options: z.infer<typeof exportPrintersFloorsYamlSchema>) {\n const input = await validateInput(options, exportPrintersFloorsYamlSchema);\n\n const { exportFloors, exportPrinters, exportFloorGrid, exportTags, exportSettings, exportUsers } = input;\n\n const dumpedObject = {\n version: process.env.npm_package_version,\n exportedAt: new Date(),\n databaseType: \"sqlite\",\n config: input,\n printers: undefined as any,\n floors: undefined as any,\n tags: undefined as any,\n settings: undefined as any,\n users: undefined as any,\n user_roles: undefined as any,\n };\n\n if (exportPrinters) {\n const printers = await this.printerService.list();\n dumpedObject.printers = printers.map((p) => {\n const printerId = p.id;\n const { apiKey, username, password } = this.printerCache.getLoginDto(printerId);\n return {\n id: printerId,\n disabledReason: p.disabledReason,\n enabled: p.enabled,\n printerType: p.printerType,\n dateAdded: p.dateAdded,\n name: p.name,\n printerURL: p.printerURL,\n apiKey,\n username,\n password,\n assignee: p.assignee,\n flowRate: p.flowRate,\n feedRate: p.feedRate,\n };\n });\n }\n\n if (exportFloors) {\n const floors = await this.floorStore.listCache();\n dumpedObject.floors = floors.map((f) => {\n const dumpedFloor = {\n id: f.id,\n order: f.order,\n name: f.name,\n printers: undefined as any,\n };\n\n if (exportFloorGrid) {\n dumpedFloor.printers = f.printers.map((p) => {\n const fPrinterId = p.printerId;\n return {\n printerId: fPrinterId,\n x: p.x,\n y: p.y,\n };\n });\n }\n\n return dumpedFloor;\n });\n }\n\n if (exportTags) {\n const tags = await this.printerTagService.listTags();\n dumpedObject.tags = tags.map((t) => {\n return {\n name: t.name,\n id: t.id,\n printers: t.printers.map((p) => {\n return {\n printerId: p.printerId,\n };\n }),\n };\n });\n }\n\n if (exportSettings) {\n dumpedObject.settings = {\n ...this.settingsStore.getSettings(),\n ...this.settingsStore.getSettingsSensitive(),\n };\n }\n\n if (exportUsers) {\n const users = await this.userService.listUsers(1000);\n\n dumpedObject.users = users.map((u) => {\n const userDto = this.userService.toDto(u);\n return {\n id: userDto.id,\n username: userDto.username,\n isDemoUser: userDto.isDemoUser,\n isRootUser: userDto.isRootUser,\n isVerified: userDto.isVerified,\n needsPasswordChange: userDto.needsPasswordChange,\n passwordHash: u.passwordHash,\n createdAt: userDto.createdAt,\n roles: userDto.roles,\n };\n });\n }\n\n return dump(dumpedObject, {});\n }\n\n private normalizeYamlData(importSpec: YamlExportSchema, databaseTypeSqlite: boolean) {\n // Normalize printer data\n for (const printer of importSpec.printers) {\n // old export bug\n if (!printer.name && printer.printerName) {\n printer.name = printer.printerName;\n delete printer.printerName;\n }\n // 1.5.2 schema\n if (printer.settingsAppearance?.name) {\n printer.name = printer.settingsAppearance?.name;\n delete printer.settingsAppearance?.name;\n }\n // Ensure the type matches the database it came from (1.6.0+)\n if (databaseTypeSqlite && typeof printer.id === \"string\") {\n printer.id = Number.parseInt(printer.id);\n }\n\n // 1.7 backwards compatibility\n if (![OctoprintType, MoonrakerType, PrusaLinkType, BambuType].includes(printer.printerType)) {\n printer.printerType = OctoprintType;\n }\n }\n\n // Normalize floor data\n for (const floor of importSpec.floors) {\n // Migrate legacy 'floor' property to 'order'\n if (floor.floor !== undefined && floor.order === undefined) {\n floor.order = floor.floor;\n delete floor.floor;\n }\n\n // Normalize IDs for sqlite\n if (databaseTypeSqlite) {\n if (typeof floor.id === \"string\") {\n floor.id = Number.parseInt(floor.id);\n }\n // Ensure the type matches the database it came from (1.6.0+)\n for (const printer of floor.printers) {\n if (typeof printer.printerId === \"string\") {\n printer.printerId = Number.parseInt(printer.printerId);\n }\n }\n }\n }\n\n // Normalize groups to tags (backwards compatibility)\n if ((importSpec as any).groups && !importSpec.tags) {\n importSpec.tags = (importSpec as any).groups;\n delete (importSpec as any).groups;\n }\n\n // Normalize exportGroups to exportTags in config (backwards compatibility)\n if ((importSpec.config as any).exportGroups !== undefined && importSpec.config.exportTags === undefined) {\n (importSpec.config as any).exportTags = (importSpec.config as any).exportGroups;\n delete (importSpec.config as any).exportGroups;\n }\n }\n}\n"],"mappings":"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"}
@@ -1,146 +1,136 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "FileAnalysisService", {
6
- enumerable: true,
7
- get: function() {
8
- return FileAnalysisService;
9
- }
10
- });
11
- const _gcodeparser = require("../utils/parsers/gcode.parser");
12
- const _3mfparser = require("../utils/parsers/3mf.parser");
13
- const _bgcodeparser = require("../utils/parsers/bgcode.parser");
14
- const _nodepath = require("node:path");
15
- const _promises = require("node:fs/promises");
16
- class FileAnalysisService {
17
- logger;
18
- FILE_FORMATS = {
19
- GCODE: "gcode",
20
- THREE_MF: "3mf",
21
- BGCODE: "bgcode"
22
- };
23
- EXTENSIONS = {
24
- THREE_MF: ".3mf",
25
- BGCODE: ".bgcode",
26
- GCODE: ".gcode",
27
- GCODE_SHORT: ".g",
28
- GCODE_ALT: ".gco",
29
- GCODE_THREE_MF: ".gcode.3mf"
30
- };
31
- gcodeParser;
32
- threemfParser;
33
- bgcodeParser;
34
- constructor(loggerFactory){
35
- this.logger = loggerFactory(FileAnalysisService.name);
36
- this.gcodeParser = new _gcodeparser.GCodeParser();
37
- this.threemfParser = new _3mfparser.ThreeMFParser();
38
- this.bgcodeParser = new _bgcodeparser.BGCodeParser();
39
- this.logger.log("File analysis service initialized with all parsers");
40
- }
41
- async analyzeFile(filePath) {
42
- const ext = (0, _nodepath.extname)(filePath).toLowerCase();
43
- const fileFormat = this.getFileFormat(ext, filePath);
44
- this.logger.log(`Analyzing file: ${(0, _nodepath.basename)(filePath)} (format: ${fileFormat}, ext: ${ext})`);
45
- let result;
46
- try {
47
- switch(fileFormat){
48
- case this.FILE_FORMATS.GCODE:
49
- result = await this.analyzeGCode(filePath);
50
- break;
51
- case this.FILE_FORMATS.THREE_MF:
52
- result = await this.analyze3MF(filePath);
53
- break;
54
- case this.FILE_FORMATS.BGCODE:
55
- result = await this.analyzeBGCode(filePath);
56
- break;
57
- default:
58
- throw new Error(`Unsupported file format: ${fileFormat}`);
59
- }
60
- const thumbnails = this.extractThumbnails(result);
61
- return {
62
- metadata: result.normalized,
63
- thumbnails
64
- };
65
- } catch (error) {
66
- this.logger.error(`Failed to analyze file ${filePath} (ext: "${ext}"): ${error}`);
67
- throw error;
68
- }
69
- }
70
- async analyzeMultiPlate3MF(filePath) {
71
- const result = await this.analyze3MF(filePath);
72
- if (!result.normalized.isMultiPlate || !result.plates) {
73
- return [
74
- {
75
- metadata: result.normalized,
76
- thumbnails: this.extractThumbnails(result)
77
- }
78
- ];
79
- }
80
- return result.plates.map((plate)=>({
81
- metadata: {
82
- ...result.normalized,
83
- plateNumber: plate.plateNumber,
84
- gcodePrintTimeSeconds: plate.gcodePrintTimeSeconds,
85
- filamentUsedGrams: plate.filamentUsedGrams,
86
- totalLayers: plate.totalLayers
87
- },
88
- thumbnails: plate.thumbnails?.map((t)=>({
89
- width: t.width || 0,
90
- height: t.height || 0,
91
- format: t.type || t.format || "PNG"
92
- })) || []
93
- }));
94
- }
95
- async analyzeGCode(filePath) {
96
- return await this.gcodeParser.parse(filePath);
97
- }
98
- async analyze3MF(filePath) {
99
- return await this.threemfParser.parse(filePath);
100
- }
101
- async analyzeBGCode(filePath) {
102
- return await this.bgcodeParser.parse(filePath);
103
- }
104
- extractThumbnails(result) {
105
- const thumbnails = [];
106
- if (result.raw._thumbnails) {
107
- for (const thumb of result.raw._thumbnails){
108
- thumbnails.push({
109
- width: thumb.width,
110
- height: thumb.height,
111
- format: thumb.format,
112
- data: thumb.data
113
- });
114
- }
115
- }
116
- return thumbnails;
117
- }
118
- getFileFormat(ext, filePath) {
119
- const lowerPath = filePath.toLowerCase();
120
- if (lowerPath.endsWith(this.EXTENSIONS.GCODE_THREE_MF) || lowerPath.endsWith(this.EXTENSIONS.THREE_MF)) {
121
- return this.FILE_FORMATS.THREE_MF;
122
- }
123
- if (lowerPath.endsWith(this.EXTENSIONS.BGCODE)) {
124
- return this.FILE_FORMATS.BGCODE;
125
- }
126
- if (lowerPath.endsWith(this.EXTENSIONS.GCODE) || lowerPath.endsWith(this.EXTENSIONS.GCODE_SHORT) || lowerPath.endsWith(this.EXTENSIONS.GCODE_ALT)) {
127
- return this.FILE_FORMATS.GCODE;
128
- }
129
- if (ext === this.EXTENSIONS.THREE_MF) return this.FILE_FORMATS.THREE_MF;
130
- if (ext === this.EXTENSIONS.BGCODE) return this.FILE_FORMATS.BGCODE;
131
- if (ext === this.EXTENSIONS.GCODE || ext === this.EXTENSIONS.GCODE_SHORT || ext === this.EXTENSIONS.GCODE_ALT) {
132
- return this.FILE_FORMATS.GCODE;
133
- }
134
- throw new Error(`Unknown file extension: "${ext}" (path: "${filePath}")`);
135
- }
136
- async needsAnalysis(filePath) {
137
- try {
138
- await (0, _promises.access)(filePath);
139
- return true;
140
- } catch {
141
- return false;
142
- }
143
- }
144
- }
1
+ import { GCodeParser } from "../utils/parsers/gcode.parser.js";
2
+ import { ThreeMFParser } from "../utils/parsers/3mf.parser.js";
3
+ import { BGCodeParser } from "../utils/parsers/bgcode.parser.js";
4
+ import { basename, extname } from "node:path";
5
+ import { access } from "node:fs/promises";
6
+ //#region src/services/file-analysis.service.ts
7
+ /**
8
+ * Service for analyzing print files and extracting metadata
9
+ * Supports G-code, 3MF (including multi-plate), and BGCode formats
10
+ */
11
+ var FileAnalysisService = class FileAnalysisService {
12
+ logger;
13
+ FILE_FORMATS = {
14
+ GCODE: "gcode",
15
+ THREE_MF: "3mf",
16
+ BGCODE: "bgcode"
17
+ };
18
+ EXTENSIONS = {
19
+ THREE_MF: ".3mf",
20
+ BGCODE: ".bgcode",
21
+ GCODE: ".gcode",
22
+ GCODE_SHORT: ".g",
23
+ GCODE_ALT: ".gco",
24
+ GCODE_THREE_MF: ".gcode.3mf"
25
+ };
26
+ gcodeParser;
27
+ threemfParser;
28
+ bgcodeParser;
29
+ constructor(loggerFactory) {
30
+ this.logger = loggerFactory(FileAnalysisService.name);
31
+ this.gcodeParser = new GCodeParser();
32
+ this.threemfParser = new ThreeMFParser();
33
+ this.bgcodeParser = new BGCodeParser();
34
+ this.logger.log("File analysis service initialized with all parsers");
35
+ }
36
+ /**
37
+ * Analyze a file and extract metadata
38
+ */
39
+ async analyzeFile(filePath) {
40
+ const ext = extname(filePath).toLowerCase();
41
+ const fileFormat = this.getFileFormat(ext, filePath);
42
+ this.logger.log(`Analyzing file: ${basename(filePath)} (format: ${fileFormat}, ext: ${ext})`);
43
+ let result;
44
+ try {
45
+ switch (fileFormat) {
46
+ case this.FILE_FORMATS.GCODE:
47
+ result = await this.analyzeGCode(filePath);
48
+ break;
49
+ case this.FILE_FORMATS.THREE_MF:
50
+ result = await this.analyze3MF(filePath);
51
+ break;
52
+ case this.FILE_FORMATS.BGCODE:
53
+ result = await this.analyzeBGCode(filePath);
54
+ break;
55
+ default: throw new Error(`Unsupported file format: ${fileFormat}`);
56
+ }
57
+ const thumbnails = this.extractThumbnails(result);
58
+ return {
59
+ metadata: result.normalized,
60
+ thumbnails
61
+ };
62
+ } catch (error) {
63
+ this.logger.error(`Failed to analyze file ${filePath} (ext: "${ext}"): ${error}`);
64
+ throw error;
65
+ }
66
+ }
67
+ /**
68
+ * Analyze multiple plates from a 3MF file
69
+ * Returns array of metadata objects, one per plate
70
+ */
71
+ async analyzeMultiPlate3MF(filePath) {
72
+ const result = await this.analyze3MF(filePath);
73
+ if (!result.normalized.isMultiPlate || !result.plates) return [{
74
+ metadata: result.normalized,
75
+ thumbnails: this.extractThumbnails(result)
76
+ }];
77
+ return result.plates.map((plate) => ({
78
+ metadata: {
79
+ ...result.normalized,
80
+ plateNumber: plate.plateNumber,
81
+ gcodePrintTimeSeconds: plate.gcodePrintTimeSeconds,
82
+ filamentUsedGrams: plate.filamentUsedGrams,
83
+ totalLayers: plate.totalLayers
84
+ },
85
+ thumbnails: plate.thumbnails?.map((t) => ({
86
+ width: t.width || 0,
87
+ height: t.height || 0,
88
+ format: t.type || t.format || "PNG"
89
+ })) || []
90
+ }));
91
+ }
92
+ async analyzeGCode(filePath) {
93
+ return await this.gcodeParser.parse(filePath);
94
+ }
95
+ async analyze3MF(filePath) {
96
+ return await this.threemfParser.parse(filePath);
97
+ }
98
+ async analyzeBGCode(filePath) {
99
+ return await this.bgcodeParser.parse(filePath);
100
+ }
101
+ extractThumbnails(result) {
102
+ const thumbnails = [];
103
+ if (result.raw._thumbnails) for (const thumb of result.raw._thumbnails) thumbnails.push({
104
+ width: thumb.width,
105
+ height: thumb.height,
106
+ format: thumb.format,
107
+ data: thumb.data
108
+ });
109
+ return thumbnails;
110
+ }
111
+ getFileFormat(ext, filePath) {
112
+ const lowerPath = filePath.toLowerCase();
113
+ if (lowerPath.endsWith(this.EXTENSIONS.GCODE_THREE_MF) || lowerPath.endsWith(this.EXTENSIONS.THREE_MF)) return this.FILE_FORMATS.THREE_MF;
114
+ if (lowerPath.endsWith(this.EXTENSIONS.BGCODE)) return this.FILE_FORMATS.BGCODE;
115
+ if (lowerPath.endsWith(this.EXTENSIONS.GCODE) || lowerPath.endsWith(this.EXTENSIONS.GCODE_SHORT) || lowerPath.endsWith(this.EXTENSIONS.GCODE_ALT)) return this.FILE_FORMATS.GCODE;
116
+ if (ext === this.EXTENSIONS.THREE_MF) return this.FILE_FORMATS.THREE_MF;
117
+ if (ext === this.EXTENSIONS.BGCODE) return this.FILE_FORMATS.BGCODE;
118
+ if (ext === this.EXTENSIONS.GCODE || ext === this.EXTENSIONS.GCODE_SHORT || ext === this.EXTENSIONS.GCODE_ALT) return this.FILE_FORMATS.GCODE;
119
+ throw new Error(`Unknown file extension: "${ext}" (path: "${filePath}")`);
120
+ }
121
+ /**
122
+ * Quick check if file needs analysis
123
+ */
124
+ async needsAnalysis(filePath) {
125
+ try {
126
+ await access(filePath);
127
+ return true;
128
+ } catch {
129
+ return false;
130
+ }
131
+ }
132
+ };
133
+ //#endregion
134
+ export { FileAnalysisService };
145
135
 
146
136
  //# sourceMappingURL=file-analysis.service.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/file-analysis.service.ts"],"names":["FileAnalysisService","logger","FILE_FORMATS","GCODE","THREE_MF","BGCODE","EXTENSIONS","GCODE_SHORT","GCODE_ALT","GCODE_THREE_MF","gcodeParser","threemfParser","bgcodeParser","loggerFactory","name","GCodeParser","ThreeMFParser","BGCodeParser","log","analyzeFile","filePath","ext","extname","toLowerCase","fileFormat","getFileFormat","basename","result","analyzeGCode","analyze3MF","analyzeBGCode","Error","thumbnails","extractThumbnails","metadata","normalized","error","analyzeMultiPlate3MF","isMultiPlate","plates","map","plate","plateNumber","gcodePrintTimeSeconds","filamentUsedGrams","totalLayers","t","width","height","format","type","parse","raw","_thumbnails","thumb","push","data","lowerPath","endsWith","needsAnalysis","access"],"mappings":"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"}
1
+ {"version":3,"file":"file-analysis.service.js","names":[],"sources":["../../src/services/file-analysis.service.ts"],"sourcesContent":["import { PrintJobMetadata, FileFormatType, ThumbnailData } from \"@/entities/print-job.entity\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport { LoggerService } from \"@/handlers/logger\";\nimport { GCodeParser } from \"@/utils/parsers/gcode.parser\";\nimport { ThreeMFParser } from \"@/utils/parsers/3mf.parser\";\nimport { BGCodeParser } from \"@/utils/parsers/bgcode.parser\";\nimport { basename, extname } from \"node:path\";\nimport { access } from \"node:fs/promises\";\n\ninterface ParserResult {\n raw: any;\n normalized: any;\n plates?: any[];\n}\n\n/**\n * Service for analyzing print files and extracting metadata\n * Supports G-code, 3MF (including multi-plate), and BGCode formats\n */\nexport class FileAnalysisService {\n private readonly logger: LoggerService;\n\n // File format constants\n private readonly FILE_FORMATS = {\n GCODE: \"gcode\" as const,\n THREE_MF: \"3mf\" as const,\n BGCODE: \"bgcode\" as const,\n };\n\n // File extension constants\n private readonly EXTENSIONS = {\n THREE_MF: \".3mf\",\n BGCODE: \".bgcode\",\n GCODE: \".gcode\",\n GCODE_SHORT: \".g\",\n GCODE_ALT: \".gco\",\n GCODE_THREE_MF: \".gcode.3mf\",\n };\n\n // Parser instances\n private readonly gcodeParser: GCodeParser;\n private readonly threemfParser: ThreeMFParser;\n private readonly bgcodeParser: BGCodeParser;\n\n constructor(loggerFactory: ILoggerFactory) {\n this.logger = loggerFactory(FileAnalysisService.name);\n this.gcodeParser = new GCodeParser();\n this.threemfParser = new ThreeMFParser();\n this.bgcodeParser = new BGCodeParser();\n this.logger.log(\"File analysis service initialized with all parsers\");\n }\n\n /**\n * Analyze a file and extract metadata\n */\n async analyzeFile(filePath: string): Promise<{\n metadata: PrintJobMetadata;\n thumbnails: ThumbnailData[];\n }> {\n const ext = extname(filePath).toLowerCase();\n const fileFormat = this.getFileFormat(ext, filePath);\n\n this.logger.log(`Analyzing file: ${basename(filePath)} (format: ${fileFormat}, ext: ${ext})`);\n\n let result: ParserResult;\n\n try {\n switch (fileFormat) {\n case this.FILE_FORMATS.GCODE:\n result = await this.analyzeGCode(filePath);\n break;\n case this.FILE_FORMATS.THREE_MF:\n result = await this.analyze3MF(filePath);\n break;\n case this.FILE_FORMATS.BGCODE:\n result = await this.analyzeBGCode(filePath);\n break;\n default:\n throw new Error(`Unsupported file format: ${fileFormat}`);\n }\n\n // Extract thumbnails\n const thumbnails = this.extractThumbnails(result);\n\n return {\n metadata: result.normalized as PrintJobMetadata,\n thumbnails,\n };\n } catch (error) {\n this.logger.error(`Failed to analyze file ${filePath} (ext: \"${ext}\"): ${error}`);\n throw error;\n }\n }\n\n /**\n * Analyze multiple plates from a 3MF file\n * Returns array of metadata objects, one per plate\n */\n async analyzeMultiPlate3MF(filePath: string): Promise<\n Array<{\n metadata: PrintJobMetadata;\n thumbnails: ThumbnailData[];\n }>\n > {\n const result = await this.analyze3MF(filePath);\n\n if (!result.normalized.isMultiPlate || !result.plates) {\n // Single plate file\n return [\n {\n metadata: result.normalized as PrintJobMetadata,\n thumbnails: this.extractThumbnails(result),\n },\n ];\n }\n\n // Multi-plate file - return metadata for each plate\n return result.plates.map((plate) => ({\n metadata: {\n ...result.normalized,\n plateNumber: plate.plateNumber,\n gcodePrintTimeSeconds: plate.gcodePrintTimeSeconds,\n filamentUsedGrams: plate.filamentUsedGrams,\n totalLayers: plate.totalLayers,\n } as PrintJobMetadata,\n thumbnails:\n plate.thumbnails?.map((t: any) => ({\n width: t.width || 0,\n height: t.height || 0,\n format: t.type || t.format || \"PNG\",\n })) || [],\n }));\n }\n\n private async analyzeGCode(filePath: string): Promise<ParserResult> {\n return await this.gcodeParser.parse(filePath);\n }\n\n private async analyze3MF(filePath: string): Promise<ParserResult> {\n return await this.threemfParser.parse(filePath);\n }\n\n private async analyzeBGCode(filePath: string): Promise<ParserResult> {\n return await this.bgcodeParser.parse(filePath);\n }\n\n private extractThumbnails(result: ParserResult): ThumbnailData[] {\n const thumbnails: ThumbnailData[] = [];\n\n if (result.raw._thumbnails) {\n for (const thumb of result.raw._thumbnails) {\n thumbnails.push({\n width: thumb.width,\n height: thumb.height,\n format: thumb.format,\n data: thumb.data, // Base64 if available\n });\n }\n }\n\n return thumbnails;\n }\n\n private getFileFormat(ext: string, filePath: string): FileFormatType {\n // Check for compound extensions first\n const lowerPath = filePath.toLowerCase();\n if (lowerPath.endsWith(this.EXTENSIONS.GCODE_THREE_MF) || lowerPath.endsWith(this.EXTENSIONS.THREE_MF)) {\n return this.FILE_FORMATS.THREE_MF;\n }\n if (lowerPath.endsWith(this.EXTENSIONS.BGCODE)) {\n return this.FILE_FORMATS.BGCODE;\n }\n if (\n lowerPath.endsWith(this.EXTENSIONS.GCODE) ||\n lowerPath.endsWith(this.EXTENSIONS.GCODE_SHORT) ||\n lowerPath.endsWith(this.EXTENSIONS.GCODE_ALT)\n ) {\n return this.FILE_FORMATS.GCODE;\n }\n\n // Fallback to extension check\n if (ext === this.EXTENSIONS.THREE_MF) return this.FILE_FORMATS.THREE_MF;\n if (ext === this.EXTENSIONS.BGCODE) return this.FILE_FORMATS.BGCODE;\n if (ext === this.EXTENSIONS.GCODE || ext === this.EXTENSIONS.GCODE_SHORT || ext === this.EXTENSIONS.GCODE_ALT) {\n return this.FILE_FORMATS.GCODE;\n }\n\n throw new Error(`Unknown file extension: \"${ext}\" (path: \"${filePath}\")`);\n }\n\n /**\n * Quick check if file needs analysis\n */\n async needsAnalysis(filePath: string): Promise<boolean> {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n }\n}\n"],"mappings":"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"}