@fdm-monster/server 1.9.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.template +8 -7
- package/.yarn/install-state.gz +0 -0
- package/CONTRIBUTING.md +5 -5
- package/README.md +9 -8
- package/RELEASE_NOTES.MD +52 -0
- package/SECURITY.md +1 -1
- package/biome.json +8 -5
- package/dist/consoles/download-github-releases.js +3 -3
- package/dist/consoles/launch-http-servers.js +4 -4
- package/dist/consoles/launch-http-servers.js.map +1 -1
- package/dist/consoles/mock-bambu.server.js +50 -30
- package/dist/consoles/mock-bambu.server.js.map +1 -1
- package/dist/consoles/mock-camera/default-image.js +13 -0
- package/dist/consoles/mock-camera/default-image.js.map +1 -0
- package/dist/consoles/mock-camera/mock-camera.server.js +160 -0
- package/dist/consoles/mock-camera/mock-camera.server.js.map +1 -0
- package/dist/consoles/mock-octoprint.server.js +281 -73
- package/dist/consoles/mock-octoprint.server.js.map +1 -1
- package/dist/consoles/mock-prusalink.server.js +17 -17
- package/dist/consoles/mock-prusalink.server.js.map +1 -1
- package/dist/consoles/typeorm-create.js +135 -0
- package/dist/consoles/typeorm-create.js.map +1 -0
- package/dist/consoles/typeorm-generate.js +8 -8
- package/dist/consoles/typeorm-generate.js.map +1 -1
- package/dist/consoles/utils/api-messages.js.map +1 -1
- package/dist/constants/authorization.constants.js +25 -31
- package/dist/constants/authorization.constants.js.map +1 -1
- package/dist/constants/event.constants.js.map +1 -1
- package/dist/constants/server-settings.constants.js +3 -19
- package/dist/constants/server-settings.constants.js.map +1 -1
- package/dist/container.js +43 -59
- package/dist/container.js.map +1 -1
- package/dist/container.tokens.js +9 -6
- package/dist/container.tokens.js.map +1 -1
- package/dist/controllers/auth.controller.js +1 -1
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/controllers/batch-call.controller.js +7 -25
- package/dist/controllers/batch-call.controller.js.map +1 -1
- package/dist/controllers/file-storage.controller.js +248 -0
- package/dist/controllers/file-storage.controller.js.map +1 -0
- package/dist/controllers/first-time-setup.controller.js +6 -5
- package/dist/controllers/first-time-setup.controller.js.map +1 -1
- package/dist/controllers/floor.controller.js +12 -12
- package/dist/controllers/floor.controller.js.map +1 -1
- package/dist/controllers/metrics.controller.js.map +1 -1
- package/dist/controllers/print-job.controller.js +666 -0
- package/dist/controllers/print-job.controller.js.map +1 -0
- package/dist/controllers/print-queue.controller.js +375 -0
- package/dist/controllers/print-queue.controller.js.map +1 -0
- package/dist/controllers/printer-files.controller.js +88 -59
- package/dist/controllers/printer-files.controller.js.map +1 -1
- package/dist/controllers/printer-settings.controller.js +0 -21
- package/dist/controllers/printer-settings.controller.js.map +1 -1
- package/dist/controllers/{printer-group.controller.js → printer-tag.controller.js} +51 -34
- package/dist/controllers/printer-tag.controller.js.map +1 -0
- package/dist/controllers/printer.controller.js +21 -7
- package/dist/controllers/printer.controller.js.map +1 -1
- package/dist/controllers/server-private.controller.js +2 -1
- package/dist/controllers/server-private.controller.js.map +1 -1
- package/dist/controllers/server-public.controller.js +11 -15
- package/dist/controllers/server-public.controller.js.map +1 -1
- package/dist/controllers/settings.controller.js +0 -68
- package/dist/controllers/settings.controller.js.map +1 -1
- package/dist/controllers/slicer-compat.controller.js +216 -0
- package/dist/controllers/slicer-compat.controller.js.map +1 -0
- package/dist/controllers/user.controller.js +8 -12
- package/dist/controllers/user.controller.js.map +1 -1
- package/dist/controllers/validation/batch-controller.validation.js +13 -13
- package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
- package/dist/controllers/validation/generic.validation.js +4 -8
- package/dist/controllers/validation/generic.validation.js.map +1 -1
- package/dist/controllers/validation/printer-files-controller.validation.js +2 -2
- package/dist/controllers/validation/user-controller.validation.js +14 -9
- package/dist/controllers/validation/user-controller.validation.js.map +1 -1
- package/dist/data-source.js +25 -12
- package/dist/data-source.js.map +1 -1
- package/dist/entities/camera-stream.entity.js +2 -1
- package/dist/entities/camera-stream.entity.js.map +1 -1
- package/dist/entities/floor.entity.js +3 -5
- package/dist/entities/floor.entity.js.map +1 -1
- package/dist/entities/index.js +15 -11
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/print-job.entity.js +195 -0
- package/dist/entities/print-job.entity.js.map +1 -0
- package/dist/entities/{printer-group.entity.js → printer-tag.entity.js} +17 -17
- package/dist/entities/printer-tag.entity.js.map +1 -0
- package/dist/entities/printer.entity.js +4 -10
- package/dist/entities/printer.entity.js.map +1 -1
- package/dist/entities/settings.entity.js +3 -12
- package/dist/entities/settings.entity.js.map +1 -1
- package/dist/entities/{group.entity.js → tag.entity.js} +15 -8
- package/dist/entities/tag.entity.js.map +1 -0
- package/dist/handlers/logging/file-logging.transport.js.map +1 -1
- package/dist/handlers/logging/static.logger.js.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/middleware/authenticate.js +4 -4
- package/dist/middleware/authenticate.js.map +1 -1
- package/dist/middleware/database.js +1 -1
- package/dist/middleware/exception.filter.js +114 -90
- package/dist/middleware/exception.filter.js.map +1 -1
- package/dist/middleware/global.middleware.js +10 -18
- package/dist/middleware/global.middleware.js.map +1 -1
- package/dist/middleware/param-converter.middleware.js +5 -13
- package/dist/middleware/param-converter.middleware.js.map +1 -1
- package/dist/middleware/passport.js +2 -2
- package/dist/middleware/passport.js.map +1 -1
- package/dist/middleware/printer-resolver.js.map +1 -1
- package/dist/middleware/printer.js +3 -2
- package/dist/middleware/printer.js.map +1 -1
- package/dist/middleware/socketio.middleware.js.map +1 -1
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +1 -1
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -1
- package/dist/migrations/1766576698569-DropPermissions.js +28 -0
- package/dist/migrations/1766576698569-DropPermissions.js.map +1 -0
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js +186 -0
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -0
- package/dist/migrations/1767279607392-DropCustomGcode.js +31 -0
- package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -0
- package/dist/migrations/1767291804417-DropPrintCompletions.js +37 -0
- package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -0
- package/dist/migrations/1767352862576-DropSettingsFileClean.js +88 -0
- package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -0
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js +107 -0
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -0
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js +62 -0
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -0
- package/dist/migrations/1767432108916-RenameGroupToTag.js +86 -0
- package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -0
- package/dist/migrations/1767451444137-AddPrintJob.js +207 -0
- package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -0
- package/dist/server.constants.js +9 -17
- package/dist/server.constants.js.map +1 -1
- package/dist/server.core.js +3 -7
- package/dist/server.core.js.map +1 -1
- package/dist/server.env.js +4 -49
- package/dist/server.env.js.map +1 -1
- package/dist/server.host.js +26 -44
- package/dist/server.host.js.map +1 -1
- package/dist/services/authentication/auth.service.js.map +1 -1
- package/dist/services/authentication/jwt.service.js.map +1 -1
- package/dist/services/bambu/bambu-ftp.adapter.js +3 -3
- package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
- package/dist/services/bambu/bambu-mqtt.adapter.js +74 -77
- package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
- package/dist/services/bambu/bambu.client.js.map +1 -1
- package/dist/services/bambu.api.js +11 -0
- package/dist/services/bambu.api.js.map +1 -1
- package/dist/services/core/batch-call.service.js +0 -25
- package/dist/services/core/batch-call.service.js.map +1 -1
- package/dist/services/core/multer.service.js +5 -9
- package/dist/services/core/multer.service.js.map +1 -1
- package/dist/services/core/yaml.service.js +219 -187
- package/dist/services/core/yaml.service.js.map +1 -1
- package/dist/services/file-analysis.service.js +146 -0
- package/dist/services/file-analysis.service.js.map +1 -0
- package/dist/services/file-storage.service.js +386 -0
- package/dist/services/file-storage.service.js.map +1 -0
- package/dist/services/interfaces/camera-stream.dto.js +2 -2
- package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
- package/dist/services/interfaces/floor.dto.js +3 -3
- package/dist/services/interfaces/floor.dto.js.map +1 -1
- package/dist/services/interfaces/{printer-group.dto.js → printer-tag.dto.js} +9 -8
- package/dist/services/interfaces/printer-tag.dto.js.map +1 -0
- package/dist/services/interfaces/{print-completion.interface.js → printer-tag.service.interface.js} +1 -1
- package/dist/services/interfaces/{printer-group.service.interface.js.map → printer-tag.service.interface.js.map} +1 -1
- package/dist/services/interfaces/printer.dto.js +2 -2
- package/dist/services/interfaces/printer.dto.js.map +1 -1
- package/dist/services/interfaces/refresh-token.dto.js.map +1 -1
- package/dist/services/interfaces/role.dto.js.map +1 -1
- package/dist/services/interfaces/settings.dto.js +0 -1
- package/dist/services/interfaces/settings.dto.js.map +1 -1
- package/dist/services/interfaces/{group.dto.js → tag.dto.js} +1 -1
- package/dist/services/interfaces/tag.dto.js.map +1 -0
- package/dist/services/interfaces/user.dto.js.map +1 -1
- package/dist/services/moonraker/constants/moonraker-event.dto.js.map +1 -1
- package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
- package/dist/services/moonraker/moonraker.client.js.map +1 -1
- package/dist/services/moonraker.api.js +3 -0
- package/dist/services/moonraker.api.js.map +1 -1
- package/dist/services/octoprint/dto/files/gcode-analysis.dto.js.map +1 -0
- package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
- package/dist/services/octoprint/octoprint-api.routes.js +0 -7
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
- package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
- package/dist/services/octoprint/octoprint.client.js +0 -4
- package/dist/services/octoprint/octoprint.client.js.map +1 -1
- package/dist/services/octoprint.api.js +3 -0
- package/dist/services/octoprint.api.js.map +1 -1
- package/dist/services/orm/base.service.js.map +1 -1
- package/dist/services/orm/camera-stream.service.js.map +1 -1
- package/dist/services/orm/floor-position.service.js.map +1 -1
- package/dist/services/orm/floor.service.js +12 -19
- package/dist/services/orm/floor.service.js.map +1 -1
- package/dist/services/orm/permission.service.js +3 -54
- package/dist/services/orm/permission.service.js.map +1 -1
- package/dist/services/orm/print-job.service.js +539 -0
- package/dist/services/orm/print-job.service.js.map +1 -0
- package/dist/services/orm/printer-tag.service.js +120 -0
- package/dist/services/orm/printer-tag.service.js.map +1 -0
- package/dist/services/orm/printer.service.js.map +1 -1
- package/dist/services/orm/refresh-token.service.js.map +1 -1
- package/dist/services/orm/role.service.js +25 -39
- package/dist/services/orm/role.service.js.map +1 -1
- package/dist/services/orm/settings.service.js +4 -15
- package/dist/services/orm/settings.service.js.map +1 -1
- package/dist/services/orm/user.service.js +17 -13
- package/dist/services/orm/user.service.js.map +1 -1
- package/dist/services/print-file-downloader.service.js +169 -0
- package/dist/services/print-file-downloader.service.js.map +1 -0
- package/dist/services/print-queue.service.js +268 -0
- package/dist/services/print-queue.service.js.map +1 -0
- package/dist/services/printer-api.factory.js +1 -1
- package/dist/services/printer-api.factory.js.map +1 -1
- package/dist/services/printer-api.interface.js.map +1 -1
- package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -1
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +1 -3
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
- package/dist/services/prusa-link/prusa-link.api.js +4 -1
- package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
- package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -1
- package/dist/services/validators/floor-service.validation.js +25 -31
- package/dist/services/validators/floor-service.validation.js.map +1 -1
- package/dist/services/validators/print-job.validation.js +31 -0
- package/dist/services/validators/print-job.validation.js.map +1 -0
- package/dist/services/validators/settings-service.validation.js +0 -22
- package/dist/services/validators/settings-service.validation.js.map +1 -1
- package/dist/services/validators/user-service.validation.js +15 -10
- package/dist/services/validators/user-service.validation.js.map +1 -1
- package/dist/services/validators/yaml-service.validation.js +8 -14
- package/dist/services/validators/yaml-service.validation.js.map +1 -1
- package/dist/shared/load-controllers.js +2 -1
- package/dist/shared/load-controllers.js.map +1 -1
- package/dist/shared/runtime-settings.migration.js +1 -11
- package/dist/shared/runtime-settings.migration.js.map +1 -1
- package/dist/shared/websocket-rpc-extended.adapter.js +13 -4
- package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
- package/dist/shared/websocket.adapter.js.map +1 -1
- package/dist/state/file-upload-tracker.cache.js.map +1 -1
- package/dist/state/file.cache.js +6 -6
- package/dist/state/file.cache.js.map +1 -1
- package/dist/state/floor.store.js +3 -10
- package/dist/state/floor.store.js.map +1 -1
- package/dist/state/printer-events.cache.js +180 -20
- package/dist/state/printer-events.cache.js.map +1 -1
- package/dist/state/printer-files.store.js.map +1 -1
- package/dist/state/printer-socket.store.js +25 -20
- package/dist/state/printer-socket.store.js.map +1 -1
- package/dist/state/printer-thumbnail.cache.js +98 -188
- package/dist/state/printer-thumbnail.cache.js.map +1 -1
- package/dist/state/printer.cache.js +3 -13
- package/dist/state/printer.cache.js.map +1 -1
- package/dist/state/settings.store.js +4 -42
- package/dist/state/settings.store.js.map +1 -1
- package/dist/state/socket-io.gateway.js +1 -1
- package/dist/state/socket-io.gateway.js.map +1 -1
- package/dist/state/test-printer-socket.store.js +6 -3
- package/dist/state/test-printer-socket.store.js.map +1 -1
- package/dist/tasks/boot.task.js +11 -91
- package/dist/tasks/boot.task.js.map +1 -1
- package/dist/tasks/print-job-analysis.task.js +116 -0
- package/dist/tasks/print-job-analysis.task.js.map +1 -0
- package/dist/tasks/printer-files-load.task.js +29 -0
- package/dist/tasks/printer-files-load.task.js.map +1 -0
- package/dist/tasks/socketio.task.js +1 -1
- package/dist/tasks/socketio.task.js.map +1 -1
- package/dist/tasks.js +3 -2
- package/dist/tasks.js.map +1 -1
- package/dist/utils/cache/key-diff.cache.js +20 -61
- package/dist/utils/cache/key-diff.cache.js.map +1 -1
- package/dist/utils/parsers/3mf.parser.js +337 -0
- package/dist/utils/parsers/3mf.parser.js.map +1 -0
- package/dist/utils/parsers/bgcode.parser.js +223 -0
- package/dist/utils/parsers/bgcode.parser.js.map +1 -0
- package/dist/utils/parsers/gcode.parser.js +254 -0
- package/dist/utils/parsers/gcode.parser.js.map +1 -0
- package/dist/utils/swagger/decorators.js +39 -0
- package/dist/utils/swagger/decorators.js.map +1 -0
- package/dist/utils/swagger/generator.js +196 -0
- package/dist/utils/swagger/generator.js.map +1 -0
- package/dist/utils/swagger/swagger.js +93 -0
- package/dist/utils/swagger/swagger.js.map +1 -0
- package/package.json +24 -30
- package/dist/controllers/custom-gcode.controller.js +0 -150
- package/dist/controllers/custom-gcode.controller.js.map +0 -1
- package/dist/controllers/print-completion.controller.js +0 -118
- package/dist/controllers/print-completion.controller.js.map +0 -1
- package/dist/controllers/printer-group.controller.js.map +0 -1
- package/dist/entities/custom-gcode.entity.js +0 -49
- package/dist/entities/custom-gcode.entity.js.map +0 -1
- package/dist/entities/group.entity.js.map +0 -1
- package/dist/entities/permission.entity.js +0 -37
- package/dist/entities/permission.entity.js.map +0 -1
- package/dist/entities/print-completion.entity.js +0 -90
- package/dist/entities/print-completion.entity.js.map +0 -1
- package/dist/entities/printer-group.entity.js.map +0 -1
- package/dist/models/Auth/Permission.js +0 -20
- package/dist/models/Auth/Permission.js.map +0 -1
- package/dist/models/Auth/RefreshToken.js +0 -41
- package/dist/models/Auth/RefreshToken.js.map +0 -1
- package/dist/models/Auth/Role.js +0 -20
- package/dist/models/Auth/Role.js.map +0 -1
- package/dist/models/Auth/User.js +0 -49
- package/dist/models/Auth/User.js.map +0 -1
- package/dist/models/CameraStream.js +0 -49
- package/dist/models/CameraStream.js.map +0 -1
- package/dist/models/CustomGcode.js +0 -28
- package/dist/models/CustomGcode.js.map +0 -1
- package/dist/models/Floor.js +0 -33
- package/dist/models/Floor.js.map +0 -1
- package/dist/models/FloorPrinter.js +0 -38
- package/dist/models/FloorPrinter.js.map +0 -1
- package/dist/models/PrintCompletion.js +0 -40
- package/dist/models/PrintCompletion.js.map +0 -1
- package/dist/models/Printer.js +0 -78
- package/dist/models/Printer.js.map +0 -1
- package/dist/models/Settings.js +0 -150
- package/dist/models/Settings.js.map +0 -1
- package/dist/models/index.js +0 -54
- package/dist/models/index.js.map +0 -1
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js +0 -45
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +0 -1
- package/dist/mongo-migrations/20210907173950-printers-enabled.js +0 -35
- package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +0 -1
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js +0 -35
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +0 -1
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js +0 -60
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +0 -1
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js +0 -30
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +0 -1
- package/dist/mongo-migrations/20230716065316-user-remove-name.js +0 -30
- package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +0 -1
- package/dist/mongo-migrations/20231111081809-printer-flatten-name.js +0 -35
- package/dist/mongo-migrations/20231111081809-printer-flatten-name.js.map +0 -1
- package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js +0 -41
- package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js.map +0 -1
- package/dist/mongo-migrations/20231202183902-printer-files-simpler.js +0 -41
- package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +0 -1
- package/dist/services/interfaces/custom-gcode.dto.js +0 -18
- package/dist/services/interfaces/custom-gcode.dto.js.map +0 -1
- package/dist/services/interfaces/custom-gcode.service.interface.js +0 -6
- package/dist/services/interfaces/custom-gcode.service.interface.js.map +0 -1
- package/dist/services/interfaces/gcode-analysis.dto.js.map +0 -1
- package/dist/services/interfaces/group.dto.js.map +0 -1
- package/dist/services/interfaces/permission.dto.js +0 -16
- package/dist/services/interfaces/permission.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion-context.dto.js +0 -6
- package/dist/services/interfaces/print-completion-context.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion.dto.js +0 -38
- package/dist/services/interfaces/print-completion.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion.interface.js.map +0 -1
- package/dist/services/interfaces/printer-group.dto.js.map +0 -1
- package/dist/services/interfaces/printer-group.service.interface.js +0 -6
- package/dist/services/mongoose/camera-stream.service.js +0 -67
- package/dist/services/mongoose/camera-stream.service.js.map +0 -1
- package/dist/services/mongoose/custom-gcode.service.js +0 -50
- package/dist/services/mongoose/custom-gcode.service.js.map +0 -1
- package/dist/services/mongoose/floor.service.js +0 -139
- package/dist/services/mongoose/floor.service.js.map +0 -1
- package/dist/services/mongoose/permission.service.js +0 -73
- package/dist/services/mongoose/permission.service.js.map +0 -1
- package/dist/services/mongoose/print-completion.service.js +0 -134
- package/dist/services/mongoose/print-completion.service.js.map +0 -1
- package/dist/services/mongoose/print-completion.shared.js +0 -59
- package/dist/services/mongoose/print-completion.shared.js.map +0 -1
- package/dist/services/mongoose/printer.service.js +0 -216
- package/dist/services/mongoose/printer.service.js.map +0 -1
- package/dist/services/mongoose/refresh-token.service.js +0 -104
- package/dist/services/mongoose/refresh-token.service.js.map +0 -1
- package/dist/services/mongoose/role.service.js +0 -132
- package/dist/services/mongoose/role.service.js.map +0 -1
- package/dist/services/mongoose/settings.service.js +0 -124
- package/dist/services/mongoose/settings.service.js.map +0 -1
- package/dist/services/mongoose/user.service.js +0 -180
- package/dist/services/mongoose/user.service.js.map +0 -1
- package/dist/services/orm/custom-gcode.service.js +0 -42
- package/dist/services/orm/custom-gcode.service.js.map +0 -1
- package/dist/services/orm/print-completion.service.js +0 -87
- package/dist/services/orm/print-completion.service.js.map +0 -1
- package/dist/services/orm/printer-group.service.js +0 -109
- package/dist/services/orm/printer-group.service.js.map +0 -1
- package/dist/services/validators/camera-service.validation.js +0 -19
- package/dist/services/validators/camera-service.validation.js.map +0 -1
- package/dist/services/validators/print-completion-service.validation.js +0 -33
- package/dist/services/validators/print-completion-service.validation.js.map +0 -1
- package/dist/shared.constants.js +0 -15
- package/dist/shared.constants.js.map +0 -1
- package/dist/tasks/print-completion.socketio.task.js +0 -91
- package/dist/tasks/print-completion.socketio.task.js.map +0 -1
- package/dist/tasks/printer-file-clean.task.js +0 -74
- package/dist/tasks/printer-file-clean.task.js.map +0 -1
- package/migrate-mongo-config.js +0 -45
- /package/dist/services/{interfaces → octoprint/dto/files}/gcode-analysis.dto.js +0 -0
|
@@ -13,7 +13,7 @@ const _yamlservicevalidation = require("../validators/yaml-service.validation");
|
|
|
13
13
|
const _jsyaml = require("js-yaml");
|
|
14
14
|
const _printerapiinterface = require("../printer-api.interface");
|
|
15
15
|
class YamlService {
|
|
16
|
-
|
|
16
|
+
printerTagService;
|
|
17
17
|
printerService;
|
|
18
18
|
printerCache;
|
|
19
19
|
floorStore;
|
|
@@ -21,10 +21,9 @@ class YamlService {
|
|
|
21
21
|
userService;
|
|
22
22
|
roleService;
|
|
23
23
|
settingsStore;
|
|
24
|
-
isTypeormMode;
|
|
25
24
|
logger;
|
|
26
|
-
constructor(loggerFactory,
|
|
27
|
-
this.
|
|
25
|
+
constructor(loggerFactory, printerTagService, printerService, printerCache, floorStore, floorService, userService, roleService, settingsStore){
|
|
26
|
+
this.printerTagService = printerTagService;
|
|
28
27
|
this.printerService = printerService;
|
|
29
28
|
this.printerCache = printerCache;
|
|
30
29
|
this.floorStore = floorStore;
|
|
@@ -32,50 +31,26 @@ class YamlService {
|
|
|
32
31
|
this.userService = userService;
|
|
33
32
|
this.roleService = roleService;
|
|
34
33
|
this.settingsStore = settingsStore;
|
|
35
|
-
this.isTypeormMode = isTypeormMode;
|
|
36
34
|
this.logger = loggerFactory(YamlService.name);
|
|
37
35
|
}
|
|
38
36
|
async importYaml(yamlBuffer) {
|
|
39
37
|
const importSpec = await (0, _jsyaml.load)(yamlBuffer);
|
|
40
38
|
const databaseTypeSqlite = importSpec.databaseType === "sqlite";
|
|
41
39
|
const { exportPrinters, exportFloorGrid, exportSettings, exportUsers } = importSpec.config;
|
|
42
|
-
|
|
40
|
+
this.normalizeYamlData(importSpec, databaseTypeSqlite);
|
|
41
|
+
const importData = await (0, _validators.validateInput)(importSpec, _yamlservicevalidation.importPrintersFloorsYamlSchema);
|
|
43
42
|
const hasSystemData = exportSettings || exportUsers;
|
|
44
|
-
if (hasSystemData
|
|
43
|
+
if (hasSystemData) {
|
|
45
44
|
await this.validateSystemTablesEmpty(importSpec);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
printer.name = printer.printerName;
|
|
50
|
-
delete printer.printerName;
|
|
45
|
+
if (exportSettings && importSpec.settings) {
|
|
46
|
+
this.logger.log("Importing settings");
|
|
47
|
+
await this.importSettings(importSpec.settings);
|
|
51
48
|
}
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
if (databaseTypeSqlite && typeof printer.id === "string") {
|
|
57
|
-
printer.id = Number.parseInt(printer.id);
|
|
58
|
-
}
|
|
59
|
-
if (![
|
|
60
|
-
_printerapiinterface.OctoprintType,
|
|
61
|
-
_printerapiinterface.MoonrakerType
|
|
62
|
-
].includes(printer.printerType)) {
|
|
63
|
-
printer.printerType = _printerapiinterface.OctoprintType;
|
|
49
|
+
if (exportUsers && importSpec.users && importSpec.users.length > 0) {
|
|
50
|
+
this.logger.log(`Importing users (${importSpec.users.length} users)`);
|
|
51
|
+
await this.importUsers(importSpec.users, databaseTypeSqlite);
|
|
64
52
|
}
|
|
65
53
|
}
|
|
66
|
-
if (databaseTypeSqlite) {
|
|
67
|
-
for (const floor of importSpec.floors){
|
|
68
|
-
if (typeof floor.id === "string") {
|
|
69
|
-
floor.id = Number.parseInt(floor.id);
|
|
70
|
-
}
|
|
71
|
-
for (const printer of floor.printers){
|
|
72
|
-
if (typeof printer.printerId === "string") {
|
|
73
|
-
printer.printerId = parseInt(printer.printerId);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
const importData = await (0, _validators.validateInput)(importSpec, _yamlservicevalidation.importPrintersFloorsYamlSchema);
|
|
79
54
|
if (exportFloorGrid && importData.floors?.length) {
|
|
80
55
|
for (const floor of importData.floors){
|
|
81
56
|
await (0, _validators.validateInput)(floor, _yamlservicevalidation.importPrinterPositionsSchema);
|
|
@@ -85,123 +60,148 @@ class YamlService {
|
|
|
85
60
|
const { updateByPropertyPrinters, insertPrinters } = await this.analysePrintersUpsert(importData.printers ?? [], importData.config.printerComparisonStrategiesByPriority);
|
|
86
61
|
this.logger.log("Analysing floors for import");
|
|
87
62
|
const { updateByPropertyFloors, insertFloors } = await this.analyseFloorsUpsert(importData.floors ?? [], importData.config.floorComparisonStrategiesByPriority);
|
|
88
|
-
this.logger.log("Analysing
|
|
89
|
-
const {
|
|
63
|
+
this.logger.log("Analysing tags for import");
|
|
64
|
+
const { updateByNameTags, insertTags } = await this.analyseUpsertTags(importData.tags ?? []);
|
|
90
65
|
this.logger.log(`Performing pure insert printers (${insertPrinters.length} printers)`);
|
|
91
66
|
const printerIdMap = {};
|
|
92
67
|
for (const newPrinter of insertPrinters){
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
68
|
+
try {
|
|
69
|
+
const state = await this.printerService.create({
|
|
70
|
+
...newPrinter
|
|
71
|
+
});
|
|
72
|
+
if (!newPrinter.id) {
|
|
73
|
+
throw new Error(`Saved ID was empty ${JSON.stringify(newPrinter)}`);
|
|
74
|
+
}
|
|
75
|
+
printerIdMap[newPrinter.id] = state.id;
|
|
76
|
+
} catch (error) {
|
|
77
|
+
this.logger.error(`Failed to create printer ${newPrinter.name}:`, error);
|
|
98
78
|
}
|
|
99
|
-
printerIdMap[newPrinter.id] = state.id;
|
|
100
79
|
}
|
|
101
80
|
this.logger.log(`Performing update import printers (${updateByPropertyPrinters.length} printers)`);
|
|
102
81
|
for (const updatePrinterSpec of updateByPropertyPrinters){
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
82
|
+
try {
|
|
83
|
+
const updateId = updatePrinterSpec.printerId;
|
|
84
|
+
const updatedPrinter = updatePrinterSpec.value;
|
|
85
|
+
if (typeof updateId === "string") {
|
|
86
|
+
throw new Error("Cannot update a printer by string id in sqlite mode");
|
|
87
|
+
}
|
|
88
|
+
const originalPrinterId = updatedPrinter.id;
|
|
89
|
+
delete updatePrinterSpec.value.id;
|
|
90
|
+
updatedPrinter.id = updateId;
|
|
91
|
+
const state = await this.printerService.update(updateId, updatedPrinter);
|
|
92
|
+
if (!updatePrinterSpec.printerId) {
|
|
93
|
+
throw new Error("Saved ID was empty");
|
|
94
|
+
}
|
|
95
|
+
printerIdMap[originalPrinterId] = state.id;
|
|
96
|
+
} catch (error) {
|
|
97
|
+
this.logger.error(`Failed to update printer ${updatePrinterSpec.value.name}:`, error);
|
|
116
98
|
}
|
|
117
|
-
printerIdMap[originalPrinterId] = state.id;
|
|
118
99
|
}
|
|
119
100
|
this.logger.log(`Performing pure create floors (${insertFloors.length} floors)`);
|
|
120
101
|
const floorIdMap = {};
|
|
121
102
|
for (const newFloor of insertFloors){
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
103
|
+
try {
|
|
104
|
+
const originalFloorId = newFloor.id;
|
|
105
|
+
delete newFloor.id;
|
|
106
|
+
const knownPrinterPositions = [];
|
|
107
|
+
if (exportFloorGrid && exportPrinters) {
|
|
108
|
+
for (const floorPosition of newFloor.printers){
|
|
109
|
+
const knownPrinterId = printerIdMap[floorPosition.printerId];
|
|
110
|
+
if (!knownPrinterId) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
delete floorPosition.id;
|
|
114
|
+
delete floorPosition.floorId;
|
|
115
|
+
floorPosition.printerId = knownPrinterId;
|
|
116
|
+
knownPrinterPositions.push(floorPosition);
|
|
130
117
|
}
|
|
131
|
-
|
|
132
|
-
delete floorPosition.floorId;
|
|
133
|
-
floorPosition.printerId = knownPrinterId;
|
|
134
|
-
knownPrinterPositions.push(floorPosition);
|
|
118
|
+
newFloor.printers = knownPrinterPositions;
|
|
135
119
|
}
|
|
136
|
-
|
|
120
|
+
const createdFloor = await this.floorStore.create({
|
|
121
|
+
...newFloor
|
|
122
|
+
});
|
|
123
|
+
floorIdMap[originalFloorId] = createdFloor.id;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
this.logger.error(`Failed to create floor ${newFloor.name}:`, error);
|
|
137
126
|
}
|
|
138
|
-
const createdFloor = await this.floorStore.create({
|
|
139
|
-
...newFloor
|
|
140
|
-
});
|
|
141
|
-
floorIdMap[originalFloorId] = createdFloor.id;
|
|
142
127
|
}
|
|
143
128
|
this.logger.log(`Performing update of floors (${updateByPropertyFloors.length} floors)`);
|
|
144
129
|
for (const updateFloorSpec of updateByPropertyFloors){
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
130
|
+
try {
|
|
131
|
+
const updateId = updateFloorSpec.floorId;
|
|
132
|
+
if (typeof updateId === "string") {
|
|
133
|
+
throw new Error("Cannot update a floor by string id in sqlite mode");
|
|
134
|
+
}
|
|
135
|
+
const updatedFloor = updateFloorSpec.value;
|
|
136
|
+
const originalFloorId = updatedFloor.id;
|
|
137
|
+
delete updatedFloor.id;
|
|
138
|
+
const knownPrinters = [];
|
|
139
|
+
if (exportFloorGrid && exportPrinters) {
|
|
140
|
+
for (const floorPosition of updatedFloor?.printers){
|
|
141
|
+
const knownPrinterId = printerIdMap[floorPosition.printerId];
|
|
142
|
+
if (!knownPrinterId) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
delete floorPosition.id;
|
|
146
|
+
delete floorPosition.floorId;
|
|
147
|
+
floorPosition.printerId = knownPrinterId;
|
|
148
|
+
floorPosition.floorId = updateId;
|
|
149
|
+
knownPrinters.push(floorPosition);
|
|
160
150
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
floorPosition.printerId = knownPrinterId;
|
|
164
|
-
floorPosition.floorId = updateId;
|
|
165
|
-
knownPrinters.push(floorPosition);
|
|
151
|
+
updatedFloor.id = updateId;
|
|
152
|
+
updatedFloor.printers = knownPrinters;
|
|
166
153
|
}
|
|
167
|
-
|
|
168
|
-
|
|
154
|
+
const newFloor = await this.floorStore.update(updateId, updatedFloor);
|
|
155
|
+
floorIdMap[originalFloorId] = newFloor.id;
|
|
156
|
+
} catch (error) {
|
|
157
|
+
this.logger.error(`Failed to update floor ${updateFloorSpec.value.name}:`, error);
|
|
169
158
|
}
|
|
170
|
-
const newFloor = await this.floorStore.update(updateId, updatedFloor);
|
|
171
|
-
floorIdMap[originalFloorId] = newFloor.id;
|
|
172
159
|
}
|
|
173
160
|
await this.floorStore.loadStore();
|
|
174
|
-
this.logger.log(`Performing pure create
|
|
175
|
-
for (const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
161
|
+
this.logger.log(`Performing pure create tags (${insertTags.length} tags)`);
|
|
162
|
+
for (const tag of insertTags){
|
|
163
|
+
try {
|
|
164
|
+
const createdTag = await this.printerTagService.createTag({
|
|
165
|
+
name: tag.name,
|
|
166
|
+
color: tag.color
|
|
167
|
+
});
|
|
168
|
+
for (const printer of tag.printers){
|
|
169
|
+
const knownPrinterId = printerIdMap[printer.printerId];
|
|
170
|
+
if (!knownPrinterId) continue;
|
|
171
|
+
try {
|
|
172
|
+
await this.printerTagService.addPrinterToTag(createdTag.id, knownPrinterId);
|
|
173
|
+
} catch (error) {
|
|
174
|
+
this.logger.error(`Failed to add printer ${knownPrinterId} to tag ${tag.name}:`, error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
} catch (error) {
|
|
178
|
+
this.logger.error(`Failed to create tag ${tag.name}:`, error);
|
|
183
179
|
}
|
|
184
180
|
}
|
|
185
|
-
this.logger.log(`Performing update of
|
|
186
|
-
for (const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
181
|
+
this.logger.log(`Performing update of tag printer links (${updateByNameTags.length} tags)`);
|
|
182
|
+
for (const updateTagSpec of updateByNameTags){
|
|
183
|
+
try {
|
|
184
|
+
const existingTag = await this.printerTagService.getPrintersByTag(updateTagSpec.tagId);
|
|
185
|
+
const existingPrinterIds = existingTag.printers.map((p)=>p.printerId);
|
|
186
|
+
const wantedTargetPrinterIds = updateTagSpec.value.printers.filter((p)=>!!printerIdMap[p.printerId]).map((p)=>printerIdMap[p.printerId]);
|
|
187
|
+
for (const unwantedId of existingPrinterIds.filter((eid)=>!wantedTargetPrinterIds.includes(eid))){
|
|
188
|
+
try {
|
|
189
|
+
await this.printerTagService.removePrinterFromTag(existingTag.id, unwantedId);
|
|
190
|
+
} catch (error) {
|
|
191
|
+
this.logger.error(`Failed to remove printer ${unwantedId} from tag ${existingTag.name}:`, error);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
for (const nonExistingNewId of wantedTargetPrinterIds.filter((eid)=>!existingPrinterIds.includes(eid))){
|
|
195
|
+
try {
|
|
196
|
+
await this.printerTagService.addPrinterToTag(existingTag.id, nonExistingNewId);
|
|
197
|
+
} catch (error) {
|
|
198
|
+
this.logger.error(`Failed to add printer ${nonExistingNewId} to tag ${existingTag.name}:`, error);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
} catch (error) {
|
|
202
|
+
this.logger.error(`Failed to update tag ${updateTagSpec.value.name}:`, error);
|
|
195
203
|
}
|
|
196
204
|
}
|
|
197
|
-
if (exportSettings && importSpec.settings) {
|
|
198
|
-
this.logger.log("Importing settings");
|
|
199
|
-
await this.importSettings(importSpec.settings);
|
|
200
|
-
}
|
|
201
|
-
if (exportUsers && importSpec.users && importSpec.users.length > 0) {
|
|
202
|
-
this.logger.log(`Importing users (${importSpec.users.length} users)`);
|
|
203
|
-
await this.importUsers(importSpec.users, databaseTypeSqlite);
|
|
204
|
-
}
|
|
205
205
|
return {
|
|
206
206
|
updateByPropertyPrinters,
|
|
207
207
|
updateByPropertyFloors,
|
|
@@ -221,14 +221,12 @@ class YamlService {
|
|
|
221
221
|
if (settings.frontend) {
|
|
222
222
|
await this.settingsStore.updateFrontendSettings(settings.frontend);
|
|
223
223
|
}
|
|
224
|
-
if (settings.printerFileClean) {
|
|
225
|
-
await this.settingsStore.updateFileCleanSettings(settings.printerFileClean);
|
|
226
|
-
}
|
|
227
224
|
if (settings.wizard?.wizardCompleted) {
|
|
228
225
|
const importedWizardVersion = settings.wizard.wizardVersion;
|
|
229
226
|
this.logger.log(`Marking wizard as completed with version: ${importedWizardVersion}`);
|
|
230
227
|
await this.settingsStore.setWizardCompleted(importedWizardVersion);
|
|
231
228
|
}
|
|
229
|
+
await this.settingsStore.loadSettings();
|
|
232
230
|
this.logger.log("Settings imported successfully");
|
|
233
231
|
}
|
|
234
232
|
async importUsers(users, databaseTypeSqlite) {
|
|
@@ -237,17 +235,11 @@ class YamlService {
|
|
|
237
235
|
if (databaseTypeSqlite && typeof user.id === "string") {
|
|
238
236
|
user.id = Number.parseInt(user.id);
|
|
239
237
|
}
|
|
240
|
-
|
|
241
|
-
if (user.roles && user.roles.length > 0) {
|
|
242
|
-
roleIds = user.roles.map((roleNameOrId)=>{
|
|
243
|
-
const role = allRoles.find((r)=>r.name === roleNameOrId);
|
|
244
|
-
return role?.id;
|
|
245
|
-
}).filter((id)=>id !== undefined);
|
|
246
|
-
}
|
|
238
|
+
const roleNames = (user.roles ?? []).filter((roleName)=>allRoles.some((r)=>r.name === roleName));
|
|
247
239
|
await this.userService.register({
|
|
248
240
|
username: user.username,
|
|
249
241
|
password: "temporary-password-to-be-replaced",
|
|
250
|
-
roles:
|
|
242
|
+
roles: roleNames,
|
|
251
243
|
isRootUser: user.isRootUser ?? false,
|
|
252
244
|
isDemoUser: user.isDemoUser ?? false,
|
|
253
245
|
isVerified: user.isVerified ?? false,
|
|
@@ -259,6 +251,10 @@ class YamlService {
|
|
|
259
251
|
}
|
|
260
252
|
async validateSystemTablesEmpty(importSpec) {
|
|
261
253
|
const errors = [];
|
|
254
|
+
const wizardCompleted = this.settingsStore.getWizardSettings()?.wizardCompleted;
|
|
255
|
+
if (!wizardCompleted) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
262
258
|
if (importSpec.settings && importSpec.config.exportSettings) {
|
|
263
259
|
const existingSettings = this.settingsStore.getSettings();
|
|
264
260
|
if (existingSettings && Object.keys(existingSettings).length > 0) {
|
|
@@ -296,7 +292,7 @@ class YamlService {
|
|
|
296
292
|
}
|
|
297
293
|
updateByPropertyPrinters.push({
|
|
298
294
|
strategy: "name",
|
|
299
|
-
printerId:
|
|
295
|
+
printerId: Number.parseInt(ids[foundIndex]),
|
|
300
296
|
value: printer
|
|
301
297
|
});
|
|
302
298
|
break;
|
|
@@ -310,7 +306,7 @@ class YamlService {
|
|
|
310
306
|
}
|
|
311
307
|
updateByPropertyPrinters.push({
|
|
312
308
|
strategy: "url",
|
|
313
|
-
printerId:
|
|
309
|
+
printerId: Number.parseInt(ids[foundIndex]),
|
|
314
310
|
value: printer
|
|
315
311
|
});
|
|
316
312
|
break;
|
|
@@ -332,7 +328,7 @@ class YamlService {
|
|
|
332
328
|
async analyseFloorsUpsert(upsertFloors, comparisonStrategy) {
|
|
333
329
|
const existingFloors = await this.floorService.list();
|
|
334
330
|
const names = existingFloors.map((p)=>p.name.toLowerCase());
|
|
335
|
-
const floorLevels = existingFloors.map((p)=>p.
|
|
331
|
+
const floorLevels = existingFloors.map((p)=>p.order);
|
|
336
332
|
const ids = existingFloors.map((p)=>p.id.toString());
|
|
337
333
|
const insertFloors = [];
|
|
338
334
|
const updateByPropertyFloors = [];
|
|
@@ -350,13 +346,13 @@ class YamlService {
|
|
|
350
346
|
}
|
|
351
347
|
updateByPropertyFloors.push({
|
|
352
348
|
strategy: "name",
|
|
353
|
-
floorId:
|
|
349
|
+
floorId: Number.parseInt(ids[foundIndex]),
|
|
354
350
|
value: floor
|
|
355
351
|
});
|
|
356
352
|
break;
|
|
357
353
|
}
|
|
358
354
|
} else if (strategy === "floor") {
|
|
359
|
-
const comparedProperty = floor.
|
|
355
|
+
const comparedProperty = floor.order;
|
|
360
356
|
const foundIndex = floorLevels.findIndex((n)=>n === comparedProperty);
|
|
361
357
|
if (foundIndex !== -1) {
|
|
362
358
|
if (!ids[foundIndex]) {
|
|
@@ -364,7 +360,7 @@ class YamlService {
|
|
|
364
360
|
}
|
|
365
361
|
updateByPropertyFloors.push({
|
|
366
362
|
strategy: "floor",
|
|
367
|
-
floorId:
|
|
363
|
+
floorId: Number.parseInt(ids[foundIndex]),
|
|
368
364
|
value: floor
|
|
369
365
|
});
|
|
370
366
|
break;
|
|
@@ -380,54 +376,51 @@ class YamlService {
|
|
|
380
376
|
insertFloors
|
|
381
377
|
};
|
|
382
378
|
}
|
|
383
|
-
async
|
|
384
|
-
if (!
|
|
379
|
+
async analyseUpsertTags(upsertTags) {
|
|
380
|
+
if (!upsertTags?.length) {
|
|
385
381
|
return {
|
|
386
|
-
|
|
387
|
-
|
|
382
|
+
updateByNameTags: [],
|
|
383
|
+
insertTags: []
|
|
388
384
|
};
|
|
389
385
|
}
|
|
390
|
-
const
|
|
391
|
-
const names =
|
|
392
|
-
const ids =
|
|
393
|
-
const
|
|
394
|
-
const
|
|
395
|
-
for (const
|
|
396
|
-
const comparedProperty =
|
|
386
|
+
const existingTags = await this.printerTagService.listTags();
|
|
387
|
+
const names = existingTags.map((p)=>p.name.toLowerCase());
|
|
388
|
+
const ids = existingTags.map((p)=>p.id.toString());
|
|
389
|
+
const insertTags = [];
|
|
390
|
+
const updateByNameTags = [];
|
|
391
|
+
for (const tag of upsertTags){
|
|
392
|
+
const comparedProperty = tag.name.toLowerCase();
|
|
397
393
|
const foundIndex = names.findIndex((n)=>n === comparedProperty);
|
|
398
394
|
if (foundIndex !== -1) {
|
|
399
395
|
if (!ids[foundIndex]) {
|
|
400
|
-
throw new Error("IDS not found,
|
|
396
|
+
throw new Error("IDS not found, tag name");
|
|
401
397
|
}
|
|
402
|
-
|
|
398
|
+
updateByNameTags.push({
|
|
403
399
|
strategy: "name",
|
|
404
|
-
|
|
405
|
-
value:
|
|
400
|
+
tagId: Number.parseInt(ids[foundIndex]),
|
|
401
|
+
value: tag
|
|
406
402
|
});
|
|
407
403
|
break;
|
|
408
404
|
} else {
|
|
409
|
-
|
|
405
|
+
insertTags.push(tag);
|
|
410
406
|
}
|
|
411
407
|
}
|
|
412
408
|
return {
|
|
413
|
-
|
|
414
|
-
|
|
409
|
+
insertTags,
|
|
410
|
+
updateByNameTags
|
|
415
411
|
};
|
|
416
412
|
}
|
|
417
413
|
async exportYaml(options) {
|
|
418
414
|
const input = await (0, _validators.validateInput)(options, _yamlservicevalidation.exportPrintersFloorsYamlSchema);
|
|
419
|
-
|
|
420
|
-
input.exportGroups = false;
|
|
421
|
-
}
|
|
422
|
-
const { exportFloors, exportPrinters, exportFloorGrid, exportGroups, exportSettings, exportUsers } = input;
|
|
415
|
+
const { exportFloors, exportPrinters, exportFloorGrid, exportTags, exportSettings, exportUsers } = input;
|
|
423
416
|
const dumpedObject = {
|
|
424
417
|
version: process.env.npm_package_version,
|
|
425
418
|
exportedAt: new Date(),
|
|
426
|
-
databaseType:
|
|
419
|
+
databaseType: "sqlite",
|
|
427
420
|
config: input,
|
|
428
421
|
printers: undefined,
|
|
429
422
|
floors: undefined,
|
|
430
|
-
|
|
423
|
+
tags: undefined,
|
|
431
424
|
settings: undefined,
|
|
432
425
|
users: undefined,
|
|
433
426
|
user_roles: undefined
|
|
@@ -454,7 +447,7 @@ class YamlService {
|
|
|
454
447
|
dumpedObject.floors = floors.map((f)=>{
|
|
455
448
|
const dumpedFloor = {
|
|
456
449
|
id: f.id,
|
|
457
|
-
|
|
450
|
+
order: f.order,
|
|
458
451
|
name: f.name,
|
|
459
452
|
printers: undefined
|
|
460
453
|
};
|
|
@@ -471,13 +464,13 @@ class YamlService {
|
|
|
471
464
|
return dumpedFloor;
|
|
472
465
|
});
|
|
473
466
|
}
|
|
474
|
-
if (
|
|
475
|
-
const
|
|
476
|
-
dumpedObject.
|
|
467
|
+
if (exportTags) {
|
|
468
|
+
const tags = await this.printerTagService.listTags();
|
|
469
|
+
dumpedObject.tags = tags.map((t)=>{
|
|
477
470
|
return {
|
|
478
|
-
name:
|
|
479
|
-
id:
|
|
480
|
-
printers:
|
|
471
|
+
name: t.name,
|
|
472
|
+
id: t.id,
|
|
473
|
+
printers: t.printers.map((p)=>{
|
|
481
474
|
return {
|
|
482
475
|
printerId: p.printerId
|
|
483
476
|
};
|
|
@@ -486,15 +479,13 @@ class YamlService {
|
|
|
486
479
|
});
|
|
487
480
|
}
|
|
488
481
|
if (exportSettings) {
|
|
489
|
-
|
|
490
|
-
dumpedObject.settings = settings;
|
|
482
|
+
dumpedObject.settings = this.settingsStore.getSettings();
|
|
491
483
|
}
|
|
492
484
|
if (exportUsers) {
|
|
493
485
|
const users = await this.userService.listUsers(1000);
|
|
494
|
-
const allRoles = this.roleService.roles;
|
|
495
486
|
dumpedObject.users = users.map((u)=>{
|
|
496
487
|
const userDto = this.userService.toDto(u);
|
|
497
|
-
|
|
488
|
+
return {
|
|
498
489
|
id: userDto.id,
|
|
499
490
|
username: userDto.username,
|
|
500
491
|
isDemoUser: userDto.isDemoUser,
|
|
@@ -502,19 +493,60 @@ class YamlService {
|
|
|
502
493
|
isVerified: userDto.isVerified,
|
|
503
494
|
needsPasswordChange: userDto.needsPasswordChange,
|
|
504
495
|
passwordHash: u.passwordHash,
|
|
505
|
-
createdAt: userDto.createdAt
|
|
496
|
+
createdAt: userDto.createdAt,
|
|
497
|
+
roles: userDto.roles
|
|
506
498
|
};
|
|
507
|
-
if (userDto.roles && userDto.roles.length > 0) {
|
|
508
|
-
userObj.roles = userDto.roles.map((roleId)=>{
|
|
509
|
-
const role = allRoles.find((r)=>r.id.toString() === roleId.toString());
|
|
510
|
-
return role?.name;
|
|
511
|
-
}).filter((name)=>name !== undefined);
|
|
512
|
-
}
|
|
513
|
-
return userObj;
|
|
514
499
|
});
|
|
515
500
|
}
|
|
516
501
|
return (0, _jsyaml.dump)(dumpedObject, {});
|
|
517
502
|
}
|
|
503
|
+
normalizeYamlData(importSpec, databaseTypeSqlite) {
|
|
504
|
+
for (const printer of importSpec.printers){
|
|
505
|
+
if (!printer.name && printer.printerName) {
|
|
506
|
+
printer.name = printer.printerName;
|
|
507
|
+
delete printer.printerName;
|
|
508
|
+
}
|
|
509
|
+
if (printer.settingsAppearance?.name) {
|
|
510
|
+
printer.name = printer.settingsAppearance?.name;
|
|
511
|
+
delete printer.settingsAppearance?.name;
|
|
512
|
+
}
|
|
513
|
+
if (databaseTypeSqlite && typeof printer.id === "string") {
|
|
514
|
+
printer.id = Number.parseInt(printer.id);
|
|
515
|
+
}
|
|
516
|
+
if (![
|
|
517
|
+
_printerapiinterface.OctoprintType,
|
|
518
|
+
_printerapiinterface.MoonrakerType,
|
|
519
|
+
_printerapiinterface.PrusaLinkType,
|
|
520
|
+
_printerapiinterface.BambuType
|
|
521
|
+
].includes(printer.printerType)) {
|
|
522
|
+
printer.printerType = _printerapiinterface.OctoprintType;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
for (const floor of importSpec.floors){
|
|
526
|
+
if (floor.floor !== undefined && floor.order === undefined) {
|
|
527
|
+
floor.order = floor.floor;
|
|
528
|
+
delete floor.floor;
|
|
529
|
+
}
|
|
530
|
+
if (databaseTypeSqlite) {
|
|
531
|
+
if (typeof floor.id === "string") {
|
|
532
|
+
floor.id = Number.parseInt(floor.id);
|
|
533
|
+
}
|
|
534
|
+
for (const printer of floor.printers){
|
|
535
|
+
if (typeof printer.printerId === "string") {
|
|
536
|
+
printer.printerId = Number.parseInt(printer.printerId);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
if (importSpec.groups && !importSpec.tags) {
|
|
542
|
+
importSpec.tags = importSpec.groups;
|
|
543
|
+
delete importSpec.groups;
|
|
544
|
+
}
|
|
545
|
+
if (importSpec.config.exportGroups !== undefined && importSpec.config.exportTags === undefined) {
|
|
546
|
+
importSpec.config.exportTags = importSpec.config.exportGroups;
|
|
547
|
+
delete importSpec.config.exportGroups;
|
|
548
|
+
}
|
|
549
|
+
}
|
|
518
550
|
}
|
|
519
551
|
|
|
520
552
|
//# sourceMappingURL=yaml.service.js.map
|