@fdm-monster/server 1.5.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 +19 -0
- package/.env.template +43 -0
- package/.gitattributes +1 -0
- package/.idea/codeStyles/Project.xml +85 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/dbnavigator.xml +574 -0
- package/.idea/fdm-monster.iml +16 -0
- package/.idea/inspectionProfiles/Project_Default.xml +22 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/modules.xml +12 -0
- package/.idea/prettier.xml +6 -0
- package/.idea/vcs.xml +17 -0
- package/.swcrc +33 -0
- package/CODE_OF_CONDUCT.md +46 -0
- package/CONTRIBUTING.md +134 -0
- package/LICENSE +661 -0
- package/README.md +149 -0
- package/SECURITY.md +16 -0
- package/dist/@type/express/index.d.js +7 -0
- package/dist/@type/express/index.d.js.map +1 -0
- package/dist/constants/authorization.constants.js +99 -0
- package/dist/constants/authorization.constants.js.map +1 -0
- package/dist/constants/event.constants.js +55 -0
- package/dist/constants/event.constants.js.map +1 -0
- package/dist/constants/http-status-codes.constants.js +268 -0
- package/dist/constants/http-status-codes.constants.js.map +1 -0
- package/dist/constants/server-settings.constants.js +119 -0
- package/dist/constants/server-settings.constants.js.map +1 -0
- package/dist/constants/service.constants.js +48 -0
- package/dist/constants/service.constants.js.map +1 -0
- package/dist/container.js +161 -0
- package/dist/container.js.map +1 -0
- package/dist/container.tokens.js +83 -0
- package/dist/container.tokens.js.map +1 -0
- package/dist/controllers/auth.controller.js +143 -0
- package/dist/controllers/auth.controller.js.map +1 -0
- package/dist/controllers/batch-call.controller.js +59 -0
- package/dist/controllers/batch-call.controller.js.map +1 -0
- package/dist/controllers/camera-stream.controller.js +57 -0
- package/dist/controllers/camera-stream.controller.js.map +1 -0
- package/dist/controllers/custom-gcode.controller.js +76 -0
- package/dist/controllers/custom-gcode.controller.js.map +1 -0
- package/dist/controllers/first-time-setup.controller.js +65 -0
- package/dist/controllers/first-time-setup.controller.js.map +1 -0
- package/dist/controllers/floor.controller.js +78 -0
- package/dist/controllers/floor.controller.js.map +1 -0
- package/dist/controllers/plugin-firmware-update.controller.js +140 -0
- package/dist/controllers/plugin-firmware-update.controller.js.map +1 -0
- package/dist/controllers/print-completion.controller.js +58 -0
- package/dist/controllers/print-completion.controller.js.map +1 -0
- package/dist/controllers/printer-files.controller.js +208 -0
- package/dist/controllers/printer-files.controller.js.map +1 -0
- package/dist/controllers/printer-settings.controller.js +58 -0
- package/dist/controllers/printer-settings.controller.js.map +1 -0
- package/dist/controllers/printer.controller.js +287 -0
- package/dist/controllers/printer.controller.js.map +1 -0
- package/dist/controllers/server-private.controller.js +122 -0
- package/dist/controllers/server-private.controller.js.map +1 -0
- package/dist/controllers/server-public.controller.js +140 -0
- package/dist/controllers/server-public.controller.js.map +1 -0
- package/dist/controllers/settings.controller.js +89 -0
- package/dist/controllers/settings.controller.js.map +1 -0
- package/dist/controllers/user.controller.js +137 -0
- package/dist/controllers/user.controller.js.map +1 -0
- package/dist/controllers/validation/auth-controller.validation.js +15 -0
- package/dist/controllers/validation/auth-controller.validation.js.map +1 -0
- package/dist/controllers/validation/batch-controller.validation.js +29 -0
- package/dist/controllers/validation/batch-controller.validation.js.map +1 -0
- package/dist/controllers/validation/generic.validation.js +15 -0
- package/dist/controllers/validation/generic.validation.js.map +1 -0
- package/dist/controllers/validation/printer-controller.validation.js +66 -0
- package/dist/controllers/validation/printer-controller.validation.js.map +1 -0
- package/dist/controllers/validation/printer-files-controller.validation.js +66 -0
- package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -0
- package/dist/controllers/validation/printer-settings-controller.validation.js +15 -0
- package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -0
- package/dist/controllers/validation/setting.validation.js +19 -0
- package/dist/controllers/validation/setting.validation.js.map +1 -0
- package/dist/controllers/validation/user-controller.validation.js +16 -0
- package/dist/controllers/validation/user-controller.validation.js.map +1 -0
- package/dist/exceptions/job.exceptions.js +18 -0
- package/dist/exceptions/job.exceptions.js.map +1 -0
- package/dist/exceptions/runtime.exceptions.js +108 -0
- package/dist/exceptions/runtime.exceptions.js.map +1 -0
- package/dist/handlers/cache-manager.js +25 -0
- package/dist/handlers/cache-manager.js.map +1 -0
- package/dist/handlers/event-emitter.js +31 -0
- package/dist/handlers/event-emitter.js.map +1 -0
- package/dist/handlers/logger-factory.js +18 -0
- package/dist/handlers/logger-factory.js.map +1 -0
- package/dist/handlers/logger.js +85 -0
- package/dist/handlers/logger.js.map +1 -0
- package/dist/handlers/validators.js +131 -0
- package/dist/handlers/validators.js.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/authenticate.js +83 -0
- package/dist/middleware/authenticate.js.map +1 -0
- package/dist/middleware/database.js +26 -0
- package/dist/middleware/database.js.map +1 -0
- package/dist/middleware/exception.handler.js +96 -0
- package/dist/middleware/exception.handler.js.map +1 -0
- package/dist/middleware/global.middleware.js +58 -0
- package/dist/middleware/global.middleware.js.map +1 -0
- package/dist/middleware/passport.js +44 -0
- package/dist/middleware/passport.js.map +1 -0
- package/dist/middleware/printer.js +49 -0
- package/dist/middleware/printer.js.map +1 -0
- package/dist/migrations/1696187882312-PrinterFile.js +40 -0
- package/dist/migrations/1696187882312-PrinterFile.js.map +1 -0
- package/dist/models/Auth/Permission.js +20 -0
- package/dist/models/Auth/Permission.js.map +1 -0
- package/dist/models/Auth/RefreshToken.js +41 -0
- package/dist/models/Auth/RefreshToken.js.map +1 -0
- package/dist/models/Auth/Role.js +20 -0
- package/dist/models/Auth/Role.js.map +1 -0
- package/dist/models/Auth/User.js +51 -0
- package/dist/models/Auth/User.js.map +1 -0
- package/dist/models/CameraStream.js +59 -0
- package/dist/models/CameraStream.js.map +1 -0
- package/dist/models/CustomGcode.js +28 -0
- package/dist/models/CustomGcode.js.map +1 -0
- package/dist/models/Floor.js +33 -0
- package/dist/models/Floor.js.map +1 -0
- package/dist/models/FloorPrinter.js +29 -0
- package/dist/models/FloorPrinter.js.map +1 -0
- package/dist/models/PrintCompletion.js +40 -0
- package/dist/models/PrintCompletion.js.map +1 -0
- package/dist/models/Printer.js +113 -0
- package/dist/models/Printer.js.map +1 -0
- package/dist/models/ServerSettings.js +168 -0
- package/dist/models/ServerSettings.js.map +1 -0
- package/dist/models/Settings.js +168 -0
- package/dist/models/Settings.js.map +1 -0
- package/dist/models/index.js +54 -0
- package/dist/models/index.js.map +1 -0
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js +49 -0
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +1 -0
- package/dist/mongo-migrations/20210907173950-printers-enabled.js +39 -0
- package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +1 -0
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js +39 -0
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +1 -0
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js +60 -0
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +1 -0
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js +30 -0
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +1 -0
- package/dist/mongo-migrations/20230716065316-user-remove-name.js +30 -0
- package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +1 -0
- package/dist/nodemon_restart_trigger.js +4 -0
- package/dist/nodemon_restart_trigger.js.map +1 -0
- package/dist/server.constants.js +99 -0
- package/dist/server.constants.js.map +1 -0
- package/dist/server.core.js +91 -0
- package/dist/server.core.js.map +1 -0
- package/dist/server.env.js +225 -0
- package/dist/server.env.js.map +1 -0
- package/dist/server.host.js +106 -0
- package/dist/server.host.js.map +1 -0
- package/dist/services/authentication/auth.service.js +136 -0
- package/dist/services/authentication/auth.service.js.map +1 -0
- package/dist/services/authentication/jwt.service.js +34 -0
- package/dist/services/authentication/jwt.service.js.map +1 -0
- package/dist/services/authentication/permission.service.js +73 -0
- package/dist/services/authentication/permission.service.js.map +1 -0
- package/dist/services/authentication/refresh-token.service.js +99 -0
- package/dist/services/authentication/refresh-token.service.js.map +1 -0
- package/dist/services/authentication/role.service.js +120 -0
- package/dist/services/authentication/role.service.js.map +1 -0
- package/dist/services/authentication/user.service.js +154 -0
- package/dist/services/authentication/user.service.js.map +1 -0
- package/dist/services/batch-call.service.js +148 -0
- package/dist/services/batch-call.service.js.map +1 -0
- package/dist/services/camera-stream.service.js +80 -0
- package/dist/services/camera-stream.service.js.map +1 -0
- package/dist/services/core/client-bundle.service.js +156 -0
- package/dist/services/core/client-bundle.service.js.map +1 -0
- package/dist/services/core/config.service.js +26 -0
- package/dist/services/core/config.service.js.map +1 -0
- package/dist/services/core/github.service.js +74 -0
- package/dist/services/core/github.service.js.map +1 -0
- package/dist/services/core/logs-manager.service.js +87 -0
- package/dist/services/core/logs-manager.service.js.map +1 -0
- package/dist/services/core/monsterpi.service.js +38 -0
- package/dist/services/core/monsterpi.service.js.map +1 -0
- package/dist/services/core/multer.service.js +122 -0
- package/dist/services/core/multer.service.js.map +1 -0
- package/dist/services/core/server-release.service.js +116 -0
- package/dist/services/core/server-release.service.js.map +1 -0
- package/dist/services/core/server-update.service.js +73 -0
- package/dist/services/core/server-update.service.js.map +1 -0
- package/dist/services/core/task-manager.service.js +196 -0
- package/dist/services/core/task-manager.service.js.map +1 -0
- package/dist/services/core/yaml.service.js +278 -0
- package/dist/services/core/yaml.service.js.map +1 -0
- package/dist/services/custom-gcode.service.js +48 -0
- package/dist/services/custom-gcode.service.js.map +1 -0
- package/dist/services/floor.service.js +183 -0
- package/dist/services/floor.service.js.map +1 -0
- package/dist/services/influxdb-v2/influx-db-v2-base.service.js +45 -0
- package/dist/services/influxdb-v2/influx-db-v2-base.service.js.map +1 -0
- package/dist/services/interfaces/auth.service.interface.js +6 -0
- package/dist/services/interfaces/auth.service.interface.js.map +1 -0
- package/dist/services/interfaces/camera-stream.dto.js +109 -0
- package/dist/services/interfaces/camera-stream.dto.js.map +1 -0
- package/dist/services/interfaces/camera-stream.service.interface.js +6 -0
- package/dist/services/interfaces/camera-stream.service.interface.js.map +1 -0
- package/dist/services/interfaces/custom-gcode.dto.js +18 -0
- package/dist/services/interfaces/custom-gcode.dto.js.map +1 -0
- package/dist/services/interfaces/custom-gcode.service.interface.js +6 -0
- package/dist/services/interfaces/custom-gcode.service.interface.js.map +1 -0
- package/dist/services/interfaces/floor.dto.js +61 -0
- package/dist/services/interfaces/floor.dto.js.map +1 -0
- package/dist/services/interfaces/floor.service.interface.js +6 -0
- package/dist/services/interfaces/floor.service.interface.js.map +1 -0
- package/dist/services/interfaces/gcode-analysis.dto.js +6 -0
- package/dist/services/interfaces/gcode-analysis.dto.js.map +1 -0
- package/dist/services/interfaces/jwt.service.interface.js +6 -0
- package/dist/services/interfaces/jwt.service.interface.js.map +1 -0
- package/dist/services/interfaces/login.dto.js +16 -0
- package/dist/services/interfaces/login.dto.js.map +1 -0
- package/dist/services/interfaces/page.interface.js +16 -0
- package/dist/services/interfaces/page.interface.js.map +1 -0
- package/dist/services/interfaces/permission.dto.js +16 -0
- package/dist/services/interfaces/permission.dto.js.map +1 -0
- package/dist/services/interfaces/permission.service.interface.js +6 -0
- package/dist/services/interfaces/permission.service.interface.js.map +1 -0
- package/dist/services/interfaces/printer-file.dto.js +27 -0
- package/dist/services/interfaces/printer-file.dto.js.map +1 -0
- package/dist/services/interfaces/printer-files.service.interface.js +6 -0
- package/dist/services/interfaces/printer-files.service.interface.js.map +1 -0
- package/dist/services/interfaces/printer.dto.js +18 -0
- package/dist/services/interfaces/printer.dto.js.map +1 -0
- package/dist/services/interfaces/printer.service.interface.js +6 -0
- package/dist/services/interfaces/printer.service.interface.js.map +1 -0
- package/dist/services/interfaces/role-service.interface.js +6 -0
- package/dist/services/interfaces/role-service.interface.js.map +1 -0
- package/dist/services/interfaces/settings.dto.js +34 -0
- package/dist/services/interfaces/settings.dto.js.map +1 -0
- package/dist/services/interfaces/settings.service.interface.js +6 -0
- package/dist/services/interfaces/settings.service.interface.js.map +1 -0
- package/dist/services/interfaces/user-service.interface.js +6 -0
- package/dist/services/interfaces/user-service.interface.js.map +1 -0
- package/dist/services/interfaces/user.dto.js +39 -0
- package/dist/services/interfaces/user.dto.js.map +1 -0
- package/dist/services/octoprint/constants/firmware-update-settings.constants.js +32 -0
- package/dist/services/octoprint/constants/firmware-update-settings.constants.js.map +1 -0
- package/dist/services/octoprint/constants/octoprint-service.constants.js +101 -0
- package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -0
- package/dist/services/octoprint/constants/octoprint-websocket.constants.js +88 -0
- package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -0
- package/dist/services/octoprint/octoprint-api.routes.js +192 -0
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -0
- package/dist/services/octoprint/octoprint-api.service.js +402 -0
- package/dist/services/octoprint/octoprint-api.service.js.map +1 -0
- package/dist/services/octoprint/octoprint-sockio.adapter.js +309 -0
- package/dist/services/octoprint/octoprint-sockio.adapter.js.map +1 -0
- package/dist/services/octoprint/plugin-base.service.js +102 -0
- package/dist/services/octoprint/plugin-base.service.js.map +1 -0
- package/dist/services/octoprint/plugin-firmware-update.service.js +104 -0
- package/dist/services/octoprint/plugin-firmware-update.service.js.map +1 -0
- package/dist/services/octoprint/plugin-repository.cache.js +45 -0
- package/dist/services/octoprint/plugin-repository.cache.js.map +1 -0
- package/dist/services/octoprint/socket.factory.js +22 -0
- package/dist/services/octoprint/socket.factory.js.map +1 -0
- package/dist/services/octoprint/utils/api.utils.js +72 -0
- package/dist/services/octoprint/utils/api.utils.js.map +1 -0
- package/dist/services/orm/floor.service.interface.js +73 -0
- package/dist/services/orm/floor.service.interface.js.map +1 -0
- package/dist/services/orm/printer.service.interface.js +6 -0
- package/dist/services/orm/printer.service.interface.js.map +1 -0
- package/dist/services/print-completion.service.js +162 -0
- package/dist/services/print-completion.service.js.map +1 -0
- package/dist/services/printer-files.service.js +91 -0
- package/dist/services/printer-files.service.js.map +1 -0
- package/dist/services/printer.service.js +230 -0
- package/dist/services/printer.service.js.map +1 -0
- package/dist/services/settings.service.js +158 -0
- package/dist/services/settings.service.js.map +1 -0
- package/dist/services/validators/floor-service.validation.js +60 -0
- package/dist/services/validators/floor-service.validation.js.map +1 -0
- package/dist/services/validators/print-completion-service.validation.js +20 -0
- package/dist/services/validators/print-completion-service.validation.js.map +1 -0
- package/dist/services/validators/printer-service.validation.js +48 -0
- package/dist/services/validators/printer-service.validation.js.map +1 -0
- package/dist/services/validators/settings-service.validation.js +71 -0
- package/dist/services/validators/settings-service.validation.js.map +1 -0
- package/dist/services/validators/user-service.validation.js +33 -0
- package/dist/services/validators/user-service.validation.js.map +1 -0
- package/dist/services/validators/yaml-service.validation.js +63 -0
- package/dist/services/validators/yaml-service.validation.js.map +1 -0
- package/dist/services/yaml.service.js +278 -0
- package/dist/services/yaml.service.js.map +1 -0
- package/dist/shared.constants.js +15 -0
- package/dist/shared.constants.js.map +1 -0
- package/dist/state/file-upload-tracker.cache.js +88 -0
- package/dist/state/file-upload-tracker.cache.js.map +1 -0
- package/dist/state/file.cache.js +99 -0
- package/dist/state/file.cache.js.map +1 -0
- package/dist/state/files.store.js +132 -0
- package/dist/state/files.store.js.map +1 -0
- package/dist/state/floor.store.js +99 -0
- package/dist/state/floor.store.js.map +1 -0
- package/dist/state/printer-events.cache.js +97 -0
- package/dist/state/printer-events.cache.js.map +1 -0
- package/dist/state/printer-socket.store.js +217 -0
- package/dist/state/printer-socket.store.js.map +1 -0
- package/dist/state/printer.cache.js +112 -0
- package/dist/state/printer.cache.js.map +1 -0
- package/dist/state/settings.store.js +154 -0
- package/dist/state/settings.store.js.map +1 -0
- package/dist/state/socket-io.gateway.js +66 -0
- package/dist/state/socket-io.gateway.js.map +1 -0
- package/dist/state/test-printer-socket.store.js +91 -0
- package/dist/state/test-printer-socket.store.js.map +1 -0
- package/dist/state/validation/create-test-printer.validation.js +18 -0
- package/dist/state/validation/create-test-printer.validation.js.map +1 -0
- package/dist/task.presets.js +50 -0
- package/dist/task.presets.js.map +1 -0
- package/dist/tasks/boot.task.js +198 -0
- package/dist/tasks/boot.task.js.map +1 -0
- package/dist/tasks/client-bundle.task.js +32 -0
- package/dist/tasks/client-bundle.task.js.map +1 -0
- package/dist/tasks/print-completion.socketio.task.js +85 -0
- package/dist/tasks/print-completion.socketio.task.js.map +1 -0
- package/dist/tasks/printer-file-clean.task.js +72 -0
- package/dist/tasks/printer-file-clean.task.js.map +1 -0
- package/dist/tasks/printer-websocket-restore.task.js +64 -0
- package/dist/tasks/printer-websocket-restore.task.js.map +1 -0
- package/dist/tasks/printer-websocket.task.js +43 -0
- package/dist/tasks/printer-websocket.task.js.map +1 -0
- package/dist/tasks/socketio.task.js +83 -0
- package/dist/tasks/socketio.task.js.map +1 -0
- package/dist/tasks/software-update.task.js +22 -0
- package/dist/tasks/software-update.task.js.map +1 -0
- package/dist/tasks.js +48 -0
- package/dist/tasks.js.map +1 -0
- package/dist/types/express/index.d.js +7 -0
- package/dist/types/express/index.d.js.map +1 -0
- package/dist/utils/array.util.js +27 -0
- package/dist/utils/array.util.js.map +1 -0
- package/dist/utils/benchmark.util.js +39 -0
- package/dist/utils/benchmark.util.js.map +1 -0
- package/dist/utils/cache/key-diff.cache.js +128 -0
- package/dist/utils/cache/key-diff.cache.js.map +1 -0
- package/dist/utils/correlation-token.util.js +15 -0
- package/dist/utils/correlation-token.util.js.map +1 -0
- package/dist/utils/crypto.utils.js +29 -0
- package/dist/utils/crypto.utils.js.map +1 -0
- package/dist/utils/env.utils.js +98 -0
- package/dist/utils/env.utils.js.map +1 -0
- package/dist/utils/error.utils.js +15 -0
- package/dist/utils/error.utils.js.map +1 -0
- package/dist/utils/find-predicate.utils.js +18 -0
- package/dist/utils/find-predicate.utils.js.map +1 -0
- package/dist/utils/fs.utils.js +38 -0
- package/dist/utils/fs.utils.js.map +1 -0
- package/dist/utils/is-docker.js +40 -0
- package/dist/utils/is-docker.js.map +1 -0
- package/dist/utils/mapper.utils.js +33 -0
- package/dist/utils/mapper.utils.js.map +1 -0
- package/dist/utils/metric.utils.js +35 -0
- package/dist/utils/metric.utils.js.map +1 -0
- package/dist/utils/normalize-url.js +245 -0
- package/dist/utils/normalize-url.js.map +1 -0
- package/dist/utils/semver.utils.js +18 -0
- package/dist/utils/semver.utils.js.map +1 -0
- package/dist/utils/time.utils.js +26 -0
- package/dist/utils/time.utils.js.map +1 -0
- package/dist/utils/url.utils.js +33 -0
- package/dist/utils/url.utils.js.map +1 -0
- package/dist/utils/websocket.adapter.js +105 -0
- package/dist/utils/websocket.adapter.js.map +1 -0
- package/migrate-mongo-config.js +45 -0
- package/nodemon_restart_trigger.js +1 -0
- package/package.json +149 -0
- package/src/index.ts +19 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
API_STATE: function() {
|
|
13
|
+
return API_STATE;
|
|
14
|
+
},
|
|
15
|
+
Message: function() {
|
|
16
|
+
return Message;
|
|
17
|
+
},
|
|
18
|
+
OctoPrintSockIoAdapter: function() {
|
|
19
|
+
return OctoPrintSockIoAdapter;
|
|
20
|
+
},
|
|
21
|
+
SOCKET_STATE: function() {
|
|
22
|
+
return SOCKET_STATE;
|
|
23
|
+
},
|
|
24
|
+
octoPrintEvent: function() {
|
|
25
|
+
return octoPrintEvent;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const _websocketadapter = require("../../utils/websocket.adapter");
|
|
29
|
+
const _httpstatuscodesconstants = require("../../constants/http-status-codes.constants");
|
|
30
|
+
const _serverconstants = require("../../server.constants");
|
|
31
|
+
const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
|
|
32
|
+
const _urlutils = require("../../utils/url.utils");
|
|
33
|
+
const _normalizeurl = require("../../utils/normalize-url");
|
|
34
|
+
const Message = {
|
|
35
|
+
connected: "connected",
|
|
36
|
+
reauthRequired: "reauthRequired",
|
|
37
|
+
current: "current",
|
|
38
|
+
history: "history",
|
|
39
|
+
event: "event",
|
|
40
|
+
plugin: "plugin",
|
|
41
|
+
timelapse: "timelapse",
|
|
42
|
+
slicingProgress: "slicingProgress",
|
|
43
|
+
// Custom events
|
|
44
|
+
WS_OPENED: "WS_OPENED",
|
|
45
|
+
WS_CLOSED: "WS_CLOSED",
|
|
46
|
+
WS_ERROR: "WS_ERROR",
|
|
47
|
+
API_STATE_UPDATED: "API_STATE_UPDATED",
|
|
48
|
+
WS_STATE_UPDATED: "WS_STATE_UPDATED"
|
|
49
|
+
};
|
|
50
|
+
const SOCKET_STATE = {
|
|
51
|
+
unopened: "unopened",
|
|
52
|
+
opening: "opening",
|
|
53
|
+
authenticating: "authenticating",
|
|
54
|
+
opened: "opened",
|
|
55
|
+
authenticated: "authenticated",
|
|
56
|
+
aborted: "aborted",
|
|
57
|
+
error: "error",
|
|
58
|
+
closed: "closed"
|
|
59
|
+
};
|
|
60
|
+
const API_STATE = {
|
|
61
|
+
unset: "unset",
|
|
62
|
+
noResponse: "noResponse",
|
|
63
|
+
globalKey: "globalKey",
|
|
64
|
+
authFail: "authFail",
|
|
65
|
+
responding: "responding"
|
|
66
|
+
};
|
|
67
|
+
const octoPrintEvent = (event)=>`octoprint.${event}`;
|
|
68
|
+
class OctoPrintSockIoAdapter extends _websocketadapter.WebsocketAdapter {
|
|
69
|
+
printerId;
|
|
70
|
+
loginDto;
|
|
71
|
+
socketURL;
|
|
72
|
+
sessionDto;
|
|
73
|
+
username;
|
|
74
|
+
octoPrintApiService;
|
|
75
|
+
eventEmitter;
|
|
76
|
+
logger;
|
|
77
|
+
configService;
|
|
78
|
+
stateUpdated = false;
|
|
79
|
+
stateUpdateTimestamp = null;
|
|
80
|
+
socketState = SOCKET_STATE.unopened;
|
|
81
|
+
apiStateUpdated = false;
|
|
82
|
+
apiStateUpdateTimestamp = null;
|
|
83
|
+
apiState = API_STATE.unset;
|
|
84
|
+
lastMessageReceivedTimestamp = null;
|
|
85
|
+
reauthRequired = false;
|
|
86
|
+
reauthRequiredTimestamp = null;
|
|
87
|
+
constructor({ loggerFactory, octoPrintApiService, eventEmitter2, configService }){
|
|
88
|
+
super({
|
|
89
|
+
loggerFactory
|
|
90
|
+
});
|
|
91
|
+
this.logger = loggerFactory(OctoPrintSockIoAdapter.name);
|
|
92
|
+
this.octoPrintApiService = octoPrintApiService;
|
|
93
|
+
this.eventEmitter = eventEmitter2;
|
|
94
|
+
this.configService = configService;
|
|
95
|
+
}
|
|
96
|
+
get _debugMode() {
|
|
97
|
+
return this.configService.get(_serverconstants.AppConstants.debugSocketStatesKey, _serverconstants.AppConstants.defaultDebugSocketStates) === "true";
|
|
98
|
+
}
|
|
99
|
+
needsReopen() {
|
|
100
|
+
const isApiOnline = this.apiState === API_STATE.responding;
|
|
101
|
+
return isApiOnline && (this.socketState === SOCKET_STATE.closed || this.socketState === SOCKET_STATE.error);
|
|
102
|
+
}
|
|
103
|
+
needsSetup() {
|
|
104
|
+
return this.socketState === SOCKET_STATE.unopened;
|
|
105
|
+
}
|
|
106
|
+
needsReauth() {
|
|
107
|
+
return this.reauthRequired;
|
|
108
|
+
}
|
|
109
|
+
isClosedOrAborted() {
|
|
110
|
+
return this.socketState === SOCKET_STATE.closed || this.socketState === SOCKET_STATE.aborted;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* @param {CredentialsDto} socketLogin
|
|
114
|
+
*/ registerCredentials(socketLogin) {
|
|
115
|
+
const { printerId, loginDto, protocol } = socketLogin;
|
|
116
|
+
this.printerId = printerId;
|
|
117
|
+
this.loginDto = loginDto;
|
|
118
|
+
const httpUrl = (0, _normalizeurl.normalizeUrl)(this.loginDto.printerURL);
|
|
119
|
+
const wsUrl = (0, _urlutils.httpToWsUrl)(httpUrl, protocol);
|
|
120
|
+
wsUrl.pathname = "/sockjs/websocket";
|
|
121
|
+
this.socketURL = wsUrl;
|
|
122
|
+
}
|
|
123
|
+
open(_) {
|
|
124
|
+
if (this.socket) {
|
|
125
|
+
throw new Error(`Socket already exists (printerId: ${this.printerId}, ignoring open request`);
|
|
126
|
+
}
|
|
127
|
+
super.open(this.socketURL);
|
|
128
|
+
}
|
|
129
|
+
close() {
|
|
130
|
+
super.close();
|
|
131
|
+
}
|
|
132
|
+
async sendThrottle(throttle = _serverconstants.AppConstants.defaultSocketThrottleRate) {
|
|
133
|
+
return await this.sendMessage(JSON.stringify({
|
|
134
|
+
throttle
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
async reauthSession() {
|
|
138
|
+
await this.setupSocketSession();
|
|
139
|
+
await this.sendAuth();
|
|
140
|
+
this.resetReauthRequired();
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Retrieve session token by authenticating with OctoPrint API
|
|
144
|
+
* @returns {Promise<void>}
|
|
145
|
+
*/ async setupSocketSession() {
|
|
146
|
+
this.resetSocketState();
|
|
147
|
+
this.sessionDto = await this.octoPrintApiService.login(this.loginDto).then((r)=>{
|
|
148
|
+
// Check response for red flags
|
|
149
|
+
if (r.name === "_api") {
|
|
150
|
+
this.setApiState(API_STATE.globalKey);
|
|
151
|
+
this.setSocketState(SOCKET_STATE.aborted);
|
|
152
|
+
throw new _runtimeexceptions.AuthenticationError("Global API Key detected, aborting socket connection");
|
|
153
|
+
} else if (r.needs?.group[0] === "guests") {
|
|
154
|
+
this.logger.warn("Detected group guests in OctoPrint login response, marking as unauthorized");
|
|
155
|
+
// This doesn't occur often (instead a 400 with CSRF failed is returned)
|
|
156
|
+
this.setApiState(API_STATE.authFail);
|
|
157
|
+
this.setSocketState(SOCKET_STATE.aborted);
|
|
158
|
+
throw new _runtimeexceptions.AuthenticationError("Guest group detected, authentication failed, aborting socket connection");
|
|
159
|
+
}
|
|
160
|
+
this.setApiState(API_STATE.responding);
|
|
161
|
+
this.setSocketState(SOCKET_STATE.opening);
|
|
162
|
+
return r;
|
|
163
|
+
}).catch(/**
|
|
164
|
+
* @param {ExternalHttpError|AxiosError} e
|
|
165
|
+
*/ (e)=>{
|
|
166
|
+
this.setSocketState(SOCKET_STATE.aborted);
|
|
167
|
+
if (e instanceof _runtimeexceptions.AuthenticationError) {
|
|
168
|
+
this.logger.warn(`Printer authorization error (id: ${this.printerId}), apiState: ${this.apiState}`);
|
|
169
|
+
throw e;
|
|
170
|
+
} else {
|
|
171
|
+
if (e?.response?.status === 403) {
|
|
172
|
+
this.setApiState(API_STATE.authFail);
|
|
173
|
+
this.setSocketState(SOCKET_STATE.aborted);
|
|
174
|
+
throw new _runtimeexceptions.AuthenticationError(e);
|
|
175
|
+
}
|
|
176
|
+
this.logger.error(`Printer (${this.printerId}) network or transport error, marking it as unreachable; ${e}`);
|
|
177
|
+
this.setApiState(API_STATE.noResponse);
|
|
178
|
+
}
|
|
179
|
+
throw e;
|
|
180
|
+
});
|
|
181
|
+
this.username = await this.octoPrintApiService.getAdminUserOrDefault(this.loginDto).catch(/**
|
|
182
|
+
* @param {ExternalHttpError|AxiosError} e
|
|
183
|
+
*/ (e)=>{
|
|
184
|
+
const status = e.response?.status;
|
|
185
|
+
if (status === _httpstatuscodesconstants.HttpStatusCode.FORBIDDEN) {
|
|
186
|
+
this.setApiState(API_STATE.authFail);
|
|
187
|
+
this.setSocketState(SOCKET_STATE.aborted);
|
|
188
|
+
} else {
|
|
189
|
+
this.setApiState(API_STATE.authFail);
|
|
190
|
+
this.setSocketState(SOCKET_STATE.aborted);
|
|
191
|
+
}
|
|
192
|
+
if ([
|
|
193
|
+
_httpstatuscodesconstants.HttpStatusCode.BAD_GATEWAY,
|
|
194
|
+
_httpstatuscodesconstants.HttpStatusCode.NOT_IMPLEMENTED,
|
|
195
|
+
_httpstatuscodesconstants.HttpStatusCode.SERVICE_UNAVAILABLE,
|
|
196
|
+
_httpstatuscodesconstants.HttpStatusCode.GATEWAY_TIMEOUT
|
|
197
|
+
].includes(status)) {
|
|
198
|
+
this.logger.error(`Detected a 501-504 error (${status}) probably OctoPrint has crashed or is restarting`);
|
|
199
|
+
}
|
|
200
|
+
throw e;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* @private
|
|
205
|
+
* @returns {Promise<void>}
|
|
206
|
+
*/ async afterOpened(event) {
|
|
207
|
+
this.setSocketState(SOCKET_STATE.opened);
|
|
208
|
+
await this.sendAuth();
|
|
209
|
+
await this.sendThrottle(_serverconstants.AppConstants.defaultSocketThrottleRate);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* @private
|
|
213
|
+
* @returns {Promise<void>}
|
|
214
|
+
*/ async onMessage(message) {
|
|
215
|
+
this.lastMessageReceivedTimestamp = Date.now();
|
|
216
|
+
if (this.socketState !== SOCKET_STATE.authenticated) {
|
|
217
|
+
this.setSocketState(SOCKET_STATE.authenticated);
|
|
218
|
+
}
|
|
219
|
+
const data = JSON.parse(message);
|
|
220
|
+
/**
|
|
221
|
+
* @type {Message}
|
|
222
|
+
*/ const eventName = Object.keys(data)[0];
|
|
223
|
+
const payload = data[eventName];
|
|
224
|
+
if (eventName === Message.reauthRequired) {
|
|
225
|
+
this.setReauthRequired();
|
|
226
|
+
}
|
|
227
|
+
// Emit the message to the event bus
|
|
228
|
+
await this.emitEvent(eventName, payload);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* @private
|
|
232
|
+
* @returns {Promise<void>}
|
|
233
|
+
*/ async sendAuth() {
|
|
234
|
+
this.setSocketState(SOCKET_STATE.authenticating);
|
|
235
|
+
await this.sendMessage(JSON.stringify({
|
|
236
|
+
auth: `${this.username}:${this.sessionDto.session}`
|
|
237
|
+
}));
|
|
238
|
+
// TODO what if bad auth? => pure silence right?
|
|
239
|
+
}
|
|
240
|
+
async afterClosed(event) {
|
|
241
|
+
this.setSocketState(SOCKET_STATE.closed);
|
|
242
|
+
delete this.socket;
|
|
243
|
+
await this.emitEvent(Message.WS_CLOSED);
|
|
244
|
+
}
|
|
245
|
+
async onError(error) {
|
|
246
|
+
this.setSocketState(SOCKET_STATE.error);
|
|
247
|
+
await this.emitEvent(Message.WS_ERROR, error);
|
|
248
|
+
}
|
|
249
|
+
setReauthRequired() {
|
|
250
|
+
this.reauthRequired = true;
|
|
251
|
+
this.reauthRequiredTimestamp = Date.now();
|
|
252
|
+
}
|
|
253
|
+
resetReauthRequired() {
|
|
254
|
+
this.reauthRequired = false;
|
|
255
|
+
this.reauthRequiredTimestamp = null;
|
|
256
|
+
}
|
|
257
|
+
resetSocketState() {
|
|
258
|
+
this.setSocketState(SOCKET_STATE.unopened);
|
|
259
|
+
this.setApiState(API_STATE.unset);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* @private
|
|
263
|
+
* @param {API_STATE} state
|
|
264
|
+
*/ setApiState(state) {
|
|
265
|
+
this.apiState = state;
|
|
266
|
+
this.apiStateUpdated = true;
|
|
267
|
+
this.apiStateUpdateTimestamp = Date.now();
|
|
268
|
+
if (this._debugMode) {
|
|
269
|
+
this.logger.log(`${this.printerId} API state updated to: ` + state);
|
|
270
|
+
}
|
|
271
|
+
this.emitEventSync(Message.API_STATE_UPDATED, state);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* @private
|
|
275
|
+
* @param {SOCKET_STATE} state
|
|
276
|
+
*/ setSocketState(state) {
|
|
277
|
+
this.socketState = state;
|
|
278
|
+
this.stateUpdated = true;
|
|
279
|
+
this.stateUpdateTimestamp = Date.now();
|
|
280
|
+
if (this._debugMode) {
|
|
281
|
+
this.logger.log(`${this.printerId} Socket state updated to: ` + state);
|
|
282
|
+
}
|
|
283
|
+
this.emitEventSync(Message.WS_STATE_UPDATED, state);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* @private
|
|
287
|
+
* @param {Message} event
|
|
288
|
+
* @param {?Object} payload
|
|
289
|
+
*/ async emitEvent(event, payload) {
|
|
290
|
+
/**
|
|
291
|
+
* @type {OctoPrintEventDto}
|
|
292
|
+
*/ const data = {
|
|
293
|
+
event,
|
|
294
|
+
payload,
|
|
295
|
+
printerId: this.printerId
|
|
296
|
+
};
|
|
297
|
+
await this.eventEmitter.emitAsync(octoPrintEvent(event), data);
|
|
298
|
+
}
|
|
299
|
+
emitEventSync(event, payload) {
|
|
300
|
+
const data = {
|
|
301
|
+
event,
|
|
302
|
+
payload,
|
|
303
|
+
printerId: this.printerId
|
|
304
|
+
};
|
|
305
|
+
this.eventEmitter.emit(octoPrintEvent(event), data);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
//# sourceMappingURL=octoprint-sockio.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/octoprint/octoprint-sockio.adapter.ts"],"names":["API_STATE","Message","OctoPrintSockIoAdapter","SOCKET_STATE","octoPrintEvent","connected","reauthRequired","current","history","event","plugin","timelapse","slicingProgress","WS_OPENED","WS_CLOSED","WS_ERROR","API_STATE_UPDATED","WS_STATE_UPDATED","unopened","opening","authenticating","opened","authenticated","aborted","error","closed","unset","noResponse","globalKey","authFail","responding","WebsocketAdapter","printerId","loginDto","socketURL","sessionDto","username","octoPrintApiService","eventEmitter","logger","configService","stateUpdated","stateUpdateTimestamp","socketState","apiStateUpdated","apiStateUpdateTimestamp","apiState","lastMessageReceivedTimestamp","reauthRequiredTimestamp","constructor","loggerFactory","eventEmitter2","name","_debugMode","get","AppConstants","debugSocketStatesKey","defaultDebugSocketStates","needsReopen","isApiOnline","needsSetup","needsReauth","isClosedOrAborted","registerCredentials","socketLogin","protocol","httpUrl","normalizeUrl","printerURL","wsUrl","httpToWsUrl","pathname","open","_","socket","Error","close","sendThrottle","throttle","defaultSocketThrottleRate","sendMessage","JSON","stringify","reauthSession","setupSocketSession","sendAuth","resetReauthRequired","resetSocketState","login","then","r","setApiState","setSocketState","AuthenticationError","needs","group","warn","catch","e","response","status","getAdminUserOrDefault","HttpStatusCode","FORBIDDEN","BAD_GATEWAY","NOT_IMPLEMENTED","SERVICE_UNAVAILABLE","GATEWAY_TIMEOUT","includes","afterOpened","onMessage","message","Date","now","data","parse","eventName","Object","keys","payload","setReauthRequired","emitEvent","auth","session","afterClosed","onError","state","log","emitEventSync","emitAsync","emit"],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "PluginBaseService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return PluginBaseService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
|
|
12
|
+
const _octoprintserviceconstants = require("./constants/octoprint-service.constants");
|
|
13
|
+
class PluginBaseService {
|
|
14
|
+
// https://github.com/OctoPrint/OctoPrint/blob/76e87ba81329e6ce761c9307d3e80c291000871e/src/octoprint/plugins/pluginmanager/__init__.py#L609
|
|
15
|
+
octoPrintApiService;
|
|
16
|
+
pluginRepositoryCache;
|
|
17
|
+
_pluginName;
|
|
18
|
+
_pluginUrl;
|
|
19
|
+
logger;
|
|
20
|
+
constructor({ octoPrintApiService, pluginRepositoryCache, loggerFactory }, { pluginName, pluginUrl }){
|
|
21
|
+
this.octoPrintApiService = octoPrintApiService;
|
|
22
|
+
this.pluginRepositoryCache = pluginRepositoryCache;
|
|
23
|
+
this._pluginName = pluginName;
|
|
24
|
+
this.logger = loggerFactory(`Plugin-${pluginName}`);
|
|
25
|
+
const pluginReference = pluginRepositoryCache.getPlugin(pluginName);
|
|
26
|
+
this._pluginUrl = pluginUrl || pluginReference.archive;
|
|
27
|
+
if (!pluginName || !pluginUrl) {
|
|
28
|
+
throw new _runtimeexceptions.ValidationException("OctoPrint Plugin not configured correctly");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
get pluginName() {
|
|
32
|
+
return this._pluginName;
|
|
33
|
+
}
|
|
34
|
+
async isPluginUpToDate(printerLogin) {
|
|
35
|
+
const response = await this.#queryInstalledPlugin(printerLogin);
|
|
36
|
+
const result = this.pluginRepositoryCache.getPlugin(this.pluginName);
|
|
37
|
+
return result?.github?.latest_release.name === response.version;
|
|
38
|
+
}
|
|
39
|
+
async #queryInstalledPlugin(printerLogin) {
|
|
40
|
+
const response = await this.octoPrintApiService.getPluginManagerPlugin(printerLogin, this.pluginName);
|
|
41
|
+
if (!response) {
|
|
42
|
+
throw new _runtimeexceptions.InternalServerException("Plugin query response was empty");
|
|
43
|
+
}
|
|
44
|
+
return response.plugin;
|
|
45
|
+
}
|
|
46
|
+
async isPluginInstalled(printerLogin) {
|
|
47
|
+
const foundPlugin = await this.#findPluginFromListQuery(printerLogin);
|
|
48
|
+
return !!foundPlugin;
|
|
49
|
+
}
|
|
50
|
+
async #findPluginFromListQuery(printerLogin) {
|
|
51
|
+
const response = await this.octoPrintApiService.getPluginManagerPlugins(printerLogin);
|
|
52
|
+
if (!response?.plugins?.length) {
|
|
53
|
+
throw new _runtimeexceptions.InternalServerException("Plugin query response was empty");
|
|
54
|
+
}
|
|
55
|
+
return this.findPluginInList(response.plugins);
|
|
56
|
+
}
|
|
57
|
+
findPluginInList(pluginList) {
|
|
58
|
+
return pluginList.find((p)=>p.key.toLowerCase() === this.pluginName.toLowerCase());
|
|
59
|
+
}
|
|
60
|
+
async updatePlugin(login) {
|
|
61
|
+
return await this.octoPrintApiService.postSoftwareUpdate(login, [
|
|
62
|
+
this.pluginName
|
|
63
|
+
], this._pluginUrl);
|
|
64
|
+
}
|
|
65
|
+
async installPlugin(login, restartAfter = false) {
|
|
66
|
+
const command = _octoprintserviceconstants.pluginManagerCommands.install.name;
|
|
67
|
+
const plugin = this.pluginRepositoryCache.getPlugin(this.pluginName);
|
|
68
|
+
await this.octoPrintApiService.postApiPluginManagerCommand(login, command, plugin.archive);
|
|
69
|
+
await this.#conditionalRestartCommand(login, restartAfter);
|
|
70
|
+
}
|
|
71
|
+
async uninstallPlugin(login, restartAfter = false) {
|
|
72
|
+
const command = _octoprintserviceconstants.pluginManagerCommands.uninstall.name;
|
|
73
|
+
await this.octoPrintApiService.postApiPluginManagerCommand(login, command, this.pluginName);
|
|
74
|
+
await this.#conditionalRestartCommand(login, restartAfter);
|
|
75
|
+
}
|
|
76
|
+
async enablePlugin(login, restartAfter = false) {
|
|
77
|
+
const command = _octoprintserviceconstants.pluginManagerCommands.enable.name;
|
|
78
|
+
await this.octoPrintApiService.postApiPluginManagerCommand(login, command, this.pluginName);
|
|
79
|
+
await this.#conditionalRestartCommand(login, restartAfter);
|
|
80
|
+
}
|
|
81
|
+
async disablePlugin(login, restartAfter = false) {
|
|
82
|
+
const command = _octoprintserviceconstants.pluginManagerCommands.disable.name;
|
|
83
|
+
await this.octoPrintApiService.postApiPluginManagerCommand(login, command, this.pluginName);
|
|
84
|
+
await this.#conditionalRestartCommand(login, restartAfter);
|
|
85
|
+
}
|
|
86
|
+
async cleanupPlugin(login, restartAfter = false) {
|
|
87
|
+
const command = _octoprintserviceconstants.pluginManagerCommands.cleanup.name;
|
|
88
|
+
await this.octoPrintApiService.postApiPluginManagerCommand(login, command, this.pluginName);
|
|
89
|
+
await this.#conditionalRestartCommand(login, restartAfter);
|
|
90
|
+
}
|
|
91
|
+
async cleanupAllPlugins(login, restartAfter = false) {
|
|
92
|
+
const command = _octoprintserviceconstants.pluginManagerCommands.cleanup_all.name;
|
|
93
|
+
await this.octoPrintApiService.postApiPluginManagerCommand(login, command);
|
|
94
|
+
await this.#conditionalRestartCommand(login, restartAfter);
|
|
95
|
+
}
|
|
96
|
+
async #conditionalRestartCommand(printerLogin, restartAfter = false) {
|
|
97
|
+
if (!restartAfter) return;
|
|
98
|
+
await this.octoPrintApiService.postSystemRestartCommand(printerLogin);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=plugin-base.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/octoprint/plugin-base.service.ts"],"names":["PluginBaseService","octoPrintApiService","pluginRepositoryCache","_pluginName","_pluginUrl","logger","constructor","loggerFactory","pluginName","pluginUrl","pluginReference","getPlugin","archive","ValidationException","isPluginUpToDate","printerLogin","response","queryInstalledPlugin","result","github","latest_release","name","version","getPluginManagerPlugin","InternalServerException","plugin","isPluginInstalled","foundPlugin","findPluginFromListQuery","getPluginManagerPlugins","plugins","length","findPluginInList","pluginList","find","p","key","toLowerCase","updatePlugin","login","postSoftwareUpdate","installPlugin","restartAfter","command","pluginManagerCommands","install","postApiPluginManagerCommand","conditionalRestartCommand","uninstallPlugin","uninstall","enablePlugin","enable","disablePlugin","disable","cleanupPlugin","cleanup","cleanupAllPlugins","cleanup_all","postSystemRestartCommand"],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "PluginFirmwareUpdateService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return PluginFirmwareUpdateService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _pluginbaseservice = require("./plugin-base.service");
|
|
12
|
+
const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
|
|
13
|
+
const _firmwareupdatesettingsconstants = require("./constants/firmware-update-settings.constants");
|
|
14
|
+
const config = {
|
|
15
|
+
pluginName: "firmwareupdater",
|
|
16
|
+
pluginUrl: "https://github.com/OctoPrint/OctoPrint-FirmwareUpdater/archive/master.zip"
|
|
17
|
+
};
|
|
18
|
+
const defaultRepos = {
|
|
19
|
+
prusaFirmwareOwner: "prusa3d",
|
|
20
|
+
prusaFirmwareRepo: "Prusa-Firmware"
|
|
21
|
+
};
|
|
22
|
+
const connectivityProp = "connectivity.connection_ok";
|
|
23
|
+
const firmwareProp = "printer.firmware";
|
|
24
|
+
const firmwareDownloadPath = "firmware-downloads";
|
|
25
|
+
class PluginFirmwareUpdateService extends _pluginbaseservice.PluginBaseService {
|
|
26
|
+
octoPrintApiService;
|
|
27
|
+
githubService;
|
|
28
|
+
multerService;
|
|
29
|
+
prusaFirmwareReleases;
|
|
30
|
+
latestFirmware;
|
|
31
|
+
constructor({ octoPrintApiService, pluginRepositoryCache, githubService, multerService, loggerFactory }){
|
|
32
|
+
super({
|
|
33
|
+
octoPrintApiService,
|
|
34
|
+
pluginRepositoryCache,
|
|
35
|
+
loggerFactory
|
|
36
|
+
}, config);
|
|
37
|
+
this.octoPrintApiService = octoPrintApiService;
|
|
38
|
+
this.githubService = githubService;
|
|
39
|
+
this.multerService = multerService;
|
|
40
|
+
}
|
|
41
|
+
async queryGithubPrusaFirmwareReleasesCache() {
|
|
42
|
+
try {
|
|
43
|
+
const response = await this.githubService.getReleases(defaultRepos.prusaFirmwareOwner, defaultRepos.prusaFirmwareRepo);
|
|
44
|
+
this.prusaFirmwareReleases = response.data;
|
|
45
|
+
} catch (e) {
|
|
46
|
+
return this.logger.error("Github fetch error. Probably rate limited, skipping firmware dowmload");
|
|
47
|
+
}
|
|
48
|
+
if (!this.prusaFirmwareReleases?.length) return [];
|
|
49
|
+
this.latestFirmware = this.prusaFirmwareReleases[0];
|
|
50
|
+
this.logger.log(`Plugin Cache filled with ${this.prusaFirmwareReleases?.length || "?"} firmware releases`, {
|
|
51
|
+
url: this.latestFirmware.url,
|
|
52
|
+
tag_name: this.latestFirmware.tag_name
|
|
53
|
+
});
|
|
54
|
+
return this.prusaFirmwareReleases;
|
|
55
|
+
}
|
|
56
|
+
async downloadFirmware() {
|
|
57
|
+
if (!this.prusaFirmwareReleases?.length || !this.latestFirmware) {
|
|
58
|
+
throw new _runtimeexceptions.ValidationException("No firmware releases were scanned. Download was not successful");
|
|
59
|
+
}
|
|
60
|
+
const latestFirmware = this.prusaFirmwareReleases[0];
|
|
61
|
+
// Download the latest firmware asset
|
|
62
|
+
const firmwareAsset = latestFirmware.assets.find((asset)=>asset.name.includes("MK3S_MK3S+"));
|
|
63
|
+
const downloadUrl = firmwareAsset.browser_download_url;
|
|
64
|
+
const downloadName = firmwareAsset.name;
|
|
65
|
+
this.logger.log(`Checking firmware ${downloadName}`);
|
|
66
|
+
if (!this.multerService.fileExists(downloadName, firmwareDownloadPath)) {
|
|
67
|
+
this.logger.log(`Downloading firmware from ${downloadUrl}`);
|
|
68
|
+
await this.multerService.downloadFile(downloadUrl, downloadName, firmwareDownloadPath);
|
|
69
|
+
this.logger.log(`Downloaded firmware ${downloadName}`);
|
|
70
|
+
} else {
|
|
71
|
+
this.logger.log(`Found firmware ${downloadName}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async getPrinterFirmwareVersion(printerLogin) {
|
|
75
|
+
const response = await this.octoPrintApiService.getSystemInfo(printerLogin);
|
|
76
|
+
const systemInfo = response.systeminfo;
|
|
77
|
+
// @todo If this fails, the printer most likely is not connected...
|
|
78
|
+
if (!Object.keys(systemInfo).includes(connectivityProp) || !Object.keys(systemInfo).includes(firmwareProp)) {
|
|
79
|
+
throw new _runtimeexceptions.ValidationException("Could not retrieve printer firmware version as the OctoPrint response was not recognized. Is it connected?");
|
|
80
|
+
}
|
|
81
|
+
const connected = systemInfo[connectivityProp];
|
|
82
|
+
if (!connected) {
|
|
83
|
+
throw new _runtimeexceptions.ValidationException("OctoPrint printer is not connected and firmware cannot be checked");
|
|
84
|
+
}
|
|
85
|
+
const firmware = systemInfo[firmwareProp];
|
|
86
|
+
if (!firmware?.length) {
|
|
87
|
+
throw new _runtimeexceptions.ValidationException("OctoPrint firmware version property was not recognized");
|
|
88
|
+
}
|
|
89
|
+
return firmware;
|
|
90
|
+
}
|
|
91
|
+
async getPluginFirmwareStatus(printerLogin) {
|
|
92
|
+
return await this.octoPrintApiService.getPluginFirmwareUpdateStatus(printerLogin);
|
|
93
|
+
}
|
|
94
|
+
async configureFirmwareUpdaterSettings(printerLogin) {
|
|
95
|
+
return await this.octoPrintApiService.updateFirmwareUpdaterSettings(printerLogin, _firmwareupdatesettingsconstants.defaultFirmwareUpdaterSettings);
|
|
96
|
+
}
|
|
97
|
+
async flashPrusaFirmware(currentPrinterId, printerLogin) {
|
|
98
|
+
const latestHexFilePath = this.multerService.getNewestFile(firmwareDownloadPath);
|
|
99
|
+
// todo setup BG task to track progress
|
|
100
|
+
return await this.octoPrintApiService.postPluginFirmwareUpdateFlash(currentPrinterId, printerLogin, latestHexFilePath);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=plugin-firmware-update.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/octoprint/plugin-firmware-update.service.ts"],"names":["PluginFirmwareUpdateService","config","pluginName","pluginUrl","defaultRepos","prusaFirmwareOwner","prusaFirmwareRepo","connectivityProp","firmwareProp","firmwareDownloadPath","PluginBaseService","octoPrintApiService","githubService","multerService","prusaFirmwareReleases","latestFirmware","constructor","pluginRepositoryCache","loggerFactory","queryGithubPrusaFirmwareReleasesCache","response","getReleases","data","e","logger","error","length","log","url","tag_name","downloadFirmware","ValidationException","firmwareAsset","assets","find","asset","name","includes","downloadUrl","browser_download_url","downloadName","fileExists","downloadFile","getPrinterFirmwareVersion","printerLogin","getSystemInfo","systemInfo","systeminfo","Object","keys","connected","firmware","getPluginFirmwareStatus","getPluginFirmwareUpdateStatus","configureFirmwareUpdaterSettings","updateFirmwareUpdaterSettings","defaultFirmwareUpdaterSettings","flashPrusaFirmware","currentPrinterId","latestHexFilePath","getNewestFile","postPluginFirmwareUpdateFlash"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "PluginRepositoryCache", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return PluginRepositoryCache;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _envutils = require("../../utils/env.utils");
|
|
12
|
+
class PluginRepositoryCache {
|
|
13
|
+
octoPrintApiService;
|
|
14
|
+
logger;
|
|
15
|
+
wasCached = false;
|
|
16
|
+
pluginCache = [];
|
|
17
|
+
lastQueried = undefined;
|
|
18
|
+
constructor({ octoPrintApiService, loggerFactory }){
|
|
19
|
+
this.octoPrintApiService = octoPrintApiService;
|
|
20
|
+
this.logger = loggerFactory(PluginRepositoryCache.name);
|
|
21
|
+
}
|
|
22
|
+
getPlugin(pluginName) {
|
|
23
|
+
if (!this.wasCached) {
|
|
24
|
+
if (!(0, _envutils.isTestEnvironment)()) {
|
|
25
|
+
this.logger.warn(`Could not check plugin '${pluginName}', as cache was not loaded.`);
|
|
26
|
+
}
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
return this.getCache().find((p)=>p.id.toLowerCase() === pluginName.toLowerCase());
|
|
30
|
+
}
|
|
31
|
+
getCache() {
|
|
32
|
+
return [
|
|
33
|
+
...this.pluginCache
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
async queryCache() {
|
|
37
|
+
this.pluginCache = await this.octoPrintApiService.fetchOctoPrintPlugins() || [];
|
|
38
|
+
this.wasCached = true;
|
|
39
|
+
this.lastQueried = Date.now();
|
|
40
|
+
this.logger.log(`Plugin Cache filled with ${this.pluginCache?.length || "?"} plugins`);
|
|
41
|
+
return this.getCache();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=plugin-repository.cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/octoprint/plugin-repository.cache.ts"],"names":["PluginRepositoryCache","octoPrintApiService","logger","wasCached","pluginCache","lastQueried","undefined","constructor","loggerFactory","name","getPlugin","pluginName","isTestEnvironment","warn","getCache","find","p","id","toLowerCase","queryCache","fetchOctoPrintPlugins","Date","now","log","length"],"mappings":";;;;+BAKaA;;;eAAAA;;;0BALqB;AAK3B,MAAMA;IACXC,oBAAyC;IACzCC,OAAsB;IAEtBC,YAAY,MAAM;IAClBC,cAAc,EAAE,CAAC;IACjBC,cAAcC,UAAU;IAExBC,YAAY,EACVN,mBAAmB,EACnBO,aAAa,EAId,CAAE;QACD,IAAI,CAACP,mBAAmB,GAAGA;QAC3B,IAAI,CAACC,MAAM,GAAGM,cAAcR,sBAAsBS,IAAI;IACxD;IAEAC,UAAUC,UAAkB,EAAE;QAC5B,IAAI,CAAC,IAAI,CAACR,SAAS,EAAE;YACnB,IAAI,CAACS,IAAAA,2BAAiB,KAAI;gBACxB,IAAI,CAACV,MAAM,CAACW,IAAI,CAAC,CAAC,wBAAwB,EAAEF,WAAW,2BAA2B,CAAC;YACrF;YACA;QACF;QAEA,OAAO,IAAI,CAACG,QAAQ,GAAGC,IAAI,CAAC,CAACC,IAAMA,EAAEC,EAAE,CAACC,WAAW,OAAOP,WAAWO,WAAW;IAClF;IAEAJ,WAAW;QACT,OAAO;eAAI,IAAI,CAACV,WAAW;SAAC;IAC9B;IAEA,MAAMe,aAAa;QACjB,IAAI,CAACf,WAAW,GAAG,AAAC,MAAM,IAAI,CAACH,mBAAmB,CAACmB,qBAAqB,MAAO,EAAE;QACjF,IAAI,CAACjB,SAAS,GAAG;QACjB,IAAI,CAACE,WAAW,GAAGgB,KAAKC,GAAG;QAE3B,IAAI,CAACpB,MAAM,CAACqB,GAAG,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAACnB,WAAW,EAAEoB,UAAU,IAAI,QAAQ,CAAC;QAErF,OAAO,IAAI,CAACV,QAAQ;IACtB;AACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "SocketFactory", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return SocketFactory;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _containertokens = require("../../container.tokens");
|
|
12
|
+
class SocketFactory {
|
|
13
|
+
cradle;
|
|
14
|
+
constructor(cradle){
|
|
15
|
+
this.cradle = cradle;
|
|
16
|
+
}
|
|
17
|
+
createInstance() {
|
|
18
|
+
return this.cradle[_containertokens.DITokens.octoPrintSockIoAdapter];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=socket.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/octoprint/socket.factory.ts"],"names":["SocketFactory","cradle","constructor","createInstance","DITokens","octoPrintSockIoAdapter"],"mappings":";;;;+BAGaA;;;eAAAA;;;iCAHY;AAGlB,MAAMA;IACXC,OAAY;IAEZC,YAAYD,MAAU,CAAE;QACtB,IAAI,CAACA,MAAM,GAAGA;IAChB;IAEAE,iBAAyC;QACvC,OAAO,IAAI,CAACF,MAAM,CAACG,yBAAQ,CAACC,sBAAsB,CAAC;IACrD;AACF"}
|