@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
|
@@ -2,220 +2,130 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get PrinterThumbnailCache () {
|
|
5
|
+
Object.defineProperty(exports, "PrinterThumbnailCache", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
13
8
|
return PrinterThumbnailCache;
|
|
14
|
-
},
|
|
15
|
-
get gcodeMaxLinesToRead () {
|
|
16
|
-
return gcodeMaxLinesToRead;
|
|
17
9
|
}
|
|
18
10
|
});
|
|
19
11
|
const _keydiffcache = require("../utils/cache/key-diff.cache");
|
|
20
|
-
const _path = require("path");
|
|
21
|
-
const _fsutils = require("../utils/fs.utils");
|
|
22
|
-
const _serverconstants = require("../server.constants");
|
|
23
|
-
const _nodefs = require("node:fs");
|
|
24
|
-
const _fs = require("fs");
|
|
25
|
-
const _gcodeutils = require("../utils/gcode.utils");
|
|
26
|
-
const _promises = require("node:readline/promises");
|
|
27
|
-
const _promises1 = require("node:fs/promises");
|
|
28
|
-
const _node = require("@sentry/node");
|
|
29
|
-
const _eventconstants = require("../constants/event.constants");
|
|
30
|
-
const gcodeMaxLinesToRead = 10000;
|
|
31
12
|
class PrinterThumbnailCache extends _keydiffcache.KeyDiffCache {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
eventEmitter2;
|
|
35
|
-
settingsStore;
|
|
13
|
+
printJobService;
|
|
14
|
+
fileStorageService;
|
|
36
15
|
logger;
|
|
37
|
-
constructor(loggerFactory,
|
|
38
|
-
super(), this.
|
|
16
|
+
constructor(loggerFactory, printJobService, fileStorageService){
|
|
17
|
+
super(), this.printJobService = printJobService, this.fileStorageService = fileStorageService;
|
|
39
18
|
this.logger = loggerFactory(PrinterThumbnailCache.name);
|
|
40
|
-
this.eventEmitter2.on(_eventconstants.printerEvents.printersDeleted, this.handlePrintersDeleted.bind(this));
|
|
41
|
-
}
|
|
42
|
-
async resetCache() {
|
|
43
|
-
const keys = Object.keys(this.keyValueStore);
|
|
44
|
-
await this.deleteKeysBatch(keys);
|
|
45
19
|
}
|
|
46
20
|
async loadCache() {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
21
|
+
this.logger.log("Loading printer thumbnail cache from print jobs...");
|
|
22
|
+
try {
|
|
23
|
+
const recentJobs = await this.printJobService.printJobRepository.createQueryBuilder("job").select("job.printerId").addSelect("MAX(job.endedAt)", "maxEndedAt").where("job.fileStorageId IS NOT NULL").andWhere("job.analysisState = :state", {
|
|
24
|
+
state: "ANALYZED"
|
|
25
|
+
}).groupBy("job.printerId").getRawMany();
|
|
26
|
+
let loadedCount = 0;
|
|
27
|
+
for (const result of recentJobs){
|
|
28
|
+
const printerId = result.job_printerId;
|
|
29
|
+
if (printerId) {
|
|
30
|
+
try {
|
|
31
|
+
await this.loadPrinterThumbnail(printerId);
|
|
32
|
+
loadedCount++;
|
|
33
|
+
} catch (error) {
|
|
34
|
+
this.logger.warn(`Failed to load thumbnail for printer ${printerId}: ${error}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
60
37
|
}
|
|
38
|
+
this.logger.log(`Loaded ${loadedCount} printer thumbnails from print jobs`);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
this.logger.error("Failed to load thumbnail cache", error);
|
|
61
41
|
}
|
|
62
42
|
}
|
|
63
|
-
async
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
43
|
+
async loadPrinterThumbnail(printerId) {
|
|
44
|
+
try {
|
|
45
|
+
const job = await this.printJobService.printJobRepository.findOne({
|
|
46
|
+
where: {
|
|
47
|
+
printerId,
|
|
48
|
+
analysisState: "ANALYZED"
|
|
49
|
+
},
|
|
50
|
+
order: {
|
|
51
|
+
endedAt: "DESC",
|
|
52
|
+
startedAt: "DESC",
|
|
53
|
+
createdAt: "DESC"
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
if (!job || !job.fileStorageId) {
|
|
57
|
+
this.logger.debug(`No suitable job found for printer ${printerId}`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const metadata = await this.fileStorageService.loadMetadata(job.fileStorageId);
|
|
61
|
+
const thumbnails = metadata?._thumbnails || [];
|
|
62
|
+
if (thumbnails.length === 0) {
|
|
63
|
+
this.logger.debug(`No thumbnails found for job ${job.id}`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const thumbnailBuffer = await this.fileStorageService.getThumbnail(job.fileStorageId, 0);
|
|
67
|
+
if (!thumbnailBuffer) {
|
|
68
|
+
this.logger.warn(`Thumbnail file not found for job ${job.id}`);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const thumbnailBase64 = thumbnailBuffer.toString("base64");
|
|
72
|
+
await this.setPrinterThumbnail(printerId, thumbnailBase64, job.id, job.fileName);
|
|
73
|
+
this.logger.debug(`Loaded thumbnail for printer ${printerId} from job ${job.id}`);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
this.logger.error(`Failed to load thumbnail for printer ${printerId}: ${error}`);
|
|
76
|
+
throw error;
|
|
68
77
|
}
|
|
69
78
|
}
|
|
70
|
-
async setPrinterThumbnail(
|
|
71
|
-
await this.setKeyValue(
|
|
72
|
-
|
|
73
|
-
thumbnailBase64
|
|
79
|
+
async setPrinterThumbnail(printerId, thumbnailBase64, jobId, fileName) {
|
|
80
|
+
await this.setKeyValue(printerId, {
|
|
81
|
+
printerId,
|
|
82
|
+
thumbnailBase64,
|
|
83
|
+
jobId,
|
|
84
|
+
fileName,
|
|
85
|
+
updatedAt: new Date()
|
|
74
86
|
});
|
|
75
87
|
}
|
|
76
|
-
async unsetPrinterThumbnail(
|
|
77
|
-
await this.deleteKeyValue(
|
|
88
|
+
async unsetPrinterThumbnail(printerId) {
|
|
89
|
+
await this.deleteKeyValue(printerId);
|
|
78
90
|
}
|
|
79
|
-
async
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const thumbnailData = await this.extractRemoteThumbnailBase64(login, file);
|
|
84
|
-
await this.writeThumbnailFile(id, thumbnailData);
|
|
85
|
-
await this.setPrinterThumbnail(id, thumbnailData);
|
|
86
|
-
return thumbnailData;
|
|
87
|
-
} catch (e) {
|
|
88
|
-
this.logger.error("Could not parse thumbnail, clearing printer thumbnail", e);
|
|
89
|
-
(0, _node.captureException)(e);
|
|
90
|
-
await this.removeThumbnailFile(id);
|
|
91
|
-
await this.unsetPrinterThumbnail(id);
|
|
92
|
-
}
|
|
91
|
+
async resetCache() {
|
|
92
|
+
this.logger.log("Resetting printer thumbnail cache");
|
|
93
|
+
this.keyValueStore.clear();
|
|
94
|
+
this.resetDiffs();
|
|
93
95
|
}
|
|
94
|
-
async
|
|
95
|
-
if (!this.settingsStore.isThumbnailSupportEnabled()) return;
|
|
96
|
-
const id = printerId.toString();
|
|
96
|
+
async handleJobCompleted(printerId, jobId) {
|
|
97
97
|
try {
|
|
98
|
-
|
|
99
|
-
await this.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
} catch (e) {
|
|
103
|
-
this.logger.error("Could not parse thumbnail, clearing printer thumbnail", e);
|
|
104
|
-
(0, _node.captureException)(e);
|
|
105
|
-
await this.removeThumbnailFile(id);
|
|
106
|
-
await this.unsetPrinterThumbnail(id);
|
|
98
|
+
this.logger.log(`Updating thumbnail for printer ${printerId} after job ${jobId} completed`);
|
|
99
|
+
await this.loadPrinterThumbnail(printerId);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
this.logger.error(`Failed to update thumbnail after job completion: ${error}`);
|
|
107
102
|
}
|
|
108
103
|
}
|
|
109
|
-
async
|
|
110
|
-
|
|
111
|
-
await this.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
const baseFolder = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultPrinterThumbnailsStorage);
|
|
116
|
-
const thumbnailPath = (0, _path.join)(baseFolder, printerId + ".dat");
|
|
117
|
-
(0, _fsutils.ensureDirExists)(baseFolder);
|
|
118
|
-
await (0, _promises1.writeFile)(thumbnailPath, thumbnailData);
|
|
119
|
-
}
|
|
120
|
-
async removeThumbnailFile(printerId) {
|
|
121
|
-
const baseFolder = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultPrinterThumbnailsStorage);
|
|
122
|
-
const thumbnailPath = (0, _path.join)(baseFolder, printerId + ".dat");
|
|
123
|
-
if ((0, _nodefs.existsSync)(thumbnailPath)) {
|
|
124
|
-
(0, _nodefs.rmSync)(thumbnailPath);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
async extractRemoteThumbnailBase64(login, file) {
|
|
128
|
-
const lines = await this.readRemoteGcodeLines(login, file, gcodeMaxLinesToRead);
|
|
129
|
-
if (!lines?.length) {
|
|
130
|
-
throw new Error("No gcode lines were returned.");
|
|
131
|
-
}
|
|
132
|
-
let collecting = false;
|
|
133
|
-
let currentThumbnailBase64 = "";
|
|
134
|
-
let index = 0;
|
|
135
|
-
for (const line of lines){
|
|
136
|
-
if (line.startsWith("; thumbnail begin")) {
|
|
137
|
-
collecting = true;
|
|
138
|
-
currentThumbnailBase64 = "";
|
|
139
|
-
} else if (collecting && line.startsWith("; thumbnail") && line.includes("end")) {
|
|
140
|
-
collecting = false;
|
|
141
|
-
break;
|
|
142
|
-
} else if (collecting) {
|
|
143
|
-
const trim = line.trim().replace(/^;/, "").trim();
|
|
144
|
-
currentThumbnailBase64 += trim;
|
|
145
|
-
}
|
|
146
|
-
if (index > gcodeMaxLinesToRead) {
|
|
147
|
-
throw new Error("Thumbnail not found (within 10000 lines).");
|
|
148
|
-
}
|
|
149
|
-
index++;
|
|
150
|
-
}
|
|
151
|
-
return currentThumbnailBase64;
|
|
152
|
-
}
|
|
153
|
-
async readRemoteGcodeLines(login, file, numberOfLines, fromEnd = false, endCondition = "; thumbnail end") {
|
|
154
|
-
const printer = this.printerApiFactory.getScopedPrinter(login);
|
|
155
|
-
const fileData = await printer.getFile(file);
|
|
156
|
-
const fileSize = fileData.size;
|
|
157
|
-
let lines = [];
|
|
158
|
-
let position = fromEnd ? fileSize : 0;
|
|
159
|
-
let iterationsLeft = 5;
|
|
160
|
-
while(lines.length <= numberOfLines && (fromEnd ? position > 0 : position < fileSize)){
|
|
161
|
-
iterationsLeft--;
|
|
162
|
-
if (iterationsLeft <= 0) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
const bytesToRead = Math.min(_gcodeutils.gcodeScanningChunkSize, fromEnd ? position : fileSize - position);
|
|
166
|
-
const start = fromEnd ? position - bytesToRead : position;
|
|
167
|
-
const end = fromEnd ? position : position + bytesToRead;
|
|
168
|
-
position = fromEnd ? start : end;
|
|
169
|
-
const remoteChunk = await printer.getFileChunk(file, start, end);
|
|
170
|
-
const chunkLines = remoteChunk.data.split("\n");
|
|
171
|
-
if (fromEnd) {
|
|
172
|
-
lines = chunkLines.concat(lines);
|
|
173
|
-
} else {
|
|
174
|
-
lines = lines.concat(chunkLines);
|
|
175
|
-
}
|
|
176
|
-
if (endCondition) {
|
|
177
|
-
const endIndex = lines.findIndex((line)=>line.includes(endCondition));
|
|
178
|
-
if (endIndex !== -1) {
|
|
179
|
-
lines = lines.slice(0, endIndex + 1);
|
|
180
|
-
break;
|
|
104
|
+
async handleJobStarted(printerId, jobId) {
|
|
105
|
+
try {
|
|
106
|
+
const job = await this.printJobService.printJobRepository.findOne({
|
|
107
|
+
where: {
|
|
108
|
+
id: jobId
|
|
181
109
|
}
|
|
182
|
-
}
|
|
183
|
-
|
|
110
|
+
});
|
|
111
|
+
if (!job || !job.fileStorageId) {
|
|
112
|
+
return;
|
|
184
113
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const fileStream = (0, _fs.createReadStream)(gcodePath);
|
|
190
|
-
const rl = (0, _promises.createInterface)({
|
|
191
|
-
input: fileStream,
|
|
192
|
-
crlfDelay: Infinity
|
|
193
|
-
});
|
|
194
|
-
let collecting = false;
|
|
195
|
-
let currentThumbnailBase64 = "";
|
|
196
|
-
let index = 0;
|
|
197
|
-
for await (const line of rl){
|
|
198
|
-
if (line.startsWith("; thumbnail begin")) {
|
|
199
|
-
collecting = true;
|
|
200
|
-
currentThumbnailBase64 = "";
|
|
201
|
-
} else if (collecting && line.startsWith("; thumbnail") && line.includes("end")) {
|
|
202
|
-
collecting = false;
|
|
203
|
-
rl.close();
|
|
204
|
-
break;
|
|
205
|
-
} else if (collecting) {
|
|
206
|
-
const trim = line.trim().replace(/^;/, "").trim();
|
|
207
|
-
currentThumbnailBase64 += trim;
|
|
114
|
+
const metadata = await this.fileStorageService.loadMetadata(job.fileStorageId);
|
|
115
|
+
const thumbnails = metadata?._thumbnails || [];
|
|
116
|
+
if (thumbnails.length === 0) {
|
|
117
|
+
return;
|
|
208
118
|
}
|
|
209
|
-
|
|
210
|
-
|
|
119
|
+
const thumbnailBuffer = await this.fileStorageService.getThumbnail(job.fileStorageId, 0);
|
|
120
|
+
if (!thumbnailBuffer) {
|
|
121
|
+
return;
|
|
211
122
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
123
|
+
const thumbnailBase64 = thumbnailBuffer.toString("base64");
|
|
124
|
+
await this.setPrinterThumbnail(printerId, thumbnailBase64, job.id, job.fileName);
|
|
125
|
+
this.logger.debug(`Updated thumbnail for printer ${printerId} from started job ${job.id}`);
|
|
126
|
+
} catch (error) {
|
|
127
|
+
this.logger.error(`Failed to update thumbnail after job start: ${error}`);
|
|
216
128
|
}
|
|
217
|
-
Buffer.from(currentThumbnailBase64, "base64");
|
|
218
|
-
return currentThumbnailBase64;
|
|
219
129
|
}
|
|
220
130
|
}
|
|
221
131
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/state/printer-thumbnail.cache.ts"],"names":["PrinterThumbnailCache","
|
|
1
|
+
{"version":3,"sources":["../../src/state/printer-thumbnail.cache.ts"],"names":["PrinterThumbnailCache","KeyDiffCache","logger","loggerFactory","printJobService","fileStorageService","name","loadCache","log","recentJobs","printJobRepository","createQueryBuilder","select","addSelect","where","andWhere","state","groupBy","getRawMany","loadedCount","result","printerId","job_printerId","loadPrinterThumbnail","error","warn","job","findOne","analysisState","order","endedAt","startedAt","createdAt","fileStorageId","debug","metadata","loadMetadata","thumbnails","_thumbnails","length","id","thumbnailBuffer","getThumbnail","thumbnailBase64","toString","setPrinterThumbnail","fileName","jobId","setKeyValue","updatedAt","Date","unsetPrinterThumbnail","deleteKeyValue","resetCache","keyValueStore","clear","resetDiffs","handleJobCompleted","handleJobStarted"],"mappings":"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"}
|
|
@@ -25,15 +25,12 @@ class PrinterCache extends _keydiffcache.KeyDiffCache {
|
|
|
25
25
|
const printerDocs = await this.printerService.list();
|
|
26
26
|
const dtos = this.mapArray(printerDocs);
|
|
27
27
|
const keyValues = dtos.map((p)=>({
|
|
28
|
-
key:
|
|
28
|
+
key: p.id,
|
|
29
29
|
value: p
|
|
30
30
|
}));
|
|
31
31
|
await this.setKeyValuesBatch(keyValues, true);
|
|
32
32
|
return dtos;
|
|
33
33
|
}
|
|
34
|
-
async countDisabledPrinters() {
|
|
35
|
-
return (await this.getAllValues()).filter((p)=>!p.enabled).length;
|
|
36
|
-
}
|
|
37
34
|
async listCachedPrinters(includeDisabled = false) {
|
|
38
35
|
const printers = await this.getAllValues();
|
|
39
36
|
if (!includeDisabled) {
|
|
@@ -49,7 +46,7 @@ class PrinterCache extends _keydiffcache.KeyDiffCache {
|
|
|
49
46
|
return printer;
|
|
50
47
|
}
|
|
51
48
|
getCachedPrinterOrThrow(id) {
|
|
52
|
-
const printer = this.keyValueStore
|
|
49
|
+
const printer = this.keyValueStore.get(id);
|
|
53
50
|
if (!printer) {
|
|
54
51
|
throw new _runtimeexceptions.NotFoundException(`Printer with provided id not found`);
|
|
55
52
|
}
|
|
@@ -59,10 +56,6 @@ class PrinterCache extends _keydiffcache.KeyDiffCache {
|
|
|
59
56
|
const printer = await this.getCachedPrinterOrThrowAsync(id);
|
|
60
57
|
return printer.name;
|
|
61
58
|
}
|
|
62
|
-
getName(id) {
|
|
63
|
-
const printer = this.getCachedPrinterOrThrow(id);
|
|
64
|
-
return printer.name;
|
|
65
|
-
}
|
|
66
59
|
async getLoginDtoAsync(id) {
|
|
67
60
|
const printer = await this.getCachedPrinterOrThrowAsync(id);
|
|
68
61
|
return {
|
|
@@ -86,7 +79,7 @@ class PrinterCache extends _keydiffcache.KeyDiffCache {
|
|
|
86
79
|
async handleBatchPrinterCreated(event) {
|
|
87
80
|
const mappedPrinters = this.mapArray(event.printers);
|
|
88
81
|
const keyValues = mappedPrinters.map((p)=>({
|
|
89
|
-
key:
|
|
82
|
+
key: p.id,
|
|
90
83
|
value: p
|
|
91
84
|
}));
|
|
92
85
|
await this.setKeyValuesBatch(keyValues, true);
|
|
@@ -98,9 +91,6 @@ class PrinterCache extends _keydiffcache.KeyDiffCache {
|
|
|
98
91
|
async handlePrintersDeleted(event) {
|
|
99
92
|
await this.deleteKeysBatch(event.printerIds, true);
|
|
100
93
|
}
|
|
101
|
-
getId(value) {
|
|
102
|
-
return value.id.toString();
|
|
103
|
-
}
|
|
104
94
|
mapArray(entities) {
|
|
105
95
|
return entities.map((p)=>{
|
|
106
96
|
return this.map(p);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/state/printer.cache.ts"],"names":["PrinterCache","KeyDiffCache","printerService","eventEmitter2","on","printerEvents","batchPrinterCreated","handleBatchPrinterCreated","bind","printerCreated","handlePrinterCreatedOrUpdated","printerUpdated","printersDeleted","handlePrintersDeleted","loadCache","printerDocs","list","dtos","mapArray","keyValues","map","p","key","
|
|
1
|
+
{"version":3,"sources":["../../src/state/printer.cache.ts"],"names":["PrinterCache","KeyDiffCache","printerService","eventEmitter2","on","printerEvents","batchPrinterCreated","handleBatchPrinterCreated","bind","printerCreated","handlePrinterCreatedOrUpdated","printerUpdated","printersDeleted","handlePrintersDeleted","loadCache","printerDocs","list","dtos","mapArray","keyValues","map","p","key","id","value","setKeyValuesBatch","listCachedPrinters","includeDisabled","printers","getAllValues","filter","enabled","getCachedPrinterOrThrowAsync","printer","getValue","NotFoundException","getCachedPrinterOrThrow","keyValueStore","get","getNameAsync","name","getLoginDtoAsync","printerURL","apiKey","username","password","printerType","getLoginDto","event","mappedPrinters","printerDto","setKeyValue","deleteKeysBatch","printerIds","entities","entity","toDto"],"mappings":"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"}
|
|
@@ -15,12 +15,10 @@ const _envutils = require("../utils/env.utils");
|
|
|
15
15
|
const _serverconstants = require("../server.constants");
|
|
16
16
|
class SettingsStore {
|
|
17
17
|
settingsService;
|
|
18
|
-
isTypeormMode;
|
|
19
18
|
logger;
|
|
20
19
|
settings = null;
|
|
21
|
-
constructor(loggerFactory, settingsService
|
|
20
|
+
constructor(loggerFactory, settingsService){
|
|
22
21
|
this.settingsService = settingsService;
|
|
23
|
-
this.isTypeormMode = isTypeormMode;
|
|
24
22
|
this.logger = loggerFactory(SettingsStore.name);
|
|
25
23
|
}
|
|
26
24
|
getSettings() {
|
|
@@ -33,14 +31,10 @@ class SettingsStore {
|
|
|
33
31
|
sentryDiagnosticsEnabled: settings[_serversettingsconstants.serverSettingsKey].sentryDiagnosticsEnabled,
|
|
34
32
|
experimentalMoonrakerSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalMoonrakerSupport,
|
|
35
33
|
experimentalPrusaLinkSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalPrusaLinkSupport,
|
|
36
|
-
experimentalBambuSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalBambuSupport
|
|
37
|
-
experimentalTypeormSupport: this.isTypeormMode,
|
|
38
|
-
experimentalClientSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalClientSupport,
|
|
39
|
-
experimentalThumbnailSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalThumbnailSupport
|
|
34
|
+
experimentalBambuSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalBambuSupport
|
|
40
35
|
},
|
|
41
36
|
[_serversettingsconstants.wizardSettingKey]: settings[_serversettingsconstants.wizardSettingKey],
|
|
42
37
|
[_serversettingsconstants.frontendSettingKey]: settings[_serversettingsconstants.frontendSettingKey],
|
|
43
|
-
[_serversettingsconstants.printerFileCleanSettingKey]: settings[_serversettingsconstants.printerFileCleanSettingKey],
|
|
44
38
|
[_serversettingsconstants.timeoutSettingKey]: settings[_serversettingsconstants.timeoutSettingKey]
|
|
45
39
|
});
|
|
46
40
|
}
|
|
@@ -56,10 +50,7 @@ class SettingsStore {
|
|
|
56
50
|
[_serversettingsconstants.serverSettingsKey]: {
|
|
57
51
|
experimentalMoonrakerSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalMoonrakerSupport,
|
|
58
52
|
experimentalPrusaLinkSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalPrusaLinkSupport,
|
|
59
|
-
experimentalBambuSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalBambuSupport
|
|
60
|
-
experimentalTypeormSupport: this.isTypeormMode,
|
|
61
|
-
experimentalClientSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalClientSupport,
|
|
62
|
-
experimentalThumbnailSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalThumbnailSupport
|
|
53
|
+
experimentalBambuSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalBambuSupport
|
|
63
54
|
}
|
|
64
55
|
});
|
|
65
56
|
}
|
|
@@ -87,7 +78,7 @@ class SettingsStore {
|
|
|
87
78
|
await this.updateCredentialSettings({
|
|
88
79
|
refreshTokenExpiry: credentialSettings.refreshTokenExpiry,
|
|
89
80
|
refreshTokenAttempts: credentialSettings.refreshTokenAttempts,
|
|
90
|
-
jwtExpiresIn: parseInt(overrideJwtExpiresIn)
|
|
81
|
+
jwtExpiresIn: Number.parseInt(overrideJwtExpiresIn)
|
|
91
82
|
});
|
|
92
83
|
}
|
|
93
84
|
this.settings[_serversettingsconstants.credentialSettingsKey] = await this.getCredentialSettings();
|
|
@@ -114,25 +105,12 @@ class SettingsStore {
|
|
|
114
105
|
this.throwIfSettingsUnset();
|
|
115
106
|
return this.settings[_serversettingsconstants.serverSettingsKey].registration;
|
|
116
107
|
}
|
|
117
|
-
isThumbnailSupportEnabled() {
|
|
118
|
-
this.throwIfSettingsUnset();
|
|
119
|
-
return this.settings[_serversettingsconstants.serverSettingsKey].experimentalThumbnailSupport;
|
|
120
|
-
}
|
|
121
108
|
getServerSettings() {
|
|
122
109
|
return this.getSettings()[_serversettingsconstants.serverSettingsKey];
|
|
123
110
|
}
|
|
124
111
|
getTimeoutSettings() {
|
|
125
112
|
return this.getSettings()[_serversettingsconstants.timeoutSettingKey];
|
|
126
113
|
}
|
|
127
|
-
getFrontendSettings() {
|
|
128
|
-
return this.getSettings()[_serversettingsconstants.frontendSettingKey];
|
|
129
|
-
}
|
|
130
|
-
getFileCleanSettings() {
|
|
131
|
-
return this.getSettings()[_serversettingsconstants.printerFileCleanSettingKey];
|
|
132
|
-
}
|
|
133
|
-
isPreUploadFileCleanEnabled() {
|
|
134
|
-
return this.getSettings()[_serversettingsconstants.printerFileCleanSettingKey]?.autoRemoveOldFilesBeforeUpload;
|
|
135
|
-
}
|
|
136
114
|
async setWizardCompleted(version) {
|
|
137
115
|
this.settings = await this.settingsService.updateWizardSettings({
|
|
138
116
|
wizardCompleted: true,
|
|
@@ -164,10 +142,6 @@ class SettingsStore {
|
|
|
164
142
|
this.settings = await this.settingsService.updateTimeoutSettings(timeoutSettings);
|
|
165
143
|
return this.getSettings();
|
|
166
144
|
}
|
|
167
|
-
async updateFileCleanSettings(fileClean) {
|
|
168
|
-
this.settings = await this.settingsService.updateFileCleanSettings(fileClean);
|
|
169
|
-
return this.getSettings();
|
|
170
|
-
}
|
|
171
145
|
async updateCredentialSettings(credentialSettings) {
|
|
172
146
|
this.settings = await this.settingsService.updateCredentialSettings(credentialSettings);
|
|
173
147
|
}
|
|
@@ -202,18 +176,6 @@ class SettingsStore {
|
|
|
202
176
|
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
|
|
203
177
|
return this.getSettings();
|
|
204
178
|
}
|
|
205
|
-
async setExperimentalThumbnailSupport(experimentalThumbnailSupport) {
|
|
206
|
-
this.throwIfSettingsUnset();
|
|
207
|
-
this.settings[_serversettingsconstants.serverSettingsKey].experimentalThumbnailSupport = experimentalThumbnailSupport;
|
|
208
|
-
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
|
|
209
|
-
return this.getSettings();
|
|
210
|
-
}
|
|
211
|
-
async setExperimentalClientSupport(experimentalClientSupport) {
|
|
212
|
-
this.throwIfSettingsUnset();
|
|
213
|
-
this.settings[_serversettingsconstants.serverSettingsKey].experimentalClientSupport = experimentalClientSupport;
|
|
214
|
-
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
|
|
215
|
-
return this.getSettings();
|
|
216
|
-
}
|
|
217
179
|
async updateFrontendSettings(frontendSettings) {
|
|
218
180
|
this.settings = await this.settingsService.updateFrontendSettings(frontendSettings);
|
|
219
181
|
return this.getSettings();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/state/settings.store.ts"],"names":["SettingsStore","logger","settings","loggerFactory","settingsService","
|
|
1
|
+
{"version":3,"sources":["../../src/state/settings.store.ts"],"names":["SettingsStore","logger","settings","loggerFactory","settingsService","name","getSettings","throwIfSettingsUnset","Object","freeze","serverSettingsKey","loginRequired","registration","sentryDiagnosticsEnabled","experimentalMoonrakerSupport","experimentalPrusaLinkSupport","experimentalBambuSupport","wizardSettingKey","frontendSettingKey","timeoutSettingKey","getSettingsSensitive","credentialSettingsKey","jwtExpiresIn","refreshTokenAttempts","refreshTokenExpiry","loadSettings","getOrCreate","processSentryEnabled","getCredentialSettings","getAnonymousDiagnosticsEnabled","persistOptionalCredentialSettings","overrideJwtSecret","overrideJwtExpiresIn","credentialSettings","length","updateJwtSecretCredentialSetting","jwtSecret","updateCredentialSettings","Number","parseInt","getWizardState","wizardCompleted","wizardVersion","latestWizardVersion","AppConstants","currentWizardVersion","isWizardCompleted","getWizardSettings","isRegistrationEnabled","getServerSettings","getTimeoutSettings","setWizardCompleted","version","updateWizardSettings","wizardCompletedAt","Date","getLoginRequired","setLoginRequired","updateServerSettings","setRegistrationEnabled","serverSettings","updateTimeoutSettings","timeoutSettings","setRefreshTokenSettings","setSentryDiagnosticsEnabled","setExperimentalMoonrakerSupport","setExperimentalPrusaLinkSupport","setExperimentalBambuSupport","updateFrontendSettings","frontendSettings","InternalServerException","sentryEnabled","log","isTestEnvironment","client","getClient","warn","getOptions","enabled"],"mappings":"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"}
|