@fdm-monster/server 1.8.2 → 1.9.0-rc1
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 +5 -3
- package/.gitattributes +4 -2
- package/.yarn/install-state.gz +0 -0
- package/.yarn/releases/yarn-4.9.1.cjs +948 -0
- package/.yarnrc.yml +1 -1
- package/README.md +25 -26
- package/RELEASE_NOTES.MD +69 -7
- package/biome.json +33 -0
- package/dist/consoles/download-github-releases.js.map +1 -1
- package/dist/consoles/launch-http-servers.js +31 -0
- package/dist/consoles/launch-http-servers.js.map +1 -0
- package/dist/consoles/mock-octoprint.server.js +291 -0
- package/dist/consoles/mock-octoprint.server.js.map +1 -0
- package/dist/consoles/mock-prusalink.server.js +57 -0
- package/dist/consoles/mock-prusalink.server.js.map +1 -0
- package/dist/consoles/utils/api-messages.js +856 -0
- package/dist/consoles/utils/api-messages.js.map +1 -0
- package/dist/consoles/utils/delayed-memory.storage.js +42 -0
- package/dist/consoles/utils/delayed-memory.storage.js.map +1 -0
- package/dist/consoles/utils/ws-messages.js +88 -0
- package/dist/consoles/utils/ws-messages.js.map +1 -0
- package/dist/constants/event.constants.js +11 -19
- package/dist/constants/event.constants.js.map +1 -1
- package/dist/constants/server-settings.constants.js +6 -11
- package/dist/constants/server-settings.constants.js.map +1 -1
- package/dist/container.js +15 -24
- package/dist/container.js.map +1 -1
- package/dist/container.tokens.js +4 -5
- package/dist/container.tokens.js.map +1 -1
- package/dist/controllers/auth.controller.js +114 -24
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/controllers/batch-call.controller.js +95 -24
- package/dist/controllers/batch-call.controller.js.map +1 -1
- package/dist/controllers/camera-stream.controller.js +16 -12
- package/dist/controllers/camera-stream.controller.js.map +1 -1
- package/dist/controllers/custom-gcode.controller.js +116 -40
- package/dist/controllers/custom-gcode.controller.js.map +1 -1
- package/dist/controllers/dto/update-client-dist.dto.js +0 -21
- package/dist/controllers/dto/update-client-dist.dto.js.map +1 -1
- package/dist/controllers/first-time-setup.controller.js +54 -18
- package/dist/controllers/first-time-setup.controller.js.map +1 -1
- package/dist/controllers/floor.controller.js +154 -43
- package/dist/controllers/floor.controller.js.map +1 -1
- package/dist/controllers/metrics.controller.js +56 -0
- package/dist/controllers/metrics.controller.js.map +1 -0
- package/dist/controllers/print-completion.controller.js +81 -18
- package/dist/controllers/print-completion.controller.js.map +1 -1
- package/dist/controllers/printer-files.controller.js +61 -50
- package/dist/controllers/printer-files.controller.js.map +1 -1
- package/dist/controllers/printer-group.controller.js +123 -33
- package/dist/controllers/printer-group.controller.js.map +1 -1
- package/dist/controllers/printer-settings.controller.js +76 -29
- package/dist/controllers/printer-settings.controller.js.map +1 -1
- package/dist/controllers/printer.controller.js +62 -197
- package/dist/controllers/printer.controller.js.map +1 -1
- package/dist/controllers/server-private.controller.js +153 -39
- package/dist/controllers/server-private.controller.js.map +1 -1
- package/dist/controllers/server-public.controller.js +79 -84
- package/dist/controllers/server-public.controller.js.map +1 -1
- package/dist/controllers/settings.controller.js +222 -79
- package/dist/controllers/settings.controller.js.map +1 -1
- package/dist/controllers/user.controller.js +67 -57
- package/dist/controllers/user.controller.js.map +1 -1
- package/dist/controllers/validation/auth-controller.validation.js +6 -5
- package/dist/controllers/validation/auth-controller.validation.js.map +1 -1
- package/dist/controllers/validation/batch-controller.validation.js +17 -18
- package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
- package/dist/controllers/validation/generic.validation.js +8 -3
- package/dist/controllers/validation/generic.validation.js.map +1 -1
- package/dist/controllers/validation/printer-completion-controller.validation.js +16 -0
- package/dist/controllers/validation/printer-completion-controller.validation.js.map +1 -0
- package/dist/controllers/validation/printer-controller.validation.js +31 -50
- package/dist/controllers/validation/printer-controller.validation.js.map +1 -1
- package/dist/controllers/validation/printer-files-controller.validation.js +16 -15
- package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -1
- package/dist/controllers/validation/printer-settings-controller.validation.js +6 -5
- package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -1
- package/dist/controllers/validation/server-private.validation.js +17 -0
- package/dist/controllers/validation/server-private.validation.js.map +1 -0
- package/dist/controllers/validation/setting.validation.js +28 -10
- package/dist/controllers/validation/setting.validation.js.map +1 -1
- package/dist/controllers/validation/user-controller.validation.js +44 -13
- package/dist/controllers/validation/user-controller.validation.js.map +1 -1
- package/dist/data-source.js +10 -6
- package/dist/data-source.js.map +1 -1
- package/dist/entities/camera-stream.entity.js +2 -3
- package/dist/entities/camera-stream.entity.js.map +1 -1
- package/dist/entities/custom-gcode.entity.js +1 -2
- package/dist/entities/custom-gcode.entity.js.map +1 -1
- package/dist/entities/floor-position.entity.js.map +1 -1
- package/dist/entities/floor.entity.js +1 -2
- package/dist/entities/floor.entity.js.map +1 -1
- package/dist/entities/group.entity.js +6 -2
- package/dist/entities/group.entity.js.map +1 -1
- package/dist/entities/permission.entity.js +1 -2
- package/dist/entities/permission.entity.js.map +1 -1
- package/dist/entities/print-completion.entity.js +1 -2
- package/dist/entities/print-completion.entity.js.map +1 -1
- package/dist/entities/printer-group.entity.js +6 -2
- package/dist/entities/printer-group.entity.js.map +1 -1
- package/dist/entities/printer.entity.js +22 -4
- package/dist/entities/printer.entity.js.map +1 -1
- package/dist/entities/refresh-token.entity.js +1 -2
- package/dist/entities/refresh-token.entity.js.map +1 -1
- package/dist/entities/role.entity.js +1 -2
- package/dist/entities/role.entity.js.map +1 -1
- package/dist/entities/settings.entity.js +1 -2
- package/dist/entities/settings.entity.js.map +1 -1
- package/dist/entities/user-role.entity.js +1 -2
- package/dist/entities/user-role.entity.js.map +1 -1
- package/dist/entities/user.entity.js +1 -2
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/exceptions/runtime.exceptions.js.map +1 -1
- package/dist/handlers/logger.js +131 -36
- package/dist/handlers/logger.js.map +1 -1
- package/dist/handlers/validators.js +7 -113
- package/dist/handlers/validators.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/authenticate.js +11 -22
- package/dist/middleware/authenticate.js.map +1 -1
- package/dist/middleware/database.js.map +1 -1
- package/dist/middleware/demo.middleware.js +4 -17
- package/dist/middleware/demo.middleware.js.map +1 -1
- package/dist/middleware/exception.filter.js +23 -23
- package/dist/middleware/exception.filter.js.map +1 -1
- package/dist/middleware/global.middleware.js +4 -4
- package/dist/middleware/global.middleware.js.map +1 -1
- package/dist/middleware/param-converter.middleware.js +81 -0
- package/dist/middleware/param-converter.middleware.js.map +1 -0
- package/dist/middleware/passport.js +3 -5
- package/dist/middleware/passport.js.map +1 -1
- package/dist/middleware/printer-resolver.js +37 -0
- package/dist/middleware/printer-resolver.js.map +1 -0
- package/dist/middleware/printer.js +22 -10
- package/dist/middleware/printer.js.map +1 -1
- package/dist/middleware/socketio.middleware.js +27 -0
- package/dist/middleware/socketio.middleware.js.map +1 -0
- package/dist/migrations/1706829146617-InitSqlite.js +1 -1
- package/dist/migrations/1706829146617-InitSqlite.js.map +1 -1
- package/dist/migrations/1707494762198-PrinterGroup.js +1 -1
- package/dist/migrations/1707494762198-PrinterGroup.js.map +1 -1
- package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js +1 -1
- package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js.map +1 -1
- package/dist/migrations/1713897879622-AddPrinterType.js +1 -1
- package/dist/migrations/1713897879622-AddPrinterType.js.map +1 -1
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +229 -0
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -0
- package/dist/models/Auth/Permission.js.map +1 -1
- package/dist/models/Auth/RefreshToken.js +1 -1
- package/dist/models/Auth/RefreshToken.js.map +1 -1
- package/dist/models/Auth/Role.js.map +1 -1
- package/dist/models/Auth/User.js.map +1 -1
- package/dist/models/CameraStream.js +20 -0
- package/dist/models/CameraStream.js.map +1 -1
- package/dist/models/CustomGcode.js.map +1 -1
- package/dist/models/Floor.js.map +1 -1
- package/dist/models/FloorPrinter.js +10 -1
- package/dist/models/FloorPrinter.js.map +1 -1
- package/dist/models/PrintCompletion.js.map +1 -1
- package/dist/models/Printer.js +12 -5
- package/dist/models/Printer.js.map +1 -1
- package/dist/models/Settings.js +5 -42
- package/dist/models/Settings.js.map +1 -1
- package/dist/models/index.js +0 -4
- package/dist/models/index.js.map +1 -1
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +1 -1
- package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +1 -1
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +1 -1
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +1 -1
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +1 -1
- package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +1 -1
- package/dist/mongo-migrations/20231111081809-printer-flatten-name.js.map +1 -1
- package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js.map +1 -1
- package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +1 -1
- package/dist/server.constants.js +7 -4
- package/dist/server.constants.js.map +1 -1
- package/dist/server.core.js +29 -2
- package/dist/server.core.js.map +1 -1
- package/dist/server.env.js +13 -8
- package/dist/server.env.js.map +1 -1
- package/dist/server.host.js +24 -31
- package/dist/server.host.js.map +1 -1
- package/dist/services/authentication/auth.service.js +15 -20
- package/dist/services/authentication/auth.service.js.map +1 -1
- package/dist/services/authentication/jwt.service.js +1 -1
- package/dist/services/authentication/jwt.service.js.map +1 -1
- package/dist/services/core/batch-call.service.js +23 -25
- package/dist/services/core/batch-call.service.js.map +1 -1
- package/dist/services/core/client-bundle.service.js +78 -136
- package/dist/services/core/client-bundle.service.js.map +1 -1
- package/dist/services/core/config.service.js.map +1 -1
- package/dist/services/core/cradle.service.js +21 -0
- package/dist/services/core/cradle.service.js.map +1 -0
- package/dist/services/core/github.service.js +2 -2
- package/dist/services/core/github.service.js.map +1 -1
- package/dist/services/core/http-client.factory.js +40 -0
- package/dist/services/core/http-client.factory.js.map +1 -0
- package/dist/services/core/logs-manager.service.js +7 -6
- package/dist/services/core/logs-manager.service.js.map +1 -1
- package/dist/services/core/monsterpi.service.js +1 -1
- package/dist/services/core/monsterpi.service.js.map +1 -1
- package/dist/services/core/multer.service.js +79 -28
- package/dist/services/core/multer.service.js.map +1 -1
- package/dist/services/core/server-release.service.js +14 -8
- package/dist/services/core/server-release.service.js.map +1 -1
- package/dist/services/core/yaml.service.js +16 -17
- package/dist/services/core/yaml.service.js.map +1 -1
- package/dist/services/interfaces/camera-stream.dto.js +4 -34
- package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
- package/dist/services/interfaces/custom-gcode.dto.js.map +1 -1
- package/dist/services/interfaces/file-upload-tracker.interface.js +6 -0
- package/dist/services/interfaces/file-upload-tracker.interface.js.map +1 -0
- package/dist/services/interfaces/floor.dto.js +5 -47
- package/dist/services/interfaces/floor.dto.js.map +1 -1
- package/dist/services/interfaces/login.dto.js +2 -0
- package/dist/services/interfaces/login.dto.js.map +1 -1
- package/dist/services/interfaces/print-completion.dto.js.map +1 -1
- package/dist/services/interfaces/printer-group.dto.js +0 -14
- package/dist/services/interfaces/printer-group.dto.js.map +1 -1
- package/dist/services/interfaces/printer.dto.js +11 -5
- package/dist/services/interfaces/printer.dto.js.map +1 -1
- package/dist/services/interfaces/settings.dto.js.map +1 -1
- package/dist/services/interfaces/task.interfaces.js +6 -0
- package/dist/services/interfaces/task.interfaces.js.map +1 -0
- package/dist/services/mongoose/camera-stream.service.js +17 -15
- package/dist/services/mongoose/camera-stream.service.js.map +1 -1
- package/dist/services/mongoose/custom-gcode.service.js +4 -2
- package/dist/services/mongoose/custom-gcode.service.js.map +1 -1
- package/dist/services/mongoose/floor.service.js +37 -30
- package/dist/services/mongoose/floor.service.js.map +1 -1
- package/dist/services/mongoose/permission.service.js +1 -1
- package/dist/services/mongoose/permission.service.js.map +1 -1
- package/dist/services/mongoose/print-completion.service.js +2 -2
- package/dist/services/mongoose/print-completion.service.js.map +1 -1
- package/dist/services/mongoose/print-completion.shared.js +2 -2
- package/dist/services/mongoose/print-completion.shared.js.map +1 -1
- package/dist/services/mongoose/printer.service.js +40 -45
- package/dist/services/mongoose/printer.service.js.map +1 -1
- package/dist/services/mongoose/refresh-token.service.js +5 -8
- package/dist/services/mongoose/refresh-token.service.js.map +1 -1
- package/dist/services/mongoose/role.service.js +14 -5
- package/dist/services/mongoose/role.service.js.map +1 -1
- package/dist/services/mongoose/settings.service.js +35 -62
- package/dist/services/mongoose/settings.service.js.map +1 -1
- package/dist/services/mongoose/user.service.js +8 -7
- package/dist/services/mongoose/user.service.js.map +1 -1
- package/dist/services/moonraker/constants/{websocket.constants.js → moonraker.constants.js} +1 -1
- package/dist/services/moonraker/constants/{websocket.constants.js.map → moonraker.constants.js.map} +1 -1
- package/dist/services/moonraker/moonraker-websocket.adapter.js +108 -96
- package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
- package/dist/services/moonraker/moonraker.client.js +212 -167
- package/dist/services/moonraker/moonraker.client.js.map +1 -1
- package/dist/services/moonraker.api.js +3 -5
- package/dist/services/moonraker.api.js.map +1 -1
- package/dist/services/octoprint/constants/octoprint-service.constants.js +7 -36
- package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -1
- package/dist/services/octoprint/constants/octoprint-websocket.constants.js +12 -3
- package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -1
- package/dist/services/octoprint/dto/octoprint-event.dto.js +2 -1
- package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
- package/dist/services/octoprint/octoprint-api.routes.js +0 -98
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
- package/dist/services/octoprint/octoprint-websocket.adapter.js +72 -72
- package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
- package/dist/services/octoprint/octoprint.client.js +87 -343
- package/dist/services/octoprint/octoprint.client.js.map +1 -1
- package/dist/services/octoprint/utils/octoprint-http-client.builder.js +31 -0
- package/dist/services/octoprint/utils/octoprint-http-client.builder.js.map +1 -0
- package/dist/services/octoprint.api.js +14 -18
- package/dist/services/octoprint.api.js.map +1 -1
- package/dist/services/orm/base.service.js +11 -12
- package/dist/services/orm/base.service.js.map +1 -1
- package/dist/services/orm/camera-stream.service.js +5 -1
- package/dist/services/orm/camera-stream.service.js.map +1 -1
- package/dist/services/orm/custom-gcode.service.js +2 -2
- package/dist/services/orm/custom-gcode.service.js.map +1 -1
- package/dist/services/orm/floor-position.service.js +0 -5
- package/dist/services/orm/floor-position.service.js.map +1 -1
- package/dist/services/orm/floor.service.js +43 -39
- package/dist/services/orm/floor.service.js.map +1 -1
- package/dist/services/orm/permission.service.js +3 -4
- package/dist/services/orm/permission.service.js.map +1 -1
- package/dist/services/orm/print-completion.service.js +2 -4
- package/dist/services/orm/print-completion.service.js.map +1 -1
- package/dist/services/orm/printer-group.service.js +2 -7
- package/dist/services/orm/printer-group.service.js.map +1 -1
- package/dist/services/orm/printer.service.js +29 -39
- package/dist/services/orm/printer.service.js.map +1 -1
- package/dist/services/orm/refresh-token.service.js +5 -11
- package/dist/services/orm/refresh-token.service.js.map +1 -1
- package/dist/services/orm/role.service.js +11 -10
- package/dist/services/orm/role.service.js.map +1 -1
- package/dist/services/orm/settings.service.js +37 -133
- package/dist/services/orm/settings.service.js.map +1 -1
- package/dist/services/orm/user.service.js +13 -15
- package/dist/services/orm/user.service.js.map +1 -1
- package/dist/services/printer-api.factory.js +9 -6
- package/dist/services/printer-api.factory.js.map +1 -1
- package/dist/services/printer-api.interface.js +13 -6
- package/dist/services/printer-api.interface.js.map +1 -1
- package/dist/services/prusa-link/constants/prusalink-event.dto.js +18 -0
- package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -0
- package/dist/services/prusa-link/constants/prusalink.constants.js +13 -0
- package/dist/services/prusa-link/constants/prusalink.constants.js.map +1 -0
- package/dist/services/prusa-link/dto/file-response.dto.js +6 -0
- package/dist/services/prusa-link/dto/file-response.dto.js.map +1 -0
- package/dist/services/prusa-link/dto/file.dto.js +6 -0
- package/dist/services/prusa-link/dto/file.dto.js.map +1 -0
- package/dist/services/prusa-link/dto/job-state.dto.js +6 -0
- package/dist/services/prusa-link/dto/job-state.dto.js.map +1 -0
- package/dist/services/prusa-link/dto/printer-state.dto.js +6 -0
- package/dist/services/prusa-link/dto/printer-state.dto.js.map +1 -0
- package/dist/services/prusa-link/dto/status.dto.js +6 -0
- package/dist/services/prusa-link/dto/status.dto.js.map +1 -0
- package/dist/services/prusa-link/dto/version.dto.js +6 -0
- package/dist/services/prusa-link/dto/version.dto.js.map +1 -0
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +142 -0
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -0
- package/dist/services/prusa-link/prusa-link.api.js +233 -0
- package/dist/services/prusa-link/prusa-link.api.js.map +1 -0
- package/dist/services/prusa-link/utils/digest-auth.params.js +6 -0
- package/dist/services/prusa-link/utils/digest-auth.params.js.map +1 -0
- package/dist/services/prusa-link/utils/digest-auth.util.js +28 -0
- package/dist/services/prusa-link/utils/digest-auth.util.js.map +1 -0
- package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js +131 -0
- package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -0
- package/dist/services/socket.factory.js +9 -6
- package/dist/services/socket.factory.js.map +1 -1
- package/dist/services/{core/task-manager.service.js → task-manager.service.js} +72 -78
- package/dist/services/task-manager.service.js.map +1 -0
- package/dist/services/validators/camera-service.validation.js +19 -0
- package/dist/services/validators/camera-service.validation.js.map +1 -0
- package/dist/services/validators/floor-service.validation.js +47 -36
- package/dist/services/validators/floor-service.validation.js.map +1 -1
- package/dist/services/validators/print-completion-service.validation.js +22 -9
- package/dist/services/validators/print-completion-service.validation.js.map +1 -1
- package/dist/services/validators/printer-service.validation.js +112 -29
- package/dist/services/validators/printer-service.validation.js.map +1 -1
- package/dist/services/validators/settings-service.validation.js +78 -66
- package/dist/services/validators/settings-service.validation.js.map +1 -1
- package/dist/services/validators/user-service.validation.js +17 -16
- package/dist/services/validators/user-service.validation.js.map +1 -1
- package/dist/services/validators/yaml-service.validation.js +94 -51
- package/dist/services/validators/yaml-service.validation.js.map +1 -1
- package/dist/shared/default-http-client.builder.js +94 -0
- package/dist/shared/default-http-client.builder.js.map +1 -0
- package/dist/shared/load-controllers.js +20 -0
- package/dist/shared/load-controllers.js.map +1 -0
- package/dist/shared/runtime-settings.migration.js +46 -0
- package/dist/shared/runtime-settings.migration.js.map +1 -0
- package/dist/shared/websocket-rpc-extended.adapter.js +15 -14
- package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
- package/dist/shared/websocket.adapter.js +4 -5
- package/dist/shared/websocket.adapter.js.map +1 -1
- package/dist/state/file-upload-tracker.cache.js +33 -42
- package/dist/state/file-upload-tracker.cache.js.map +1 -1
- package/dist/state/file.cache.js +1 -1
- package/dist/state/file.cache.js.map +1 -1
- package/dist/state/floor.store.js +6 -6
- package/dist/state/floor.store.js.map +1 -1
- package/dist/state/printer-events.cache.js +21 -22
- package/dist/state/printer-events.cache.js.map +1 -1
- package/dist/state/printer-files.store.js +6 -8
- package/dist/state/printer-files.store.js.map +1 -1
- package/dist/state/printer-socket.store.js +27 -50
- package/dist/state/printer-socket.store.js.map +1 -1
- package/dist/state/printer-thumbnail.cache.js +5 -9
- package/dist/state/printer-thumbnail.cache.js.map +1 -1
- package/dist/state/printer.cache.js +14 -12
- package/dist/state/printer.cache.js.map +1 -1
- package/dist/state/settings.store.js +78 -51
- package/dist/state/settings.store.js.map +1 -1
- package/dist/state/socket-io.gateway.js +39 -36
- package/dist/state/socket-io.gateway.js.map +1 -1
- package/dist/state/test-printer-socket.store.js +20 -15
- package/dist/state/test-printer-socket.store.js.map +1 -1
- package/dist/state/validation/create-test-printer.validation.js +13 -10
- package/dist/state/validation/create-test-printer.validation.js.map +1 -1
- package/dist/task.presets.js.map +1 -1
- package/dist/tasks/boot.task.js +14 -19
- package/dist/tasks/boot.task.js.map +1 -1
- package/dist/tasks/client-bundle.task.js +1 -3
- package/dist/tasks/client-bundle.task.js.map +1 -1
- package/dist/tasks/print-completion.socketio.task.js +27 -28
- package/dist/tasks/print-completion.socketio.task.js.map +1 -1
- package/dist/tasks/printer-file-clean.task.js +6 -10
- package/dist/tasks/printer-file-clean.task.js.map +1 -1
- package/dist/tasks/printer-websocket-restore.task.js +4 -15
- package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
- package/dist/tasks/printer-websocket.task.js +2 -14
- package/dist/tasks/printer-websocket.task.js.map +1 -1
- package/dist/tasks/socketio.task.js +8 -35
- package/dist/tasks/socketio.task.js.map +1 -1
- package/dist/tasks/software-update.task.js +1 -1
- package/dist/tasks/software-update.task.js.map +1 -1
- package/dist/tasks.js +3 -3
- package/dist/tasks.js.map +1 -1
- package/dist/utils/array.util.js.map +1 -1
- package/dist/utils/cache/key-diff.cache.js.map +1 -1
- package/dist/utils/env.utils.js +0 -2
- package/dist/utils/env.utils.js.map +1 -1
- package/dist/utils/normalize-url.js +6 -3
- package/dist/utils/normalize-url.js.map +1 -1
- package/dist/utils/pretty-print.utils.js +1 -1
- package/dist/utils/pretty-print.utils.js.map +1 -1
- package/dist/utils/printer-type.utils.js.map +1 -1
- package/dist/utils/time.utils.js +7 -17
- package/dist/utils/time.utils.js.map +1 -1
- package/dist/utils/url.utils.js +11 -14
- package/dist/utils/url.utils.js.map +1 -1
- package/package.json +53 -55
- package/tsconfig.json +2 -1
- package/.yarn/releases/yarn-4.6.0.cjs +0 -934
- package/dist/consoles/check-ports.js +0 -170
- package/dist/consoles/check-ports.js.map +0 -1
- package/dist/consoles/sqlite-torm.js +0 -31
- package/dist/consoles/sqlite-torm.js.map +0 -1
- package/dist/consoles/upload-test.js +0 -52
- package/dist/consoles/upload-test.js.map +0 -1
- package/dist/controllers/plugin-firmware-update.controller.js +0 -236
- package/dist/controllers/plugin-firmware-update.controller.js.map +0 -1
- package/dist/entities/base.entity.js +0 -29
- package/dist/entities/base.entity.js.map +0 -1
- package/dist/entities/printer-file.entity.js +0 -140
- package/dist/entities/printer-file.entity.js.map +0 -1
- package/dist/handlers/cache-manager.js +0 -18
- package/dist/handlers/cache-manager.js.map +0 -1
- package/dist/models/PrinterFile.js +0 -44
- package/dist/models/PrinterFile.js.map +0 -1
- package/dist/services/core/task-manager.service.js.map +0 -1
- package/dist/services/octoprint/plugin-base.service.js +0 -101
- package/dist/services/octoprint/plugin-base.service.js.map +0 -1
- package/dist/services/octoprint/plugin-firmware-update.service.js +0 -100
- package/dist/services/octoprint/plugin-firmware-update.service.js.map +0 -1
- package/dist/services/octoprint/plugin-repository.cache.js +0 -45
- package/dist/services/octoprint/plugin-repository.cache.js.map +0 -1
- package/dist/utils/benchmark.util.js +0 -39
- package/dist/utils/benchmark.util.js.map +0 -1
- package/dist/utils/is-docker.js +0 -40
- package/dist/utils/is-docker.js.map +0 -1
- package/dist/utils/metric.utils.js +0 -35
- package/dist/utils/metric.utils.js.map +0 -1
- package/requests/moonraker/api_job.http +0 -5
- package/requests/moonraker/api_printer.http +0 -5
- package/requests/moonraker/api_settings.http +0 -5
- package/requests/moonraker/printer_info.http +0 -5
- package/requests/moonraker/printer_objects_list.http +0 -6
- package/requests/moonraker/printer_objects_pause_resume.http +0 -6
- package/requests/moonraker/printer_objects_print_stats.http +0 -6
- package/requests/moonraker/printer_objects_webhooks.http +0 -6
- package/requests/moonraker/server_info.http +0 -5
- package/requests/octoprint/octoprint-api-printer-current.http +0 -7
- package/requests/octoprint/octoprint-pluginmanager-plugins.http +0 -7
- package/requests/printer-file/get-partial-file-moonraker.http +0 -5
- package/requests/printer-file/get-thumbnails.http +0 -5
- package/requests/printer-file/reload-printer-thumbnails.http +0 -10
- package/requests/printer-file/testfile.gcode +0 -5665
- package/requests/printer-file/upload-file.http +0 -11
- package/requests/printer-file/upload-slicer-file.http +0 -11
- package/requests/printers/list.http +0 -5
package/.yarnrc.yml
CHANGED
package/README.md
CHANGED
|
@@ -74,7 +74,7 @@ Thanks to the following parties for their financial support:
|
|
|
74
74
|
|
|
75
75
|
| Tier 1 | Tier 2 | Tier 3 | Tier 4 | One time |
|
|
76
76
|
|--------|--------|--------|--------|-----------|
|
|
77
|
-
| | [
|
|
77
|
+
| | [thatguymendel](https://github.com/thatguymendel) | | [doucettom](https://github.com/doucettom) | [th3dstudio](https://github.com/th3dstudio) |
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
## Contributors ✨
|
|
@@ -82,7 +82,7 @@ Thanks to the following parties for their financial support:
|
|
|
82
82
|
These are the people involved in the project. Find the meaning of the emoji keys [here](https://allcontributors.org/docs/en/emoji-key).
|
|
83
83
|
|
|
84
84
|
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
85
|
-
[](#contributors-)
|
|
86
86
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
87
87
|
|
|
88
88
|
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
@@ -91,34 +91,33 @@ These are the people involved in the project. Find the meaning of the emoji keys
|
|
|
91
91
|
<table>
|
|
92
92
|
<tbody>
|
|
93
93
|
<tr>
|
|
94
|
-
<td align="center" valign="top" width="
|
|
95
|
-
<td align="center" valign="top" width="
|
|
96
|
-
<td align="center" valign="top" width="
|
|
97
|
-
<td align="center" valign="top" width="
|
|
98
|
-
<td align="center" valign="top" width="
|
|
99
|
-
<td align="center" valign="top" width="
|
|
100
|
-
<td align="center" valign="top" width="
|
|
94
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/davidzwa"><img src="https://avatars.githubusercontent.com/u/6005355?v=4?s=40" width="40px;" alt="David Zwart"/><br /><sub><b>David Zwart</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Adavidzwa" title="Bug reports">🐛</a> <a href="https://github.com/fdm-monster/fdm-monster/commits?author=davidzwa" title="Code">💻</a> <a href="#maintenance-davidzwa" title="Maintenance">🚧</a> <a href="#userTesting-davidzwa" title="User Testing">📓</a></td>
|
|
95
|
+
<td align="center" valign="top" width="10%"><a href="https://kevenaar.name"><img src="https://avatars.githubusercontent.com/u/834643?v=4?s=40" width="40px;" alt="Maurice Kevenaar"/><br /><sub><b>Maurice Kevenaar</b></sub></a><br /><a href="#security-mkevenaar" title="Security">🛡️</a> <a href="#maintenance-mkevenaar" title="Maintenance">🚧</a> <a href="#ideas-mkevenaar" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Amkevenaar" title="Bug reports">🐛</a> <a href="https://github.com/fdm-monster/fdm-monster/pulls?q=is%3Apr+reviewed-by%3Amkevenaar" title="Reviewed Pull Requests">👀</a> <a href="#infra-mkevenaar" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
|
96
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/Tobikisss"><img src="https://avatars.githubusercontent.com/u/45754890?v=4?s=40" width="40px;" alt="Tobias"/><br /><sub><b>Tobias</b></sub></a><br /><a href="#ideas-Tobikisss" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-Tobikisss" title="Maintenance">🚧</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3ATobikisss" title="Bug reports">🐛</a></td>
|
|
97
|
+
<td align="center" valign="top" width="10%"><a href="https://tideline3d.com"><img src="https://avatars.githubusercontent.com/u/12903320?v=4?s=40" width="40px;" alt="tideline3d"/><br /><sub><b>tideline3d</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Atideline3d" title="Bug reports">🐛</a> <a href="#ideas-tideline3d" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
98
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/windarrow3d"><img src="https://avatars.githubusercontent.com/u/91099282?v=4?s=40" width="40px;" alt="WindArrow3d"/><br /><sub><b>WindArrow3d</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Awindarrow3d" title="Bug reports">🐛</a> <a href="#financial-windarrow3d" title="Financial">💵</a> <a href="#ideas-windarrow3d" title="Ideas, Planning, & Feedback">🤔</a> <a href="#userTesting-windarrow3d" title="User Testing">📓</a> <a href="#platform-windarrow3d" title="Packaging/porting to new platform">📦</a></td>
|
|
99
|
+
<td align="center" valign="top" width="10%"><a href="http://lucianchapar.com"><img src="https://avatars.githubusercontent.com/u/33263520?v=4?s=40" width="40px;" alt="Lucian Chapar"/><br /><sub><b>Lucian Chapar</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Alucian151" title="Bug reports">🐛</a></td>
|
|
100
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/Dumnersm580"><img src="https://avatars.githubusercontent.com/u/80608783?v=4?s=40" width="40px;" alt="Dumnersm580"/><br /><sub><b>Dumnersm580</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/commits?author=Dumnersm580" title="Documentation">📖</a> <a href="#ideas-Dumnersm580" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
101
|
+
<td align="center" valign="top" width="10%"><a href="http://www.tophattwaffle.com"><img src="https://avatars.githubusercontent.com/u/6774125?v=4?s=40" width="40px;" alt="tophattwaffle"/><br /><sub><b>tophattwaffle</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Atophattwaffle" title="Bug reports">🐛</a> <a href="#ideas-tophattwaffle" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
102
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/rmhenn"><img src="https://avatars.githubusercontent.com/u/22482801?v=4?s=40" width="40px;" alt="rmhenn"/><br /><sub><b>rmhenn</b></sub></a><br /><a href="#ideas-rmhenn" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Armhenn" title="Bug reports">🐛</a></td>
|
|
103
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/cyrixdx4"><img src="https://avatars.githubusercontent.com/u/62126724?v=4?s=40" width="40px;" alt="cyrixdx4"/><br /><sub><b>cyrixdx4</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Acyrixdx4" title="Bug reports">🐛</a></td>
|
|
101
104
|
</tr>
|
|
102
105
|
<tr>
|
|
103
|
-
<td align="center" valign="top" width="
|
|
104
|
-
<td align="center" valign="top" width="
|
|
105
|
-
<td align="center" valign="top" width="
|
|
106
|
-
<td align="center" valign="top" width="
|
|
107
|
-
<td align="center" valign="top" width="
|
|
108
|
-
<td align="center" valign="top" width="
|
|
109
|
-
<td align="center" valign="top" width="
|
|
106
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/doucettom"><img src="https://avatars.githubusercontent.com/u/6595645?v=4?s=40" width="40px;" alt="doucettom"/><br /><sub><b>doucettom</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Adoucettom" title="Bug reports">🐛</a> <a href="#ideas-doucettom" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
107
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/ZombiesLoveMe"><img src="https://avatars.githubusercontent.com/u/35661391?v=4?s=40" width="40px;" alt="Callum"/><br /><sub><b>Callum</b></sub></a><br /><a href="#ideas-ZombiesLoveMe" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
108
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/bharvey88"><img src="https://avatars.githubusercontent.com/u/8107750?v=4?s=40" width="40px;" alt="bharvey88"/><br /><sub><b>bharvey88</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Abharvey88" title="Bug reports">🐛</a> <a href="#infra-bharvey88" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#platform-bharvey88" title="Packaging/porting to new platform">📦</a></td>
|
|
109
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/Mikec78660"><img src="https://avatars.githubusercontent.com/u/108021920?v=4?s=40" width="40px;" alt="Mikec78660"/><br /><sub><b>Mikec78660</b></sub></a><br /><a href="#ideas-Mikec78660" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
110
|
+
<td align="center" valign="top" width="10%"><a href="https://techinterview.guide"><img src="https://avatars.githubusercontent.com/u/168030?v=4?s=40" width="40px;" alt="w. ian douglas"/><br /><sub><b>w. ian douglas</b></sub></a><br /><a href="#ideas-iandouglas" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
111
|
+
<td align="center" valign="top" width="10%"><a href="http://insanityautomation.com/"><img src="https://avatars.githubusercontent.com/u/38436470?v=4?s=40" width="40px;" alt="InsanityAutomation"/><br /><sub><b>InsanityAutomation</b></sub></a><br /><a href="#ideas-InsanityAutomation" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3AInsanityAutomation" title="Bug reports">🐛</a></td>
|
|
112
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/LyfeOnEdge"><img src="https://avatars.githubusercontent.com/u/26140376?v=4?s=40" width="40px;" alt="Andrew (LyfeOnEdge) (ArcticGentoo)"/><br /><sub><b>Andrew (LyfeOnEdge) (ArcticGentoo)</b></sub></a><br /><a href="#ideas-LyfeOnEdge" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
113
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/callanova"><img src="https://avatars.githubusercontent.com/u/175639705?v=4?s=40" width="40px;" alt="callanova"/><br /><sub><b>callanova</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Acallanova" title="Bug reports">🐛</a></td>
|
|
114
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/thatguymendel"><img src="https://avatars.githubusercontent.com/u/67444998?v=4?s=40" width="40px;" alt="thatguymendel"/><br /><sub><b>thatguymendel</b></sub></a><br /><a href="#ideas-thatguymendel" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
115
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/julien-printerbox"><img src="https://avatars.githubusercontent.com/u/134132189?v=4?s=40" width="40px;" alt="julien-printerbox"/><br /><sub><b>julien-printerbox</b></sub></a><br /><a href="#ideas-julien-printerbox" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
110
116
|
</tr>
|
|
111
117
|
<tr>
|
|
112
|
-
<td align="center" valign="top" width="
|
|
113
|
-
<td align="center" valign="top" width="
|
|
114
|
-
<td align="center" valign="top" width="
|
|
115
|
-
<td align="center" valign="top" width="14.28%"><a href="https://github.com/callanova"><img src="https://avatars.githubusercontent.com/u/175639705?v=4?s=80" width="80px;" alt="callanova"/><br /><sub><b>callanova</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Acallanova" title="Bug reports">🐛</a></td>
|
|
116
|
-
<td align="center" valign="top" width="14.28%"><a href="https://github.com/thatguymendel"><img src="https://avatars.githubusercontent.com/u/67444998?v=4?s=80" width="80px;" alt="thatguymendel"/><br /><sub><b>thatguymendel</b></sub></a><br /><a href="#ideas-thatguymendel" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
117
|
-
<td align="center" valign="top" width="14.28%"><a href="https://github.com/julien-printerbox"><img src="https://avatars.githubusercontent.com/u/134132189?v=4?s=80" width="80px;" alt="julien-printerbox"/><br /><sub><b>julien-printerbox</b></sub></a><br /><a href="#ideas-julien-printerbox" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
118
|
-
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tbwan"><img src="https://avatars.githubusercontent.com/u/44231748?v=4?s=80" width="80px;" alt="Tbwan"/><br /><sub><b>Tbwan</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3ATbwan" title="Bug reports">🐛</a></td>
|
|
119
|
-
</tr>
|
|
120
|
-
<tr>
|
|
121
|
-
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nuvious"><img src="https://avatars.githubusercontent.com/u/5287736?v=4?s=80" width="80px;" alt="David Cheeseman"/><br /><sub><b>David Cheeseman</b></sub></a><br /><a href="#ideas-nuvious" title="Ideas, Planning, & Feedback">🤔</a> <a href="#platform-nuvious" title="Packaging/porting to new platform">📦</a> <a href="#infra-nuvious" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
|
118
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/Tbwan"><img src="https://avatars.githubusercontent.com/u/44231748?v=4?s=40" width="40px;" alt="Tbwan"/><br /><sub><b>Tbwan</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3ATbwan" title="Bug reports">🐛</a></td>
|
|
119
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/nuvious"><img src="https://avatars.githubusercontent.com/u/5287736?v=4?s=40" width="40px;" alt="David Cheeseman"/><br /><sub><b>David Cheeseman</b></sub></a><br /><a href="#ideas-nuvious" title="Ideas, Planning, & Feedback">🤔</a> <a href="#platform-nuvious" title="Packaging/porting to new platform">📦</a> <a href="#infra-nuvious" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
|
120
|
+
<td align="center" valign="top" width="10%"><a href="https://github.com/thatguy-jaysenodell"><img src="https://avatars.githubusercontent.com/u/118288184?v=4?s=40" width="40px;" alt="That Guy Jaysen"/><br /><sub><b>That Guy Jaysen</b></sub></a><br /><a href="https://github.com/fdm-monster/fdm-monster/issues?q=author%3Athatguy-jaysenodell" title="Bug reports">🐛</a></td>
|
|
122
121
|
</tr>
|
|
123
122
|
</tbody>
|
|
124
123
|
</table>
|
package/RELEASE_NOTES.MD
CHANGED
|
@@ -1,10 +1,72 @@
|
|
|
1
1
|
# Develop
|
|
2
2
|
|
|
3
|
+
## Features
|
|
4
|
+
- Introduce PrusaLink adapter for limited printer support for these printers: MK3S(+) (needs PrusaLink extension with Raspberry Pi), Mini(+), MK4(S), XL, Core One
|
|
5
|
+
- Add opt-in Prometheus integration (still experimental)
|
|
6
|
+
- Add opt-in Loki integration (still experimental)
|
|
7
|
+
|
|
8
|
+
## Chores
|
|
9
|
+
|
|
10
|
+
- Remove unused code for OctoPrint plugin support (this work needs to go through triage again)
|
|
11
|
+
- Remove unused code for OctoPrint plugin backup (this work needs to go through triage again)
|
|
12
|
+
- Remove unused code for OctoPrint plugin firmware update (this work needs to go through triage again)
|
|
13
|
+
- Remove unused code for OctoPrint plugin repository
|
|
14
|
+
- Remove unused code for Prusa firmware releases
|
|
15
|
+
- Remove printer API endpoints for OctoPrint plugins, backups and firmware updates
|
|
16
|
+
- Remove cache-manager package
|
|
17
|
+
- Remove unused console files
|
|
18
|
+
- Update .env.template
|
|
19
|
+
- Removed BaseEntity
|
|
20
|
+
- Make printerId camera nullish
|
|
21
|
+
- Merge create and update schema floor
|
|
22
|
+
- Schema printerPositionsSchema simplified
|
|
23
|
+
- Add biome linter/formatter, remove prettier and eslint
|
|
24
|
+
|
|
25
|
+
## Changes
|
|
26
|
+
|
|
27
|
+
- `tsconfig.json` strictNullChecks and strictPropertyInitialization set to true for better null propagation logic.
|
|
28
|
+
- Update dependency injection with awilix, switch to CLASSIC mode for less verbose code
|
|
29
|
+
- Update API controller, use decorators over api builder
|
|
30
|
+
- Remove PrinterFile entity (unused)
|
|
31
|
+
- Remove printer/connection PATCH endpoint (unused)
|
|
32
|
+
- Remove debug settings from server settings database
|
|
33
|
+
- Remove all API compatibility feature flags except for printerGroupsApi and multiplePrinterServices
|
|
34
|
+
|
|
35
|
+
## Fixes
|
|
36
|
+
|
|
37
|
+
- Fix punycode warning by pinning tr46 package
|
|
38
|
+
- Fix camera dto and entity to be consistent
|
|
39
|
+
- Make yaml import fill in default arrays
|
|
40
|
+
- Make printCompletionSchema context type any
|
|
41
|
+
- Enforce properties on camera stream Mongoose schema for consistency with TypeORM camera stream entity
|
|
42
|
+
- Enforce floor id on Mongoose schema for consistency with TypeORM floor entity
|
|
43
|
+
- Set floor id in Mongoose floor service for consistency with typeorm service
|
|
44
|
+
- Fix print completion interface and dto
|
|
45
|
+
- Improved API key validation: klipper validation completely isolated from OctoPrint api key validation
|
|
46
|
+
- Query parameter `forceSave` in printer create/update API was used incorrectly (flipped around)
|
|
47
|
+
- Fixed all typescript issues
|
|
48
|
+
- Server settings would not always migrate properly
|
|
49
|
+
- Printer files store will not cache files of disabled printers
|
|
50
|
+
- Klipper printer should print on upload
|
|
51
|
+
|
|
52
|
+
# FDM Monster 19/03/2025 1.8.3
|
|
53
|
+
|
|
54
|
+
## Fixes
|
|
55
|
+
|
|
56
|
+
- Introduce HttpClientBuilder pattern for Octoprint client
|
|
57
|
+
- Fix Sentry usage has updated
|
|
58
|
+
- Fix upload progress was not updated properly
|
|
59
|
+
- Fix failures and completions in file upload to OctoPrint/Moonraker were not consistently pushed over SocketIO
|
|
60
|
+
- Fix Moonraker file upload did not track upload, failure or completion
|
|
61
|
+
- Fix Moonraker file upload did not try-catch failures
|
|
62
|
+
- Fix thumbnail is now parsed after file upload instead of before, preventing premature thumbnail switch in case of upload failure.
|
|
63
|
+
- Fix file uploads were never unlinked, except for server startup.
|
|
64
|
+
|
|
3
65
|
# FDM Monster 03/01/2025 1.8.2
|
|
4
66
|
|
|
5
|
-
## Changes
|
|
67
|
+
## Changes
|
|
6
68
|
|
|
7
|
-
Update client to 1.8.8
|
|
69
|
+
- Update client to 1.8.8
|
|
8
70
|
|
|
9
71
|
## Chore
|
|
10
72
|
|
|
@@ -24,7 +86,7 @@ Update client to 1.8.8
|
|
|
24
86
|
|
|
25
87
|
- Update to client 1.8.4
|
|
26
88
|
|
|
27
|
-
## Fixes
|
|
89
|
+
## Fixes
|
|
28
90
|
|
|
29
91
|
- YAML import: regression caused all imports to fail validation
|
|
30
92
|
- YAML import: a bug caused all import with printers without api key to fail validation
|
|
@@ -52,7 +114,7 @@ Update client to 1.8.8
|
|
|
52
114
|
|
|
53
115
|
## Fixes
|
|
54
116
|
|
|
55
|
-
- UserService: MongoDB had incorrect root user checks and SQLite user service missed the check altogether. Now root user checks are robust.
|
|
117
|
+
- UserService: MongoDB had incorrect root user checks and SQLite user service missed the check altogether. Now root user checks are robust.
|
|
56
118
|
- Camera API: GUEST should not have access to change cameras
|
|
57
119
|
- YAML import validation: new API keys are not accepted by outdated YAML validation
|
|
58
120
|
|
|
@@ -73,7 +135,7 @@ Update client to 1.8.8
|
|
|
73
135
|
|
|
74
136
|
- User API: new endpoint which registers user directly with roles and without verification step
|
|
75
137
|
|
|
76
|
-
## Fixes:
|
|
138
|
+
## Fixes:
|
|
77
139
|
|
|
78
140
|
- PrinterEventsCache: when printers and test printers are deleted, the printer events cache should not be allowed to be filled by late update events
|
|
79
141
|
|
|
@@ -90,7 +152,7 @@ Update client to 1.8.8
|
|
|
90
152
|
## Fixes:
|
|
91
153
|
|
|
92
154
|
- API & Service validators: adjust max length of apiKey property validation to 43 to allow new `secrets` based OctoPrint api keys
|
|
93
|
-
|
|
155
|
+
|
|
94
156
|
# FDM Monster 04/11/2024 1.7.1
|
|
95
157
|
|
|
96
158
|
## Changes:
|
|
@@ -139,7 +201,7 @@ Update client to 1.8.8
|
|
|
139
201
|
- Used attributes for PrinterFilesController
|
|
140
202
|
- Renamed OctoPrintApiService to OctoprintClient
|
|
141
203
|
- Switch to 1.6.x client UI version range
|
|
142
|
-
- Update Octoprint websocket with refresh interval, defaulting to 10sec. This loop will keep refresh attempts internal to the Websocket adapter of each service type (Octoprint, Moonraker,
|
|
204
|
+
- Update Octoprint websocket with refresh interval, defaulting to 10sec. This loop will keep refresh attempts internal to the Websocket adapter of each service type (Octoprint, Moonraker, etc).
|
|
143
205
|
|
|
144
206
|
## Fixes:
|
|
145
207
|
|
package/biome.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
|
|
3
|
+
"vcs": {
|
|
4
|
+
"enabled": false,
|
|
5
|
+
"clientKind": "git",
|
|
6
|
+
"useIgnoreFile": false
|
|
7
|
+
},
|
|
8
|
+
"files": {
|
|
9
|
+
"ignoreUnknown": false,
|
|
10
|
+
"ignore": []
|
|
11
|
+
},
|
|
12
|
+
"formatter": {
|
|
13
|
+
"enabled": true,
|
|
14
|
+
"indentStyle": "space",
|
|
15
|
+
"indentWidth": 2,
|
|
16
|
+
"lineWidth": 120
|
|
17
|
+
},
|
|
18
|
+
"organizeImports": {
|
|
19
|
+
"enabled": true
|
|
20
|
+
},
|
|
21
|
+
"linter": {
|
|
22
|
+
"enabled": true,
|
|
23
|
+
"rules": {
|
|
24
|
+
"recommended": true
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"javascript": {
|
|
28
|
+
"formatter": {
|
|
29
|
+
"quoteStyle": "double",
|
|
30
|
+
"trailingCommas": "all"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/consoles/download-github-releases.ts"],"names":["fetchReleases","response","axios","get","releases","data","releaseData","map","release","tag_name","name","published_at","body","outputPath","path","join","__dirname","fs","writeFileSync","JSON","stringify","console","log","error","fetchLatest"],"mappings":";;;;8DAAkB;2DACH;6DACE;;;;;;AASjB,MAAMA,gBAAgB;IACpB,IAAI;QACF,MAAMC,WAAW,MAAMC,cAAK,CAACC,GAAG,CAAY;QAC5C,MAAMC,WAAWH,SAASI,IAAI;QAG9B,MAAMC,cAAcF,SAASG,GAAG,CAAC,CAACC,UAAa,CAAA;gBAC7CC,UAAUD,QAAQC,QAAQ;gBAC1BC,MAAMF,QAAQE,IAAI;gBAClBC,cAAcH,QAAQG,YAAY;gBAClCC,MAAMJ,QAAQI,IAAI;YACpB,CAAA;QAGA,MAAMC,aAAaC,aAAI,CAACC,IAAI,CAACC,WAAW;QACxCC,WAAE,CAACC,aAAa,CAACL,YAAYM,KAAKC,SAAS,CAACd,aAAa,MAAM;QAC/De,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAET,YAAY;IACtD,EAAE,OAAOU,OAAO;QACdF,QAAQE,KAAK,CAAC,4BAA4BA;IAC5C;AACF;AAEA,MAAMC,cAAc;IAClB,IAAI;QACF,MAAMvB,WAAW,MAAMC,cAAK,CAACC,GAAG,
|
|
1
|
+
{"version":3,"sources":["../../src/consoles/download-github-releases.ts"],"names":["fetchReleases","response","axios","get","releases","data","releaseData","map","release","tag_name","name","published_at","body","outputPath","path","join","__dirname","fs","writeFileSync","JSON","stringify","console","log","error","fetchLatest"],"mappings":";;;;8DAAkB;2DACH;6DACE;;;;;;AASjB,MAAMA,gBAAgB;IACpB,IAAI;QACF,MAAMC,WAAW,MAAMC,cAAK,CAACC,GAAG,CAAY;QAC5C,MAAMC,WAAWH,SAASI,IAAI;QAG9B,MAAMC,cAAcF,SAASG,GAAG,CAAC,CAACC,UAAa,CAAA;gBAC7CC,UAAUD,QAAQC,QAAQ;gBAC1BC,MAAMF,QAAQE,IAAI;gBAClBC,cAAcH,QAAQG,YAAY;gBAClCC,MAAMJ,QAAQI,IAAI;YACpB,CAAA;QAGA,MAAMC,aAAaC,aAAI,CAACC,IAAI,CAACC,WAAW;QACxCC,WAAE,CAACC,aAAa,CAACL,YAAYM,KAAKC,SAAS,CAACd,aAAa,MAAM;QAC/De,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAET,YAAY;IACtD,EAAE,OAAOU,OAAO;QACdF,QAAQE,KAAK,CAAC,4BAA4BA;IAC5C;AACF;AAEA,MAAMC,cAAc;IAClB,IAAI;QACF,MAAMvB,WAAW,MAAMC,cAAK,CAACC,GAAG,CAC9B;QAEF,MAAMK,UAAUP,SAASI,IAAI;QAG7B,MAAMC,cAAc;YAClBG,UAAUD,QAAQC,QAAQ;YAC1BC,MAAMF,QAAQE,IAAI;YAClBC,cAAcH,QAAQG,YAAY;YAClCC,MAAMJ,QAAQI,IAAI;QACpB;QAGA,MAAMC,aAAaC,aAAI,CAACC,IAAI,CAACC,WAAW;QACxCC,WAAE,CAACC,aAAa,CAACL,YAAYM,KAAKC,SAAS,CAACd,aAAa,MAAM;QAC/De,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAET,YAAY;IACtD,EAAE,OAAOU,OAAO;QACdF,QAAQE,KAAK,CAAC,4BAA4BA;IAC5C;AACF;AAEAvB;AACAwB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
const _child_process = require("child_process");
|
|
6
|
+
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
7
|
+
function _interop_require_default(obj) {
|
|
8
|
+
return obj && obj.__esModule ? obj : {
|
|
9
|
+
default: obj
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const startPort = 1234;
|
|
13
|
+
const instanceCount = 10;
|
|
14
|
+
console.log(`Starting ${instanceCount} fake OctoPrint servers...`);
|
|
15
|
+
for(let i = 0; i < instanceCount; i++){
|
|
16
|
+
const port = startPort + i;
|
|
17
|
+
const process = (0, _child_process.spawn)("node", [
|
|
18
|
+
_path.default.join(__dirname, "./mock-octoprint.server.js"),
|
|
19
|
+
port.toString()
|
|
20
|
+
]);
|
|
21
|
+
process.stdout.on("data", (data)=>{
|
|
22
|
+
console.log(`[Server ${i + 1} - Port ${port}]: ${data.toString().trim()}`);
|
|
23
|
+
});
|
|
24
|
+
process.stderr.on("data", (data)=>{
|
|
25
|
+
console.error(`[Server ${i + 1} - Port ${port}] ERROR: ${data.toString().trim()}`);
|
|
26
|
+
});
|
|
27
|
+
console.log(`Started server ${i + 1} on port ${port}`);
|
|
28
|
+
}
|
|
29
|
+
console.log("All servers started. Press Ctrl+C to stop all servers.");
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=launch-http-servers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/consoles/launch-http-servers.ts"],"names":["startPort","instanceCount","console","log","i","port","process","spawn","path","join","__dirname","toString","stdout","on","data","trim","stderr","error"],"mappings":";;;;+BAAsB;6DACL;;;;;;AAEjB,MAAMA,YAAY;AAClB,MAAMC,gBAAgB;AAEtBC,QAAQC,GAAG,CAAC,CAAC,SAAS,EAAEF,cAAc,0BAA0B,CAAC;AAEjE,IAAK,IAAIG,IAAI,GAAGA,IAAIH,eAAeG,IAAK;IACtC,MAAMC,OAAOL,YAAYI;IACzB,MAAME,UAAUC,IAAAA,oBAAK,EAAC,QAAQ;QAACC,aAAI,CAACC,IAAI,CAACC,WAAW;QAA+BL,KAAKM,QAAQ;KAAG;IAEnGL,QAAQM,MAAM,CAACC,EAAE,CAAC,QAAQ,CAACC;QACzBZ,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEC,IAAI,EAAE,QAAQ,EAAEC,KAAK,GAAG,EAAES,KAAKH,QAAQ,GAAGI,IAAI,IAAI;IAC3E;IAEAT,QAAQU,MAAM,CAACH,EAAE,CAAC,QAAQ,CAACC;QACzBZ,QAAQe,KAAK,CAAC,CAAC,QAAQ,EAAEb,IAAI,EAAE,QAAQ,EAAEC,KAAK,SAAS,EAAES,KAAKH,QAAQ,GAAGI,IAAI,IAAI;IACnF;IAEAb,QAAQC,GAAG,CAAC,CAAC,eAAe,EAAEC,IAAI,EAAE,SAAS,EAAEC,MAAM;AACvD;AAEAH,QAAQC,GAAG,CAAC"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
const _express = /*#__PURE__*/ _interop_require_default(require("express"));
|
|
6
|
+
const _multer = /*#__PURE__*/ _interop_require_default(require("multer"));
|
|
7
|
+
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
8
|
+
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
9
|
+
const _ws = require("ws");
|
|
10
|
+
const _http = /*#__PURE__*/ _interop_require_default(require("http"));
|
|
11
|
+
const _zod = require("zod");
|
|
12
|
+
const _nodeconsole = /*#__PURE__*/ _interop_require_wildcard(require("node:console"));
|
|
13
|
+
const _apimessages = require("./utils/api-messages");
|
|
14
|
+
const _wsmessages = require("./utils/ws-messages");
|
|
15
|
+
function _interop_require_default(obj) {
|
|
16
|
+
return obj && obj.__esModule ? obj : {
|
|
17
|
+
default: obj
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
21
|
+
if (typeof WeakMap !== "function") return null;
|
|
22
|
+
var cacheBabelInterop = new WeakMap();
|
|
23
|
+
var cacheNodeInterop = new WeakMap();
|
|
24
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
25
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
26
|
+
})(nodeInterop);
|
|
27
|
+
}
|
|
28
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
29
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
30
|
+
return obj;
|
|
31
|
+
}
|
|
32
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
33
|
+
return {
|
|
34
|
+
default: obj
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
38
|
+
if (cache && cache.has(obj)) {
|
|
39
|
+
return cache.get(obj);
|
|
40
|
+
}
|
|
41
|
+
var newObj = {
|
|
42
|
+
__proto__: null
|
|
43
|
+
};
|
|
44
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
45
|
+
for(var key in obj){
|
|
46
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
47
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
48
|
+
if (desc && (desc.get || desc.set)) {
|
|
49
|
+
Object.defineProperty(newObj, key, desc);
|
|
50
|
+
} else {
|
|
51
|
+
newObj[key] = obj[key];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
newObj.default = obj;
|
|
56
|
+
if (cache) {
|
|
57
|
+
cache.set(obj, newObj);
|
|
58
|
+
}
|
|
59
|
+
return newObj;
|
|
60
|
+
}
|
|
61
|
+
const port = process.argv[2] ? parseInt(process.argv[2]) : 1234;
|
|
62
|
+
const uploadsDir = _path.default.join(__dirname, "uploads", `server-${port.toString()}`);
|
|
63
|
+
const WS_MESSAGE_INTERVAL = 1000;
|
|
64
|
+
if (!_fs.default.existsSync(uploadsDir)) {
|
|
65
|
+
_nodeconsole.log(`[PORT ${port}] Creating uploads folder ${uploadsDir}`);
|
|
66
|
+
_fs.default.mkdirSync(uploadsDir, {
|
|
67
|
+
recursive: true
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
cleanupUploads();
|
|
71
|
+
const upload = (0, _multer.default)({
|
|
72
|
+
dest: uploadsDir
|
|
73
|
+
});
|
|
74
|
+
const app = (0, _express.default)();
|
|
75
|
+
const server = _http.default.createServer(app);
|
|
76
|
+
const wss = new _ws.Server({
|
|
77
|
+
server
|
|
78
|
+
});
|
|
79
|
+
const clients = new Map();
|
|
80
|
+
const AuthSchema = _zod.z.object({
|
|
81
|
+
command: _zod.z.literal("auth"),
|
|
82
|
+
user: _zod.z.literal("admin"),
|
|
83
|
+
token: _zod.z.string().regex(/^[a-zA-Z0-9]{32}$/)
|
|
84
|
+
});
|
|
85
|
+
wss.on("connection", (ws)=>{
|
|
86
|
+
const clientId = Date.now().toString();
|
|
87
|
+
_nodeconsole.log(`[PORT ${port}] New WebSocket connection established`);
|
|
88
|
+
let authenticated = false;
|
|
89
|
+
let messageInterval = null;
|
|
90
|
+
ws.on("message", async (message)=>{
|
|
91
|
+
try {
|
|
92
|
+
const msgString = message.toString();
|
|
93
|
+
if (msgString.includes("throttle")) {
|
|
94
|
+
_nodeconsole.log(`Throttle message received ${msgString}`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const json = JSON.parse(msgString);
|
|
98
|
+
if (!authenticated) {
|
|
99
|
+
if (!json) {
|
|
100
|
+
_nodeconsole.log(`[PORT ${port}] Invalid message JSON format`);
|
|
101
|
+
ws.close();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const parts = json.auth.split(":");
|
|
106
|
+
AuthSchema.parse({
|
|
107
|
+
command: "auth",
|
|
108
|
+
user: parts[0],
|
|
109
|
+
token: parts[1]
|
|
110
|
+
});
|
|
111
|
+
_nodeconsole.log(`[PORT ${port}] Authentication successful for admin`);
|
|
112
|
+
authenticated = true;
|
|
113
|
+
clients.set(clientId, {
|
|
114
|
+
ws,
|
|
115
|
+
authenticated
|
|
116
|
+
});
|
|
117
|
+
setTimeout(async ()=>{
|
|
118
|
+
try {
|
|
119
|
+
ws.send(JSON.stringify(_wsmessages.currentMessage));
|
|
120
|
+
} catch (fileError) {
|
|
121
|
+
_nodeconsole.error(`[PORT ${port}] Error reading message file:`, fileError);
|
|
122
|
+
ws.send(JSON.stringify({
|
|
123
|
+
error: "Failed to read message content"
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
}, 500);
|
|
127
|
+
messageInterval = setupMessageInterval(ws, clientId, WS_MESSAGE_INTERVAL);
|
|
128
|
+
} catch (validationError) {
|
|
129
|
+
_nodeconsole.log(`[PORT ${port}] Authentication failed: Invalid token format ${JSON.stringify(json)} ${validationError}`);
|
|
130
|
+
ws.close();
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
_nodeconsole.log(`[PORT ${port}] Received message from authenticated client`);
|
|
134
|
+
}
|
|
135
|
+
} catch (error) {
|
|
136
|
+
_nodeconsole.error(`[PORT ${port}] Error processing message:`, error);
|
|
137
|
+
ws.close();
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
ws.on("close", ()=>{
|
|
141
|
+
_nodeconsole.log(`[PORT ${port}] WebSocket connection closed ${clientId}`);
|
|
142
|
+
if (messageInterval) {
|
|
143
|
+
clearInterval(messageInterval);
|
|
144
|
+
messageInterval = null;
|
|
145
|
+
}
|
|
146
|
+
clients.delete(clientId);
|
|
147
|
+
});
|
|
148
|
+
const setupMessageInterval = (ws, clientId, baseInterval)=>{
|
|
149
|
+
if (messageInterval) {
|
|
150
|
+
clearInterval(messageInterval);
|
|
151
|
+
messageInterval = null;
|
|
152
|
+
}
|
|
153
|
+
const getRandomizedInterval = (baseMs)=>{
|
|
154
|
+
const variationFactor = 0.85 + Math.random() * 0.3;
|
|
155
|
+
return Math.floor(baseMs * variationFactor);
|
|
156
|
+
};
|
|
157
|
+
const sendPeriodicMessage = ()=>{
|
|
158
|
+
try {
|
|
159
|
+
if (ws.readyState === ws.OPEN) {
|
|
160
|
+
ws.send(JSON.stringify(_wsmessages.currentMessage));
|
|
161
|
+
_nodeconsole.log(`[PORT ${port}] Periodic message sent to client (ID: ${clientId})`);
|
|
162
|
+
messageInterval = setTimeout(sendPeriodicMessage, getRandomizedInterval(baseInterval));
|
|
163
|
+
} else {
|
|
164
|
+
_nodeconsole.log(`[PORT ${port}] Stopped periodic messages for client (ID: ${clientId})`);
|
|
165
|
+
messageInterval = null;
|
|
166
|
+
}
|
|
167
|
+
} catch (error) {
|
|
168
|
+
_nodeconsole.error(`[PORT ${port}] Error sending periodic message:`, error);
|
|
169
|
+
messageInterval = null;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
messageInterval = setTimeout(sendPeriodicMessage, getRandomizedInterval(baseInterval));
|
|
173
|
+
return messageInterval;
|
|
174
|
+
};
|
|
175
|
+
});
|
|
176
|
+
app.get("/api/version", async (req, res)=>{
|
|
177
|
+
res.send({
|
|
178
|
+
server: "1",
|
|
179
|
+
api: "2",
|
|
180
|
+
text: "3"
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
app.get("/api/currentuser", async (req, res)=>{
|
|
184
|
+
res.send({
|
|
185
|
+
name: "admin",
|
|
186
|
+
permissions: [],
|
|
187
|
+
groups: []
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
app.get("/api/printer", async (req, res)=>{
|
|
191
|
+
_nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
|
|
192
|
+
res.status(200).json(_apimessages.printerHistorySuccessResponse);
|
|
193
|
+
});
|
|
194
|
+
app.get("/api/connection", async (req, res)=>{
|
|
195
|
+
_nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
|
|
196
|
+
res.status(200).json(_apimessages.connectionSuccessResponse);
|
|
197
|
+
});
|
|
198
|
+
app.get("/api/job", async (req, res)=>{
|
|
199
|
+
_nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
|
|
200
|
+
res.status(200).json(_apimessages.jobSuccessResponse);
|
|
201
|
+
});
|
|
202
|
+
app.get("/api/files/local", async (req, res)=>{
|
|
203
|
+
_nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} request`);
|
|
204
|
+
res.status(200).json(_apimessages.filesSuccessResponse);
|
|
205
|
+
});
|
|
206
|
+
app.post("/api/login", async (req, res)=>{
|
|
207
|
+
res.send({
|
|
208
|
+
_is_external_client: true,
|
|
209
|
+
_login_mechanism: "apikey",
|
|
210
|
+
session: "123123abc123123abc123123abc123ab"
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
app.post("/api/files/local", upload.single("file"), (req, res)=>{
|
|
214
|
+
const { select, print } = req.body;
|
|
215
|
+
const file = req.file;
|
|
216
|
+
if (!file) {
|
|
217
|
+
return res.status(400).json({
|
|
218
|
+
error: "Missing file"
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
if (typeof select === "undefined" || typeof print === "undefined") {
|
|
222
|
+
return res.status(400).json({
|
|
223
|
+
error: "Missing required fields: select, print"
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
if (Object.keys(req.body).length !== 2) {
|
|
227
|
+
return res.status(400).json({
|
|
228
|
+
error: "Only fields 'select' and 'print' are allowed"
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
if (![
|
|
232
|
+
"true",
|
|
233
|
+
"false"
|
|
234
|
+
].includes(select) || ![
|
|
235
|
+
"true",
|
|
236
|
+
"false"
|
|
237
|
+
].includes(print)) {
|
|
238
|
+
return res.status(400).json({
|
|
239
|
+
error: "Fields 'select' and 'print' must be boolean values (true/false)"
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
_nodeconsole.log(`[PORT ${port}] Received file:`, file.originalname);
|
|
243
|
+
_nodeconsole.log(`[PORT ${port}] File size:`, file.size);
|
|
244
|
+
_nodeconsole.log(`[PORT ${port}] MIME type:`, file.mimetype);
|
|
245
|
+
_nodeconsole.log(`[PORT ${port}] select:`, select, `\n[PORT ${port}] print:`, print, `\n-----`);
|
|
246
|
+
res.json({
|
|
247
|
+
message: "File received successfully"
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
app.use((req, res)=>{
|
|
251
|
+
_nodeconsole.log(`[PORT ${port}] ${req.method.toUpperCase()} ${req.url} Not found`);
|
|
252
|
+
res.status(404).json({
|
|
253
|
+
error: "Not Found"
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
server.listen(port, ()=>{
|
|
257
|
+
_nodeconsole.log(`[PORT ${port}] Server is running on http://localhost:${port}`);
|
|
258
|
+
_nodeconsole.log(`[PORT ${port}] WebSocket server is available on ws://localhost:${port}`);
|
|
259
|
+
});
|
|
260
|
+
process.on("SIGINT", ()=>{
|
|
261
|
+
_nodeconsole.log("\n[PORT ${port}] Received SIGINT signal (Ctrl+C). Shutting down gracefully...");
|
|
262
|
+
cleanupUploads();
|
|
263
|
+
server.close(()=>{
|
|
264
|
+
_nodeconsole.log("[PORT ${port}] Server closed");
|
|
265
|
+
process.exit(0);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
process.on("SIGTERM", ()=>{
|
|
269
|
+
_nodeconsole.log("\n[PORT ${port}] Received SIGTERM signal. Shutting down gracefully...");
|
|
270
|
+
cleanupUploads();
|
|
271
|
+
server.close(()=>{
|
|
272
|
+
_nodeconsole.log("[PORT ${port}] Server closed");
|
|
273
|
+
process.exit(0);
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
function cleanupUploads() {
|
|
277
|
+
try {
|
|
278
|
+
_nodeconsole.log(`[PORT ${port}] Cleaning up uploads folder...`);
|
|
279
|
+
const files = _fs.default.readdirSync(uploadsDir);
|
|
280
|
+
for (const file of files){
|
|
281
|
+
const filePath = _path.default.join(uploadsDir, file);
|
|
282
|
+
_fs.default.unlinkSync(filePath);
|
|
283
|
+
_nodeconsole.log(`[PORT ${port}] Deleted: ${filePath}`);
|
|
284
|
+
}
|
|
285
|
+
_nodeconsole.log(`[PORT ${port}] Uploads folder cleanup complete`);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
_nodeconsole.error(`[PORT ${port}] Error cleaning up uploads folder:`, error);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
//# sourceMappingURL=mock-octoprint.server.js.map
|