@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.
- package/.claude/CLAUDE.md +76 -0
- package/.vite-hooks/pre-commit +1 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarn/releases/yarn-4.13.0.cjs +940 -0
- package/.yarnrc.yml +1 -1
- package/README.md +1 -1
- package/RELEASE_NOTES.MD +14 -0
- package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.js +9 -0
- package/dist/_virtual/_@oxc-project_runtime@0.127.0/helpers/decorateMetadata.js +6 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/_virtual/_virtual_controllers.js +43 -0
- package/dist/consoles/typeorm-create.js +51 -112
- package/dist/consoles/typeorm-create.js.map +1 -1
- package/dist/consoles/typeorm-generate.js +99 -165
- package/dist/consoles/typeorm-generate.js.map +1 -1
- package/dist/consoles/typeorm-migrate.js +35 -43
- package/dist/consoles/typeorm-migrate.js.map +1 -1
- package/dist/constants/authorization.constants.js +75 -97
- package/dist/constants/authorization.constants.js.map +1 -1
- package/dist/constants/event.constants.js +11 -41
- package/dist/constants/event.constants.js.map +1 -1
- package/dist/constants/http-status-codes.constants.js +319 -71
- package/dist/constants/http-status-codes.constants.js.map +1 -1
- package/dist/constants/server-settings.constants.js +45 -87
- package/dist/constants/server-settings.constants.js.map +1 -1
- package/dist/constants/service.constants.js +3 -21
- package/dist/constants/service.constants.js.map +1 -1
- package/dist/container.js +167 -181
- package/dist/container.js.map +1 -1
- package/dist/container.tokens.js +78 -85
- package/dist/container.tokens.js.map +1 -1
- package/dist/controllers/auth.controller.js +156 -225
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/controllers/batch-call.controller.js +79 -116
- package/dist/controllers/batch-call.controller.js.map +1 -1
- package/dist/controllers/camera-stream.controller.js +74 -119
- package/dist/controllers/camera-stream.controller.js.map +1 -1
- package/dist/controllers/dto/update-client-dist.dto.js +8 -15
- package/dist/controllers/dto/update-client-dist.dto.js.map +1 -1
- package/dist/controllers/file-storage.controller.js +251 -312
- package/dist/controllers/file-storage.controller.js.map +1 -1
- package/dist/controllers/first-time-setup.controller.js +83 -135
- package/dist/controllers/first-time-setup.controller.js.map +1 -1
- package/dist/controllers/floor.controller.js +111 -175
- package/dist/controllers/floor.controller.js.map +1 -1
- package/dist/controllers/metrics.controller.js +27 -53
- package/dist/controllers/metrics.controller.js.map +1 -1
- package/dist/controllers/print-job.controller.js +366 -451
- package/dist/controllers/print-job.controller.js.map +1 -1
- package/dist/controllers/print-queue.controller.js +329 -427
- package/dist/controllers/print-queue.controller.js.map +1 -1
- package/dist/controllers/printer-files.controller.js +244 -305
- package/dist/controllers/printer-files.controller.js.map +1 -1
- package/dist/controllers/printer-maintenance-log.controller.js +109 -165
- package/dist/controllers/printer-maintenance-log.controller.js.map +1 -1
- package/dist/controllers/printer-settings.controller.js +50 -81
- package/dist/controllers/printer-settings.controller.js.map +1 -1
- package/dist/controllers/printer-tag.controller.js +104 -166
- package/dist/controllers/printer-tag.controller.js.map +1 -1
- package/dist/controllers/printer.controller.js +352 -469
- package/dist/controllers/printer.controller.js.map +1 -1
- package/dist/controllers/server-private.controller.js +182 -239
- package/dist/controllers/server-private.controller.js.map +1 -1
- package/dist/controllers/server-public.controller.js +104 -158
- package/dist/controllers/server-public.controller.js.map +1 -1
- package/dist/controllers/settings.controller.js +229 -364
- package/dist/controllers/settings.controller.js.map +1 -1
- package/dist/controllers/slicer-compat.controller.js +179 -206
- package/dist/controllers/slicer-compat.controller.js.map +1 -1
- package/dist/controllers/user.controller.js +226 -348
- package/dist/controllers/user.controller.js.map +1 -1
- package/dist/controllers/validation/auth-controller.validation.js +5 -14
- package/dist/controllers/validation/auth-controller.validation.js.map +1 -1
- package/dist/controllers/validation/batch-controller.validation.js +13 -35
- package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
- package/dist/controllers/validation/generic.validation.js +6 -23
- package/dist/controllers/validation/generic.validation.js.map +1 -1
- package/dist/controllers/validation/printer-completion-controller.validation.js +5 -14
- package/dist/controllers/validation/printer-completion-controller.validation.js.map +1 -1
- package/dist/controllers/validation/printer-controller.validation.js +16 -48
- package/dist/controllers/validation/printer-controller.validation.js.map +1 -1
- package/dist/controllers/validation/printer-files-controller.validation.js +12 -47
- package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -1
- package/dist/controllers/validation/printer-settings-controller.validation.js +5 -14
- package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -1
- package/dist/controllers/validation/server-private.validation.js +7 -14
- package/dist/controllers/validation/server-private.validation.js.map +1 -1
- package/dist/controllers/validation/setting.validation.js +12 -34
- package/dist/controllers/validation/setting.validation.js.map +1 -1
- package/dist/controllers/validation/user-controller.validation.js +27 -65
- package/dist/controllers/validation/user-controller.validation.js.map +1 -1
- package/dist/data-source.js +74 -79
- package/dist/data-source.js.map +1 -1
- package/dist/entities/camera-stream.entity.js +49 -91
- package/dist/entities/camera-stream.entity.js.map +1 -1
- package/dist/entities/floor-position.entity.js +38 -75
- package/dist/entities/floor-position.entity.js.map +1 -1
- package/dist/entities/floor.entity.js +18 -48
- package/dist/entities/floor.entity.js.map +1 -1
- package/dist/entities/index.js +14 -66
- package/dist/entities/print-job.entity.js +114 -196
- package/dist/entities/print-job.entity.js.map +1 -1
- package/dist/entities/printer-maintenance-log.entity.js +61 -140
- package/dist/entities/printer-maintenance-log.entity.js.map +1 -1
- package/dist/entities/printer-tag.entity.js +33 -66
- package/dist/entities/printer-tag.entity.js.map +1 -1
- package/dist/entities/printer.entity.js +67 -124
- package/dist/entities/printer.entity.js.map +1 -1
- package/dist/entities/refresh-token.entity.js +31 -66
- package/dist/entities/refresh-token.entity.js.map +1 -1
- package/dist/entities/role.entity.js +16 -45
- package/dist/entities/role.entity.js.map +1 -1
- package/dist/entities/settings.entity.js +38 -77
- package/dist/entities/settings.entity.js.map +1 -1
- package/dist/entities/tag.entity.js +19 -43
- package/dist/entities/tag.entity.js.map +1 -1
- package/dist/entities/user-role.entity.js +30 -67
- package/dist/entities/user-role.entity.js.map +1 -1
- package/dist/entities/user.entity.js +32 -87
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/exceptions/failed-dependency.exception.js +11 -18
- package/dist/exceptions/failed-dependency.exception.js.map +1 -1
- package/dist/exceptions/job.exceptions.js +9 -16
- package/dist/exceptions/job.exceptions.js.map +1 -1
- package/dist/exceptions/runtime.exceptions.js +82 -121
- package/dist/exceptions/runtime.exceptions.js.map +1 -1
- package/dist/handlers/event-emitter.js +13 -20
- package/dist/handlers/event-emitter.js.map +1 -1
- package/dist/handlers/logger-factory.js +7 -14
- package/dist/handlers/logger-factory.js.map +1 -1
- package/dist/handlers/logger.js +26 -36
- package/dist/handlers/logger.js.map +1 -1
- package/dist/handlers/logging/file-logging.transport.js +17 -31
- package/dist/handlers/logging/file-logging.transport.js.map +1 -1
- package/dist/handlers/logging/loki-logging.transport.js +34 -50
- package/dist/handlers/logging/loki-logging.transport.js.map +1 -1
- package/dist/handlers/logging/static.logger.js +83 -124
- package/dist/handlers/logging/static.logger.js.map +1 -1
- package/dist/handlers/validators.js +8 -25
- package/dist/handlers/validators.js.map +1 -1
- package/dist/index.js +23 -26
- package/dist/index.js.map +1 -1
- package/dist/middleware/authenticate.js +26 -69
- package/dist/middleware/authenticate.js.map +1 -1
- package/dist/middleware/database.js +16 -22
- package/dist/middleware/database.js.map +1 -1
- package/dist/middleware/demo.middleware.js +19 -27
- package/dist/middleware/demo.middleware.js.map +1 -1
- package/dist/middleware/exception.filter.js +109 -133
- package/dist/middleware/exception.filter.js.map +1 -1
- package/dist/middleware/global.middleware.js +28 -47
- package/dist/middleware/global.middleware.js.map +1 -1
- package/dist/middleware/param-converter.middleware.js +31 -69
- package/dist/middleware/param-converter.middleware.js.map +1 -1
- package/dist/middleware/passport.js +38 -64
- package/dist/middleware/passport.js.map +1 -1
- package/dist/middleware/printer-resolver.js +26 -33
- package/dist/middleware/printer-resolver.js.map +1 -1
- package/dist/middleware/printer.js +56 -94
- package/dist/middleware/printer.js.map +1 -1
- package/dist/middleware/slicer-api-key.middleware.js +23 -26
- package/dist/middleware/slicer-api-key.middleware.js.map +1 -1
- package/dist/middleware/socketio.middleware.js +21 -32
- package/dist/middleware/socketio.middleware.js.map +1 -1
- package/dist/migrations/1706829146617-InitSqlite.js +84 -91
- package/dist/migrations/1706829146617-InitSqlite.js.map +1 -1
- package/dist/migrations/1707494762198-PrinterGroup.js +22 -29
- package/dist/migrations/1707494762198-PrinterGroup.js.map +1 -1
- package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js +26 -33
- package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js.map +1 -1
- package/dist/migrations/1713300747465-ChangeRoleNameUnique.js +27 -34
- package/dist/migrations/1713300747465-ChangeRoleNameUnique.js.map +1 -1
- package/dist/migrations/1713897879622-AddPrinterType.js +34 -41
- package/dist/migrations/1713897879622-AddPrinterType.js.map +1 -1
- package/dist/migrations/1720338804844-RemovePrinterFile.js +12 -19
- package/dist/migrations/1720338804844-RemovePrinterFile.js.map +1 -1
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +26 -33
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -1
- package/dist/migrations/1766576698569-DropPermissions.js +11 -18
- package/dist/migrations/1766576698569-DropPermissions.js.map +1 -1
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js +26 -33
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -1
- package/dist/migrations/1767279607392-DropCustomGcode.js +12 -19
- package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -1
- package/dist/migrations/1767291804417-DropPrintCompletions.js +12 -19
- package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -1
- package/dist/migrations/1767352862576-DropSettingsFileClean.js +18 -25
- package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -1
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js +26 -33
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -1
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js +18 -25
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -1
- package/dist/migrations/1767432108916-RenameGroupToTag.js +22 -29
- package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -1
- package/dist/migrations/1767451444137-AddPrintJob.js +20 -27
- package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -1
- package/dist/migrations/1767909428129-AddPrinterMaintenanceLog.js +14 -21
- package/dist/migrations/1767909428129-AddPrinterMaintenanceLog.js.map +1 -1
- package/dist/plugins/controllers-plugin.js +21 -0
- package/dist/plugins/controllers-plugin.js.map +1 -0
- package/dist/server.constants.js +79 -91
- package/dist/server.constants.js.map +1 -1
- package/dist/server.core.js +56 -122
- package/dist/server.core.js.map +1 -1
- package/dist/server.env.js +56 -121
- package/dist/server.env.js.map +1 -1
- package/dist/server.host.js +66 -99
- package/dist/server.host.js.map +1 -1
- package/dist/services/authentication/auth.service.js +103 -126
- package/dist/services/authentication/auth.service.js.map +1 -1
- package/dist/services/authentication/jwt.service.js +23 -32
- package/dist/services/authentication/jwt.service.js.map +1 -1
- package/dist/services/bambu/bambu-ftp.adapter.js +194 -236
- package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
- package/dist/services/bambu/bambu-mqtt.adapter.js +394 -449
- package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
- package/dist/services/bambu/bambu.client.js +64 -65
- package/dist/services/bambu/bambu.client.js.map +1 -1
- package/dist/services/bambu/mqtt-message.types.js +1 -6
- package/dist/services/bambu.api.js +230 -247
- package/dist/services/bambu.api.js.map +1 -1
- package/dist/services/core/batch-call.service.js +139 -163
- package/dist/services/core/batch-call.service.js.map +1 -1
- package/dist/services/core/client-bundle.service.js +126 -165
- package/dist/services/core/client-bundle.service.js.map +1 -1
- package/dist/services/core/config.service.js +16 -26
- package/dist/services/core/config.service.js.map +1 -1
- package/dist/services/core/cradle.service.js +11 -19
- package/dist/services/core/cradle.service.js.map +1 -1
- package/dist/services/core/github.service.js +59 -79
- package/dist/services/core/github.service.js.map +1 -1
- package/dist/services/core/http-client.factory.js +30 -38
- package/dist/services/core/http-client.factory.js.map +1 -1
- package/dist/services/core/logs-manager.service.js +61 -84
- package/dist/services/core/logs-manager.service.js.map +1 -1
- package/dist/services/core/monsterpi.service.js +26 -36
- package/dist/services/core/monsterpi.service.js.map +1 -1
- package/dist/services/core/multer.service.js +69 -129
- package/dist/services/core/multer.service.js.map +1 -1
- package/dist/services/core/server-release.service.js +77 -99
- package/dist/services/core/server-release.service.js.map +1 -1
- package/dist/services/core/yaml.service.js +443 -573
- package/dist/services/core/yaml.service.js.map +1 -1
- package/dist/services/file-analysis.service.js +134 -144
- package/dist/services/file-analysis.service.js.map +1 -1
- package/dist/services/file-storage.service.js +324 -423
- package/dist/services/file-storage.service.js.map +1 -1
- package/dist/services/interfaces/auth.service.interface.js +1 -6
- package/dist/services/interfaces/camera-stream.dto.js +23 -41
- package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
- package/dist/services/interfaces/camera-stream.service.interface.js +1 -6
- package/dist/services/interfaces/file-upload-tracker.interface.js +1 -6
- package/dist/services/interfaces/floor.dto.js +31 -55
- package/dist/services/interfaces/floor.dto.js.map +1 -1
- package/dist/services/interfaces/floor.service.interface.js +1 -6
- package/dist/services/interfaces/jwt.service.interface.js +1 -6
- package/dist/services/interfaces/login.dto.js +10 -17
- package/dist/services/interfaces/login.dto.js.map +1 -1
- package/dist/services/interfaces/page.interface.js +5 -12
- package/dist/services/interfaces/page.interface.js.map +1 -1
- package/dist/services/interfaces/permission.service.interface.js +1 -6
- package/dist/services/interfaces/printer-file.dto.js +1 -6
- package/dist/services/interfaces/printer-maintenance-log.dto.js +1 -6
- package/dist/services/interfaces/printer-tag.dto.js +11 -26
- package/dist/services/interfaces/printer-tag.dto.js.map +1 -1
- package/dist/services/interfaces/printer-tag.service.interface.js +1 -6
- package/dist/services/interfaces/printer.dto.js +21 -36
- package/dist/services/interfaces/printer.dto.js.map +1 -1
- package/dist/services/interfaces/printer.service.interface.js +1 -6
- package/dist/services/interfaces/refresh-token.dto.js +9 -16
- package/dist/services/interfaces/refresh-token.dto.js.map +1 -1
- package/dist/services/interfaces/refresh-token.service.interface.js +1 -6
- package/dist/services/interfaces/role-service.interface.js +1 -6
- package/dist/services/interfaces/role.dto.js +7 -14
- package/dist/services/interfaces/role.dto.js.map +1 -1
- package/dist/services/interfaces/settings.dto.js +10 -17
- package/dist/services/interfaces/settings.dto.js.map +1 -1
- package/dist/services/interfaces/settings.service.interface.js +1 -6
- package/dist/services/interfaces/tag.dto.js +1 -6
- package/dist/services/interfaces/task.interfaces.js +1 -6
- package/dist/services/interfaces/user-role.dto.js +9 -16
- package/dist/services/interfaces/user-role.dto.js.map +1 -1
- package/dist/services/interfaces/user-service.interface.js +1 -6
- package/dist/services/interfaces/user.dto.js +22 -37
- package/dist/services/interfaces/user.dto.js.map +1 -1
- package/dist/services/moonraker/constants/moonraker-event.dto.js +16 -31
- package/dist/services/moonraker/constants/moonraker-event.dto.js.map +1 -1
- package/dist/services/moonraker/constants/moonraker.constants.js +4 -11
- package/dist/services/moonraker/constants/moonraker.constants.js.map +1 -1
- package/dist/services/moonraker/dto/access/access-info.dto.js +1 -6
- package/dist/services/moonraker/dto/access/access-login-refresh.dto.js +1 -6
- package/dist/services/moonraker/dto/access/access-login-result.dto.js +1 -6
- package/dist/services/moonraker/dto/access/access-user-result.dto.js +1 -6
- package/dist/services/moonraker/dto/access/access-user.dto.js +1 -6
- package/dist/services/moonraker/dto/database/database-namespace-item.dto.js +1 -6
- package/dist/services/moonraker/dto/database/database-namespace-list.dto.js +1 -6
- package/dist/services/moonraker/dto/gcode-help.dto.js +1 -6
- package/dist/services/moonraker/dto/gcode-store.dto.js +1 -6
- package/dist/services/moonraker/dto/job-queue/enqueue-job.dto.js +1 -6
- package/dist/services/moonraker/dto/job-queue/job-queue-status.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-device-power-device-state.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-device-power-devices.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-peripherals-canbus.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-peripherals-serial.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-peripherals-usb.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-peripherals-video.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-system-info.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-update-status.dto.js +1 -6
- package/dist/services/moonraker/dto/machine/machine-wled-strips.dto.js +1 -6
- package/dist/services/moonraker/dto/notifier-list.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/bed-mesh.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/configfile.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/display-status.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/extruder.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/fan.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/filament-motion-sensor.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/filament-switch-sensor.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/gcode-move.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/gcode.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/heater-bed.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/heaters.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/idle-timeout.dto.js +6 -21
- package/dist/services/moonraker/dto/objects/idle-timeout.dto.js.map +1 -1
- package/dist/services/moonraker/dto/objects/mcu.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/motion-report.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/output-pin.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/pause-resume.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/print-stats.dto.js +9 -24
- package/dist/services/moonraker/dto/objects/print-stats.dto.js.map +1 -1
- package/dist/services/moonraker/dto/objects/printer-object.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/printer-object.types.js +1 -6
- package/dist/services/moonraker/dto/objects/printer-objects-list.dto.js +28 -43
- package/dist/services/moonraker/dto/objects/printer-objects-list.dto.js.map +1 -1
- package/dist/services/moonraker/dto/objects/printer-objects-query.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/stepper-enable.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/system-stats.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/temperature-fan.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/temperature-sensor.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/toolhead.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/virtual-sdcard.dto.js +1 -6
- package/dist/services/moonraker/dto/objects/webhooks.dto.js +1 -6
- package/dist/services/moonraker/dto/octoprint-compat/api-job.dto.js +1 -6
- package/dist/services/moonraker/dto/octoprint-compat/api-login.dto.js +1 -6
- package/dist/services/moonraker/dto/octoprint-compat/api-printer.dto.js +1 -6
- package/dist/services/moonraker/dto/octoprint-compat/api-profiles.dto.js +1 -6
- package/dist/services/moonraker/dto/octoprint-compat/api-settings.dto.js +1 -6
- package/dist/services/moonraker/dto/octoprint-compat/api-version.dto.js +1 -6
- package/dist/services/moonraker/dto/octoprint-compat/server-version.dto.js +1 -6
- package/dist/services/moonraker/dto/printer-info.dto.js +7 -22
- package/dist/services/moonraker/dto/printer-info.dto.js.map +1 -1
- package/dist/services/moonraker/dto/printer-query-endstops.dto.js +1 -6
- package/dist/services/moonraker/dto/process-stats.dto.js +1 -6
- package/dist/services/moonraker/dto/rest/action-result.dto.js +1 -6
- package/dist/services/moonraker/dto/rest/error.dto.js +1 -6
- package/dist/services/moonraker/dto/rest/result.dto.js +6 -13
- package/dist/services/moonraker/dto/rest/result.dto.js.map +1 -1
- package/dist/services/moonraker/dto/rollover-logs.dto.js +1 -6
- package/dist/services/moonraker/dto/rpc/json-rpc-error.dto.js +1 -6
- package/dist/services/moonraker/dto/rpc/json-rpc-request.dto.js +1 -6
- package/dist/services/moonraker/dto/rpc/json-rpc-response.dto.js +1 -6
- package/dist/services/moonraker/dto/server/server-config.dto.js +1 -6
- package/dist/services/moonraker/dto/server/server-info.dto.js +7 -14
- package/dist/services/moonraker/dto/server/server-info.dto.js.map +1 -1
- package/dist/services/moonraker/dto/server-announcements/announcement-action.dto.js +1 -6
- package/dist/services/moonraker/dto/server-announcements/announcement-entry-id.dto.js +1 -6
- package/dist/services/moonraker/dto/server-announcements/announcement-feeds.dto.js +1 -6
- package/dist/services/moonraker/dto/server-announcements/announcement-list.dto.js +1 -6
- package/dist/services/moonraker/dto/server-files/server-file-directory-action.dto.js +1 -6
- package/dist/services/moonraker/dto/server-files/server-file-directory-info.dto.js +1 -6
- package/dist/services/moonraker/dto/server-files/server-file-metadata.dto.js +1 -6
- package/dist/services/moonraker/dto/server-files/server-file-root.dto.js +1 -6
- package/dist/services/moonraker/dto/server-files/server-file-thumbnail.dto.js +1 -6
- package/dist/services/moonraker/dto/server-files/server-file-zip-action.dto.js +1 -6
- package/dist/services/moonraker/dto/server-files/server-file.dto.js +1 -6
- package/dist/services/moonraker/dto/server-history/history-job.dto.js +1 -6
- package/dist/services/moonraker/dto/server-history/history-last-totals.dto.js +1 -6
- package/dist/services/moonraker/dto/server-history/history-list.dto.js +1 -6
- package/dist/services/moonraker/dto/server-history/history-totals.dto.js +1 -6
- package/dist/services/moonraker/dto/server-history/job.dto.js +6 -21
- package/dist/services/moonraker/dto/server-history/job.dto.js.map +1 -1
- package/dist/services/moonraker/dto/server-sensors/sensor-info.dto.js +1 -6
- package/dist/services/moonraker/dto/server-sensors/sensor-list.dto.js +1 -6
- package/dist/services/moonraker/dto/server-sensors/sensor-measurements.dto.js +1 -6
- package/dist/services/moonraker/dto/server-webcams/webcam-item.dto.js +1 -6
- package/dist/services/moonraker/dto/server-webcams/webcam-list.dto.js +1 -6
- package/dist/services/moonraker/dto/server-webcams/webcam-test.dto.js +1 -6
- package/dist/services/moonraker/dto/spoolman/spoolman-active-spool.dto.js +1 -6
- package/dist/services/moonraker/dto/spoolman/spoolman-proxy-request.dto.js +1 -6
- package/dist/services/moonraker/dto/spoolman/spoolman-response.dto.js +1 -6
- package/dist/services/moonraker/dto/spoolman/spoolman-status.dto.js +1 -6
- package/dist/services/moonraker/dto/sudo-info.dto.js +1 -6
- package/dist/services/moonraker/dto/sudo-response.dto.js +1 -6
- package/dist/services/moonraker/dto/temperature-store.dto.js +1 -6
- package/dist/services/moonraker/dto/websocket/connection-identify-response.dto.js +1 -6
- package/dist/services/moonraker/dto/websocket/connection-identify.dto.js +1 -6
- package/dist/services/moonraker/dto/websocket/json-rpc-event.dto.js +1 -6
- package/dist/services/moonraker/dto/websocket/message.types.js +1 -6
- package/dist/services/moonraker/dto/websocket/methods.js +29 -44
- package/dist/services/moonraker/dto/websocket/methods.js.map +1 -1
- package/dist/services/moonraker/dto/websocket/notify-active-spool-set.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-agent-event.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-announcement-update.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-announcement.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-button-event.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-filelist-changed.params.js +11 -18
- package/dist/services/moonraker/dto/websocket/notify-filelist-changed.params.js.map +1 -1
- package/dist/services/moonraker/dto/websocket/notify-history-changed.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-job-queue-changed.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-proc-stat-update.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-sensor-update.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-service-state-changed.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-spoolman-status-changed.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-sudo-alert.params.js +1 -6
- package/dist/services/moonraker/dto/websocket/notify-update-response.params.js +7 -22
- package/dist/services/moonraker/dto/websocket/notify-update-response.params.js.map +1 -1
- package/dist/services/moonraker/dto/websocket/notify-user-change.params.js +1 -6
- package/dist/services/moonraker/moonraker-websocket.adapter.js +313 -348
- package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
- package/dist/services/moonraker/moonraker.client.js +536 -559
- package/dist/services/moonraker/moonraker.client.js.map +1 -1
- package/dist/services/moonraker.api.js +167 -192
- package/dist/services/moonraker.api.js.map +1 -1
- package/dist/services/octoprint/constants/firmware-update-settings.constants.js +19 -28
- package/dist/services/octoprint/constants/firmware-update-settings.constants.js.map +1 -1
- package/dist/services/octoprint/constants/octoprint-service.constants.js +3 -30
- package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -1
- package/dist/services/octoprint/constants/octoprint-websocket.constants.js +41 -56
- package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -1
- package/dist/services/octoprint/dto/access/user-list.dto.js +1 -6
- package/dist/services/octoprint/dto/access/user.dto.js +1 -6
- package/dist/services/octoprint/dto/auth/current-user.dto.js +1 -6
- package/dist/services/octoprint/dto/auth/login.dto.js +1 -6
- package/dist/services/octoprint/dto/connection/connection-state.type.js +23 -30
- package/dist/services/octoprint/dto/connection/connection-state.type.js.map +1 -1
- package/dist/services/octoprint/dto/connection/connection.dto.js +1 -6
- package/dist/services/octoprint/dto/events/client-authed.dto.js +1 -6
- package/dist/services/octoprint/dto/events/client-closed.dto.js +1 -6
- package/dist/services/octoprint/dto/events/client-opened.dto.js +1 -6
- package/dist/services/octoprint/dto/events/dwelling.dto.js +1 -6
- package/dist/services/octoprint/dto/events/file-added.dto.js +1 -6
- package/dist/services/octoprint/dto/events/file-deselected.dto.js +1 -6
- package/dist/services/octoprint/dto/events/file-removed.dto.js +1 -6
- package/dist/services/octoprint/dto/events/folder-added.dto.js +1 -6
- package/dist/services/octoprint/dto/events/home.dto.js +1 -6
- package/dist/services/octoprint/dto/events/metadata-analysis-finished.dto.js +1 -6
- package/dist/services/octoprint/dto/events/metadata-analysis-started.dto.js +1 -6
- package/dist/services/octoprint/dto/events/metadata-statistics-updated.dto.js +1 -6
- package/dist/services/octoprint/dto/events/position-update.dto.js +1 -6
- package/dist/services/octoprint/dto/events/print-cancelled.dto.js +1 -6
- package/dist/services/octoprint/dto/events/print-cancelling.dto.js +1 -6
- package/dist/services/octoprint/dto/events/print-done.dto.js +1 -6
- package/dist/services/octoprint/dto/events/print-failed.dto.js +1 -6
- package/dist/services/octoprint/dto/events/print-paused.dto.js +1 -6
- package/dist/services/octoprint/dto/events/print-resumed.dto.js +1 -6
- package/dist/services/octoprint/dto/events/print-started.dto.js +1 -6
- package/dist/services/octoprint/dto/events/printer-state-changed.dto.js +1 -6
- package/dist/services/octoprint/dto/events/transfer-done.dto.js +1 -6
- package/dist/services/octoprint/dto/events/transfer-started.dto.js +1 -6
- package/dist/services/octoprint/dto/events/updated-files.dto.js +1 -6
- package/dist/services/octoprint/dto/events/upload.dto.js +1 -6
- package/dist/services/octoprint/dto/events/user-logged-in.dto.js +1 -6
- package/dist/services/octoprint/dto/events/z-change.dto.js +1 -6
- package/dist/services/octoprint/dto/files/gcode-analysis.dto.js +1 -6
- package/dist/services/octoprint/dto/files/octoprint-file.dto.js +1 -6
- package/dist/services/octoprint/dto/files/octoprint-files-response.dto.js +1 -6
- package/dist/services/octoprint/dto/job/current-job.dto.js +8 -15
- package/dist/services/octoprint/dto/job/current-job.dto.js.map +1 -1
- package/dist/services/octoprint/dto/job/job.dto.js +1 -6
- package/dist/services/octoprint/dto/octoprint-event.dto.js +21 -39
- package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
- package/dist/services/octoprint/dto/printer/busy-file.dto.js +1 -6
- package/dist/services/octoprint/dto/printer/current-printer-state.dto.js +1 -6
- package/dist/services/octoprint/dto/printer/flags.dto.js +1 -6
- package/dist/services/octoprint/dto/printer/markings.dto.js +1 -6
- package/dist/services/octoprint/dto/printer/progress.dto.js +1 -6
- package/dist/services/octoprint/dto/printer/resends.dto.js +1 -6
- package/dist/services/octoprint/dto/printer/state.dto.js +1 -6
- package/dist/services/octoprint/dto/printer/temps.dto.js +1 -6
- package/dist/services/octoprint/dto/rest/error.dto.js +1 -6
- package/dist/services/octoprint/dto/server/server.dto.js +1 -6
- package/dist/services/octoprint/dto/server/version.dto.js +1 -6
- package/dist/services/octoprint/dto/settings/serial-settings.dto.js +1 -6
- package/dist/services/octoprint/dto/settings/settings-parts.type.js +1 -6
- package/dist/services/octoprint/dto/settings/settings.dto.js +1 -6
- package/dist/services/octoprint/dto/settings/virtual-printer-settings.dto.js +1 -6
- package/dist/services/octoprint/dto/system/system-info.dto.js +32 -39
- package/dist/services/octoprint/dto/system/system-info.dto.js.map +1 -1
- package/dist/services/octoprint/dto/websocket/connection-message.dto.js +1 -6
- package/dist/services/octoprint/dto/websocket/current-message.dto.js +1 -6
- package/dist/services/octoprint/dto/websocket/event-message.dto.js +1 -6
- package/dist/services/octoprint/dto/websocket/event.type.js +42 -49
- package/dist/services/octoprint/dto/websocket/event.type.js.map +1 -1
- package/dist/services/octoprint/dto/websocket/history-message.dto.js +1 -6
- package/dist/services/octoprint/dto/websocket/plugin-message.dto.js +1 -6
- package/dist/services/octoprint/dto/websocket/timelapse-message.dto.js +1 -6
- package/dist/services/octoprint/octoprint-api.routes.js +77 -94
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
- package/dist/services/octoprint/octoprint-websocket.adapter.js +265 -315
- package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
- package/dist/services/octoprint/octoprint.client.js +220 -261
- package/dist/services/octoprint/octoprint.client.js.map +1 -1
- package/dist/services/octoprint/utils/api.utils.js +15 -32
- package/dist/services/octoprint/utils/api.utils.js.map +1 -1
- package/dist/services/octoprint/utils/file.utils.js +44 -67
- package/dist/services/octoprint/utils/file.utils.js.map +1 -1
- package/dist/services/octoprint/utils/octoprint-http-client.builder.js +16 -29
- package/dist/services/octoprint/utils/octoprint-http-client.builder.js.map +1 -1
- package/dist/services/octoprint.api.js +113 -128
- package/dist/services/octoprint.api.js.map +1 -1
- package/dist/services/orm/base.interface.js +1 -6
- package/dist/services/orm/base.service.js +57 -73
- package/dist/services/orm/base.service.js.map +1 -1
- package/dist/services/orm/camera-stream.service.js +21 -27
- package/dist/services/orm/camera-stream.service.js.map +1 -1
- package/dist/services/orm/floor-position.service.js +42 -49
- package/dist/services/orm/floor-position.service.js.map +1 -1
- package/dist/services/orm/floor.service.js +110 -138
- package/dist/services/orm/floor.service.js.map +1 -1
- package/dist/services/orm/permission.service.js +16 -23
- package/dist/services/orm/permission.service.js.map +1 -1
- package/dist/services/orm/print-job.service.js +443 -545
- package/dist/services/orm/print-job.service.js.map +1 -1
- package/dist/services/orm/printer-maintenance-log.service.js +102 -149
- package/dist/services/orm/printer-maintenance-log.service.js.map +1 -1
- package/dist/services/orm/printer-tag.service.js +93 -118
- package/dist/services/orm/printer-tag.service.js.map +1 -1
- package/dist/services/orm/printer.service.js +110 -158
- package/dist/services/orm/printer.service.js.map +1 -1
- package/dist/services/orm/refresh-token.service.js +69 -99
- package/dist/services/orm/refresh-token.service.js.map +1 -1
- package/dist/services/orm/role.service.js +99 -116
- package/dist/services/orm/role.service.js.map +1 -1
- package/dist/services/orm/settings.service.js +84 -94
- package/dist/services/orm/settings.service.js.map +1 -1
- package/dist/services/orm/user-role.service.js +39 -53
- package/dist/services/orm/user-role.service.js.map +1 -1
- package/dist/services/orm/user.service.js +142 -189
- package/dist/services/orm/user.service.js.map +1 -1
- package/dist/services/print-file-downloader.service.js +153 -167
- package/dist/services/print-file-downloader.service.js.map +1 -1
- package/dist/services/print-queue.service.js +240 -326
- package/dist/services/print-queue.service.js.map +1 -1
- package/dist/services/printer-api.factory.js +26 -43
- package/dist/services/printer-api.factory.js.map +1 -1
- package/dist/services/printer-api.interface.js +23 -53
- package/dist/services/printer-api.interface.js.map +1 -1
- package/dist/services/prusa-link/constants/prusalink-event.dto.js +9 -16
- package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -1
- package/dist/services/prusa-link/constants/prusalink.constants.js +4 -11
- package/dist/services/prusa-link/constants/prusalink.constants.js.map +1 -1
- package/dist/services/prusa-link/dto/file-response.dto.js +1 -6
- package/dist/services/prusa-link/dto/file.dto.js +1 -6
- package/dist/services/prusa-link/dto/job-state.dto.js +1 -6
- package/dist/services/prusa-link/dto/printer-state.dto.js +1 -6
- package/dist/services/prusa-link/dto/status.dto.js +1 -6
- package/dist/services/prusa-link/dto/version.dto.js +1 -6
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +141 -157
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
- package/dist/services/prusa-link/prusa-link.api.js +206 -240
- package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
- package/dist/services/prusa-link/utils/digest-auth.params.js +1 -6
- package/dist/services/prusa-link/utils/digest-auth.util.js +17 -24
- package/dist/services/prusa-link/utils/digest-auth.util.js.map +1 -1
- package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js +92 -129
- package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -1
- package/dist/services/socket.factory.js +21 -36
- package/dist/services/socket.factory.js.map +1 -1
- package/dist/services/task-manager.service.js +190 -174
- package/dist/services/task-manager.service.js.map +1 -1
- package/dist/services/typeorm/typeorm.service.js +31 -46
- package/dist/services/typeorm/typeorm.service.js.map +1 -1
- package/dist/services/validators/floor-service.validation.js +26 -63
- package/dist/services/validators/floor-service.validation.js.map +1 -1
- package/dist/services/validators/print-job.validation.js +11 -26
- package/dist/services/validators/print-job.validation.js.map +1 -1
- package/dist/services/validators/printer-maintenance-log.validation.js +17 -37
- package/dist/services/validators/printer-maintenance-log.validation.js.map +1 -1
- package/dist/services/validators/printer-service.validation.js +60 -125
- package/dist/services/validators/printer-service.validation.js.map +1 -1
- package/dist/services/validators/settings-service.validation.js +46 -106
- package/dist/services/validators/settings-service.validation.js.map +1 -1
- package/dist/services/validators/user-service.validation.js +19 -36
- package/dist/services/validators/user-service.validation.js.map +1 -1
- package/dist/services/validators/yaml-service.validation.js +96 -132
- package/dist/services/validators/yaml-service.validation.js.map +1 -1
- package/dist/services/websocket-adapter.interface.js +1 -6
- package/dist/shared/default-http-client.builder.js +74 -92
- package/dist/shared/default-http-client.builder.js.map +1 -1
- package/dist/shared/dtos/api-state.type.js +8 -15
- package/dist/shared/dtos/api-state.type.js.map +1 -1
- package/dist/shared/dtos/socket-login.dto.js +1 -6
- package/dist/shared/dtos/socket-state.type.js +11 -18
- package/dist/shared/dtos/socket-state.type.js.map +1 -1
- package/dist/shared/load-controllers.js +41 -19
- package/dist/shared/load-controllers.js.map +1 -1
- package/dist/shared/runtime-settings.migration.js +43 -50
- package/dist/shared/runtime-settings.migration.js.map +1 -1
- package/dist/shared/websocket-rpc-extended.adapter.js +74 -75
- package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
- package/dist/shared/websocket.adapter.js +78 -63
- package/dist/shared/websocket.adapter.js.map +1 -1
- package/dist/state/file-upload-tracker.cache.js +63 -75
- package/dist/state/file-upload-tracker.cache.js.map +1 -1
- package/dist/state/floor.store.js +77 -89
- package/dist/state/floor.store.js.map +1 -1
- package/dist/state/printer-events.cache.js +237 -295
- package/dist/state/printer-events.cache.js.map +1 -1
- package/dist/state/printer-socket.store.js +156 -174
- package/dist/state/printer-socket.store.js.map +1 -1
- package/dist/state/printer-thumbnail.cache.js +129 -130
- package/dist/state/printer-thumbnail.cache.js.map +1 -1
- package/dist/state/printer.cache.js +87 -102
- package/dist/state/printer.cache.js.map +1 -1
- package/dist/state/settings.store.js +211 -234
- package/dist/state/settings.store.js.map +1 -1
- package/dist/state/socket-io.gateway.js +58 -87
- package/dist/state/socket-io.gateway.js.map +1 -1
- package/dist/state/test-printer-socket.store.js +116 -137
- package/dist/state/test-printer-socket.store.js.map +1 -1
- package/dist/state/validation/create-test-printer.validation.js +14 -21
- package/dist/state/validation/create-test-printer.validation.js.map +1 -1
- package/dist/task.presets.js +30 -37
- package/dist/task.presets.js.map +1 -1
- package/dist/tasks/boot.task.js +100 -128
- package/dist/tasks/boot.task.js.map +1 -1
- package/dist/tasks/client-bundle.task.js +20 -28
- package/dist/tasks/client-bundle.task.js.map +1 -1
- package/dist/tasks/print-job-analysis.task.js +88 -113
- package/dist/tasks/print-job-analysis.task.js.map +1 -1
- package/dist/tasks/printer-websocket-restore.task.js +41 -54
- package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
- package/dist/tasks/printer-websocket.task.js +11 -19
- package/dist/tasks/printer-websocket.task.js.map +1 -1
- package/dist/tasks/socketio.task.js +35 -53
- package/dist/tasks/socketio.task.js.map +1 -1
- package/dist/tasks/software-update.task.js +12 -20
- package/dist/tasks/software-update.task.js.map +1 -1
- package/dist/tasks.js +27 -41
- package/dist/tasks.js.map +1 -1
- package/dist/types/express/index.d.js +1 -6
- package/dist/types/virtual-modules.d.js +1 -0
- package/dist/utils/array.util.js +9 -24
- package/dist/utils/array.util.js.map +1 -1
- package/dist/utils/bgcode/bgcode-thumbnail.parser.js +26 -44
- package/dist/utils/bgcode/bgcode-thumbnail.parser.js.map +1 -1
- package/dist/utils/bgcode/bgcode.constants.js +9 -45
- package/dist/utils/bgcode/bgcode.constants.js.map +1 -1
- package/dist/utils/bgcode/bgcode.types.js +57 -106
- package/dist/utils/bgcode/bgcode.types.js.map +1 -1
- package/dist/utils/bgcode/bgcode.utils.js +167 -256
- package/dist/utils/bgcode/bgcode.utils.js.map +1 -1
- package/dist/utils/bgcode/heatshrink-decoder.js +130 -170
- package/dist/utils/bgcode/heatshrink-decoder.js.map +1 -1
- package/dist/utils/bgcode/png-encoder.js +53 -66
- package/dist/utils/bgcode/png-encoder.js.map +1 -1
- package/dist/utils/bgcode/qoi-decoder.js +116 -135
- package/dist/utils/bgcode/qoi-decoder.js.map +1 -1
- package/dist/utils/cache/key-diff.cache.js +56 -85
- package/dist/utils/cache/key-diff.cache.js.map +1 -1
- package/dist/utils/correlation-token.util.js +4 -11
- package/dist/utils/correlation-token.util.js.map +1 -1
- package/dist/utils/crypto.utils.js +7 -23
- package/dist/utils/crypto.utils.js.map +1 -1
- package/dist/utils/env.utils.js +14 -49
- package/dist/utils/env.utils.js.map +1 -1
- package/dist/utils/error.utils.js +4 -11
- package/dist/utils/error.utils.js.map +1 -1
- package/dist/utils/fs.utils.js +26 -49
- package/dist/utils/fs.utils.js.map +1 -1
- package/dist/utils/gcode.utils.js +30 -43
- package/dist/utils/gcode.utils.js.map +1 -1
- package/dist/utils/image-dimensions.js +39 -54
- package/dist/utils/image-dimensions.js.map +1 -1
- package/dist/utils/job-stats.util.js +41 -72
- package/dist/utils/job-stats.util.js.map +1 -1
- package/dist/utils/normalize-url.js +135 -203
- package/dist/utils/normalize-url.js.map +1 -1
- package/dist/utils/parsers/3mf.parser.js +298 -365
- package/dist/utils/parsers/3mf.parser.js.map +1 -1
- package/dist/utils/parsers/bgcode.parser.js +149 -202
- package/dist/utils/parsers/bgcode.parser.js.map +1 -1
- package/dist/utils/parsers/gcode.parser.js +200 -263
- package/dist/utils/parsers/gcode.parser.js.map +1 -1
- package/dist/utils/parsers/parser.types.js +1 -6
- package/dist/utils/pretty-print.utils.js +5 -20
- package/dist/utils/pretty-print.utils.js.map +1 -1
- package/dist/utils/semver.utils.js +10 -26
- package/dist/utils/semver.utils.js.map +1 -1
- package/dist/utils/swagger/decorators.js +14 -32
- package/dist/utils/swagger/decorators.js.map +1 -1
- package/dist/utils/swagger/generator.js +151 -194
- package/dist/utils/swagger/generator.js.map +1 -1
- package/dist/utils/swagger/swagger.js +40 -51
- package/dist/utils/swagger/swagger.js.map +1 -1
- package/dist/utils/thumbnail.util.js +11 -20
- package/dist/utils/thumbnail.util.js.map +1 -1
- package/dist/utils/time.utils.js +4 -12
- package/dist/utils/time.utils.js.map +1 -1
- package/dist/utils/url.utils.js +9 -27
- package/dist/utils/url.utils.js.map +1 -1
- package/package.json +79 -90
- package/packages/consoles/package.json +44 -0
- package/packages/consoles/tsconfig.json +23 -0
- package/packages/consoles/vite.config.ts +15 -0
- package/tsconfig.json +10 -6
- package/vite.config.ts +62 -0
- package/.swcrc +0 -33
- package/.yarn/releases/yarn-4.12.0.cjs +0 -942
- package/biome.json +0 -36
- package/dist/consoles/bambu-mqtt-diagnostic.console.js +0 -565
- package/dist/consoles/bambu-mqtt-diagnostic.console.js.map +0 -1
- package/dist/consoles/download-github-releases.js +0 -50
- package/dist/consoles/download-github-releases.js.map +0 -1
- package/dist/consoles/gcode-scanner-poc.console.js +0 -52
- package/dist/consoles/gcode-scanner-poc.console.js.map +0 -1
- package/dist/consoles/launch-http-servers.js +0 -31
- package/dist/consoles/launch-http-servers.js.map +0 -1
- package/dist/consoles/mock-bambu.server.js +0 -319
- package/dist/consoles/mock-bambu.server.js.map +0 -1
- package/dist/consoles/mock-camera/default-image.js +0 -13
- package/dist/consoles/mock-camera/default-image.js.map +0 -1
- package/dist/consoles/mock-camera/mock-camera.server.js +0 -160
- package/dist/consoles/mock-camera/mock-camera.server.js.map +0 -1
- package/dist/consoles/mock-octoprint.server.js +0 -499
- package/dist/consoles/mock-octoprint.server.js.map +0 -1
- package/dist/consoles/mock-prusalink.server.js +0 -57
- package/dist/consoles/mock-prusalink.server.js.map +0 -1
- package/dist/consoles/moonraker-test.console.js +0 -3
- package/dist/consoles/moonraker-test.console.js.map +0 -1
- package/dist/consoles/utils/api-messages.js +0 -856
- package/dist/consoles/utils/api-messages.js.map +0 -1
- package/dist/consoles/utils/delayed-memory.storage.js +0 -42
- package/dist/consoles/utils/delayed-memory.storage.js.map +0 -1
- package/dist/consoles/utils/ws-messages.js +0 -88
- package/dist/consoles/utils/ws-messages.js.map +0 -1
- package/dist/entities/index.js.map +0 -1
- package/dist/services/bambu/mqtt-message.types.js.map +0 -1
- package/dist/services/interfaces/auth.service.interface.js.map +0 -1
- package/dist/services/interfaces/camera-stream.service.interface.js.map +0 -1
- package/dist/services/interfaces/file-upload-tracker.interface.js.map +0 -1
- package/dist/services/interfaces/floor.service.interface.js.map +0 -1
- package/dist/services/interfaces/jwt.service.interface.js.map +0 -1
- package/dist/services/interfaces/permission.service.interface.js.map +0 -1
- package/dist/services/interfaces/printer-file.dto.js.map +0 -1
- package/dist/services/interfaces/printer-maintenance-log.dto.js.map +0 -1
- package/dist/services/interfaces/printer-tag.service.interface.js.map +0 -1
- package/dist/services/interfaces/printer.service.interface.js.map +0 -1
- package/dist/services/interfaces/refresh-token.service.interface.js.map +0 -1
- package/dist/services/interfaces/role-service.interface.js.map +0 -1
- package/dist/services/interfaces/settings.service.interface.js.map +0 -1
- package/dist/services/interfaces/tag.dto.js.map +0 -1
- package/dist/services/interfaces/task.interfaces.js.map +0 -1
- package/dist/services/interfaces/user-service.interface.js.map +0 -1
- package/dist/services/moonraker/dto/access/access-info.dto.js.map +0 -1
- package/dist/services/moonraker/dto/access/access-login-refresh.dto.js.map +0 -1
- package/dist/services/moonraker/dto/access/access-login-result.dto.js.map +0 -1
- package/dist/services/moonraker/dto/access/access-user-result.dto.js.map +0 -1
- package/dist/services/moonraker/dto/access/access-user.dto.js.map +0 -1
- package/dist/services/moonraker/dto/database/database-namespace-item.dto.js.map +0 -1
- package/dist/services/moonraker/dto/database/database-namespace-list.dto.js.map +0 -1
- package/dist/services/moonraker/dto/gcode-help.dto.js.map +0 -1
- package/dist/services/moonraker/dto/gcode-store.dto.js.map +0 -1
- package/dist/services/moonraker/dto/job-queue/enqueue-job.dto.js.map +0 -1
- package/dist/services/moonraker/dto/job-queue/job-queue-status.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-device-power-device-state.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-device-power-devices.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-peripherals-canbus.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-peripherals-serial.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-peripherals-usb.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-peripherals-video.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-system-info.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-update-status.dto.js.map +0 -1
- package/dist/services/moonraker/dto/machine/machine-wled-strips.dto.js.map +0 -1
- package/dist/services/moonraker/dto/notifier-list.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/bed-mesh.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/configfile.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/display-status.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/extruder.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/fan.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/filament-motion-sensor.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/filament-switch-sensor.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/gcode-move.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/gcode.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/heater-bed.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/heaters.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/mcu.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/motion-report.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/output-pin.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/pause-resume.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/printer-object.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/printer-object.types.js.map +0 -1
- package/dist/services/moonraker/dto/objects/printer-objects-query.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/stepper-enable.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/system-stats.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/temperature-fan.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/temperature-sensor.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/toolhead.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/virtual-sdcard.dto.js.map +0 -1
- package/dist/services/moonraker/dto/objects/webhooks.dto.js.map +0 -1
- package/dist/services/moonraker/dto/octoprint-compat/api-job.dto.js.map +0 -1
- package/dist/services/moonraker/dto/octoprint-compat/api-login.dto.js.map +0 -1
- package/dist/services/moonraker/dto/octoprint-compat/api-printer.dto.js.map +0 -1
- package/dist/services/moonraker/dto/octoprint-compat/api-profiles.dto.js.map +0 -1
- package/dist/services/moonraker/dto/octoprint-compat/api-settings.dto.js.map +0 -1
- package/dist/services/moonraker/dto/octoprint-compat/api-version.dto.js.map +0 -1
- package/dist/services/moonraker/dto/octoprint-compat/server-version.dto.js.map +0 -1
- package/dist/services/moonraker/dto/printer-query-endstops.dto.js.map +0 -1
- package/dist/services/moonraker/dto/process-stats.dto.js.map +0 -1
- package/dist/services/moonraker/dto/rest/action-result.dto.js.map +0 -1
- package/dist/services/moonraker/dto/rest/error.dto.js.map +0 -1
- package/dist/services/moonraker/dto/rollover-logs.dto.js.map +0 -1
- package/dist/services/moonraker/dto/rpc/json-rpc-error.dto.js.map +0 -1
- package/dist/services/moonraker/dto/rpc/json-rpc-request.dto.js.map +0 -1
- package/dist/services/moonraker/dto/rpc/json-rpc-response.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server/server-config.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-announcements/announcement-action.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-announcements/announcement-entry-id.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-announcements/announcement-feeds.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-announcements/announcement-list.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-files/server-file-directory-action.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-files/server-file-directory-info.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-files/server-file-metadata.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-files/server-file-root.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-files/server-file-thumbnail.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-files/server-file-zip-action.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-files/server-file.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-history/history-job.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-history/history-last-totals.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-history/history-list.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-history/history-totals.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-sensors/sensor-info.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-sensors/sensor-list.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-sensors/sensor-measurements.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-webcams/webcam-item.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-webcams/webcam-list.dto.js.map +0 -1
- package/dist/services/moonraker/dto/server-webcams/webcam-test.dto.js.map +0 -1
- package/dist/services/moonraker/dto/spoolman/spoolman-active-spool.dto.js.map +0 -1
- package/dist/services/moonraker/dto/spoolman/spoolman-proxy-request.dto.js.map +0 -1
- package/dist/services/moonraker/dto/spoolman/spoolman-response.dto.js.map +0 -1
- package/dist/services/moonraker/dto/spoolman/spoolman-status.dto.js.map +0 -1
- package/dist/services/moonraker/dto/sudo-info.dto.js.map +0 -1
- package/dist/services/moonraker/dto/sudo-response.dto.js.map +0 -1
- package/dist/services/moonraker/dto/temperature-store.dto.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/connection-identify-response.dto.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/connection-identify.dto.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/json-rpc-event.dto.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/message.types.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-active-spool-set.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-agent-event.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-announcement-update.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-announcement.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-button-event.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-history-changed.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-job-queue-changed.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-proc-stat-update.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-sensor-update.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-service-state-changed.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-spoolman-status-changed.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-sudo-alert.params.js.map +0 -1
- package/dist/services/moonraker/dto/websocket/notify-user-change.params.js.map +0 -1
- package/dist/services/octoprint/dto/access/user-list.dto.js.map +0 -1
- package/dist/services/octoprint/dto/access/user.dto.js.map +0 -1
- package/dist/services/octoprint/dto/auth/current-user.dto.js.map +0 -1
- package/dist/services/octoprint/dto/auth/login.dto.js.map +0 -1
- package/dist/services/octoprint/dto/connection/connection.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/client-authed.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/client-closed.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/client-opened.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/dwelling.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/file-added.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/file-deselected.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/file-removed.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/folder-added.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/home.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/metadata-analysis-finished.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/metadata-analysis-started.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/metadata-statistics-updated.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/position-update.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/print-cancelled.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/print-cancelling.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/print-done.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/print-failed.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/print-paused.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/print-resumed.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/print-started.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/printer-state-changed.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/transfer-done.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/transfer-started.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/updated-files.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/upload.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/user-logged-in.dto.js.map +0 -1
- package/dist/services/octoprint/dto/events/z-change.dto.js.map +0 -1
- package/dist/services/octoprint/dto/files/gcode-analysis.dto.js.map +0 -1
- package/dist/services/octoprint/dto/files/octoprint-file.dto.js.map +0 -1
- package/dist/services/octoprint/dto/files/octoprint-files-response.dto.js.map +0 -1
- package/dist/services/octoprint/dto/job/job.dto.js.map +0 -1
- package/dist/services/octoprint/dto/printer/busy-file.dto.js.map +0 -1
- package/dist/services/octoprint/dto/printer/current-printer-state.dto.js.map +0 -1
- package/dist/services/octoprint/dto/printer/flags.dto.js.map +0 -1
- package/dist/services/octoprint/dto/printer/markings.dto.js.map +0 -1
- package/dist/services/octoprint/dto/printer/progress.dto.js.map +0 -1
- package/dist/services/octoprint/dto/printer/resends.dto.js.map +0 -1
- package/dist/services/octoprint/dto/printer/state.dto.js.map +0 -1
- package/dist/services/octoprint/dto/printer/temps.dto.js.map +0 -1
- package/dist/services/octoprint/dto/rest/error.dto.js.map +0 -1
- package/dist/services/octoprint/dto/server/server.dto.js.map +0 -1
- package/dist/services/octoprint/dto/server/version.dto.js.map +0 -1
- package/dist/services/octoprint/dto/settings/serial-settings.dto.js.map +0 -1
- package/dist/services/octoprint/dto/settings/settings-parts.type.js.map +0 -1
- package/dist/services/octoprint/dto/settings/settings.dto.js.map +0 -1
- package/dist/services/octoprint/dto/settings/virtual-printer-settings.dto.js.map +0 -1
- package/dist/services/octoprint/dto/websocket/connection-message.dto.js.map +0 -1
- package/dist/services/octoprint/dto/websocket/current-message.dto.js.map +0 -1
- package/dist/services/octoprint/dto/websocket/event-message.dto.js.map +0 -1
- package/dist/services/octoprint/dto/websocket/history-message.dto.js.map +0 -1
- package/dist/services/octoprint/dto/websocket/plugin-message.dto.js.map +0 -1
- package/dist/services/octoprint/dto/websocket/timelapse-message.dto.js.map +0 -1
- package/dist/services/orm/base.interface.js.map +0 -1
- package/dist/services/prusa-link/dto/file-response.dto.js.map +0 -1
- package/dist/services/prusa-link/dto/file.dto.js.map +0 -1
- package/dist/services/prusa-link/dto/job-state.dto.js.map +0 -1
- package/dist/services/prusa-link/dto/printer-state.dto.js.map +0 -1
- package/dist/services/prusa-link/dto/status.dto.js.map +0 -1
- package/dist/services/prusa-link/dto/version.dto.js.map +0 -1
- package/dist/services/prusa-link/utils/digest-auth.params.js.map +0 -1
- package/dist/services/websocket-adapter.interface.js.map +0 -1
- package/dist/shared/dtos/socket-login.dto.js.map +0 -1
- package/dist/types/express/index.d.js.map +0 -1
- 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":"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"}
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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"],"
|
|
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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"}
|