@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,245 @@
|
|
|
1
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "normalizeUrl", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function() {
|
|
9
|
+
return normalizeUrl;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
const DATA_URL_DEFAULT_MIME_TYPE = "text/plain";
|
|
13
|
+
const DATA_URL_DEFAULT_CHARSET = "us-ascii";
|
|
14
|
+
const testParameter = (name, filters)=>filters.some((filter)=>filter instanceof RegExp ? filter.test(name) : filter === name);
|
|
15
|
+
const supportedProtocols = new Set([
|
|
16
|
+
"https:",
|
|
17
|
+
"http:",
|
|
18
|
+
"file:"
|
|
19
|
+
]);
|
|
20
|
+
const hasCustomProtocol = (urlString)=>{
|
|
21
|
+
try {
|
|
22
|
+
const { protocol } = new URL(urlString);
|
|
23
|
+
return protocol.endsWith(":") && !supportedProtocols.has(protocol);
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const normalizeDataURL = (urlString, { stripHash })=>{
|
|
29
|
+
const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString);
|
|
30
|
+
if (!match) {
|
|
31
|
+
throw new Error(`Invalid URL: ${urlString}`);
|
|
32
|
+
}
|
|
33
|
+
let { type, data, hash } = match.groups;
|
|
34
|
+
const mediaType = type.split(";");
|
|
35
|
+
hash = stripHash ? "" : hash;
|
|
36
|
+
let isBase64 = false;
|
|
37
|
+
if (mediaType[mediaType.length - 1] === "base64") {
|
|
38
|
+
mediaType.pop();
|
|
39
|
+
isBase64 = true;
|
|
40
|
+
}
|
|
41
|
+
// Lowercase MIME type
|
|
42
|
+
const mimeType = mediaType.shift()?.toLowerCase() ?? "";
|
|
43
|
+
const attributes = mediaType.map((attribute)=>{
|
|
44
|
+
let [key, value = ""] = attribute.split("=").map((string)=>string.trim());
|
|
45
|
+
// Lowercase `charset`
|
|
46
|
+
if (key === "charset") {
|
|
47
|
+
value = value.toLowerCase();
|
|
48
|
+
if (value === DATA_URL_DEFAULT_CHARSET) {
|
|
49
|
+
return "";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return `${key}${value ? `=${value}` : ""}`;
|
|
53
|
+
}).filter(Boolean);
|
|
54
|
+
const normalizedMediaType = [
|
|
55
|
+
...attributes
|
|
56
|
+
];
|
|
57
|
+
if (isBase64) {
|
|
58
|
+
normalizedMediaType.push("base64");
|
|
59
|
+
}
|
|
60
|
+
if (normalizedMediaType.length > 0 || mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE) {
|
|
61
|
+
normalizedMediaType.unshift(mimeType);
|
|
62
|
+
}
|
|
63
|
+
return `data:${normalizedMediaType.join(";")},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ""}`;
|
|
64
|
+
};
|
|
65
|
+
function normalizeUrl(urlString, options) {
|
|
66
|
+
options = {
|
|
67
|
+
defaultProtocol: "http",
|
|
68
|
+
normalizeProtocol: true,
|
|
69
|
+
forceHttp: false,
|
|
70
|
+
forceHttps: false,
|
|
71
|
+
stripAuthentication: true,
|
|
72
|
+
stripHash: false,
|
|
73
|
+
stripTextFragment: true,
|
|
74
|
+
stripWWW: true,
|
|
75
|
+
removeQueryParameters: [
|
|
76
|
+
/^utm_\w+/i
|
|
77
|
+
],
|
|
78
|
+
removeTrailingSlash: true,
|
|
79
|
+
removeSingleSlash: true,
|
|
80
|
+
removeDirectoryIndex: false,
|
|
81
|
+
removeExplicitPort: false,
|
|
82
|
+
sortQueryParameters: true,
|
|
83
|
+
...options
|
|
84
|
+
};
|
|
85
|
+
// Legacy: Append `:` to the protocol if missing.
|
|
86
|
+
if (typeof options.defaultProtocol === "string" && !options.defaultProtocol.endsWith(":")) {
|
|
87
|
+
options.defaultProtocol = `${options.defaultProtocol}:`;
|
|
88
|
+
}
|
|
89
|
+
urlString = urlString.trim();
|
|
90
|
+
// Data URL
|
|
91
|
+
if (/^data:/i.test(urlString)) {
|
|
92
|
+
return normalizeDataURL(urlString, options);
|
|
93
|
+
}
|
|
94
|
+
if (hasCustomProtocol(urlString)) {
|
|
95
|
+
return urlString;
|
|
96
|
+
}
|
|
97
|
+
const hasRelativeProtocol = urlString.startsWith("//");
|
|
98
|
+
const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
|
|
99
|
+
// Prepend protocol
|
|
100
|
+
if (!isRelativeUrl) {
|
|
101
|
+
urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
|
|
102
|
+
}
|
|
103
|
+
const urlObject = new URL(urlString);
|
|
104
|
+
if (options.forceHttp && options.forceHttps) {
|
|
105
|
+
throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");
|
|
106
|
+
}
|
|
107
|
+
if (options.forceHttp && urlObject.protocol === "https:") {
|
|
108
|
+
urlObject.protocol = "http:";
|
|
109
|
+
}
|
|
110
|
+
if (options.forceHttps && urlObject.protocol === "http:") {
|
|
111
|
+
urlObject.protocol = "https:";
|
|
112
|
+
}
|
|
113
|
+
// Remove auth
|
|
114
|
+
if (options.stripAuthentication) {
|
|
115
|
+
urlObject.username = "";
|
|
116
|
+
urlObject.password = "";
|
|
117
|
+
}
|
|
118
|
+
// Remove hash
|
|
119
|
+
if (options.stripHash) {
|
|
120
|
+
urlObject.hash = "";
|
|
121
|
+
} else if (options.stripTextFragment) {
|
|
122
|
+
urlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, "");
|
|
123
|
+
}
|
|
124
|
+
// Remove duplicate slashes if not preceded by a protocol
|
|
125
|
+
// NOTE: This could be implemented using a single negative lookbehind
|
|
126
|
+
// regex, but we avoid that to maintain compatibility with older js engines
|
|
127
|
+
// which do not have support for that feature.
|
|
128
|
+
if (urlObject.pathname) {
|
|
129
|
+
// TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\b[a-z][a-z\d+\-.]{1,50}:)\/{2,}/g, '/');` when Safari supports negative lookbehind.
|
|
130
|
+
// Split the string by occurrences of this protocol regex, and perform
|
|
131
|
+
// duplicate-slash replacement on the strings between those occurrences
|
|
132
|
+
// (if any).
|
|
133
|
+
const protocolRegex = /\b[a-z][a-z\d+\-.]{1,50}:\/\//g;
|
|
134
|
+
let lastIndex = 0;
|
|
135
|
+
let result = "";
|
|
136
|
+
for(;;){
|
|
137
|
+
const match = protocolRegex.exec(urlObject.pathname);
|
|
138
|
+
if (!match) {
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
const protocol = match[0];
|
|
142
|
+
const protocolAtIndex = match.index;
|
|
143
|
+
const intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex);
|
|
144
|
+
result += intermediate.replace(/\/{2,}/g, "/");
|
|
145
|
+
result += protocol;
|
|
146
|
+
lastIndex = protocolAtIndex + protocol.length;
|
|
147
|
+
}
|
|
148
|
+
const remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length);
|
|
149
|
+
result += remnant.replace(/\/{2,}/g, "/");
|
|
150
|
+
urlObject.pathname = result;
|
|
151
|
+
}
|
|
152
|
+
// Decode URI octets
|
|
153
|
+
if (urlObject.pathname) {
|
|
154
|
+
try {
|
|
155
|
+
urlObject.pathname = decodeURI(urlObject.pathname);
|
|
156
|
+
} catch {}
|
|
157
|
+
}
|
|
158
|
+
// Remove directory index
|
|
159
|
+
if (options.removeDirectoryIndex === true) {
|
|
160
|
+
options.removeDirectoryIndex = [
|
|
161
|
+
/^index\.[a-z]+$/
|
|
162
|
+
];
|
|
163
|
+
}
|
|
164
|
+
if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {
|
|
165
|
+
let pathComponents = urlObject.pathname.split("/");
|
|
166
|
+
const lastComponent = pathComponents[pathComponents.length - 1];
|
|
167
|
+
if (testParameter(lastComponent, options.removeDirectoryIndex)) {
|
|
168
|
+
pathComponents = pathComponents.slice(0, -1);
|
|
169
|
+
urlObject.pathname = pathComponents.slice(1).join("/") + "/";
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (urlObject.hostname) {
|
|
173
|
+
// Remove trailing dot
|
|
174
|
+
urlObject.hostname = urlObject.hostname.replace(/\.$/, "");
|
|
175
|
+
// Remove `www.`
|
|
176
|
+
if (options.stripWWW && /^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(urlObject.hostname)) {
|
|
177
|
+
// Each label should be max 63 at length (min: 1).
|
|
178
|
+
// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
|
|
179
|
+
// Each TLD should be up to 63 characters long (min: 2).
|
|
180
|
+
// It is technically possible to have a single character TLD, but none currently exist.
|
|
181
|
+
urlObject.hostname = urlObject.hostname.replace(/^www\./, "");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Remove query unwanted parameters
|
|
185
|
+
if (Array.isArray(options.removeQueryParameters)) {
|
|
186
|
+
// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.
|
|
187
|
+
for (const key of [
|
|
188
|
+
...urlObject.searchParams.keys()
|
|
189
|
+
]){
|
|
190
|
+
if (testParameter(key, options.removeQueryParameters)) {
|
|
191
|
+
urlObject.searchParams.delete(key);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (!Array.isArray(options.keepQueryParameters) && options.removeQueryParameters === true) {
|
|
196
|
+
urlObject.search = "";
|
|
197
|
+
}
|
|
198
|
+
// Keep wanted query parameters
|
|
199
|
+
if (Array.isArray(options.keepQueryParameters) && options.keepQueryParameters.length > 0) {
|
|
200
|
+
// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.
|
|
201
|
+
for (const key of [
|
|
202
|
+
...urlObject.searchParams.keys()
|
|
203
|
+
]){
|
|
204
|
+
if (!testParameter(key, options.keepQueryParameters)) {
|
|
205
|
+
urlObject.searchParams.delete(key);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Sort query parameters
|
|
210
|
+
if (options.sortQueryParameters) {
|
|
211
|
+
urlObject.searchParams.sort();
|
|
212
|
+
// Calling `.sort()` encodes the search parameters, so we need to decode them again.
|
|
213
|
+
try {
|
|
214
|
+
urlObject.search = decodeURIComponent(urlObject.search);
|
|
215
|
+
} catch {}
|
|
216
|
+
}
|
|
217
|
+
if (options.removeTrailingSlash) {
|
|
218
|
+
urlObject.pathname = urlObject.pathname.replace(/\/$/, "");
|
|
219
|
+
}
|
|
220
|
+
// Remove an explicit port number, excluding a default port number, if applicable
|
|
221
|
+
if (options.removeExplicitPort && urlObject.port) {
|
|
222
|
+
urlObject.port = "";
|
|
223
|
+
}
|
|
224
|
+
const oldUrlString = urlString;
|
|
225
|
+
// Take advantage of many of the Node `url` normalizations
|
|
226
|
+
urlString = urlObject.toString();
|
|
227
|
+
if (!options.removeSingleSlash && urlObject.pathname === "/" && !oldUrlString.endsWith("/") && urlObject.hash === "") {
|
|
228
|
+
urlString = urlString.replace(/\/$/, "");
|
|
229
|
+
}
|
|
230
|
+
// Remove ending `/` unless removeSingleSlash is false
|
|
231
|
+
if ((options.removeTrailingSlash || urlObject.pathname === "/") && urlObject.hash === "" && options.removeSingleSlash) {
|
|
232
|
+
urlString = urlString.replace(/\/$/, "");
|
|
233
|
+
}
|
|
234
|
+
// Restore relative protocol, if applicable
|
|
235
|
+
if (hasRelativeProtocol && !options.normalizeProtocol) {
|
|
236
|
+
urlString = urlString.replace(/^http:\/\//, "//");
|
|
237
|
+
}
|
|
238
|
+
// Remove http/https
|
|
239
|
+
if (options.stripProtocol) {
|
|
240
|
+
urlString = urlString.replace(/^(?:https?:)?\/\//, "");
|
|
241
|
+
}
|
|
242
|
+
return urlString;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
//# sourceMappingURL=normalize-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/normalize-url.ts"],"names":["normalizeUrl","DATA_URL_DEFAULT_MIME_TYPE","DATA_URL_DEFAULT_CHARSET","testParameter","name","filters","some","filter","RegExp","test","supportedProtocols","Set","hasCustomProtocol","urlString","protocol","URL","endsWith","has","normalizeDataURL","stripHash","match","exec","Error","type","data","hash","groups","mediaType","split","isBase64","length","pop","mimeType","shift","toLowerCase","attributes","map","attribute","key","value","string","trim","Boolean","normalizedMediaType","push","unshift","join","options","defaultProtocol","normalizeProtocol","forceHttp","forceHttps","stripAuthentication","stripTextFragment","stripWWW","removeQueryParameters","removeTrailingSlash","removeSingleSlash","removeDirectoryIndex","removeExplicitPort","sortQueryParameters","hasRelativeProtocol","startsWith","isRelativeUrl","replace","urlObject","username","password","pathname","protocolRegex","lastIndex","result","protocolAtIndex","index","intermediate","slice","remnant","decodeURI","Array","isArray","pathComponents","lastComponent","hostname","searchParams","keys","delete","keepQueryParameters","search","sort","decodeURIComponent","port","oldUrlString","toString","stripProtocol"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "checkVersionSatisfiesMinimum", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return checkVersionSatisfiesMinimum;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _semver = require("semver");
|
|
12
|
+
function checkVersionSatisfiesMinimum(newVersion, minimumVersion) {
|
|
13
|
+
const comparison = (0, _semver.compare)(newVersion, minimumVersion);
|
|
14
|
+
// Values 0 or 1 mean the client version is less than the minimum and should be force updated
|
|
15
|
+
return comparison > -1;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=semver.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/semver.utils.ts"],"names":["checkVersionSatisfiesMinimum","newVersion","minimumVersion","comparison","compare"],"mappings":";;;;+BAEgBA;;;eAAAA;;;wBAFQ;AAEjB,SAASA,6BAA6BC,UAAkB,EAAEC,cAAsB;IACrF,MAAMC,aAAaC,IAAAA,eAAO,EAACH,YAAYC;IACvC,6FAA6F;IAC7F,OAAOC,aAAa,CAAC;AACvB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
isValidDate: function() {
|
|
13
|
+
return isValidDate;
|
|
14
|
+
},
|
|
15
|
+
sleep: function() {
|
|
16
|
+
return sleep;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
async function sleep(ms = 2000) {
|
|
20
|
+
return new Promise((resolve)=>setTimeout(resolve, ms));
|
|
21
|
+
}
|
|
22
|
+
function isValidDate(date) {
|
|
23
|
+
return date instanceof Date && !isNaN(date);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=time.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/time.utils.ts"],"names":["isValidDate","sleep","ms","Promise","resolve","setTimeout","date","Date","isNaN"],"mappings":";;;;;;;;;;;IAIgBA,WAAW;eAAXA;;IAJMC,KAAK;eAALA;;;AAAf,eAAeA,MAAMC,KAAK,IAAI;IACnC,OAAO,IAAIC,QAAQ,CAACC,UAAYC,WAAWD,SAASF;AACtD;AAEO,SAASF,YAAYM,IAAI;IAC9B,OAAOA,gBAAgBC,QAAQ,CAACC,MAAMF;AACxC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
httpToWsUrl: function() {
|
|
13
|
+
return httpToWsUrl;
|
|
14
|
+
},
|
|
15
|
+
normalizeURLWithProtocol: function() {
|
|
16
|
+
return normalizeURLWithProtocol;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _normalizeurl = require("./normalize-url");
|
|
20
|
+
function httpToWsUrl(url, protocol = "ws") {
|
|
21
|
+
const wsUrl = new URL("/sockjs/websocket", (0, _normalizeurl.normalizeUrl)(url));
|
|
22
|
+
wsUrl.protocol = `${protocol}`;
|
|
23
|
+
wsUrl.pathname = "/sockjs/websocket";
|
|
24
|
+
return wsUrl;
|
|
25
|
+
}
|
|
26
|
+
function normalizeURLWithProtocol(printerURL) {
|
|
27
|
+
if (!printerURL.startsWith("http://") && !printerURL.startsWith("https://")) {
|
|
28
|
+
printerURL = `http://${printerURL}`;
|
|
29
|
+
}
|
|
30
|
+
return (0, _normalizeurl.normalizeUrl)(printerURL);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=url.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/url.utils.ts"],"names":["httpToWsUrl","normalizeURLWithProtocol","url","protocol","wsUrl","URL","normalizeUrl","pathname","printerURL","startsWith"],"mappings":";;;;;;;;;;;IAEgBA,WAAW;eAAXA;;IAOAC,wBAAwB;eAAxBA;;;8BATa;AAEtB,SAASD,YAAYE,GAAW,EAAEC,WAAW,IAAI;IACtD,MAAMC,QAAQ,IAAIC,IAAI,qBAAqBC,IAAAA,0BAAY,EAACJ;IACxDE,MAAMD,QAAQ,GAAG,CAAC,EAAEA,SAAS,CAAC;IAC9BC,MAAMG,QAAQ,GAAG;IACjB,OAAOH;AACT;AAEO,SAASH,yBAAyBO,UAAkB;IACzD,IAAI,CAACA,WAAWC,UAAU,CAAC,cAAc,CAACD,WAAWC,UAAU,CAAC,aAAa;QAC3ED,aAAa,CAAC,OAAO,EAAEA,WAAW,CAAC;IACrC;IAEA,OAAOF,IAAAA,0BAAY,EAACE;AACtB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "WebsocketAdapter", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return WebsocketAdapter;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _serverconstants = require("../server.constants");
|
|
12
|
+
const _ws = require("ws");
|
|
13
|
+
class WebsocketAdapter {
|
|
14
|
+
socket;
|
|
15
|
+
#logger;
|
|
16
|
+
constructor({ loggerFactory }){
|
|
17
|
+
this.#logger = loggerFactory(WebsocketAdapter.name);
|
|
18
|
+
}
|
|
19
|
+
get isOpened() {
|
|
20
|
+
return this.socket?.readyState === _ws.WebSocket.OPEN;
|
|
21
|
+
}
|
|
22
|
+
close() {
|
|
23
|
+
this.socket?.close();
|
|
24
|
+
delete this.socket;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @protected
|
|
28
|
+
* Open a WebSocket connection.
|
|
29
|
+
*
|
|
30
|
+
* @param {string|URL} url - The URL to connect to.
|
|
31
|
+
* @returns {void}
|
|
32
|
+
*/ open(url) {
|
|
33
|
+
this.socket = new _ws.WebSocket(url, {
|
|
34
|
+
handshakeTimeout: _serverconstants.AppConstants.defaultWebsocketHandshakeTimeout
|
|
35
|
+
});
|
|
36
|
+
this.socket.onopen = (event)=>this.onOpen(event);
|
|
37
|
+
this.socket.onerror = (error)=>this.onError(error);
|
|
38
|
+
this.socket.onclose = (event)=>this.onClose(event);
|
|
39
|
+
this.socket.onmessage = (message)=>this.onMessage(message.data);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @protected
|
|
43
|
+
* Send a message through the WebSocket connection.
|
|
44
|
+
*
|
|
45
|
+
* @param {string} payload - The message payload to send.
|
|
46
|
+
* @returns {Promise<void>} A promise that resolves when the message is sent successfully.
|
|
47
|
+
*/ async sendMessage(payload) {
|
|
48
|
+
if (!this.isOpened || !this.socket) {
|
|
49
|
+
this.#logger.error("Websocket is not opened, cant send a message");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
return await new Promise((resolve, reject)=>{
|
|
53
|
+
this.socket.send(payload, (error)=>{
|
|
54
|
+
if (error) reject(error);
|
|
55
|
+
resolve();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Handle error event.
|
|
61
|
+
* @protected
|
|
62
|
+
* @abstract
|
|
63
|
+
* @param {Event} error - The error event object.
|
|
64
|
+
* @returns {Promise<void> | void} A promise that resolves when the error handling is complete, or void if no promise is returned.
|
|
65
|
+
*/ onError(error) {}
|
|
66
|
+
/**
|
|
67
|
+
* Handle after opened event.
|
|
68
|
+
* @protected
|
|
69
|
+
* @abstract
|
|
70
|
+
* @param {Event} event - The event object.
|
|
71
|
+
* @returns {Promise<void> | void} A promise that resolves when the after opened handling is complete, or void if no promise is returned.
|
|
72
|
+
*/ afterOpened(event) {}
|
|
73
|
+
/**
|
|
74
|
+
* Handle after closed event.
|
|
75
|
+
* @protected
|
|
76
|
+
* @abstract
|
|
77
|
+
* @param {CloseEvent} event - The event object.
|
|
78
|
+
* @returns {Promise<void> | void} A promise that resolves when the after closed handling is complete, or void if no promise is returned.
|
|
79
|
+
*/ afterClosed(event) {}
|
|
80
|
+
/**
|
|
81
|
+
* Handle message event.
|
|
82
|
+
* @protected
|
|
83
|
+
* @abstract
|
|
84
|
+
* @param {Data} event - The event object.
|
|
85
|
+
* @returns {Promise<void> | void} A promise that resolves when the message handling is complete, or void if no promise is returned.
|
|
86
|
+
*/ onMessage(event) {}
|
|
87
|
+
/**
|
|
88
|
+
* Handle open event.
|
|
89
|
+
* @private
|
|
90
|
+
* @param {Event} event - The event object.
|
|
91
|
+
* @returns {Promise<void>} A promise that resolves when the open handling is complete.
|
|
92
|
+
*/ async onOpen(event) {
|
|
93
|
+
await this.afterOpened(event);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Handle close event.
|
|
97
|
+
* @private
|
|
98
|
+
* @param {CloseEvent} event - The event object.
|
|
99
|
+
* @returns {Promise<void>} A promise that resolves when the close handling is complete.
|
|
100
|
+
*/ async onClose(event) {
|
|
101
|
+
await this.afterClosed(event);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=websocket.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/websocket.adapter.ts"],"names":["WebsocketAdapter","socket","logger","constructor","loggerFactory","name","isOpened","readyState","WebSocket","OPEN","close","open","url","handshakeTimeout","AppConstants","defaultWebsocketHandshakeTimeout","onopen","event","onOpen","onerror","error","onError","onclose","onClose","onmessage","message","onMessage","data","sendMessage","payload","Promise","resolve","reject","send","afterOpened","afterClosed"],"mappings":";;;;+BAKaA;;;eAAAA;;;iCALgB;oBAC6C;AAInE,MAAMA;IACXC,OAAmB;IACnB,CAACC,MAAM,CAAgB;IAEvBC,YAAY,EAAEC,aAAa,EAAqC,CAAE;QAChE,IAAI,CAAC,CAACF,MAAM,GAAGE,cAAcJ,iBAAiBK,IAAI;IACpD;IAEA,IAAIC,WAAW;QACb,OAAO,IAAI,CAACL,MAAM,EAAEM,eAAeC,aAAS,CAACC,IAAI;IACnD;IAEAC,QAAQ;QACN,IAAI,CAACT,MAAM,EAAES;QACb,OAAO,IAAI,CAACT,MAAM;IACpB;IAEA;;;;;;GAMC,GACDU,KAAKC,GAAiB,EAAQ;QAC5B,IAAI,CAACX,MAAM,GAAG,IAAIO,aAAS,CAACI,KAAK;YAAEC,kBAAkBC,6BAAY,CAACC,gCAAgC;QAAC;QACnG,IAAI,CAACd,MAAM,CAACe,MAAM,GAAG,CAACC,QAAU,IAAI,CAACC,MAAM,CAACD;QAC5C,IAAI,CAAChB,MAAM,CAACkB,OAAO,GAAG,CAACC,QAAU,IAAI,CAACC,OAAO,CAACD;QAC9C,IAAI,CAACnB,MAAM,CAACqB,OAAO,GAAG,CAACL,QAAU,IAAI,CAACM,OAAO,CAACN;QAC9C,IAAI,CAAChB,MAAM,CAACuB,SAAS,GAAG,CAACC,UAAY,IAAI,CAACC,SAAS,CAACD,QAAQE,IAAI;IAClE;IAEA;;;;;;GAMC,GACD,MAAMC,YAAYC,OAAe,EAAiB;QAChD,IAAI,CAAC,IAAI,CAACvB,QAAQ,IAAI,CAAC,IAAI,CAACL,MAAM,EAAE;YAClC,IAAI,CAAC,CAACC,MAAM,CAACkB,KAAK,CAAC;YACnB;QACF;QACA,OAAO,MAAM,IAAIU,QAAQ,CAACC,SAASC;YACjC,IAAI,CAAC/B,MAAM,CAAEgC,IAAI,CAACJ,SAAS,CAACT;gBAC1B,IAAIA,OAAOY,OAAOZ;gBAClBW;YACF;QACF;IACF;IAEA;;;;;;GAMC,GACDV,QAAQD,KAAiB,EAAwB,CAAC;IAElD;;;;;;GAMC,GACDc,YAAYjB,KAAc,EAAwB,CAAC;IAEnD;;;;;;GAMC,GACDkB,YAAYlB,KAAiB,EAAwB,CAAC;IAEtD;;;;;;GAMC,GACDS,UAAUT,KAAW,EAAwB,CAAC;IAE9C;;;;;GAKC,GACD,MAAMC,OAAOD,KAAc,EAAiB;QAC1C,MAAM,IAAI,CAACiB,WAAW,CAACjB;IACzB;IAEA;;;;;GAKC,GACD,MAAMM,QAAQN,KAAiB,EAAiB;QAC9C,MAAM,IAAI,CAACkB,WAAW,CAAClB;IACzB;AACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// In this file you can configure migrate-mongo
|
|
2
|
+
const { setupEnvConfig, fetchMongoDBConnectionString } = require("./dist/server.env");
|
|
3
|
+
|
|
4
|
+
if (!process.env.MONGO) {
|
|
5
|
+
setupEnvConfig();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const mongoDbString = fetchMongoDBConnectionString();
|
|
9
|
+
|
|
10
|
+
if (!mongoDbString) {
|
|
11
|
+
throw new Error("Cant migrate as the MONGO= environment variable was not resolved.");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const config = {
|
|
15
|
+
mongodb: {
|
|
16
|
+
url: mongoDbString,
|
|
17
|
+
|
|
18
|
+
// Dont override this unless you know what you are doing
|
|
19
|
+
// databaseName: "fdm-monster",
|
|
20
|
+
|
|
21
|
+
options: {
|
|
22
|
+
useNewUrlParser: true, // removes a deprecation warning when connecting
|
|
23
|
+
useUnifiedTopology: true, // removes a deprecating warning when connecting
|
|
24
|
+
// connectTimeoutMS: 3600000, // increase connection timeout to 1 hour
|
|
25
|
+
// socketTimeoutMS: 3600000, // increase socket timeout to 1 hour
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
// The migrations dir, can be a relative or absolute path. Only edit this when really necessary.
|
|
30
|
+
migrationsDir: "dist/mongo-migrations",
|
|
31
|
+
|
|
32
|
+
// The mongodb collection where the applied changes are stored. Only edit this when really necessary.
|
|
33
|
+
changelogCollectionName: "_migrations",
|
|
34
|
+
|
|
35
|
+
// The file extension to create migrations and search for in migration dir
|
|
36
|
+
migrationFileExtension: ".js",
|
|
37
|
+
|
|
38
|
+
// Enable the algorithm to create a checksum of the file contents and use that in the comparison to determine
|
|
39
|
+
// if the file should be run. Requires that scripts are coded to be run multiple times.
|
|
40
|
+
useFileHash: false,
|
|
41
|
+
moduleSystem: "commonjs",
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Return the config as a promise
|
|
45
|
+
module.exports = config;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'// Restart file for nodemon'
|
package/package.json
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fdm-monster/server",
|
|
3
|
+
"author": "David Zwart",
|
|
4
|
+
"license": "AGPL-3.0-or-later",
|
|
5
|
+
"private": false,
|
|
6
|
+
"version": "1.5.0-rc1",
|
|
7
|
+
"description": "FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.",
|
|
8
|
+
"main": "src/index.ts",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"dev": "concurrently \"yarn build:watch\" \"yarn watch-dev\"",
|
|
11
|
+
"watch-dev": "cross-env NODE_ENV=development nodemon --watch \"dist/**/*\" -e js ./dist/index.js",
|
|
12
|
+
"build": "swc src -d dist",
|
|
13
|
+
"build:watch": "swc src -w -d dist",
|
|
14
|
+
"start:dev": "ts-node src/index.ts",
|
|
15
|
+
"start": "cross-env NODE_ENV=production node dist/index.js",
|
|
16
|
+
"migration:create": "migrate-mongo create printer-remove-sortindex",
|
|
17
|
+
"migration:up": "migrate-mongo up",
|
|
18
|
+
"migration:down": "migrate-mongo down",
|
|
19
|
+
"migration:status": "migrate-mongo status",
|
|
20
|
+
"format": "prettier --write \"src/**/*.js\" \"test/**/*.js\"",
|
|
21
|
+
"swc": "swc",
|
|
22
|
+
"tsc": "tsc --noEmit",
|
|
23
|
+
"test": "jest --forceExit",
|
|
24
|
+
"test:cov": "jest --forceExit --coverage",
|
|
25
|
+
"cov:show": "./coverage/lcov-report/index.html"
|
|
26
|
+
},
|
|
27
|
+
"repository": "https://github.com/fdm-monster/fdm-monster",
|
|
28
|
+
"keywords": [
|
|
29
|
+
"fdm-monster",
|
|
30
|
+
"fdm-connector",
|
|
31
|
+
"octoprint",
|
|
32
|
+
"fdm",
|
|
33
|
+
"3d printing",
|
|
34
|
+
"pi",
|
|
35
|
+
"node",
|
|
36
|
+
"vue"
|
|
37
|
+
],
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@fdm-monster/client": "1.3.7",
|
|
40
|
+
"@influxdata/influxdb-client": "1.33.2",
|
|
41
|
+
"@sentry/node": "7.73.0",
|
|
42
|
+
"adm-zip": "0.5.10",
|
|
43
|
+
"awilix": "8.0.1",
|
|
44
|
+
"awilix-express": "8.0.0",
|
|
45
|
+
"axios": "1.5.1",
|
|
46
|
+
"bcryptjs": "2.4.3",
|
|
47
|
+
"cache-manager": "4.1.0",
|
|
48
|
+
"class-validator": "0.14.0",
|
|
49
|
+
"connect-history-api-fallback": "2.0.0",
|
|
50
|
+
"cookie-parser": "1.4.6",
|
|
51
|
+
"cors": "2.8.5",
|
|
52
|
+
"dotenv": "16.3.1",
|
|
53
|
+
"eventemitter2": "6.4.9",
|
|
54
|
+
"express": "4.18.2",
|
|
55
|
+
"form-data": "4.0.0",
|
|
56
|
+
"got": "11.8.6",
|
|
57
|
+
"helmet": "7.0.0",
|
|
58
|
+
"js-yaml": "4.1.0",
|
|
59
|
+
"jsonwebtoken": "9.0.2",
|
|
60
|
+
"lodash": "4.17.21",
|
|
61
|
+
"luxon": "3.4.3",
|
|
62
|
+
"migrate-mongo": "11.0.0",
|
|
63
|
+
"mongoose": "6.12.0",
|
|
64
|
+
"mqtt": "5.1.0",
|
|
65
|
+
"multer": "1.4.5-lts.1",
|
|
66
|
+
"node-input-validator": "4.5.1",
|
|
67
|
+
"nodemon": "3.0.1",
|
|
68
|
+
"octokit": "3.1.1",
|
|
69
|
+
"passport": "0.6.0",
|
|
70
|
+
"passport-anonymous": "1.0.1",
|
|
71
|
+
"passport-jwt": "4.0.1",
|
|
72
|
+
"reflect-metadata": "0.1.13",
|
|
73
|
+
"semver": "7.5.4",
|
|
74
|
+
"simple-git": "3.20.0",
|
|
75
|
+
"socket.io": "4.7.2",
|
|
76
|
+
"toad-scheduler": "3.0.0",
|
|
77
|
+
"uuid": "9.0.1",
|
|
78
|
+
"winston": "3.11.0",
|
|
79
|
+
"ws": "8.14.2"
|
|
80
|
+
},
|
|
81
|
+
"devDependencies": {
|
|
82
|
+
"@lcov-viewer/cli": "1.3.0",
|
|
83
|
+
"@lcov-viewer/istanbul-report": "1.4.0",
|
|
84
|
+
"@swc/cli": "0.1.62",
|
|
85
|
+
"@swc/core": "1.3.92",
|
|
86
|
+
"@swc/jest": "0.2.29",
|
|
87
|
+
"@types/adm-zip": "0.5.2",
|
|
88
|
+
"@types/bcryptjs": "2.4.4",
|
|
89
|
+
"@types/cache-manager": "4.0.3",
|
|
90
|
+
"@types/connect-history-api-fallback": "1.5.1",
|
|
91
|
+
"@types/cookie-parser": "1.4.4",
|
|
92
|
+
"@types/express": "4.17.18",
|
|
93
|
+
"@types/express-session": "1.17.8",
|
|
94
|
+
"@types/jest": "29.5.5",
|
|
95
|
+
"@types/js-yaml": "4.0.6",
|
|
96
|
+
"@types/lodash": "4.14.199",
|
|
97
|
+
"@types/luxon": "3.3.2",
|
|
98
|
+
"@types/migrate-mongo": "10.0.2",
|
|
99
|
+
"@types/multer": "1.4.8",
|
|
100
|
+
"@types/node": "20.8.3",
|
|
101
|
+
"@types/passport-anonymous": "1.0.3",
|
|
102
|
+
"@types/passport-jwt": "3.0.10",
|
|
103
|
+
"@types/semver": "7.5.3",
|
|
104
|
+
"@types/supertest": "2.0.14",
|
|
105
|
+
"@types/uuid": "9.0.5",
|
|
106
|
+
"chokidar": "3.5.3",
|
|
107
|
+
"concurrently": "8.2.1",
|
|
108
|
+
"cross-env": "7.0.3",
|
|
109
|
+
"eslint": "8.51.0",
|
|
110
|
+
"eslint-config-airbnb-base": "15.0.0",
|
|
111
|
+
"eslint-config-prettier": "9.0.0",
|
|
112
|
+
"eslint-config-standard": "17.1.0",
|
|
113
|
+
"eslint-plugin-import": "2.28.1",
|
|
114
|
+
"eslint-plugin-node": "11.1.0",
|
|
115
|
+
"eslint-plugin-prettier": "4.2.1",
|
|
116
|
+
"eslint-plugin-promise": "6.1.1",
|
|
117
|
+
"express-list-routes": "1.1.5",
|
|
118
|
+
"jest": "29.7.0",
|
|
119
|
+
"jest-27-expect-message": "1.1.0",
|
|
120
|
+
"mongodb-memory-server": "9.0.0",
|
|
121
|
+
"nock": "13.3.3",
|
|
122
|
+
"prettier": "2.8.8",
|
|
123
|
+
"supertest": "6.3.3",
|
|
124
|
+
"ts-node": "10.9.1",
|
|
125
|
+
"typescript": "5.2.2"
|
|
126
|
+
},
|
|
127
|
+
"resolutions": {
|
|
128
|
+
"got": "11.8.6"
|
|
129
|
+
},
|
|
130
|
+
"ignore-engines": false,
|
|
131
|
+
"engine-strict": true,
|
|
132
|
+
"engines": {
|
|
133
|
+
"node": ">= 18.0.0",
|
|
134
|
+
"npm": ">= 8.1.4",
|
|
135
|
+
"yarn": ">= 1.22.10"
|
|
136
|
+
},
|
|
137
|
+
"nodemonConfig": {
|
|
138
|
+
"verbose": false,
|
|
139
|
+
"ignore": [
|
|
140
|
+
".github/*",
|
|
141
|
+
"docs/*",
|
|
142
|
+
"media",
|
|
143
|
+
"test/*",
|
|
144
|
+
"views/*",
|
|
145
|
+
"docker/*"
|
|
146
|
+
],
|
|
147
|
+
"delay": 100
|
|
148
|
+
}
|
|
149
|
+
}
|