@fdm-monster/server 2.0.11 → 2.1.1
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/.yarn/install-state.gz +0 -0
- package/.yarn/releases/{yarn-4.13.0.cjs → yarn-4.14.1.cjs} +288 -288
- package/.yarnrc.yml +5 -1
- package/README.md +2 -1
- package/RELEASE_NOTES.MD +153 -2
- package/dist/_virtual/{_@oxc-project_runtime@0.127.0 → _@oxc-project_runtime@0.129.0}/helpers/decorate.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.127.0 → _@oxc-project_runtime@0.129.0}/helpers/decorateMetadata.js +1 -1
- package/dist/_virtual/_virtual_controllers.js +2 -0
- package/dist/consoles/typeorm-create.js.map +1 -1
- package/dist/consoles/typeorm-generate.js.map +1 -1
- package/dist/consoles/typeorm-migrate.js.map +1 -1
- package/dist/constants/authorization.constants.js.map +1 -1
- package/dist/container.js +2 -0
- package/dist/container.js.map +1 -1
- package/dist/container.tokens.js +1 -0
- package/dist/container.tokens.js.map +1 -1
- package/dist/controllers/api-key.controller.js +72 -0
- package/dist/controllers/api-key.controller.js.map +1 -0
- package/dist/controllers/auth.controller.js +6 -4
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/controllers/batch-call.controller.js +2 -2
- package/dist/controllers/batch-call.controller.js.map +1 -1
- package/dist/controllers/camera-stream.controller.js +2 -2
- package/dist/controllers/camera-stream.controller.js.map +1 -1
- package/dist/controllers/file-storage.controller.js +2 -2
- package/dist/controllers/file-storage.controller.js.map +1 -1
- package/dist/controllers/first-time-setup.controller.js +2 -2
- package/dist/controllers/first-time-setup.controller.js.map +1 -1
- package/dist/controllers/floor.controller.js +2 -2
- package/dist/controllers/floor.controller.js.map +1 -1
- package/dist/controllers/metrics.controller.js +2 -2
- package/dist/controllers/metrics.controller.js.map +1 -1
- package/dist/controllers/print-job.controller.js +2 -2
- package/dist/controllers/print-job.controller.js.map +1 -1
- package/dist/controllers/print-queue.controller.js +2 -2
- package/dist/controllers/print-queue.controller.js.map +1 -1
- package/dist/controllers/printer-files.controller.js +2 -2
- package/dist/controllers/printer-files.controller.js.map +1 -1
- package/dist/controllers/printer-maintenance-log.controller.js +2 -2
- package/dist/controllers/printer-maintenance-log.controller.js.map +1 -1
- package/dist/controllers/printer-settings.controller.js +2 -2
- package/dist/controllers/printer-settings.controller.js.map +1 -1
- package/dist/controllers/printer-tag.controller.js +2 -2
- package/dist/controllers/printer-tag.controller.js.map +1 -1
- package/dist/controllers/printer.controller.js +2 -2
- package/dist/controllers/printer.controller.js.map +1 -1
- package/dist/controllers/server-private.controller.js +2 -2
- package/dist/controllers/server-private.controller.js.map +1 -1
- package/dist/controllers/server-public.controller.js +2 -2
- package/dist/controllers/server-public.controller.js.map +1 -1
- package/dist/controllers/settings.controller.js +2 -2
- package/dist/controllers/settings.controller.js.map +1 -1
- package/dist/controllers/slicer-compat.controller.js +2 -2
- package/dist/controllers/slicer-compat.controller.js.map +1 -1
- package/dist/controllers/user.controller.js +2 -2
- package/dist/controllers/user.controller.js.map +1 -1
- package/dist/controllers/validation/api-key-controller.validation.js +11 -0
- package/dist/controllers/validation/api-key-controller.validation.js.map +1 -0
- package/dist/data-source.js +6 -2
- package/dist/data-source.js.map +1 -1
- package/dist/entities/api-key.entity.js +60 -0
- package/dist/entities/api-key.entity.js.map +1 -0
- package/dist/entities/camera-stream.entity.js +2 -2
- package/dist/entities/floor-position.entity.js +2 -2
- package/dist/entities/floor.entity.js +2 -2
- package/dist/entities/index.js +2 -1
- package/dist/entities/print-job.entity.js +2 -2
- package/dist/entities/printer-maintenance-log.entity.js +2 -2
- package/dist/entities/printer-tag.entity.js +2 -2
- package/dist/entities/printer.entity.js +2 -2
- package/dist/entities/refresh-token.entity.js +2 -2
- package/dist/entities/role.entity.js +2 -2
- package/dist/entities/settings.entity.js +2 -2
- package/dist/entities/tag.entity.js +2 -2
- package/dist/entities/user-role.entity.js +2 -2
- package/dist/entities/user.entity.js +2 -2
- package/dist/exceptions/failed-dependency.exception.js.map +1 -1
- package/dist/exceptions/job.exceptions.js.map +1 -1
- package/dist/exceptions/runtime.exceptions.js.map +1 -1
- package/dist/handlers/event-emitter.js.map +1 -1
- package/dist/handlers/logger-factory.js.map +1 -1
- package/dist/handlers/logger.js.map +1 -1
- package/dist/handlers/logging/file-logging.transport.js +1 -2
- package/dist/handlers/logging/file-logging.transport.js.map +1 -1
- package/dist/handlers/logging/loki-logging.transport.js.map +1 -1
- package/dist/handlers/logging/static.logger.js.map +1 -1
- package/dist/handlers/validators.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/api-key.strategy.js +45 -0
- package/dist/middleware/api-key.strategy.js.map +1 -0
- package/dist/middleware/authenticate.js.map +1 -1
- package/dist/middleware/database.js.map +1 -1
- package/dist/middleware/demo.middleware.js.map +1 -1
- package/dist/middleware/exception.filter.js.map +1 -1
- package/dist/middleware/global.middleware.js.map +1 -1
- package/dist/middleware/param-converter.middleware.js.map +1 -1
- package/dist/middleware/passport.js +3 -0
- package/dist/middleware/passport.js.map +1 -1
- package/dist/middleware/printer-resolver.js.map +1 -1
- package/dist/middleware/printer.js.map +1 -1
- package/dist/middleware/slicer-api-key.middleware.js.map +1 -1
- package/dist/middleware/socketio.middleware.js.map +1 -1
- package/dist/migrations/1706829146617-InitSqlite.js.map +1 -1
- package/dist/migrations/1707494762198-PrinterGroup.js.map +1 -1
- package/dist/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.js.map +1 -1
- package/dist/migrations/1713300747465-ChangeRoleNameUnique.js.map +1 -1
- package/dist/migrations/1713897879622-AddPrinterType.js.map +1 -1
- package/dist/migrations/1720338804844-RemovePrinterFile.js.map +1 -1
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -1
- package/dist/migrations/1766576698569-DropPermissions.js.map +1 -1
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -1
- package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -1
- package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -1
- package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -1
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -1
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -1
- package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -1
- package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -1
- package/dist/migrations/1767909428129-AddPrinterMaintenanceLog.js.map +1 -1
- package/dist/migrations/1778446203015-AddApiKey.js +49 -0
- package/dist/migrations/1778446203015-AddApiKey.js.map +1 -0
- package/dist/plugins/controllers-plugin.js.map +1 -1
- package/dist/server.constants.js +2 -1
- package/dist/server.constants.js.map +1 -1
- package/dist/server.core.js +6 -2
- package/dist/server.core.js.map +1 -1
- package/dist/server.env.js.map +1 -1
- package/dist/server.host.js.map +1 -1
- package/dist/services/authentication/auth.service.js.map +1 -1
- package/dist/services/authentication/jwt.service.js.map +1 -1
- package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
- package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
- package/dist/services/bambu/bambu.client.js.map +1 -1
- package/dist/services/bambu.api.js.map +1 -1
- package/dist/services/core/batch-call.service.js.map +1 -1
- package/dist/services/core/client-bundle.service.js.map +1 -1
- package/dist/services/core/config.service.js +4 -0
- package/dist/services/core/config.service.js.map +1 -1
- package/dist/services/core/cradle.service.js.map +1 -1
- package/dist/services/core/github.service.js.map +1 -1
- package/dist/services/core/http-client.factory.js.map +1 -1
- package/dist/services/core/logs-manager.service.js.map +1 -1
- package/dist/services/core/monsterpi.service.js.map +1 -1
- package/dist/services/core/multer.service.js.map +1 -1
- package/dist/services/core/server-release.service.js.map +1 -1
- package/dist/services/core/yaml.service.js.map +1 -1
- package/dist/services/file-analysis.service.js.map +1 -1
- package/dist/services/file-storage.service.js.map +1 -1
- package/dist/services/interfaces/api-key.dto.js +19 -0
- package/dist/services/interfaces/api-key.dto.js.map +1 -0
- package/dist/services/interfaces/api-key.service.interface.js +1 -0
- package/dist/services/interfaces/user.dto.js +2 -0
- package/dist/services/interfaces/user.dto.js.map +1 -1
- package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
- package/dist/services/moonraker/moonraker.client.js.map +1 -1
- package/dist/services/moonraker.api.js.map +1 -1
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
- package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
- package/dist/services/octoprint/octoprint.client.js.map +1 -1
- package/dist/services/octoprint/utils/api.utils.js.map +1 -1
- package/dist/services/octoprint/utils/file.utils.js.map +1 -1
- package/dist/services/octoprint/utils/octoprint-http-client.builder.js.map +1 -1
- package/dist/services/octoprint.api.js.map +1 -1
- package/dist/services/orm/api-key.service.js +90 -0
- package/dist/services/orm/api-key.service.js.map +1 -0
- package/dist/services/orm/base.service.js.map +1 -1
- package/dist/services/orm/camera-stream.service.js.map +1 -1
- package/dist/services/orm/floor-position.service.js.map +1 -1
- package/dist/services/orm/floor.service.js.map +1 -1
- package/dist/services/orm/permission.service.js.map +1 -1
- package/dist/services/orm/print-job.service.js.map +1 -1
- package/dist/services/orm/printer-maintenance-log.service.js.map +1 -1
- package/dist/services/orm/printer-tag.service.js.map +1 -1
- package/dist/services/orm/printer.service.js.map +1 -1
- package/dist/services/orm/refresh-token.service.js.map +1 -1
- package/dist/services/orm/role.service.js.map +1 -1
- package/dist/services/orm/settings.service.js.map +1 -1
- package/dist/services/orm/user-role.service.js.map +1 -1
- package/dist/services/orm/user.service.js.map +1 -1
- package/dist/services/print-file-downloader.service.js.map +1 -1
- package/dist/services/print-queue.service.js.map +1 -1
- package/dist/services/printer-api.factory.js.map +1 -1
- package/dist/services/printer-api.interface.js.map +1 -1
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
- package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
- package/dist/services/prusa-link/utils/digest-auth.util.js +19 -12
- package/dist/services/prusa-link/utils/digest-auth.util.js.map +1 -1
- package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js +45 -11
- package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -1
- package/dist/services/socket.factory.js.map +1 -1
- package/dist/services/task-manager.service.js.map +1 -1
- package/dist/services/typeorm/typeorm.service.js.map +1 -1
- package/dist/services/validators/printer-service.validation.js.map +1 -1
- package/dist/shared/default-http-client.builder.js.map +1 -1
- package/dist/shared/load-controllers.js.map +1 -1
- package/dist/shared/runtime-settings.migration.js.map +1 -1
- package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
- package/dist/shared/websocket.adapter.js.map +1 -1
- package/dist/state/file-upload-tracker.cache.js.map +1 -1
- package/dist/state/floor.store.js.map +1 -1
- package/dist/state/printer-events.cache.js.map +1 -1
- package/dist/state/printer-socket.store.js.map +1 -1
- package/dist/state/printer-thumbnail.cache.js.map +1 -1
- package/dist/state/printer.cache.js.map +1 -1
- package/dist/state/settings.store.js.map +1 -1
- package/dist/state/socket-io.gateway.js.map +1 -1
- package/dist/state/test-printer-socket.store.js.map +1 -1
- package/dist/tasks/boot.task.js.map +1 -1
- package/dist/tasks/client-bundle.task.js.map +1 -1
- package/dist/tasks/print-job-analysis.task.js.map +1 -1
- package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
- package/dist/tasks/printer-websocket.task.js.map +1 -1
- package/dist/tasks/socketio.task.js.map +1 -1
- package/dist/tasks/software-update.task.js.map +1 -1
- package/dist/tasks.js.map +1 -1
- package/dist/utils/array.util.js.map +1 -1
- package/dist/utils/bgcode/bgcode-thumbnail.parser.js.map +1 -1
- package/dist/utils/bgcode/bgcode.utils.js.map +1 -1
- package/dist/utils/bgcode/heatshrink-decoder.js.map +1 -1
- package/dist/utils/bgcode/png-encoder.js.map +1 -1
- package/dist/utils/bgcode/qoi-decoder.js.map +1 -1
- package/dist/utils/cache/key-diff.cache.js.map +1 -1
- package/dist/utils/correlation-token.util.js.map +1 -1
- package/dist/utils/crypto.utils.js.map +1 -1
- package/dist/utils/env.utils.js.map +1 -1
- package/dist/utils/error.utils.js.map +1 -1
- package/dist/utils/fs.utils.js.map +1 -1
- package/dist/utils/gcode.utils.js.map +1 -1
- package/dist/utils/image-dimensions.js.map +1 -1
- package/dist/utils/job-stats.util.js.map +1 -1
- package/dist/utils/normalize-url.js.map +1 -1
- package/dist/utils/parsers/3mf.parser.js.map +1 -1
- package/dist/utils/parsers/bgcode.parser.js.map +1 -1
- package/dist/utils/parsers/gcode.parser.js.map +1 -1
- package/dist/utils/pretty-print.utils.js.map +1 -1
- package/dist/utils/semver.utils.js.map +1 -1
- package/dist/utils/swagger/decorators.js.map +1 -1
- package/dist/utils/swagger/generator.js.map +1 -1
- package/dist/utils/swagger/swagger.js.map +1 -1
- package/dist/utils/thumbnail.util.js.map +1 -1
- package/dist/utils/time.utils.js.map +1 -1
- package/dist/utils/url.utils.js.map +1 -1
- package/package.json +17 -14
- package/packages/consoles/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate.js","names":[],"sources":["../../src/middleware/authenticate.ts"],"sourcesContent":["import { inject } from \"awilix-express\";\nimport { AuthenticationError, AuthorizationError } from \"@/exceptions/runtime.exceptions\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { AUTH_ERROR_REASON, type PermissionName, type RoleName } from \"@/constants/authorization.constants\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport { AuthService } from \"@/services/authentication/auth.service\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport type { IRoleService } from \"@/services/interfaces/role-service.interface\";\nimport type { IPermissionService } from \"@/services/interfaces/permission.service.interface\";\n\nexport const authenticate = () =>\n inject(\n (authService: AuthService, loggerFactory: ILoggerFactory, settingsStore: SettingsStore) =>\n async (req: Request, res: Response, next: NextFunction) => {\n const logger = loggerFactory(\"Middleware:authenticate\");\n\n const isLoginRequired = await settingsStore.getLoginRequired();\n if (!isLoginRequired) {\n return next();\n }\n\n // Check if a password change is required\n if (req.user?.needsPasswordChange) {\n throw new AuthenticationError(\"Password change required\", AUTH_ERROR_REASON.PasswordChangeRequired);\n }\n\n // Check if a logout was called\n const bearer = req.headers.authorization?.replace(\"Bearer \", \"\") || undefined;\n if (!!bearer?.length && authService.isJwtTokenBlacklisted(bearer)) {\n throw new AuthenticationError(\"Not authenticated\", AUTH_ERROR_REASON.LoginRequired);\n }\n\n if (req.isAuthenticated()) {\n return next();\n }\n\n logger.log(`Not authenticated for route: ${req.originalUrl}`);\n throw new AuthenticationError(\"Not authenticated\", AUTH_ERROR_REASON.InvalidOrExpiredAuthToken);\n },\n );\n\nexport function permission(requiredPermission: PermissionName) {\n return inject(\n (permissionService: IPermissionService, roleService: IRoleService) =>\n async (req: Request, _res: Response, next: NextFunction) => {\n const userRoles = req.roles;\n if (!userRoles?.length) {\n throw new AuthorizationError({ permissions: [requiredPermission] });\n }\n\n const assignedPermissions = roleService.getRolesPermissions(userRoles);\n if (!permissionService.authorizePermission(requiredPermission, assignedPermissions)) {\n throw new AuthorizationError({ permissions: [requiredPermission] });\n }\n\n next();\n },\n );\n}\n\nexport const authorizeRoles = (requiredRoles: RoleName[], subset = true) =>\n inject((roleService: IRoleService) => async (req: Request, res: Response, next: NextFunction) => {\n if (!req.roles?.length || !roleService.authorizeRoles(requiredRoles, req.roles, subset)) {\n throw new AuthorizationError({ roles: requiredRoles });\n }\n\n next();\n });\n"],"mappings":";;;;AAUA,MAAa,qBACX,QACG,aAA0B,eAA+B,kBACxD,OAAO,KAAc,KAAe,SAAuB;CACzD,MAAM,SAAS,cAAc,0BAA0B;
|
|
1
|
+
{"version":3,"file":"authenticate.js","names":[],"sources":["../../src/middleware/authenticate.ts"],"sourcesContent":["import { inject } from \"awilix-express\";\nimport { AuthenticationError, AuthorizationError } from \"@/exceptions/runtime.exceptions\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { AUTH_ERROR_REASON, type PermissionName, type RoleName } from \"@/constants/authorization.constants\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport { AuthService } from \"@/services/authentication/auth.service\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport type { IRoleService } from \"@/services/interfaces/role-service.interface\";\nimport type { IPermissionService } from \"@/services/interfaces/permission.service.interface\";\n\nexport const authenticate = () =>\n inject(\n (authService: AuthService, loggerFactory: ILoggerFactory, settingsStore: SettingsStore) =>\n async (req: Request, res: Response, next: NextFunction) => {\n const logger = loggerFactory(\"Middleware:authenticate\");\n\n const isLoginRequired = await settingsStore.getLoginRequired();\n if (!isLoginRequired) {\n return next();\n }\n\n // Check if a password change is required\n if (req.user?.needsPasswordChange) {\n throw new AuthenticationError(\"Password change required\", AUTH_ERROR_REASON.PasswordChangeRequired);\n }\n\n // Check if a logout was called\n const bearer = req.headers.authorization?.replace(\"Bearer \", \"\") || undefined;\n if (!!bearer?.length && authService.isJwtTokenBlacklisted(bearer)) {\n throw new AuthenticationError(\"Not authenticated\", AUTH_ERROR_REASON.LoginRequired);\n }\n\n if (req.isAuthenticated()) {\n return next();\n }\n\n logger.log(`Not authenticated for route: ${req.originalUrl}`);\n throw new AuthenticationError(\"Not authenticated\", AUTH_ERROR_REASON.InvalidOrExpiredAuthToken);\n },\n );\n\nexport function permission(requiredPermission: PermissionName) {\n return inject(\n (permissionService: IPermissionService, roleService: IRoleService) =>\n async (req: Request, _res: Response, next: NextFunction) => {\n const userRoles = req.roles;\n if (!userRoles?.length) {\n throw new AuthorizationError({ permissions: [requiredPermission] });\n }\n\n const assignedPermissions = roleService.getRolesPermissions(userRoles);\n if (!permissionService.authorizePermission(requiredPermission, assignedPermissions)) {\n throw new AuthorizationError({ permissions: [requiredPermission] });\n }\n\n next();\n },\n );\n}\n\nexport const authorizeRoles = (requiredRoles: RoleName[], subset = true) =>\n inject((roleService: IRoleService) => async (req: Request, res: Response, next: NextFunction) => {\n if (!req.roles?.length || !roleService.authorizeRoles(requiredRoles, req.roles, subset)) {\n throw new AuthorizationError({ roles: requiredRoles });\n }\n\n next();\n });\n"],"mappings":";;;;AAUA,MAAa,qBACX,QACG,aAA0B,eAA+B,kBACxD,OAAO,KAAc,KAAe,SAAuB;CACzD,MAAM,SAAS,cAAc,0BAA0B;CAGvD,IAAI,CAAC,MADyB,cAAc,kBAAkB,EAE5D,OAAO,MAAM;CAIf,IAAI,IAAI,MAAM,qBACZ,MAAM,IAAI,oBAAoB,4BAA4B,kBAAkB,uBAAuB;CAIrG,MAAM,SAAS,IAAI,QAAQ,eAAe,QAAQ,WAAW,GAAG,IAAI,KAAA;CACpE,IAAI,CAAC,CAAC,QAAQ,UAAU,YAAY,sBAAsB,OAAO,EAC/D,MAAM,IAAI,oBAAoB,qBAAqB,kBAAkB,cAAc;CAGrF,IAAI,IAAI,iBAAiB,EACvB,OAAO,MAAM;CAGf,OAAO,IAAI,gCAAgC,IAAI,cAAc;CAC7D,MAAM,IAAI,oBAAoB,qBAAqB,kBAAkB,0BAA0B;EAEpG;AAEH,SAAgB,WAAW,oBAAoC;CAC7D,OAAO,QACJ,mBAAuC,gBACtC,OAAO,KAAc,MAAgB,SAAuB;EAC1D,MAAM,YAAY,IAAI;EACtB,IAAI,CAAC,WAAW,QACd,MAAM,IAAI,mBAAmB,EAAE,aAAa,CAAC,mBAAmB,EAAE,CAAC;EAGrE,MAAM,sBAAsB,YAAY,oBAAoB,UAAU;EACtE,IAAI,CAAC,kBAAkB,oBAAoB,oBAAoB,oBAAoB,EACjF,MAAM,IAAI,mBAAmB,EAAE,aAAa,CAAC,mBAAmB,EAAE,CAAC;EAGrE,MAAM;GAEX;;AAGH,MAAa,kBAAkB,eAA2B,SAAS,SACjE,QAAQ,gBAA8B,OAAO,KAAc,KAAe,SAAuB;CAC/F,IAAI,CAAC,IAAI,OAAO,UAAU,CAAC,YAAY,eAAe,eAAe,IAAI,OAAO,OAAO,EACrF,MAAM,IAAI,mBAAmB,EAAE,OAAO,eAAe,CAAC;CAGxD,MAAM;EACN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","names":[],"sources":["../../src/middleware/database.ts"],"sourcesContent":["import { DITokens } from \"@/container.tokens\";\nimport type { NextFunction, Request, Response } from \"express\";\n\n/**\n * 0 = disconnected, 1 = connected, 2 = connecting, 3 = disconnecting\n */\nexport async function interceptDatabaseError(req: any | Request, res: Response, next: NextFunction) {\n const serverHost = req.container.resolve(DITokens.serverHost);\n\n const databaseReadyState = serverHost.hasConnected();\n if (databaseReadyState === 1) {\n next();\n } else {\n res.status(500);\n res.send({\n databaseReadyState: serverHost.hasConnected(),\n state: \"Retrying database connection. Please contact the developer if this persists.\",\n });\n }\n}\n"],"mappings":";;;;;AAMA,eAAsB,uBAAuB,KAAoB,KAAe,MAAoB;CAClG,MAAM,aAAa,IAAI,UAAU,QAAQ,SAAS,WAAW;
|
|
1
|
+
{"version":3,"file":"database.js","names":[],"sources":["../../src/middleware/database.ts"],"sourcesContent":["import { DITokens } from \"@/container.tokens\";\nimport type { NextFunction, Request, Response } from \"express\";\n\n/**\n * 0 = disconnected, 1 = connected, 2 = connecting, 3 = disconnecting\n */\nexport async function interceptDatabaseError(req: any | Request, res: Response, next: NextFunction) {\n const serverHost = req.container.resolve(DITokens.serverHost);\n\n const databaseReadyState = serverHost.hasConnected();\n if (databaseReadyState === 1) {\n next();\n } else {\n res.status(500);\n res.send({\n databaseReadyState: serverHost.hasConnected(),\n state: \"Retrying database connection. Please contact the developer if this persists.\",\n });\n }\n}\n"],"mappings":";;;;;AAMA,eAAsB,uBAAuB,KAAoB,KAAe,MAAoB;CAClG,MAAM,aAAa,IAAI,UAAU,QAAQ,SAAS,WAAW;CAG7D,IAD2B,WAAW,cAChB,KAAK,GACzB,MAAM;MACD;EACL,IAAI,OAAO,IAAI;EACf,IAAI,KAAK;GACP,oBAAoB,WAAW,cAAc;GAC7C,OAAO;GACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.middleware.js","names":[],"sources":["../../src/middleware/demo.middleware.ts"],"sourcesContent":["import { ForbiddenError } from \"@/exceptions/runtime.exceptions\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { inject } from \"awilix-express\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport type { IConfigService } from \"@/services/core/config.service\";\nimport type { IUserService } from \"@/services/interfaces/user-service.interface\";\n\nexport const demoUserNotAllowed = inject(\n (userService: IUserService, configService: IConfigService, loggerFactory: ILoggerFactory) => {\n const logger = loggerFactory(demoUserNotAllowed.name);\n return async (req: Request, res: Response, next: NextFunction) => {\n const isDemoMode = configService.isDemoMode();\n if (!isDemoMode) {\n next();\n return;\n }\n const demoUserId = await userService.getDemoUserId();\n if (req.user?.id === demoUserId) {\n logger.warn(\"Demo user attempted to access restricted resource\", req.path);\n throw new ForbiddenError(\"Demo user attempted to access restricted resource\");\n }\n next();\n };\n },\n);\n"],"mappings":";;;AAOA,MAAa,qBAAqB,QAC/B,aAA2B,eAA+B,kBAAkC;CAC3F,MAAM,SAAS,cAAc,mBAAmB,KAAK;
|
|
1
|
+
{"version":3,"file":"demo.middleware.js","names":[],"sources":["../../src/middleware/demo.middleware.ts"],"sourcesContent":["import { ForbiddenError } from \"@/exceptions/runtime.exceptions\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { inject } from \"awilix-express\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport type { IConfigService } from \"@/services/core/config.service\";\nimport type { IUserService } from \"@/services/interfaces/user-service.interface\";\n\nexport const demoUserNotAllowed = inject(\n (userService: IUserService, configService: IConfigService, loggerFactory: ILoggerFactory) => {\n const logger = loggerFactory(demoUserNotAllowed.name);\n return async (req: Request, res: Response, next: NextFunction) => {\n const isDemoMode = configService.isDemoMode();\n if (!isDemoMode) {\n next();\n return;\n }\n const demoUserId = await userService.getDemoUserId();\n if (req.user?.id === demoUserId) {\n logger.warn(\"Demo user attempted to access restricted resource\", req.path);\n throw new ForbiddenError(\"Demo user attempted to access restricted resource\");\n }\n next();\n };\n },\n);\n"],"mappings":";;;AAOA,MAAa,qBAAqB,QAC/B,aAA2B,eAA+B,kBAAkC;CAC3F,MAAM,SAAS,cAAc,mBAAmB,KAAK;CACrD,OAAO,OAAO,KAAc,KAAe,SAAuB;EAEhE,IAAI,CADe,cAAc,YAClB,EAAE;GACf,MAAM;GACN;;EAEF,MAAM,aAAa,MAAM,YAAY,eAAe;EACpD,IAAI,IAAI,MAAM,OAAO,YAAY;GAC/B,OAAO,KAAK,qDAAqD,IAAI,KAAK;GAC1E,MAAM,IAAI,eAAe,oDAAoD;;EAE/E,MAAM;;EAGX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exception.filter.js","names":[],"sources":["../../src/middleware/exception.filter.ts"],"sourcesContent":["import {\n AuthenticationError,\n AuthorizationError,\n BadRequestException,\n ConflictException,\n ExternalServiceError,\n ForbiddenError,\n InternalServerException,\n NotFoundException,\n ValidationException,\n} from \"@/exceptions/runtime.exceptions\";\nimport { AppConstants } from \"@/server.constants\";\nimport type { NextFunction, Response, Request } from \"express\";\nimport { AxiosError } from \"axios\";\nimport { EntityNotFoundError } from \"typeorm\";\nimport { FailedDependencyException } from \"@/exceptions/failed-dependency.exception\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport { LoggerService } from \"@/handlers/logger\";\n\nexport class ExceptionFilter {\n private readonly logger: LoggerService;\n\n constructor(loggerFactory: ILoggerFactory) {\n this.logger = loggerFactory(ExceptionFilter.name);\n }\n\n handle(err: AxiosError | any, _req: any | Request, res: Response, next: NextFunction): void {\n const isTest = process.env.NODE_ENV === AppConstants.defaultTestEnv;\n if (!isTest) {\n this.logger.error(\"API Exception occurred\", {\n message: err.message,\n stack: err.stack || err?.response?.data,\n url: _req?.url,\n method: _req?.method,\n userAgent: _req?.headers?.[\"user-agent\"],\n errorType: err.constructor.name,\n });\n }\n if (err.isAxiosError) {\n const code = err.response?.status || 500;\n res.status(code).send({\n error: \"External API call failed\",\n type: \"axios-error\",\n data: err.response?.data?._readableState ? null : err.response?.data,\n });\n return;\n }\n if (err instanceof AuthenticationError) {\n res.status(401).send({ error: err.message, reasonCode: err.reasonCode });\n return;\n }\n if (err instanceof AuthorizationError) {\n const permissions = err.permissions;\n const roles = err.roles;\n const error = err.message || \"You lack permission to this resource\";\n const reason = err.reason;\n res.status(403).send({ error, reason, permissions, roles });\n return;\n }\n if (err instanceof ForbiddenError) {\n res.status(403).send({ error: err.message });\n return;\n }\n if (err instanceof NotFoundException || err instanceof EntityNotFoundError) {\n res.status(404).send({ error: err.message });\n return;\n }\n if (err instanceof BadRequestException) {\n res.status(400).send({ error: err.message });\n return;\n }\n if (err instanceof ConflictException) {\n res.status(409).send({\n error: err.message,\n existingResourceId: err.existingResourceId,\n });\n return;\n }\n if (err instanceof ValidationException) {\n res.status(400).send({\n error: \"API could not accept this input\",\n type: err.name,\n errors: err.errors,\n });\n return;\n }\n if (err instanceof FailedDependencyException) {\n res.status(424).send({\n error: err.message,\n serviceCode: err.serviceCode,\n type: err.name,\n });\n return;\n }\n if (err instanceof InternalServerException) {\n res.status(500).send({\n error: err.message,\n type: err.name,\n stack: err.stack,\n });\n return;\n }\n if (err instanceof ExternalServiceError) {\n res.status(500).send(err.error);\n return;\n }\n if (err) {\n res.status(500).send({\n error: \"Server experienced an internal error\",\n type: err.name,\n stack: err.stack,\n });\n return;\n }\n\n // Will result in not found on API level\n next();\n }\n}\n\n// Backward compatibility - keep the function export for existing code\nexport function exceptionFilter(\n _err: AxiosError | any,\n _req: any | Request,\n _res: Response,\n _next: NextFunction,\n): void {\n throw new Error(\n \"Use ExceptionFilter class instead of exceptionFilter function. Please inject ExceptionFilter and use .handle method.\",\n );\n}\n"],"mappings":";;;;;AAmBA,IAAa,kBAAb,MAAa,gBAAgB;CAC3B;CAEA,YAAY,eAA+B;
|
|
1
|
+
{"version":3,"file":"exception.filter.js","names":[],"sources":["../../src/middleware/exception.filter.ts"],"sourcesContent":["import {\n AuthenticationError,\n AuthorizationError,\n BadRequestException,\n ConflictException,\n ExternalServiceError,\n ForbiddenError,\n InternalServerException,\n NotFoundException,\n ValidationException,\n} from \"@/exceptions/runtime.exceptions\";\nimport { AppConstants } from \"@/server.constants\";\nimport type { NextFunction, Response, Request } from \"express\";\nimport { AxiosError } from \"axios\";\nimport { EntityNotFoundError } from \"typeorm\";\nimport { FailedDependencyException } from \"@/exceptions/failed-dependency.exception\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport { LoggerService } from \"@/handlers/logger\";\n\nexport class ExceptionFilter {\n private readonly logger: LoggerService;\n\n constructor(loggerFactory: ILoggerFactory) {\n this.logger = loggerFactory(ExceptionFilter.name);\n }\n\n handle(err: AxiosError | any, _req: any | Request, res: Response, next: NextFunction): void {\n const isTest = process.env.NODE_ENV === AppConstants.defaultTestEnv;\n if (!isTest) {\n this.logger.error(\"API Exception occurred\", {\n message: err.message,\n stack: err.stack || err?.response?.data,\n url: _req?.url,\n method: _req?.method,\n userAgent: _req?.headers?.[\"user-agent\"],\n errorType: err.constructor.name,\n });\n }\n if (err.isAxiosError) {\n const code = err.response?.status || 500;\n res.status(code).send({\n error: \"External API call failed\",\n type: \"axios-error\",\n data: err.response?.data?._readableState ? null : err.response?.data,\n });\n return;\n }\n if (err instanceof AuthenticationError) {\n res.status(401).send({ error: err.message, reasonCode: err.reasonCode });\n return;\n }\n if (err instanceof AuthorizationError) {\n const permissions = err.permissions;\n const roles = err.roles;\n const error = err.message || \"You lack permission to this resource\";\n const reason = err.reason;\n res.status(403).send({ error, reason, permissions, roles });\n return;\n }\n if (err instanceof ForbiddenError) {\n res.status(403).send({ error: err.message });\n return;\n }\n if (err instanceof NotFoundException || err instanceof EntityNotFoundError) {\n res.status(404).send({ error: err.message });\n return;\n }\n if (err instanceof BadRequestException) {\n res.status(400).send({ error: err.message });\n return;\n }\n if (err instanceof ConflictException) {\n res.status(409).send({\n error: err.message,\n existingResourceId: err.existingResourceId,\n });\n return;\n }\n if (err instanceof ValidationException) {\n res.status(400).send({\n error: \"API could not accept this input\",\n type: err.name,\n errors: err.errors,\n });\n return;\n }\n if (err instanceof FailedDependencyException) {\n res.status(424).send({\n error: err.message,\n serviceCode: err.serviceCode,\n type: err.name,\n });\n return;\n }\n if (err instanceof InternalServerException) {\n res.status(500).send({\n error: err.message,\n type: err.name,\n stack: err.stack,\n });\n return;\n }\n if (err instanceof ExternalServiceError) {\n res.status(500).send(err.error);\n return;\n }\n if (err) {\n res.status(500).send({\n error: \"Server experienced an internal error\",\n type: err.name,\n stack: err.stack,\n });\n return;\n }\n\n // Will result in not found on API level\n next();\n }\n}\n\n// Backward compatibility - keep the function export for existing code\nexport function exceptionFilter(\n _err: AxiosError | any,\n _req: any | Request,\n _res: Response,\n _next: NextFunction,\n): void {\n throw new Error(\n \"Use ExceptionFilter class instead of exceptionFilter function. Please inject ExceptionFilter and use .handle method.\",\n );\n}\n"],"mappings":";;;;;AAmBA,IAAa,kBAAb,MAAa,gBAAgB;CAC3B;CAEA,YAAY,eAA+B;EACzC,KAAK,SAAS,cAAc,gBAAgB,KAAK;;CAGnD,OAAO,KAAuB,MAAqB,KAAe,MAA0B;EAE1F,IAAI,EADW,QAAQ,IAAI,aAAa,aAAa,iBAEnD,KAAK,OAAO,MAAM,0BAA0B;GAC1C,SAAS,IAAI;GACb,OAAO,IAAI,SAAS,KAAK,UAAU;GACnC,KAAK,MAAM;GACX,QAAQ,MAAM;GACd,WAAW,MAAM,UAAU;GAC3B,WAAW,IAAI,YAAY;GAC5B,CAAC;EAEJ,IAAI,IAAI,cAAc;GACpB,MAAM,OAAO,IAAI,UAAU,UAAU;GACrC,IAAI,OAAO,KAAK,CAAC,KAAK;IACpB,OAAO;IACP,MAAM;IACN,MAAM,IAAI,UAAU,MAAM,iBAAiB,OAAO,IAAI,UAAU;IACjE,CAAC;GACF;;EAEF,IAAI,eAAe,qBAAqB;GACtC,IAAI,OAAO,IAAI,CAAC,KAAK;IAAE,OAAO,IAAI;IAAS,YAAY,IAAI;IAAY,CAAC;GACxE;;EAEF,IAAI,eAAe,oBAAoB;GACrC,MAAM,cAAc,IAAI;GACxB,MAAM,QAAQ,IAAI;GAClB,MAAM,QAAQ,IAAI,WAAW;GAC7B,MAAM,SAAS,IAAI;GACnB,IAAI,OAAO,IAAI,CAAC,KAAK;IAAE;IAAO;IAAQ;IAAa;IAAO,CAAC;GAC3D;;EAEF,IAAI,eAAe,gBAAgB;GACjC,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,SAAS,CAAC;GAC5C;;EAEF,IAAI,eAAe,qBAAqB,eAAe,qBAAqB;GAC1E,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,SAAS,CAAC;GAC5C;;EAEF,IAAI,eAAe,qBAAqB;GACtC,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,SAAS,CAAC;GAC5C;;EAEF,IAAI,eAAe,mBAAmB;GACpC,IAAI,OAAO,IAAI,CAAC,KAAK;IACnB,OAAO,IAAI;IACX,oBAAoB,IAAI;IACzB,CAAC;GACF;;EAEF,IAAI,eAAe,qBAAqB;GACtC,IAAI,OAAO,IAAI,CAAC,KAAK;IACnB,OAAO;IACP,MAAM,IAAI;IACV,QAAQ,IAAI;IACb,CAAC;GACF;;EAEF,IAAI,eAAe,2BAA2B;GAC5C,IAAI,OAAO,IAAI,CAAC,KAAK;IACnB,OAAO,IAAI;IACX,aAAa,IAAI;IACjB,MAAM,IAAI;IACX,CAAC;GACF;;EAEF,IAAI,eAAe,yBAAyB;GAC1C,IAAI,OAAO,IAAI,CAAC,KAAK;IACnB,OAAO,IAAI;IACX,MAAM,IAAI;IACV,OAAO,IAAI;IACZ,CAAC;GACF;;EAEF,IAAI,eAAe,sBAAsB;GACvC,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,MAAM;GAC/B;;EAEF,IAAI,KAAK;GACP,IAAI,OAAO,IAAI,CAAC,KAAK;IACnB,OAAO;IACP,MAAM,IAAI;IACV,OAAO,IAAI;IACZ,CAAC;GACF;;EAIF,MAAM;;;AAKV,SAAgB,gBACd,MACA,MACA,MACA,OACM;CACN,MAAM,IAAI,MACR,uHACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.middleware.js","names":[],"sources":["../../src/middleware/global.middleware.ts"],"sourcesContent":["import { inject } from \"awilix-express\";\nimport { ForbiddenError } from \"@/exceptions/runtime.exceptions\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport type { IConfigService } from \"@/services/core/config.service\";\nimport type { IRoleService } from \"@/services/interfaces/role-service.interface\";\n\nexport const validateWizardCompleted = inject(\n (configService: IConfigService, settingsStore: SettingsStore, loggerFactory: ILoggerFactory) =>\n async (req: Request, _res: Response, next: NextFunction) => {\n const logger = loggerFactory(validateWizardCompleted.name);\n const isDemoMode = configService.isDemoMode();\n if (isDemoMode || !!settingsStore.getWizardSettings()?.wizardCompleted) {\n next();\n return;\n }\n\n const allowedPaths = [\n \"/api/v2/first-time-setup/complete\",\n \"/api/v2/first-time-setup/validate\",\n \"/api/v2/first-time-setup/yaml-import\",\n \"/api/v2/test\",\n \"/api/v2/auth/login-required\",\n ];\n if (allowedPaths.includes(req.path) || !req.path.startsWith(\"/api/v2\") || req.path.startsWith(\"/api-docs\")) {\n next();\n } else {\n logger.error(\"Wizard not completed\", req.path);\n throw new ForbiddenError(\n `First-time-setup not completed, these api paths are enabled: ${allowedPaths.join(\", \")}`,\n );\n }\n },\n);\n\nexport const interceptRoles = inject(\n (settingsStore: SettingsStore, roleService: IRoleService) =>\n async (req: Request, _res: Response, next: NextFunction) => {\n const serverSettings = settingsStore.getSettings();\n\n req.roles = req.user?.roles ?? [];\n\n // If server settings are not set, we can't determine the default role\n if (serverSettings && !req.user) {\n req.roles = await roleService.getAppDefaultRoleNames();\n }\n\n next();\n },\n);\n"],"mappings":";;;AAQA,MAAa,0BAA0B,QACpC,eAA+B,eAA8B,kBAC5D,OAAO,KAAc,MAAgB,SAAuB;CAC1D,MAAM,SAAS,cAAc,wBAAwB,KAAK;
|
|
1
|
+
{"version":3,"file":"global.middleware.js","names":[],"sources":["../../src/middleware/global.middleware.ts"],"sourcesContent":["import { inject } from \"awilix-express\";\nimport { ForbiddenError } from \"@/exceptions/runtime.exceptions\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport type { IConfigService } from \"@/services/core/config.service\";\nimport type { IRoleService } from \"@/services/interfaces/role-service.interface\";\n\nexport const validateWizardCompleted = inject(\n (configService: IConfigService, settingsStore: SettingsStore, loggerFactory: ILoggerFactory) =>\n async (req: Request, _res: Response, next: NextFunction) => {\n const logger = loggerFactory(validateWizardCompleted.name);\n const isDemoMode = configService.isDemoMode();\n if (isDemoMode || !!settingsStore.getWizardSettings()?.wizardCompleted) {\n next();\n return;\n }\n\n const allowedPaths = [\n \"/api/v2/first-time-setup/complete\",\n \"/api/v2/first-time-setup/validate\",\n \"/api/v2/first-time-setup/yaml-import\",\n \"/api/v2/test\",\n \"/api/v2/auth/login-required\",\n ];\n if (allowedPaths.includes(req.path) || !req.path.startsWith(\"/api/v2\") || req.path.startsWith(\"/api-docs\")) {\n next();\n } else {\n logger.error(\"Wizard not completed\", req.path);\n throw new ForbiddenError(\n `First-time-setup not completed, these api paths are enabled: ${allowedPaths.join(\", \")}`,\n );\n }\n },\n);\n\nexport const interceptRoles = inject(\n (settingsStore: SettingsStore, roleService: IRoleService) =>\n async (req: Request, _res: Response, next: NextFunction) => {\n const serverSettings = settingsStore.getSettings();\n\n req.roles = req.user?.roles ?? [];\n\n // If server settings are not set, we can't determine the default role\n if (serverSettings && !req.user) {\n req.roles = await roleService.getAppDefaultRoleNames();\n }\n\n next();\n },\n);\n"],"mappings":";;;AAQA,MAAa,0BAA0B,QACpC,eAA+B,eAA8B,kBAC5D,OAAO,KAAc,MAAgB,SAAuB;CAC1D,MAAM,SAAS,cAAc,wBAAwB,KAAK;CAE1D,IADmB,cAAc,YACnB,IAAI,CAAC,CAAC,cAAc,mBAAmB,EAAE,iBAAiB;EACtE,MAAM;EACN;;CAGF,MAAM,eAAe;EACnB;EACA;EACA;EACA;EACA;EACD;CACD,IAAI,aAAa,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,WAAW,UAAU,IAAI,IAAI,KAAK,WAAW,YAAY,EACxG,MAAM;MACD;EACL,OAAO,MAAM,wBAAwB,IAAI,KAAK;EAC9C,MAAM,IAAI,eACR,gEAAgE,aAAa,KAAK,KAAK,GACxF;;EAGR;AAED,MAAa,iBAAiB,QAC3B,eAA8B,gBAC7B,OAAO,KAAc,MAAgB,SAAuB;CAC1D,MAAM,iBAAiB,cAAc,aAAa;CAElD,IAAI,QAAQ,IAAI,MAAM,SAAS,EAAE;CAGjC,IAAI,kBAAkB,CAAC,IAAI,MACzB,IAAI,QAAQ,MAAM,YAAY,wBAAwB;CAGxD,MAAM;EAEX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-converter.middleware.js","names":[],"sources":["../../src/middleware/param-converter.middleware.ts"],"sourcesContent":["import type { NextFunction, Request, Response } from \"express\";\nimport { validateInput } from \"@/handlers/validators\";\nimport { idRulesV2 } from \"@/controllers/validation/generic.validation\";\n\nexport const ParamInt = (paramName: string) => createParamDecorator(paramName, Number);\nexport const ParamBool = (paramName: string) => createParamDecorator(paramName, Boolean);\nexport const ParamString = (paramName: string) => createParamDecorator(paramName, String);\nexport const ParamId = (paramName: string) => createParamDecorator(paramName, \"id\");\n\nfunction createParamDecorator(\n paramName: string,\n type: StringConstructor | NumberConstructor | BooleanConstructor | \"id\",\n) {\n return async (req: Request<{ local: any; [k: string]: any }>, res: Response, next: NextFunction) => {\n const paramValue = req.params[paramName];\n\n if (paramValue === undefined) {\n return res.status(400).send(`Missing parameter: ${paramName}`);\n }\n\n let convertedValue;\n\n let validateIdAsType = null;\n if (type === \"id\") {\n validateIdAsType = Number;\n }\n\n if (type === Boolean) {\n if (paramValue.toLowerCase() === \"true\") {\n convertedValue = true;\n } else if (paramValue.toLowerCase() === \"false\") {\n convertedValue = false;\n } else {\n return res.status(400).send(`Invalid boolean: ${paramName}`);\n }\n } else if (type === Number || validateIdAsType === Number) {\n convertedValue = Number.parseInt(paramValue, 10);\n if (Number.isNaN(convertedValue)) {\n return res.status(400).send(`Invalid number: ${paramName}`);\n }\n } else {\n return res.status(400).send(`Unknown type of: ${paramName}`);\n }\n\n if (validateIdAsType === Number) {\n try {\n await validateInput({ id: convertedValue }, idRulesV2);\n } catch (e) {\n return next(e);\n }\n }\n\n req.local = req.local || {};\n req.local[paramName] = convertedValue;\n\n next();\n };\n}\n"],"mappings":";;;AAIA,MAAa,YAAY,cAAsB,qBAAqB,WAAW,OAAO;AACtF,MAAa,aAAa,cAAsB,qBAAqB,WAAW,QAAQ;AACxF,MAAa,eAAe,cAAsB,qBAAqB,WAAW,OAAO;AACzF,MAAa,WAAW,cAAsB,qBAAqB,WAAW,KAAK;AAEnF,SAAS,qBACP,WACA,MACA;
|
|
1
|
+
{"version":3,"file":"param-converter.middleware.js","names":[],"sources":["../../src/middleware/param-converter.middleware.ts"],"sourcesContent":["import type { NextFunction, Request, Response } from \"express\";\nimport { validateInput } from \"@/handlers/validators\";\nimport { idRulesV2 } from \"@/controllers/validation/generic.validation\";\n\nexport const ParamInt = (paramName: string) => createParamDecorator(paramName, Number);\nexport const ParamBool = (paramName: string) => createParamDecorator(paramName, Boolean);\nexport const ParamString = (paramName: string) => createParamDecorator(paramName, String);\nexport const ParamId = (paramName: string) => createParamDecorator(paramName, \"id\");\n\nfunction createParamDecorator(\n paramName: string,\n type: StringConstructor | NumberConstructor | BooleanConstructor | \"id\",\n) {\n return async (req: Request<{ local: any; [k: string]: any }>, res: Response, next: NextFunction) => {\n const paramValue = req.params[paramName];\n\n if (paramValue === undefined) {\n return res.status(400).send(`Missing parameter: ${paramName}`);\n }\n\n let convertedValue;\n\n let validateIdAsType = null;\n if (type === \"id\") {\n validateIdAsType = Number;\n }\n\n if (type === Boolean) {\n if (paramValue.toLowerCase() === \"true\") {\n convertedValue = true;\n } else if (paramValue.toLowerCase() === \"false\") {\n convertedValue = false;\n } else {\n return res.status(400).send(`Invalid boolean: ${paramName}`);\n }\n } else if (type === Number || validateIdAsType === Number) {\n convertedValue = Number.parseInt(paramValue, 10);\n if (Number.isNaN(convertedValue)) {\n return res.status(400).send(`Invalid number: ${paramName}`);\n }\n } else {\n return res.status(400).send(`Unknown type of: ${paramName}`);\n }\n\n if (validateIdAsType === Number) {\n try {\n await validateInput({ id: convertedValue }, idRulesV2);\n } catch (e) {\n return next(e);\n }\n }\n\n req.local = req.local || {};\n req.local[paramName] = convertedValue;\n\n next();\n };\n}\n"],"mappings":";;;AAIA,MAAa,YAAY,cAAsB,qBAAqB,WAAW,OAAO;AACtF,MAAa,aAAa,cAAsB,qBAAqB,WAAW,QAAQ;AACxF,MAAa,eAAe,cAAsB,qBAAqB,WAAW,OAAO;AACzF,MAAa,WAAW,cAAsB,qBAAqB,WAAW,KAAK;AAEnF,SAAS,qBACP,WACA,MACA;CACA,OAAO,OAAO,KAAgD,KAAe,SAAuB;EAClG,MAAM,aAAa,IAAI,OAAO;EAE9B,IAAI,eAAe,KAAA,GACjB,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,sBAAsB,YAAY;EAGhE,IAAI;EAEJ,IAAI,mBAAmB;EACvB,IAAI,SAAS,MACX,mBAAmB;EAGrB,IAAI,SAAS,SACX,IAAI,WAAW,aAAa,KAAK,QAC/B,iBAAiB;OACZ,IAAI,WAAW,aAAa,KAAK,SACtC,iBAAiB;OAEjB,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,oBAAoB,YAAY;OAEzD,IAAI,SAAS,UAAU,qBAAqB,QAAQ;GACzD,iBAAiB,OAAO,SAAS,YAAY,GAAG;GAChD,IAAI,OAAO,MAAM,eAAe,EAC9B,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,mBAAmB,YAAY;SAG7D,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,oBAAoB,YAAY;EAG9D,IAAI,qBAAqB,QACvB,IAAI;GACF,MAAM,cAAc,EAAE,IAAI,gBAAgB,EAAE,UAAU;WAC/C,GAAG;GACV,OAAO,KAAK,EAAE;;EAIlB,IAAI,QAAQ,IAAI,SAAS,EAAE;EAC3B,IAAI,MAAM,aAAa;EAEvB,MAAM"}
|
|
@@ -2,6 +2,7 @@ import { DITokens } from "../container.tokens.js";
|
|
|
2
2
|
import { AuthenticationError } from "../exceptions/runtime.exceptions.js";
|
|
3
3
|
import { AppConstants } from "../server.constants.js";
|
|
4
4
|
import { AUTH_ERROR_REASON } from "../constants/authorization.constants.js";
|
|
5
|
+
import { ApiKeyStrategy } from "./api-key.strategy.js";
|
|
5
6
|
import { ExtractJwt, Strategy } from "passport-jwt";
|
|
6
7
|
import { Strategy as Strategy$1 } from "passport-anonymous";
|
|
7
8
|
//#region src/middleware/passport.ts
|
|
@@ -32,10 +33,12 @@ function initializePassportStrategies(passport, container) {
|
|
|
32
33
|
const settingsStore = container.resolve(DITokens.settingsStore);
|
|
33
34
|
const configService = container.resolve(DITokens.configService);
|
|
34
35
|
const userService = container.resolve(DITokens.userService);
|
|
36
|
+
const apiKeyService = container.resolve(DITokens.apiKeyService);
|
|
35
37
|
const opts = getPassportJwtOptions(settingsStore, configService, ExtractJwt.fromAuthHeaderAsBearerToken());
|
|
36
38
|
passport.use(new Strategy(opts, function(jwt_payload, done) {
|
|
37
39
|
verifyUserCallback(userService)(jwt_payload, done);
|
|
38
40
|
}));
|
|
41
|
+
passport.use(new ApiKeyStrategy(apiKeyService));
|
|
39
42
|
passport.use(new Strategy$1());
|
|
40
43
|
return passport;
|
|
41
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passport.js","names":["JwtStrategy","AnonymousStrategy"],"sources":["../../src/middleware/passport.ts"],"sourcesContent":["import {\n ExtractJwt,\n JwtFromRequestFunction,\n Strategy as JwtStrategy,\n StrategyOptionsWithoutRequest,\n VerifiedCallback,\n} from \"passport-jwt\";\nimport { Strategy as AnonymousStrategy } from \"passport-anonymous\";\nimport { DITokens } from \"@/container.tokens\";\nimport { AppConstants } from \"@/server.constants\";\nimport { AwilixContainer } from \"awilix\";\nimport { PassportStatic } from \"passport\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport { ConfigService } from \"@/services/core/config.service\";\nimport type { IUserService } from \"@/services/interfaces/user-service.interface\";\nimport { Socket } from \"socket.io\";\nimport { AuthenticationError } from \"@/exceptions/runtime.exceptions\";\nimport { AUTH_ERROR_REASON } from \"@/constants/authorization.constants\";\nimport { User } from \"@/entities\";\n\nexport type JwtFromSocketFunction = (socket: Socket) => string | null;\n\nexport function getPassportJwtOptions(\n settingsStore: SettingsStore,\n configService: ConfigService,\n jwtFromRequest: JwtFromRequestFunction | JwtFromSocketFunction = ExtractJwt.fromAuthHeaderAsBearerToken(),\n): StrategyOptionsWithoutRequest {\n return {\n jwtFromRequest: jwtFromRequest,\n secretOrKeyProvider: async (_req, _token: string, done) => {\n const { jwtSecret } = await settingsStore.getCredentialSettings();\n return done(null, jwtSecret);\n },\n audience: configService.get(AppConstants.OVERRIDE_JWT_AUDIENCE, AppConstants.DEFAULT_JWT_AUDIENCE),\n issuer: configService.get(AppConstants.OVERRIDE_JWT_ISSUER, AppConstants.DEFAULT_JWT_ISSUER),\n };\n}\n\nexport function verifyUserCallback(userService: IUserService) {\n return function (jwt_payload: any, done: VerifiedCallback) {\n userService\n .getUser(jwt_payload.userId)\n .then((user: User) => {\n if (user?.isVerified && !user.needsPasswordChange) {\n return done(null, userService.toDto(user));\n }\n if (user?.needsPasswordChange) {\n return done(\n new AuthenticationError(\"Password change required\", AUTH_ERROR_REASON.PasswordChangeRequired),\n false,\n );\n }\n if (!user?.isVerified) {\n return done(new AuthenticationError(\"User not verified\", AUTH_ERROR_REASON.AccountNotVerified), false);\n }\n\n return done(null, false);\n })\n .catch((err) => {\n if (err) {\n return done(err, false);\n }\n });\n };\n}\n\nexport function initializePassportStrategies(passport: PassportStatic, container: AwilixContainer): PassportStatic {\n const settingsStore = container.resolve<SettingsStore>(DITokens.settingsStore);\n const configService = container.resolve<ConfigService>(DITokens.configService);\n const userService = container.resolve<IUserService>(DITokens.userService);\n\n const opts = getPassportJwtOptions(settingsStore, configService, ExtractJwt.fromAuthHeaderAsBearerToken());\n\n passport.use(\n new JwtStrategy(opts, function (jwt_payload: any, done: VerifiedCallback) {\n verifyUserCallback(userService)(jwt_payload, done);\n }),\n );\n passport.use(new AnonymousStrategy());\n return passport;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"passport.js","names":["JwtStrategy","AnonymousStrategy"],"sources":["../../src/middleware/passport.ts"],"sourcesContent":["import {\n ExtractJwt,\n JwtFromRequestFunction,\n Strategy as JwtStrategy,\n StrategyOptionsWithoutRequest,\n VerifiedCallback,\n} from \"passport-jwt\";\nimport { Strategy as AnonymousStrategy } from \"passport-anonymous\";\nimport { DITokens } from \"@/container.tokens\";\nimport { AppConstants } from \"@/server.constants\";\nimport { AwilixContainer } from \"awilix\";\nimport { PassportStatic } from \"passport\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport { ConfigService } from \"@/services/core/config.service\";\nimport type { IUserService } from \"@/services/interfaces/user-service.interface\";\nimport type { IApiKeyService } from \"@/services/interfaces/api-key.service.interface\";\nimport { Socket } from \"socket.io\";\nimport { AuthenticationError } from \"@/exceptions/runtime.exceptions\";\nimport { AUTH_ERROR_REASON } from \"@/constants/authorization.constants\";\nimport { User } from \"@/entities\";\nimport { ApiKeyStrategy } from \"@/middleware/api-key.strategy\";\n\nexport type JwtFromSocketFunction = (socket: Socket) => string | null;\n\nexport function getPassportJwtOptions(\n settingsStore: SettingsStore,\n configService: ConfigService,\n jwtFromRequest: JwtFromRequestFunction | JwtFromSocketFunction = ExtractJwt.fromAuthHeaderAsBearerToken(),\n): StrategyOptionsWithoutRequest {\n return {\n jwtFromRequest: jwtFromRequest,\n secretOrKeyProvider: async (_req, _token: string, done) => {\n const { jwtSecret } = await settingsStore.getCredentialSettings();\n return done(null, jwtSecret);\n },\n audience: configService.get(AppConstants.OVERRIDE_JWT_AUDIENCE, AppConstants.DEFAULT_JWT_AUDIENCE),\n issuer: configService.get(AppConstants.OVERRIDE_JWT_ISSUER, AppConstants.DEFAULT_JWT_ISSUER),\n };\n}\n\nexport function verifyUserCallback(userService: IUserService) {\n return function (jwt_payload: any, done: VerifiedCallback) {\n userService\n .getUser(jwt_payload.userId)\n .then((user: User) => {\n if (user?.isVerified && !user.needsPasswordChange) {\n return done(null, userService.toDto(user));\n }\n if (user?.needsPasswordChange) {\n return done(\n new AuthenticationError(\"Password change required\", AUTH_ERROR_REASON.PasswordChangeRequired),\n false,\n );\n }\n if (!user?.isVerified) {\n return done(new AuthenticationError(\"User not verified\", AUTH_ERROR_REASON.AccountNotVerified), false);\n }\n\n return done(null, false);\n })\n .catch((err) => {\n if (err) {\n return done(err, false);\n }\n });\n };\n}\n\nexport function initializePassportStrategies(passport: PassportStatic, container: AwilixContainer): PassportStatic {\n const settingsStore = container.resolve<SettingsStore>(DITokens.settingsStore);\n const configService = container.resolve<ConfigService>(DITokens.configService);\n const userService = container.resolve<IUserService>(DITokens.userService);\n const apiKeyService = container.resolve<IApiKeyService>(DITokens.apiKeyService);\n\n const opts = getPassportJwtOptions(settingsStore, configService, ExtractJwt.fromAuthHeaderAsBearerToken());\n\n passport.use(\n new JwtStrategy(opts, function (jwt_payload: any, done: VerifiedCallback) {\n verifyUserCallback(userService)(jwt_payload, done);\n }),\n );\n passport.use(new ApiKeyStrategy(apiKeyService));\n passport.use(new AnonymousStrategy());\n return passport;\n}\n"],"mappings":";;;;;;;;AAwBA,SAAgB,sBACd,eACA,eACA,iBAAiE,WAAW,6BAA6B,EAC1E;CAC/B,OAAO;EACW;EAChB,qBAAqB,OAAO,MAAM,QAAgB,SAAS;GACzD,MAAM,EAAE,cAAc,MAAM,cAAc,uBAAuB;GACjE,OAAO,KAAK,MAAM,UAAU;;EAE9B,UAAU,cAAc,IAAI,aAAa,uBAAuB,aAAa,qBAAqB;EAClG,QAAQ,cAAc,IAAI,aAAa,qBAAqB,aAAa,mBAAmB;EAC7F;;AAGH,SAAgB,mBAAmB,aAA2B;CAC5D,OAAO,SAAU,aAAkB,MAAwB;EACzD,YACG,QAAQ,YAAY,OAAO,CAC3B,MAAM,SAAe;GACpB,IAAI,MAAM,cAAc,CAAC,KAAK,qBAC5B,OAAO,KAAK,MAAM,YAAY,MAAM,KAAK,CAAC;GAE5C,IAAI,MAAM,qBACR,OAAO,KACL,IAAI,oBAAoB,4BAA4B,kBAAkB,uBAAuB,EAC7F,MACD;GAEH,IAAI,CAAC,MAAM,YACT,OAAO,KAAK,IAAI,oBAAoB,qBAAqB,kBAAkB,mBAAmB,EAAE,MAAM;GAGxG,OAAO,KAAK,MAAM,MAAM;IACxB,CACD,OAAO,QAAQ;GACd,IAAI,KACF,OAAO,KAAK,KAAK,MAAM;IAEzB;;;AAIR,SAAgB,6BAA6B,UAA0B,WAA4C;CACjH,MAAM,gBAAgB,UAAU,QAAuB,SAAS,cAAc;CAC9E,MAAM,gBAAgB,UAAU,QAAuB,SAAS,cAAc;CAC9E,MAAM,cAAc,UAAU,QAAsB,SAAS,YAAY;CACzE,MAAM,gBAAgB,UAAU,QAAwB,SAAS,cAAc;CAE/E,MAAM,OAAO,sBAAsB,eAAe,eAAe,WAAW,6BAA6B,CAAC;CAE1G,SAAS,IACP,IAAIA,SAAY,MAAM,SAAU,aAAkB,MAAwB;EACxE,mBAAmB,YAAY,CAAC,aAAa,KAAK;GAClD,CACH;CACD,SAAS,IAAI,IAAI,eAAe,cAAc,CAAC;CAC/C,SAAS,IAAI,IAAIC,YAAmB,CAAC;CACrC,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printer-resolver.js","names":[],"sources":["../../src/middleware/printer-resolver.ts"],"sourcesContent":["import type { Request } from \"express\";\nimport { currentPrinterToken, printerApiToken, printerIdToken, printerLoginToken } from \"@/middleware/printer\";\nimport type { IPrinterApi } from \"@/services/printer-api.interface\";\nimport type { LoginDto } from \"@/services/interfaces/login.dto\";\nimport { InternalServerException, ValidationException } from \"@/exceptions/runtime.exceptions\";\nimport type { PrinterDto } from \"@/services/interfaces/printer.dto\";\n\nexport function getScopedPrinter(req: Request) {\n const errors: string[] = [];\n\n const resolve = <T>(token: any): T => {\n try {\n const dep = req.container.resolve<T>(token);\n if (!dep) errors.push(`Scoped Dependency '${token}' was not resolved.`);\n return dep;\n } catch {\n throw new InternalServerException(`Dependency ${token} could not be resolved. Aborted request.`);\n }\n };\n\n const printerApi = resolve<IPrinterApi>(printerApiToken);\n const loginDto = resolve<LoginDto>(printerLoginToken);\n const printerDto = resolve<PrinterDto>(currentPrinterToken);\n const printerId = resolve<number>(printerIdToken);\n\n if (errors.length) throw new ValidationException(errors);\n\n return {\n [printerApiToken]: printerApi,\n [printerLoginToken]: loginDto,\n [currentPrinterToken]: printerDto,\n [printerIdToken]: printerId,\n };\n}\n"],"mappings":";;;AAOA,SAAgB,iBAAiB,KAAc;CAC7C,MAAM,SAAmB,EAAE;CAE3B,MAAM,WAAc,UAAkB;
|
|
1
|
+
{"version":3,"file":"printer-resolver.js","names":[],"sources":["../../src/middleware/printer-resolver.ts"],"sourcesContent":["import type { Request } from \"express\";\nimport { currentPrinterToken, printerApiToken, printerIdToken, printerLoginToken } from \"@/middleware/printer\";\nimport type { IPrinterApi } from \"@/services/printer-api.interface\";\nimport type { LoginDto } from \"@/services/interfaces/login.dto\";\nimport { InternalServerException, ValidationException } from \"@/exceptions/runtime.exceptions\";\nimport type { PrinterDto } from \"@/services/interfaces/printer.dto\";\n\nexport function getScopedPrinter(req: Request) {\n const errors: string[] = [];\n\n const resolve = <T>(token: any): T => {\n try {\n const dep = req.container.resolve<T>(token);\n if (!dep) errors.push(`Scoped Dependency '${token}' was not resolved.`);\n return dep;\n } catch {\n throw new InternalServerException(`Dependency ${token} could not be resolved. Aborted request.`);\n }\n };\n\n const printerApi = resolve<IPrinterApi>(printerApiToken);\n const loginDto = resolve<LoginDto>(printerLoginToken);\n const printerDto = resolve<PrinterDto>(currentPrinterToken);\n const printerId = resolve<number>(printerIdToken);\n\n if (errors.length) throw new ValidationException(errors);\n\n return {\n [printerApiToken]: printerApi,\n [printerLoginToken]: loginDto,\n [currentPrinterToken]: printerDto,\n [printerIdToken]: printerId,\n };\n}\n"],"mappings":";;;AAOA,SAAgB,iBAAiB,KAAc;CAC7C,MAAM,SAAmB,EAAE;CAE3B,MAAM,WAAc,UAAkB;EACpC,IAAI;GACF,MAAM,MAAM,IAAI,UAAU,QAAW,MAAM;GAC3C,IAAI,CAAC,KAAK,OAAO,KAAK,sBAAsB,MAAM,qBAAqB;GACvE,OAAO;UACD;GACN,MAAM,IAAI,wBAAwB,cAAc,MAAM,0CAA0C;;;CAIpG,MAAM,aAAa,QAAqB,gBAAgB;CACxD,MAAM,WAAW,QAAkB,kBAAkB;CACrD,MAAM,aAAa,QAAoB,oBAAoB;CAC3D,MAAM,YAAY,QAAgB,eAAe;CAEjD,IAAI,OAAO,QAAQ,MAAM,IAAI,oBAAoB,OAAO;CAExD,OAAO;GACJ,kBAAkB;GAClB,oBAAoB;GACpB,sBAAsB;GACtB,iBAAiB;EACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printer.js","names":[],"sources":["../../src/middleware/printer.ts"],"sourcesContent":["import { asValue } from \"awilix\";\nimport { DITokens } from \"@/container.tokens\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { PrinterCache } from \"@/state/printer.cache\";\nimport { OctoprintApi } from \"@/services/octoprint.api\";\nimport { MoonrakerType, OctoprintType, PrusaLinkType, BambuType } from \"@/services/printer-api.interface\";\nimport { MoonrakerApi } from \"@/services/moonraker.api\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport { PrusaLinkApi } from \"@/services/prusa-link/prusa-link.api\";\nimport { BambuApi } from \"@/services/bambu.api\";\n\nexport const printerIdToken = \"currentPrinterId\";\nexport const printerApiToken = \"printerApi\";\nexport const currentPrinterToken = \"currentPrinter\";\nexport const printerLoginToken = \"printerLogin\";\n\nexport const printerResolveMiddleware = (key = \"id\") => {\n return (req: Request, res: Response, next: NextFunction) => {\n const printerCache = req.container.resolve<PrinterCache>(DITokens.printerCache);\n const settingsService = req.container.resolve<any>(DITokens.settingsStore) as SettingsStore;\n const moonrakerEnabled = settingsService.getServerSettings().experimentalMoonrakerSupport;\n const prusaLinkEnabled = settingsService.getServerSettings().experimentalPrusaLinkSupport;\n const bambuEnabled = settingsService.getServerSettings().experimentalBambuSupport;\n\n let scopedPrinter = undefined;\n let loginDto = undefined;\n\n const printerIdParam = req.params[key] as string;\n if (printerIdParam) {\n const printerId = Number.parseInt(printerIdParam, 10);\n scopedPrinter = printerCache.getCachedPrinterOrThrow(printerId);\n loginDto = printerCache.getLoginDto(printerId);\n\n req.container.register({\n [currentPrinterToken]: asValue(scopedPrinter),\n [printerLoginToken]: asValue(loginDto),\n [printerIdToken]: asValue(printerId),\n });\n\n switch (scopedPrinter.printerType) {\n case OctoprintType: {\n const octoprintApiInstance = req.container.resolve<OctoprintApi>(DITokens.octoprintApi);\n req.container.register({\n [printerApiToken]: asValue(octoprintApiInstance),\n });\n break;\n }\n case MoonrakerType: {\n const moonrakerInstance = req.container.resolve<MoonrakerApi>(DITokens.moonrakerApi);\n req.container.register({\n [printerApiToken]: moonrakerEnabled ? asValue(moonrakerInstance) : asValue(undefined),\n });\n break;\n }\n case PrusaLinkType: {\n const prusaLinkInstance = req.container.resolve<PrusaLinkApi>(DITokens.prusaLinkApi);\n req.container.register({\n [printerApiToken]: prusaLinkEnabled ? asValue(prusaLinkInstance) : asValue(undefined),\n });\n break;\n }\n case BambuType: {\n const bambuInstance = req.container.resolve<BambuApi>(DITokens.bambuApi);\n // Set printer ID so BambuApi can access the MQTT adapter from PrinterSocketStore\n bambuInstance.setPrinterId(printerId);\n req.container.register({\n [printerApiToken]: bambuEnabled ? asValue(bambuInstance) : asValue(undefined),\n });\n break;\n }\n }\n } else {\n req.container.register({\n [currentPrinterToken]: asValue(undefined),\n [printerLoginToken]: asValue(undefined),\n [printerIdToken]: asValue(undefined),\n [printerApiToken]: asValue(undefined),\n });\n }\n\n next();\n };\n};\n"],"mappings":";;;;AAWA,MAAa,iBAAiB;AAC9B,MAAa,kBAAkB;AAC/B,MAAa,sBAAsB;AACnC,MAAa,oBAAoB;AAEjC,MAAa,4BAA4B,MAAM,SAAS;
|
|
1
|
+
{"version":3,"file":"printer.js","names":[],"sources":["../../src/middleware/printer.ts"],"sourcesContent":["import { asValue } from \"awilix\";\nimport { DITokens } from \"@/container.tokens\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { PrinterCache } from \"@/state/printer.cache\";\nimport { OctoprintApi } from \"@/services/octoprint.api\";\nimport { MoonrakerType, OctoprintType, PrusaLinkType, BambuType } from \"@/services/printer-api.interface\";\nimport { MoonrakerApi } from \"@/services/moonraker.api\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport { PrusaLinkApi } from \"@/services/prusa-link/prusa-link.api\";\nimport { BambuApi } from \"@/services/bambu.api\";\n\nexport const printerIdToken = \"currentPrinterId\";\nexport const printerApiToken = \"printerApi\";\nexport const currentPrinterToken = \"currentPrinter\";\nexport const printerLoginToken = \"printerLogin\";\n\nexport const printerResolveMiddleware = (key = \"id\") => {\n return (req: Request, res: Response, next: NextFunction) => {\n const printerCache = req.container.resolve<PrinterCache>(DITokens.printerCache);\n const settingsService = req.container.resolve<any>(DITokens.settingsStore) as SettingsStore;\n const moonrakerEnabled = settingsService.getServerSettings().experimentalMoonrakerSupport;\n const prusaLinkEnabled = settingsService.getServerSettings().experimentalPrusaLinkSupport;\n const bambuEnabled = settingsService.getServerSettings().experimentalBambuSupport;\n\n let scopedPrinter = undefined;\n let loginDto = undefined;\n\n const printerIdParam = req.params[key] as string;\n if (printerIdParam) {\n const printerId = Number.parseInt(printerIdParam, 10);\n scopedPrinter = printerCache.getCachedPrinterOrThrow(printerId);\n loginDto = printerCache.getLoginDto(printerId);\n\n req.container.register({\n [currentPrinterToken]: asValue(scopedPrinter),\n [printerLoginToken]: asValue(loginDto),\n [printerIdToken]: asValue(printerId),\n });\n\n switch (scopedPrinter.printerType) {\n case OctoprintType: {\n const octoprintApiInstance = req.container.resolve<OctoprintApi>(DITokens.octoprintApi);\n req.container.register({\n [printerApiToken]: asValue(octoprintApiInstance),\n });\n break;\n }\n case MoonrakerType: {\n const moonrakerInstance = req.container.resolve<MoonrakerApi>(DITokens.moonrakerApi);\n req.container.register({\n [printerApiToken]: moonrakerEnabled ? asValue(moonrakerInstance) : asValue(undefined),\n });\n break;\n }\n case PrusaLinkType: {\n const prusaLinkInstance = req.container.resolve<PrusaLinkApi>(DITokens.prusaLinkApi);\n req.container.register({\n [printerApiToken]: prusaLinkEnabled ? asValue(prusaLinkInstance) : asValue(undefined),\n });\n break;\n }\n case BambuType: {\n const bambuInstance = req.container.resolve<BambuApi>(DITokens.bambuApi);\n // Set printer ID so BambuApi can access the MQTT adapter from PrinterSocketStore\n bambuInstance.setPrinterId(printerId);\n req.container.register({\n [printerApiToken]: bambuEnabled ? asValue(bambuInstance) : asValue(undefined),\n });\n break;\n }\n }\n } else {\n req.container.register({\n [currentPrinterToken]: asValue(undefined),\n [printerLoginToken]: asValue(undefined),\n [printerIdToken]: asValue(undefined),\n [printerApiToken]: asValue(undefined),\n });\n }\n\n next();\n };\n};\n"],"mappings":";;;;AAWA,MAAa,iBAAiB;AAC9B,MAAa,kBAAkB;AAC/B,MAAa,sBAAsB;AACnC,MAAa,oBAAoB;AAEjC,MAAa,4BAA4B,MAAM,SAAS;CACtD,QAAQ,KAAc,KAAe,SAAuB;EAC1D,MAAM,eAAe,IAAI,UAAU,QAAsB,SAAS,aAAa;EAC/E,MAAM,kBAAkB,IAAI,UAAU,QAAa,SAAS,cAAc;EAC1E,MAAM,mBAAmB,gBAAgB,mBAAmB,CAAC;EAC7D,MAAM,mBAAmB,gBAAgB,mBAAmB,CAAC;EAC7D,MAAM,eAAe,gBAAgB,mBAAmB,CAAC;EAEzD,IAAI,gBAAgB,KAAA;EACpB,IAAI,WAAW,KAAA;EAEf,MAAM,iBAAiB,IAAI,OAAO;EAClC,IAAI,gBAAgB;GAClB,MAAM,YAAY,OAAO,SAAS,gBAAgB,GAAG;GACrD,gBAAgB,aAAa,wBAAwB,UAAU;GAC/D,WAAW,aAAa,YAAY,UAAU;GAE9C,IAAI,UAAU,SAAS;KACpB,sBAAsB,QAAQ,cAAc;KAC5C,oBAAoB,QAAQ,SAAS;KACrC,iBAAiB,QAAQ,UAAU;IACrC,CAAC;GAEF,QAAQ,cAAc,aAAtB;IACE,KAAA,GAAoB;KAClB,MAAM,uBAAuB,IAAI,UAAU,QAAsB,SAAS,aAAa;KACvF,IAAI,UAAU,SAAS,GACpB,kBAAkB,QAAQ,qBAAqB,EACjD,CAAC;KACF;;IAEF,KAAA,GAAoB;KAClB,MAAM,oBAAoB,IAAI,UAAU,QAAsB,SAAS,aAAa;KACpF,IAAI,UAAU,SAAS,GACpB,kBAAkB,mBAAmB,QAAQ,kBAAkB,GAAG,QAAQ,KAAA,EAAU,EACtF,CAAC;KACF;;IAEF,KAAA,GAAoB;KAClB,MAAM,oBAAoB,IAAI,UAAU,QAAsB,SAAS,aAAa;KACpF,IAAI,UAAU,SAAS,GACpB,kBAAkB,mBAAmB,QAAQ,kBAAkB,GAAG,QAAQ,KAAA,EAAU,EACtF,CAAC;KACF;;IAEF,KAAA,GAAgB;KACd,MAAM,gBAAgB,IAAI,UAAU,QAAkB,SAAS,SAAS;KAExE,cAAc,aAAa,UAAU;KACrC,IAAI,UAAU,SAAS,GACpB,kBAAkB,eAAe,QAAQ,cAAc,GAAG,QAAQ,KAAA,EAAU,EAC9E,CAAC;KACF;;;SAIJ,IAAI,UAAU,SAAS;IACpB,sBAAsB,QAAQ,KAAA,EAAU;IACxC,oBAAoB,QAAQ,KAAA,EAAU;IACtC,iBAAiB,QAAQ,KAAA,EAAU;IACnC,kBAAkB,QAAQ,KAAA,EAAU;GACtC,CAAC;EAGJ,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slicer-api-key.middleware.js","names":[],"sources":["../../src/middleware/slicer-api-key.middleware.ts"],"sourcesContent":["import { inject } from \"awilix-express\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport { AuthenticationError } from \"@/exceptions/runtime.exceptions\";\n\n/**\n * Middleware to authenticate requests using a slicer API key.\n * This allows slicers like PrusaSlicer to upload files without requiring bearer token authentication.\n *\n * The API key should be passed in the X-Api-Key header.\n * If the header is not present or invalid, the middleware will throw.\n */\nexport const slicerApiKeyAuth = () =>\n inject(\n (loggerFactory: ILoggerFactory, settingsStore: SettingsStore) =>\n async (req: Request, res: Response, next: NextFunction) => {\n const logger = loggerFactory(\"Middleware:slicerApiKeyAuth\");\n\n const apiKey = req.headers[\"x-api-key\"] as string | undefined;\n\n if (!apiKey?.length) {\n throw new AuthenticationError(\"Header x-api-key is missing\");\n }\n\n const isValid = settingsStore.validateSlicerApiKey(apiKey);\n if (isValid) {\n logger.log(`Slicer API key authentication successful for ${req.originalUrl}`);\n // Mark request as authenticated via API key\n (req as any).slicerApiKeyAuthenticated = true;\n return next();\n }\n\n logger.warn(`Invalid slicer API key provided for ${req.originalUrl}`);\n throw new AuthenticationError(\"Header x-api-key is wrong\");\n },\n );\n"],"mappings":";;;;;;;;;;AAaA,MAAa,yBACX,QACG,eAA+B,kBAC9B,OAAO,KAAc,KAAe,SAAuB;CACzD,MAAM,SAAS,cAAc,8BAA8B;CAE3D,MAAM,SAAS,IAAI,QAAQ;
|
|
1
|
+
{"version":3,"file":"slicer-api-key.middleware.js","names":[],"sources":["../../src/middleware/slicer-api-key.middleware.ts"],"sourcesContent":["import { inject } from \"awilix-express\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { SettingsStore } from \"@/state/settings.store\";\nimport type { ILoggerFactory } from \"@/handlers/logger-factory\";\nimport { AuthenticationError } from \"@/exceptions/runtime.exceptions\";\n\n/**\n * Middleware to authenticate requests using a slicer API key.\n * This allows slicers like PrusaSlicer to upload files without requiring bearer token authentication.\n *\n * The API key should be passed in the X-Api-Key header.\n * If the header is not present or invalid, the middleware will throw.\n */\nexport const slicerApiKeyAuth = () =>\n inject(\n (loggerFactory: ILoggerFactory, settingsStore: SettingsStore) =>\n async (req: Request, res: Response, next: NextFunction) => {\n const logger = loggerFactory(\"Middleware:slicerApiKeyAuth\");\n\n const apiKey = req.headers[\"x-api-key\"] as string | undefined;\n\n if (!apiKey?.length) {\n throw new AuthenticationError(\"Header x-api-key is missing\");\n }\n\n const isValid = settingsStore.validateSlicerApiKey(apiKey);\n if (isValid) {\n logger.log(`Slicer API key authentication successful for ${req.originalUrl}`);\n // Mark request as authenticated via API key\n (req as any).slicerApiKeyAuthenticated = true;\n return next();\n }\n\n logger.warn(`Invalid slicer API key provided for ${req.originalUrl}`);\n throw new AuthenticationError(\"Header x-api-key is wrong\");\n },\n );\n"],"mappings":";;;;;;;;;;AAaA,MAAa,yBACX,QACG,eAA+B,kBAC9B,OAAO,KAAc,KAAe,SAAuB;CACzD,MAAM,SAAS,cAAc,8BAA8B;CAE3D,MAAM,SAAS,IAAI,QAAQ;CAE3B,IAAI,CAAC,QAAQ,QACX,MAAM,IAAI,oBAAoB,8BAA8B;CAI9D,IADgB,cAAc,qBAAqB,OACxC,EAAE;EACX,OAAO,IAAI,gDAAgD,IAAI,cAAc;EAE7E,IAAa,4BAA4B;EACzC,OAAO,MAAM;;CAGf,OAAO,KAAK,uCAAuC,IAAI,cAAc;CACrE,MAAM,IAAI,oBAAoB,4BAA4B;EAE/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socketio.middleware.js","names":["PassportJwtStrategy"],"sources":["../../src/middleware/socketio.middleware.ts"],"sourcesContent":["import { SettingsStore } from \"@/state/settings.store\";\nimport { Strategy as PassportJwtStrategy, StrategyOptionsWithoutRequest, VerifyCallback } from \"passport-jwt\";\nimport { Socket } from \"socket.io\";\nimport { DefaultEventsMap } from \"socket.io/dist/typed-events\";\nimport { ExtendedError } from \"socket.io/dist/namespace\";\nimport { LoggerService } from \"@/handlers/logger\";\nimport { User } from \"@/entities\";\n\nexport const authorize = (\n settingsStore: SettingsStore,\n options: StrategyOptionsWithoutRequest,\n logger: LoggerService,\n verify: VerifyCallback,\n) => {\n const strategy = new PassportJwtStrategy(options, verify);\n\n return async function authorizeCallback(\n socket: Socket<DefaultEventsMap, DefaultEventsMap>,\n next: (err?: ExtendedError) => void,\n ) {\n if (!(await settingsStore.getLoginRequired())) {\n // No login required, so we can skip the authentication\n return next();\n }\n // --- Begin strategy augmentation like passport\n strategy.success = function success(_user: User) {\n // When SocketIO gateway requires user, we can provide it as such:\n // socket.handshake.user = user;\n next();\n };\n strategy.fail = (info) => {\n logger.warn(`Failure authenticating SocketIO user, reason: '${info}'`, { reason: info });\n next(new Error(info));\n };\n strategy.error = (error) => {\n logger.warn(\"Error authenticating SocketIO user\");\n next(error);\n };\n\n strategy.authenticate(socket as any, {} as VerifyCallback);\n };\n};\n"],"mappings":";;AAQA,MAAa,aACX,eACA,SACA,QACA,WACG;CACH,MAAM,WAAW,IAAIA,SAAoB,SAAS,OAAO;
|
|
1
|
+
{"version":3,"file":"socketio.middleware.js","names":["PassportJwtStrategy"],"sources":["../../src/middleware/socketio.middleware.ts"],"sourcesContent":["import { SettingsStore } from \"@/state/settings.store\";\nimport { Strategy as PassportJwtStrategy, StrategyOptionsWithoutRequest, VerifyCallback } from \"passport-jwt\";\nimport { Socket } from \"socket.io\";\nimport { DefaultEventsMap } from \"socket.io/dist/typed-events\";\nimport { ExtendedError } from \"socket.io/dist/namespace\";\nimport { LoggerService } from \"@/handlers/logger\";\nimport { User } from \"@/entities\";\n\nexport const authorize = (\n settingsStore: SettingsStore,\n options: StrategyOptionsWithoutRequest,\n logger: LoggerService,\n verify: VerifyCallback,\n) => {\n const strategy = new PassportJwtStrategy(options, verify);\n\n return async function authorizeCallback(\n socket: Socket<DefaultEventsMap, DefaultEventsMap>,\n next: (err?: ExtendedError) => void,\n ) {\n if (!(await settingsStore.getLoginRequired())) {\n // No login required, so we can skip the authentication\n return next();\n }\n // --- Begin strategy augmentation like passport\n strategy.success = function success(_user: User) {\n // When SocketIO gateway requires user, we can provide it as such:\n // socket.handshake.user = user;\n next();\n };\n strategy.fail = (info) => {\n logger.warn(`Failure authenticating SocketIO user, reason: '${info}'`, { reason: info });\n next(new Error(info));\n };\n strategy.error = (error) => {\n logger.warn(\"Error authenticating SocketIO user\");\n next(error);\n };\n\n strategy.authenticate(socket as any, {} as VerifyCallback);\n };\n};\n"],"mappings":";;AAQA,MAAa,aACX,eACA,SACA,QACA,WACG;CACH,MAAM,WAAW,IAAIA,SAAoB,SAAS,OAAO;CAEzD,OAAO,eAAe,kBACpB,QACA,MACA;EACA,IAAI,CAAE,MAAM,cAAc,kBAAkB,EAE1C,OAAO,MAAM;EAGf,SAAS,UAAU,SAAS,QAAQ,OAAa;GAG/C,MAAM;;EAER,SAAS,QAAQ,SAAS;GACxB,OAAO,KAAK,kDAAkD,KAAK,IAAI,EAAE,QAAQ,MAAM,CAAC;GACxF,KAAK,IAAI,MAAM,KAAK,CAAC;;EAEvB,SAAS,SAAS,UAAU;GAC1B,OAAO,KAAK,qCAAqC;GACjD,KAAK,MAAM;;EAGb,SAAS,aAAa,QAAe,EAAE,CAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1706829146617-InitSqlite.js","names":[],"sources":["../../src/migrations/1706829146617-InitSqlite.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class InitSqlite1706829146617 implements MigrationInterface {\n name = \"InitSqlite1706829146617\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer_file\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"name\" varchar NOT NULL,\n \"date\" integer NOT NULL,\n \"display\" varchar NOT NULL,\n \"gcodeAnalysis\" text,\n \"hash\" varchar NOT NULL,\n \"origin\" varchar NOT NULL,\n \"path\" varchar NOT NULL,\n \"prints\" text,\n \"refs\" text,\n \"size\" integer,\n \"statistics\" text,\n \"type\" varchar,\n \"typePath\" text,\n \"customData\" text NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerURL\" varchar NOT NULL,\n \"apiKey\" varchar NOT NULL,\n \"enabled\" boolean NOT NULL DEFAULT (1),\n \"disabledReason\" varchar,\n \"assignee\" varchar,\n \"dateAdded\" integer NOT NULL DEFAULT (datetime('now')),\n \"feedRate\" integer,\n \"flowRate\" integer\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"floor_position\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"x\" integer NOT NULL,\n \"y\" integer NOT NULL,\n \"floorId\" integer NOT NULL,\n \"printerId\" integer NOT NULL,\n CONSTRAINT \"UQ_bc255adeb42e065d2dbb17029ab\" UNIQUE (\"x\", \"y\", \"floorId\"),\n CONSTRAINT \"REL_2ce10d03d7c8f3d6a30d8e30bb\" UNIQUE (\"printerId\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"floor\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"floor\" integer NOT NULL,\n CONSTRAINT \"UQ_61b83f63f4e2d1f8c1b331aaf67\" UNIQUE (\"floor\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"settings\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"server\" text NOT NULL,\n \"credentials\" text NOT NULL,\n \"wizard\" text NOT NULL,\n \"printerFileClean\" text NOT NULL,\n \"frontend\" text NOT NULL,\n \"timeout\" text NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"refresh_token\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n \"expiresAt\" integer NOT NULL,\n \"refreshToken\" varchar NOT NULL,\n \"refreshAttemptsUsed\" integer NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"user_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"roleId\" integer NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n CONSTRAINT \"UQ_7b4e17a669299579dfa55a3fc35\" UNIQUE (\"roleId\", \"userId\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"user\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"username\" varchar NOT NULL,\n \"isDemoUser\" boolean NOT NULL DEFAULT (0),\n \"isRootUser\" boolean NOT NULL DEFAULT (0),\n \"isVerified\" boolean NOT NULL DEFAULT (0),\n \"needsPasswordChange\" boolean NOT NULL DEFAULT (1),\n \"passwordHash\" varchar NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now'))\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"permission\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"camera_stream\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"streamURL\" varchar NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerId\" integer,\n \"aspectRatio\" varchar NOT NULL DEFAULT ('16:9'),\n \"rotationClockwise\" integer NOT NULL DEFAULT (0),\n \"flipHorizontal\" boolean NOT NULL DEFAULT (0),\n \"flipVertical\" boolean NOT NULL DEFAULT (0),\n CONSTRAINT \"UQ_565f1b0713258ce710e9fb48273\" UNIQUE (\"printerId\"),\n CONSTRAINT \"REL_565f1b0713258ce710e9fb4827\" UNIQUE (\"printerId\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"custom_gcode\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"description\" varchar,\n \"gcode\" text NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text,\n CONSTRAINT \"FK_c078b1dfe5f87f79f131520d856\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE\n SET NULL ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"print_completion\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_print_completion\"\n RENAME TO \"print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_printer_file\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"name\" varchar NOT NULL,\n \"date\" integer NOT NULL,\n \"display\" varchar NOT NULL,\n \"gcodeAnalysis\" text,\n \"hash\" varchar NOT NULL,\n \"origin\" varchar NOT NULL,\n \"path\" varchar NOT NULL,\n \"prints\" text,\n \"refs\" text,\n \"size\" integer,\n \"statistics\" text,\n \"type\" varchar,\n \"typePath\" text,\n \"customData\" text NOT NULL,\n CONSTRAINT \"FK_66046b90513581dfadc836223a4\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_printer_file\"(\n \"id\",\n \"printerId\",\n \"name\",\n \"date\",\n \"display\",\n \"gcodeAnalysis\",\n \"hash\",\n \"origin\",\n \"path\",\n \"prints\",\n \"refs\",\n \"size\",\n \"statistics\",\n \"type\",\n \"typePath\",\n \"customData\"\n )\n SELECT \"id\",\n \"printerId\",\n \"name\",\n \"date\",\n \"display\",\n \"gcodeAnalysis\",\n \"hash\",\n \"origin\",\n \"path\",\n \"prints\",\n \"refs\",\n \"size\",\n \"statistics\",\n \"type\",\n \"typePath\",\n \"customData\"\n FROM \"printer_file\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer_file\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_printer_file\"\n RENAME TO \"printer_file\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_floor_position\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"x\" integer NOT NULL,\n \"y\" integer NOT NULL,\n \"floorId\" integer NOT NULL,\n \"printerId\" integer NOT NULL,\n CONSTRAINT \"UQ_bc255adeb42e065d2dbb17029ab\" UNIQUE (\"x\", \"y\", \"floorId\"),\n CONSTRAINT \"REL_2ce10d03d7c8f3d6a30d8e30bb\" UNIQUE (\"printerId\"),\n CONSTRAINT \"FK_5038c7f41e00edb15eca80843b0\" FOREIGN KEY (\"floorId\") REFERENCES \"floor\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION,\n CONSTRAINT \"FK_2ce10d03d7c8f3d6a30d8e30bb3\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_floor_position\"(\"id\", \"x\", \"y\", \"floorId\", \"printerId\")\n SELECT \"id\",\n \"x\",\n \"y\",\n \"floorId\",\n \"printerId\"\n FROM \"floor_position\"\n `);\n await queryRunner.query(`\n DROP TABLE \"floor_position\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_floor_position\"\n RENAME TO \"floor_position\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_refresh_token\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n \"expiresAt\" integer NOT NULL,\n \"refreshToken\" varchar NOT NULL,\n \"refreshAttemptsUsed\" integer NOT NULL,\n CONSTRAINT \"FK_8e913e288156c133999341156ad\" FOREIGN KEY (\"userId\") REFERENCES \"user\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_refresh_token\"(\n \"id\",\n \"userId\",\n \"createdAt\",\n \"expiresAt\",\n \"refreshToken\",\n \"refreshAttemptsUsed\"\n )\n SELECT \"id\",\n \"userId\",\n \"createdAt\",\n \"expiresAt\",\n \"refreshToken\",\n \"refreshAttemptsUsed\"\n FROM \"refresh_token\"\n `);\n await queryRunner.query(`\n DROP TABLE \"refresh_token\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_refresh_token\"\n RENAME TO \"refresh_token\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_user_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"roleId\" integer NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n CONSTRAINT \"UQ_7b4e17a669299579dfa55a3fc35\" UNIQUE (\"roleId\", \"userId\"),\n CONSTRAINT \"FK_dba55ed826ef26b5b22bd39409b\" FOREIGN KEY (\"roleId\") REFERENCES \"role\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION,\n CONSTRAINT \"FK_ab40a6f0cd7d3ebfcce082131fd\" FOREIGN KEY (\"userId\") REFERENCES \"user\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_user_role\"(\"id\", \"roleId\", \"userId\", \"createdAt\")\n SELECT \"id\",\n \"roleId\",\n \"userId\",\n \"createdAt\"\n FROM \"user_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"user_role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_user_role\"\n RENAME TO \"user_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_camera_stream\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"streamURL\" varchar NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerId\" integer,\n \"aspectRatio\" varchar NOT NULL DEFAULT ('16:9'),\n \"rotationClockwise\" integer NOT NULL DEFAULT (0),\n \"flipHorizontal\" boolean NOT NULL DEFAULT (0),\n \"flipVertical\" boolean NOT NULL DEFAULT (0),\n CONSTRAINT \"UQ_565f1b0713258ce710e9fb48273\" UNIQUE (\"printerId\"),\n CONSTRAINT \"REL_565f1b0713258ce710e9fb4827\" UNIQUE (\"printerId\"),\n CONSTRAINT \"FK_565f1b0713258ce710e9fb48273\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_camera_stream\"(\n \"id\",\n \"streamURL\",\n \"name\",\n \"printerId\",\n \"aspectRatio\",\n \"rotationClockwise\",\n \"flipHorizontal\",\n \"flipVertical\"\n )\n SELECT \"id\",\n \"streamURL\",\n \"name\",\n \"printerId\",\n \"aspectRatio\",\n \"rotationClockwise\",\n \"flipHorizontal\",\n \"flipVertical\"\n FROM \"camera_stream\"\n `);\n await queryRunner.query(`\n DROP TABLE \"camera_stream\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_camera_stream\"\n RENAME TO \"camera_stream\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"camera_stream\"\n RENAME TO \"temporary_camera_stream\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"camera_stream\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"streamURL\" varchar NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerId\" integer,\n \"aspectRatio\" varchar NOT NULL DEFAULT ('16:9'),\n \"rotationClockwise\" integer NOT NULL DEFAULT (0),\n \"flipHorizontal\" boolean NOT NULL DEFAULT (0),\n \"flipVertical\" boolean NOT NULL DEFAULT (0),\n CONSTRAINT \"UQ_565f1b0713258ce710e9fb48273\" UNIQUE (\"printerId\"),\n CONSTRAINT \"REL_565f1b0713258ce710e9fb4827\" UNIQUE (\"printerId\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"camera_stream\"(\n \"id\",\n \"streamURL\",\n \"name\",\n \"printerId\",\n \"aspectRatio\",\n \"rotationClockwise\",\n \"flipHorizontal\",\n \"flipVertical\"\n )\n SELECT \"id\",\n \"streamURL\",\n \"name\",\n \"printerId\",\n \"aspectRatio\",\n \"rotationClockwise\",\n \"flipHorizontal\",\n \"flipVertical\"\n FROM \"temporary_camera_stream\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_camera_stream\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"user_role\"\n RENAME TO \"temporary_user_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"user_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"roleId\" integer NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n CONSTRAINT \"UQ_7b4e17a669299579dfa55a3fc35\" UNIQUE (\"roleId\", \"userId\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"user_role\"(\"id\", \"roleId\", \"userId\", \"createdAt\")\n SELECT \"id\",\n \"roleId\",\n \"userId\",\n \"createdAt\"\n FROM \"temporary_user_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_user_role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"refresh_token\"\n RENAME TO \"temporary_refresh_token\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"refresh_token\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n \"expiresAt\" integer NOT NULL,\n \"refreshToken\" varchar NOT NULL,\n \"refreshAttemptsUsed\" integer NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"refresh_token\"(\n \"id\",\n \"userId\",\n \"createdAt\",\n \"expiresAt\",\n \"refreshToken\",\n \"refreshAttemptsUsed\"\n )\n SELECT \"id\",\n \"userId\",\n \"createdAt\",\n \"expiresAt\",\n \"refreshToken\",\n \"refreshAttemptsUsed\"\n FROM \"temporary_refresh_token\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_refresh_token\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"floor_position\"\n RENAME TO \"temporary_floor_position\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"floor_position\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"x\" integer NOT NULL,\n \"y\" integer NOT NULL,\n \"floorId\" integer NOT NULL,\n \"printerId\" integer NOT NULL,\n CONSTRAINT \"UQ_bc255adeb42e065d2dbb17029ab\" UNIQUE (\"x\", \"y\", \"floorId\"),\n CONSTRAINT \"REL_2ce10d03d7c8f3d6a30d8e30bb\" UNIQUE (\"printerId\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"floor_position\"(\"id\", \"x\", \"y\", \"floorId\", \"printerId\")\n SELECT \"id\",\n \"x\",\n \"y\",\n \"floorId\",\n \"printerId\"\n FROM \"temporary_floor_position\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_floor_position\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"printer_file\"\n RENAME TO \"temporary_printer_file\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer_file\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"name\" varchar NOT NULL,\n \"date\" integer NOT NULL,\n \"display\" varchar NOT NULL,\n \"gcodeAnalysis\" text,\n \"hash\" varchar NOT NULL,\n \"origin\" varchar NOT NULL,\n \"path\" varchar NOT NULL,\n \"prints\" text,\n \"refs\" text,\n \"size\" integer,\n \"statistics\" text,\n \"type\" varchar,\n \"typePath\" text,\n \"customData\" text NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"printer_file\"(\n \"id\",\n \"printerId\",\n \"name\",\n \"date\",\n \"display\",\n \"gcodeAnalysis\",\n \"hash\",\n \"origin\",\n \"path\",\n \"prints\",\n \"refs\",\n \"size\",\n \"statistics\",\n \"type\",\n \"typePath\",\n \"customData\"\n )\n SELECT \"id\",\n \"printerId\",\n \"name\",\n \"date\",\n \"display\",\n \"gcodeAnalysis\",\n \"hash\",\n \"origin\",\n \"path\",\n \"prints\",\n \"refs\",\n \"size\",\n \"statistics\",\n \"type\",\n \"typePath\",\n \"customData\"\n FROM \"temporary_printer_file\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_printer_file\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"print_completion\"\n RENAME TO \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"custom_gcode\"\n `);\n await queryRunner.query(`\n DROP TABLE \"camera_stream\"\n `);\n await queryRunner.query(`\n DROP TABLE \"permission\"\n `);\n await queryRunner.query(`\n DROP TABLE \"user\"\n `);\n await queryRunner.query(`\n DROP TABLE \"user_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"refresh_token\"\n `);\n await queryRunner.query(`\n DROP TABLE \"settings\"\n `);\n await queryRunner.query(`\n DROP TABLE \"floor\"\n `);\n await queryRunner.query(`\n DROP TABLE \"floor_position\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer_file\"\n `);\n await queryRunner.query(`\n DROP TABLE \"print_completion\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,0BAAb,MAAmE;CACjE,OAAO;CAEP,MAAa,GAAG,aAAyC;AACvD,QAAM,YAAY,MAAM;;;;;;;;;;;UAWlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;UAmBlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;UAUlB;AACN,QAAM,YAAY,MAAM;;;;;;;UAOlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;UAUlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;UASlB;AACN,QAAM,YAAY,MAAM;;;;;UAKlB;AACN,QAAM,YAAY,MAAM;;;;;;;;UAQlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;UAWlB;AACN,QAAM,YAAY,MAAM;;;;;UAKlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;AACN,QAAM,YAAY,MAAM;;;;;;;UAOlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAoClB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;UAYlB;AACN,QAAM,YAAY,MAAM;;;;;;;;UAQlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;UAUlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;UAgBlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;UAUlB;AACN,QAAM,YAAY,MAAM;;;;;;;UAOlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;UAclB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;;CAGR,MAAa,KAAK,aAAyC;AACzD,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;UAQlB;AACN,QAAM,YAAY,MAAM;;;;;;;UAOlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;UASlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;UAgBlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;UAUlB;AACN,QAAM,YAAY,MAAM;;;;;;;;UAQlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;UAmBlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAoClB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;;UAGlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;UAWlB;AACN,QAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB;AACN,QAAM,YAAY,MAAM;;UAElB"}
|
|
1
|
+
{"version":3,"file":"1706829146617-InitSqlite.js","names":[],"sources":["../../src/migrations/1706829146617-InitSqlite.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class InitSqlite1706829146617 implements MigrationInterface {\n name = \"InitSqlite1706829146617\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer_file\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"name\" varchar NOT NULL,\n \"date\" integer NOT NULL,\n \"display\" varchar NOT NULL,\n \"gcodeAnalysis\" text,\n \"hash\" varchar NOT NULL,\n \"origin\" varchar NOT NULL,\n \"path\" varchar NOT NULL,\n \"prints\" text,\n \"refs\" text,\n \"size\" integer,\n \"statistics\" text,\n \"type\" varchar,\n \"typePath\" text,\n \"customData\" text NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerURL\" varchar NOT NULL,\n \"apiKey\" varchar NOT NULL,\n \"enabled\" boolean NOT NULL DEFAULT (1),\n \"disabledReason\" varchar,\n \"assignee\" varchar,\n \"dateAdded\" integer NOT NULL DEFAULT (datetime('now')),\n \"feedRate\" integer,\n \"flowRate\" integer\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"floor_position\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"x\" integer NOT NULL,\n \"y\" integer NOT NULL,\n \"floorId\" integer NOT NULL,\n \"printerId\" integer NOT NULL,\n CONSTRAINT \"UQ_bc255adeb42e065d2dbb17029ab\" UNIQUE (\"x\", \"y\", \"floorId\"),\n CONSTRAINT \"REL_2ce10d03d7c8f3d6a30d8e30bb\" UNIQUE (\"printerId\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"floor\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"floor\" integer NOT NULL,\n CONSTRAINT \"UQ_61b83f63f4e2d1f8c1b331aaf67\" UNIQUE (\"floor\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"settings\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"server\" text NOT NULL,\n \"credentials\" text NOT NULL,\n \"wizard\" text NOT NULL,\n \"printerFileClean\" text NOT NULL,\n \"frontend\" text NOT NULL,\n \"timeout\" text NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"refresh_token\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n \"expiresAt\" integer NOT NULL,\n \"refreshToken\" varchar NOT NULL,\n \"refreshAttemptsUsed\" integer NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"user_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"roleId\" integer NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n CONSTRAINT \"UQ_7b4e17a669299579dfa55a3fc35\" UNIQUE (\"roleId\", \"userId\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"user\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"username\" varchar NOT NULL,\n \"isDemoUser\" boolean NOT NULL DEFAULT (0),\n \"isRootUser\" boolean NOT NULL DEFAULT (0),\n \"isVerified\" boolean NOT NULL DEFAULT (0),\n \"needsPasswordChange\" boolean NOT NULL DEFAULT (1),\n \"passwordHash\" varchar NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now'))\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"permission\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"camera_stream\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"streamURL\" varchar NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerId\" integer,\n \"aspectRatio\" varchar NOT NULL DEFAULT ('16:9'),\n \"rotationClockwise\" integer NOT NULL DEFAULT (0),\n \"flipHorizontal\" boolean NOT NULL DEFAULT (0),\n \"flipVertical\" boolean NOT NULL DEFAULT (0),\n CONSTRAINT \"UQ_565f1b0713258ce710e9fb48273\" UNIQUE (\"printerId\"),\n CONSTRAINT \"REL_565f1b0713258ce710e9fb4827\" UNIQUE (\"printerId\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"custom_gcode\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"description\" varchar,\n \"gcode\" text NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text,\n CONSTRAINT \"FK_c078b1dfe5f87f79f131520d856\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE\n SET NULL ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"print_completion\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_print_completion\"\n RENAME TO \"print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_printer_file\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"name\" varchar NOT NULL,\n \"date\" integer NOT NULL,\n \"display\" varchar NOT NULL,\n \"gcodeAnalysis\" text,\n \"hash\" varchar NOT NULL,\n \"origin\" varchar NOT NULL,\n \"path\" varchar NOT NULL,\n \"prints\" text,\n \"refs\" text,\n \"size\" integer,\n \"statistics\" text,\n \"type\" varchar,\n \"typePath\" text,\n \"customData\" text NOT NULL,\n CONSTRAINT \"FK_66046b90513581dfadc836223a4\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_printer_file\"(\n \"id\",\n \"printerId\",\n \"name\",\n \"date\",\n \"display\",\n \"gcodeAnalysis\",\n \"hash\",\n \"origin\",\n \"path\",\n \"prints\",\n \"refs\",\n \"size\",\n \"statistics\",\n \"type\",\n \"typePath\",\n \"customData\"\n )\n SELECT \"id\",\n \"printerId\",\n \"name\",\n \"date\",\n \"display\",\n \"gcodeAnalysis\",\n \"hash\",\n \"origin\",\n \"path\",\n \"prints\",\n \"refs\",\n \"size\",\n \"statistics\",\n \"type\",\n \"typePath\",\n \"customData\"\n FROM \"printer_file\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer_file\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_printer_file\"\n RENAME TO \"printer_file\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_floor_position\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"x\" integer NOT NULL,\n \"y\" integer NOT NULL,\n \"floorId\" integer NOT NULL,\n \"printerId\" integer NOT NULL,\n CONSTRAINT \"UQ_bc255adeb42e065d2dbb17029ab\" UNIQUE (\"x\", \"y\", \"floorId\"),\n CONSTRAINT \"REL_2ce10d03d7c8f3d6a30d8e30bb\" UNIQUE (\"printerId\"),\n CONSTRAINT \"FK_5038c7f41e00edb15eca80843b0\" FOREIGN KEY (\"floorId\") REFERENCES \"floor\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION,\n CONSTRAINT \"FK_2ce10d03d7c8f3d6a30d8e30bb3\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_floor_position\"(\"id\", \"x\", \"y\", \"floorId\", \"printerId\")\n SELECT \"id\",\n \"x\",\n \"y\",\n \"floorId\",\n \"printerId\"\n FROM \"floor_position\"\n `);\n await queryRunner.query(`\n DROP TABLE \"floor_position\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_floor_position\"\n RENAME TO \"floor_position\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_refresh_token\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n \"expiresAt\" integer NOT NULL,\n \"refreshToken\" varchar NOT NULL,\n \"refreshAttemptsUsed\" integer NOT NULL,\n CONSTRAINT \"FK_8e913e288156c133999341156ad\" FOREIGN KEY (\"userId\") REFERENCES \"user\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_refresh_token\"(\n \"id\",\n \"userId\",\n \"createdAt\",\n \"expiresAt\",\n \"refreshToken\",\n \"refreshAttemptsUsed\"\n )\n SELECT \"id\",\n \"userId\",\n \"createdAt\",\n \"expiresAt\",\n \"refreshToken\",\n \"refreshAttemptsUsed\"\n FROM \"refresh_token\"\n `);\n await queryRunner.query(`\n DROP TABLE \"refresh_token\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_refresh_token\"\n RENAME TO \"refresh_token\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_user_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"roleId\" integer NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n CONSTRAINT \"UQ_7b4e17a669299579dfa55a3fc35\" UNIQUE (\"roleId\", \"userId\"),\n CONSTRAINT \"FK_dba55ed826ef26b5b22bd39409b\" FOREIGN KEY (\"roleId\") REFERENCES \"role\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION,\n CONSTRAINT \"FK_ab40a6f0cd7d3ebfcce082131fd\" FOREIGN KEY (\"userId\") REFERENCES \"user\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_user_role\"(\"id\", \"roleId\", \"userId\", \"createdAt\")\n SELECT \"id\",\n \"roleId\",\n \"userId\",\n \"createdAt\"\n FROM \"user_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"user_role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_user_role\"\n RENAME TO \"user_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_camera_stream\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"streamURL\" varchar NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerId\" integer,\n \"aspectRatio\" varchar NOT NULL DEFAULT ('16:9'),\n \"rotationClockwise\" integer NOT NULL DEFAULT (0),\n \"flipHorizontal\" boolean NOT NULL DEFAULT (0),\n \"flipVertical\" boolean NOT NULL DEFAULT (0),\n CONSTRAINT \"UQ_565f1b0713258ce710e9fb48273\" UNIQUE (\"printerId\"),\n CONSTRAINT \"REL_565f1b0713258ce710e9fb4827\" UNIQUE (\"printerId\"),\n CONSTRAINT \"FK_565f1b0713258ce710e9fb48273\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_camera_stream\"(\n \"id\",\n \"streamURL\",\n \"name\",\n \"printerId\",\n \"aspectRatio\",\n \"rotationClockwise\",\n \"flipHorizontal\",\n \"flipVertical\"\n )\n SELECT \"id\",\n \"streamURL\",\n \"name\",\n \"printerId\",\n \"aspectRatio\",\n \"rotationClockwise\",\n \"flipHorizontal\",\n \"flipVertical\"\n FROM \"camera_stream\"\n `);\n await queryRunner.query(`\n DROP TABLE \"camera_stream\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_camera_stream\"\n RENAME TO \"camera_stream\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"camera_stream\"\n RENAME TO \"temporary_camera_stream\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"camera_stream\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"streamURL\" varchar NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerId\" integer,\n \"aspectRatio\" varchar NOT NULL DEFAULT ('16:9'),\n \"rotationClockwise\" integer NOT NULL DEFAULT (0),\n \"flipHorizontal\" boolean NOT NULL DEFAULT (0),\n \"flipVertical\" boolean NOT NULL DEFAULT (0),\n CONSTRAINT \"UQ_565f1b0713258ce710e9fb48273\" UNIQUE (\"printerId\"),\n CONSTRAINT \"REL_565f1b0713258ce710e9fb4827\" UNIQUE (\"printerId\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"camera_stream\"(\n \"id\",\n \"streamURL\",\n \"name\",\n \"printerId\",\n \"aspectRatio\",\n \"rotationClockwise\",\n \"flipHorizontal\",\n \"flipVertical\"\n )\n SELECT \"id\",\n \"streamURL\",\n \"name\",\n \"printerId\",\n \"aspectRatio\",\n \"rotationClockwise\",\n \"flipHorizontal\",\n \"flipVertical\"\n FROM \"temporary_camera_stream\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_camera_stream\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"user_role\"\n RENAME TO \"temporary_user_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"user_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"roleId\" integer NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n CONSTRAINT \"UQ_7b4e17a669299579dfa55a3fc35\" UNIQUE (\"roleId\", \"userId\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"user_role\"(\"id\", \"roleId\", \"userId\", \"createdAt\")\n SELECT \"id\",\n \"roleId\",\n \"userId\",\n \"createdAt\"\n FROM \"temporary_user_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_user_role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"refresh_token\"\n RENAME TO \"temporary_refresh_token\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"refresh_token\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"userId\" integer NOT NULL,\n \"createdAt\" datetime NOT NULL DEFAULT (datetime('now')),\n \"expiresAt\" integer NOT NULL,\n \"refreshToken\" varchar NOT NULL,\n \"refreshAttemptsUsed\" integer NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"refresh_token\"(\n \"id\",\n \"userId\",\n \"createdAt\",\n \"expiresAt\",\n \"refreshToken\",\n \"refreshAttemptsUsed\"\n )\n SELECT \"id\",\n \"userId\",\n \"createdAt\",\n \"expiresAt\",\n \"refreshToken\",\n \"refreshAttemptsUsed\"\n FROM \"temporary_refresh_token\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_refresh_token\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"floor_position\"\n RENAME TO \"temporary_floor_position\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"floor_position\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"x\" integer NOT NULL,\n \"y\" integer NOT NULL,\n \"floorId\" integer NOT NULL,\n \"printerId\" integer NOT NULL,\n CONSTRAINT \"UQ_bc255adeb42e065d2dbb17029ab\" UNIQUE (\"x\", \"y\", \"floorId\"),\n CONSTRAINT \"REL_2ce10d03d7c8f3d6a30d8e30bb\" UNIQUE (\"printerId\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"floor_position\"(\"id\", \"x\", \"y\", \"floorId\", \"printerId\")\n SELECT \"id\",\n \"x\",\n \"y\",\n \"floorId\",\n \"printerId\"\n FROM \"temporary_floor_position\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_floor_position\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"printer_file\"\n RENAME TO \"temporary_printer_file\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer_file\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"name\" varchar NOT NULL,\n \"date\" integer NOT NULL,\n \"display\" varchar NOT NULL,\n \"gcodeAnalysis\" text,\n \"hash\" varchar NOT NULL,\n \"origin\" varchar NOT NULL,\n \"path\" varchar NOT NULL,\n \"prints\" text,\n \"refs\" text,\n \"size\" integer,\n \"statistics\" text,\n \"type\" varchar,\n \"typePath\" text,\n \"customData\" text NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"printer_file\"(\n \"id\",\n \"printerId\",\n \"name\",\n \"date\",\n \"display\",\n \"gcodeAnalysis\",\n \"hash\",\n \"origin\",\n \"path\",\n \"prints\",\n \"refs\",\n \"size\",\n \"statistics\",\n \"type\",\n \"typePath\",\n \"customData\"\n )\n SELECT \"id\",\n \"printerId\",\n \"name\",\n \"date\",\n \"display\",\n \"gcodeAnalysis\",\n \"hash\",\n \"origin\",\n \"path\",\n \"prints\",\n \"refs\",\n \"size\",\n \"statistics\",\n \"type\",\n \"typePath\",\n \"customData\"\n FROM \"temporary_printer_file\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_printer_file\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"print_completion\"\n RENAME TO \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"custom_gcode\"\n `);\n await queryRunner.query(`\n DROP TABLE \"camera_stream\"\n `);\n await queryRunner.query(`\n DROP TABLE \"permission\"\n `);\n await queryRunner.query(`\n DROP TABLE \"user\"\n `);\n await queryRunner.query(`\n DROP TABLE \"user_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"refresh_token\"\n `);\n await queryRunner.query(`\n DROP TABLE \"settings\"\n `);\n await queryRunner.query(`\n DROP TABLE \"floor\"\n `);\n await queryRunner.query(`\n DROP TABLE \"floor_position\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer_file\"\n `);\n await queryRunner.query(`\n DROP TABLE \"print_completion\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,0BAAb,MAAmE;CACjE,OAAO;CAEP,MAAa,GAAG,aAAyC;EACvD,MAAM,YAAY,MAAM;;;;;;;;;;;UAWlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;UAmBlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;UAUlB;EACN,MAAM,YAAY,MAAM;;;;;;;UAOlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;UAUlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;UASlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;;;;;;;UAQlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;UAWlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;EACN,MAAM,YAAY,MAAM;;;;;;;UAOlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAoClB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;UAYlB;EACN,MAAM,YAAY,MAAM;;;;;;;;UAQlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;UAUlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;UAgBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;UAUlB;EACN,MAAM,YAAY,MAAM;;;;;;;UAOlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;UAclB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;;CAGR,MAAa,KAAK,aAAyC;EACzD,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;UAQlB;EACN,MAAM,YAAY,MAAM;;;;;;;UAOlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;UASlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;UAgBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;UAUlB;EACN,MAAM,YAAY,MAAM;;;;;;;;UAQlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;UAmBlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAoClB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;UAWlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1707494762198-PrinterGroup.js","names":[],"sources":["../../src/migrations/1707494762198-PrinterGroup.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class PrinterGroup1707494762198 implements MigrationInterface {\n name = \"PrinterGroup1707494762198\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"group\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer_group\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"groupId\" integer NOT NULL,\n CONSTRAINT \"UQ_c9e2395912075256923415eb2c7\" UNIQUE (\"printerId\", \"groupId\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_printer_group\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"groupId\" integer NOT NULL,\n CONSTRAINT \"UQ_c9e2395912075256923415eb2c7\" UNIQUE (\"printerId\", \"groupId\"),\n CONSTRAINT \"FK_20e241cea3a77568c9372dad6a1\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION,\n CONSTRAINT \"FK_789586afe1423a1dfd1104cb7bd\" FOREIGN KEY (\"groupId\") REFERENCES \"group\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_printer_group\"(\"id\", \"printerId\", \"groupId\")\n SELECT \"id\",\n \"printerId\",\n \"groupId\"\n FROM \"printer_group\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer_group\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_printer_group\"\n RENAME TO \"printer_group\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"printer_group\"\n RENAME TO \"temporary_printer_group\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer_group\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"groupId\" integer NOT NULL,\n CONSTRAINT \"UQ_c9e2395912075256923415eb2c7\" UNIQUE (\"printerId\", \"groupId\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"printer_group\"(\"id\", \"printerId\", \"groupId\")\n SELECT \"id\",\n \"printerId\",\n \"groupId\"\n FROM \"temporary_printer_group\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_printer_group\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer_group\"\n `);\n await queryRunner.query(`\n DROP TABLE \"group\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,4BAAb,MAAqE;CACnE,OAAO;CAEP,MAAa,GAAG,aAAyC;
|
|
1
|
+
{"version":3,"file":"1707494762198-PrinterGroup.js","names":[],"sources":["../../src/migrations/1707494762198-PrinterGroup.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class PrinterGroup1707494762198 implements MigrationInterface {\n name = \"PrinterGroup1707494762198\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"group\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer_group\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"groupId\" integer NOT NULL,\n CONSTRAINT \"UQ_c9e2395912075256923415eb2c7\" UNIQUE (\"printerId\", \"groupId\")\n )\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_printer_group\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"groupId\" integer NOT NULL,\n CONSTRAINT \"UQ_c9e2395912075256923415eb2c7\" UNIQUE (\"printerId\", \"groupId\"),\n CONSTRAINT \"FK_20e241cea3a77568c9372dad6a1\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION,\n CONSTRAINT \"FK_789586afe1423a1dfd1104cb7bd\" FOREIGN KEY (\"groupId\") REFERENCES \"group\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_printer_group\"(\"id\", \"printerId\", \"groupId\")\n SELECT \"id\",\n \"printerId\",\n \"groupId\"\n FROM \"printer_group\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer_group\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_printer_group\"\n RENAME TO \"printer_group\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"printer_group\"\n RENAME TO \"temporary_printer_group\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer_group\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"groupId\" integer NOT NULL,\n CONSTRAINT \"UQ_c9e2395912075256923415eb2c7\" UNIQUE (\"printerId\", \"groupId\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"printer_group\"(\"id\", \"printerId\", \"groupId\")\n SELECT \"id\",\n \"printerId\",\n \"groupId\"\n FROM \"temporary_printer_group\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_printer_group\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer_group\"\n `);\n await queryRunner.query(`\n DROP TABLE \"group\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,4BAAb,MAAqE;CACnE,OAAO;CAEP,MAAa,GAAG,aAAyC;EACvD,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;;;;;;UAOlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;UASlB;EACN,MAAM,YAAY,MAAM;;;;;;UAMlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;;CAGR,MAAa,KAAK,aAAyC;EACzD,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;UAOlB;EACN,MAAM,YAAY,MAAM;;;;;;UAMlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;UAElB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1708465930665-ChangePrintCompletionDeletePrinterCascade.js","names":[],"sources":["../../src/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class ChangePrintCompletionDeletePrinterCascade1708465930665 implements MigrationInterface {\n name = \"ChangePrintCompletionDeletePrinterCascade1708465930665\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"temporary_print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"print_completion\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_print_completion\"\n RENAME TO \"print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text,\n CONSTRAINT \"FK_c078b1dfe5f87f79f131520d856\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"print_completion\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_print_completion\"\n RENAME TO \"print_completion\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"print_completion\"\n RENAME TO \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"print_completion\"\n RENAME TO \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text,\n CONSTRAINT \"FK_c078b1dfe5f87f79f131520d856\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE\n SET NULL ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_print_completion\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,yDAAb,MAAkG;CAChG,OAAO;CAEP,MAAa,GAAG,aAAyC;
|
|
1
|
+
{"version":3,"file":"1708465930665-ChangePrintCompletionDeletePrinterCascade.js","names":[],"sources":["../../src/migrations/1708465930665-ChangePrintCompletionDeletePrinterCascade.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class ChangePrintCompletionDeletePrinterCascade1708465930665 implements MigrationInterface {\n name = \"ChangePrintCompletionDeletePrinterCascade1708465930665\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"temporary_print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"print_completion\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_print_completion\"\n RENAME TO \"print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text,\n CONSTRAINT \"FK_c078b1dfe5f87f79f131520d856\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"print_completion\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_print_completion\"\n RENAME TO \"print_completion\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"print_completion\"\n RENAME TO \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"print_completion\"\n RENAME TO \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"print_completion\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"fileName\" varchar NOT NULL,\n \"createdAt\" integer NOT NULL DEFAULT (datetime('now')),\n \"status\" varchar NOT NULL,\n \"printerId\" integer NOT NULL,\n \"printerReference\" varchar,\n \"completionLog\" varchar,\n \"context\" text,\n CONSTRAINT \"FK_c078b1dfe5f87f79f131520d856\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE\n SET NULL ON UPDATE NO ACTION\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"print_completion\"(\n \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n )\n SELECT \"id\",\n \"fileName\",\n \"createdAt\",\n \"status\",\n \"printerId\",\n \"printerReference\",\n \"completionLog\",\n \"context\"\n FROM \"temporary_print_completion\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_print_completion\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,yDAAb,MAAkG;CAChG,OAAO;CAEP,MAAa,GAAG,aAAyC;EACvD,MAAM,YAAY,MAAM;;;;;;;;;;;UAWlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;UAYlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;;CAGR,MAAa,KAAK,aAAyC;EACzD,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;UAWlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB;EACN,MAAM,YAAY,MAAM;;UAElB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1713300747465-ChangeRoleNameUnique.js","names":[],"sources":["../../src/migrations/1713300747465-ChangeRoleNameUnique.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class ChangeRoleNameUnique1713300747465 implements MigrationInterface {\n name = \"ChangeRoleNameUnique1713300747465\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n DELETE FROM role\n WHERE ID NOT IN (\n SELECT MIN(ID)\n FROM role\n GROUP BY name\n );\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_role\"\n RENAME TO \"role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_role\"\n RENAME TO \"role\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"role\"\n RENAME TO \"temporary_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"temporary_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"role\"\n RENAME TO \"temporary_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"temporary_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_role\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,oCAAb,MAA6E;CAC3E,OAAO;CAEP,MAAa,GAAG,aAAyC;
|
|
1
|
+
{"version":3,"file":"1713300747465-ChangeRoleNameUnique.js","names":[],"sources":["../../src/migrations/1713300747465-ChangeRoleNameUnique.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class ChangeRoleNameUnique1713300747465 implements MigrationInterface {\n name = \"ChangeRoleNameUnique1713300747465\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n DELETE FROM role\n WHERE ID NOT IN (\n SELECT MIN(ID)\n FROM role\n GROUP BY name\n );\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_role\"\n RENAME TO \"role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_role\"\n RENAME TO \"role\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"role\"\n RENAME TO \"temporary_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"temporary_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"role\"\n RENAME TO \"temporary_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"temporary_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_role\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,oCAAb,MAA6E;CAC3E,OAAO;CAEP,MAAa,GAAG,aAAyC;EACvD,MAAM,YAAY,MAAM;;;;;;;MAOtB;EACF,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;UAMlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;;CAGR,MAAa,KAAK,aAAyC;EACzD,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;UAElB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1713897879622-AddPrinterType.js","names":[],"sources":["../../src/migrations/1713897879622-AddPrinterType.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class AddPrinterType1713897879622 implements MigrationInterface {\n name = \"AddPrinterType1713897879622\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"temporary_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_role\"\n RENAME TO \"role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_printer\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerURL\" varchar NOT NULL,\n \"apiKey\" varchar NOT NULL,\n \"enabled\" boolean NOT NULL DEFAULT (1),\n \"disabledReason\" varchar,\n \"assignee\" varchar,\n \"dateAdded\" integer NOT NULL DEFAULT (datetime('now')),\n \"feedRate\" integer,\n \"flowRate\" integer,\n \"printerType\" integer NOT NULL DEFAULT (0)\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_printer\"(\n \"id\",\n \"name\",\n \"printerURL\",\n \"apiKey\",\n \"enabled\",\n \"disabledReason\",\n \"assignee\",\n \"dateAdded\",\n \"feedRate\",\n \"flowRate\"\n )\n SELECT \"id\",\n \"name\",\n \"printerURL\",\n \"apiKey\",\n \"enabled\",\n \"disabledReason\",\n \"assignee\",\n \"dateAdded\",\n \"feedRate\",\n \"flowRate\"\n FROM \"printer\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_printer\"\n RENAME TO \"printer\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_role\"\n RENAME TO \"role\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"role\"\n RENAME TO \"temporary_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"temporary_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"printer\"\n RENAME TO \"temporary_printer\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerURL\" varchar NOT NULL,\n \"apiKey\" varchar NOT NULL,\n \"enabled\" boolean NOT NULL DEFAULT (1),\n \"disabledReason\" varchar,\n \"assignee\" varchar,\n \"dateAdded\" integer NOT NULL DEFAULT (datetime('now')),\n \"feedRate\" integer,\n \"flowRate\" integer\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"printer\"(\n \"id\",\n \"name\",\n \"printerURL\",\n \"apiKey\",\n \"enabled\",\n \"disabledReason\",\n \"assignee\",\n \"dateAdded\",\n \"feedRate\",\n \"flowRate\"\n )\n SELECT \"id\",\n \"name\",\n \"printerURL\",\n \"apiKey\",\n \"enabled\",\n \"disabledReason\",\n \"assignee\",\n \"dateAdded\",\n \"feedRate\",\n \"flowRate\"\n FROM \"temporary_printer\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_printer\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"role\"\n RENAME TO \"temporary_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"temporary_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_role\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,8BAAb,MAAuE;CACrE,OAAO;CAEP,MAAa,GAAG,aAAyC;
|
|
1
|
+
{"version":3,"file":"1713897879622-AddPrinterType.js","names":[],"sources":["../../src/migrations/1713897879622-AddPrinterType.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class AddPrinterType1713897879622 implements MigrationInterface {\n name = \"AddPrinterType1713897879622\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"temporary_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_role\"\n RENAME TO \"role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_printer\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerURL\" varchar NOT NULL,\n \"apiKey\" varchar NOT NULL,\n \"enabled\" boolean NOT NULL DEFAULT (1),\n \"disabledReason\" varchar,\n \"assignee\" varchar,\n \"dateAdded\" integer NOT NULL DEFAULT (datetime('now')),\n \"feedRate\" integer,\n \"flowRate\" integer,\n \"printerType\" integer NOT NULL DEFAULT (0)\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_printer\"(\n \"id\",\n \"name\",\n \"printerURL\",\n \"apiKey\",\n \"enabled\",\n \"disabledReason\",\n \"assignee\",\n \"dateAdded\",\n \"feedRate\",\n \"flowRate\"\n )\n SELECT \"id\",\n \"name\",\n \"printerURL\",\n \"apiKey\",\n \"enabled\",\n \"disabledReason\",\n \"assignee\",\n \"dateAdded\",\n \"feedRate\",\n \"flowRate\"\n FROM \"printer\"\n `);\n await queryRunner.query(`\n DROP TABLE \"printer\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_printer\"\n RENAME TO \"printer\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"temporary_role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"temporary_role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"temporary_role\"\n RENAME TO \"role\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"role\"\n RENAME TO \"temporary_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"temporary_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_role\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"printer\"\n RENAME TO \"temporary_printer\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"printer\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n \"printerURL\" varchar NOT NULL,\n \"apiKey\" varchar NOT NULL,\n \"enabled\" boolean NOT NULL DEFAULT (1),\n \"disabledReason\" varchar,\n \"assignee\" varchar,\n \"dateAdded\" integer NOT NULL DEFAULT (datetime('now')),\n \"feedRate\" integer,\n \"flowRate\" integer\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"printer\"(\n \"id\",\n \"name\",\n \"printerURL\",\n \"apiKey\",\n \"enabled\",\n \"disabledReason\",\n \"assignee\",\n \"dateAdded\",\n \"feedRate\",\n \"flowRate\"\n )\n SELECT \"id\",\n \"name\",\n \"printerURL\",\n \"apiKey\",\n \"enabled\",\n \"disabledReason\",\n \"assignee\",\n \"dateAdded\",\n \"feedRate\",\n \"flowRate\"\n FROM \"temporary_printer\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_printer\"\n `);\n await queryRunner.query(`\n ALTER TABLE \"role\"\n RENAME TO \"temporary_role\"\n `);\n await queryRunner.query(`\n CREATE TABLE \"role\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"name\" varchar NOT NULL,\n CONSTRAINT \"UQ_d430b72bf1eaebce7f87068a431\" UNIQUE (\"name\")\n )\n `);\n await queryRunner.query(`\n INSERT INTO \"role\"(\"id\", \"name\")\n SELECT \"id\",\n \"name\"\n FROM \"temporary_role\"\n `);\n await queryRunner.query(`\n DROP TABLE \"temporary_role\"\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,8BAAb,MAAuE;CACrE,OAAO;CAEP,MAAa,GAAG,aAAyC;EACvD,MAAM,YAAY,MAAM;;;;;;UAMlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;UAclB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;UAwBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;UAMlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;;CAGR,MAAa,KAAK,aAAyC;EACzD,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;UAMlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;UAalB;EACN,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;UAwBlB;EACN,MAAM,YAAY,MAAM;;UAElB;EACN,MAAM,YAAY,MAAM;;;UAGlB;EACN,MAAM,YAAY,MAAM;;;;;;UAMlB;EACN,MAAM,YAAY,MAAM;;;;;UAKlB;EACN,MAAM,YAAY,MAAM;;UAElB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1720338804844-RemovePrinterFile.js","names":[],"sources":["../../src/migrations/1720338804844-RemovePrinterFile.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class RemovePrinterFile1720338804844 implements MigrationInterface {\n name = \"RemovePrinterFile1720338804844\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n DROP TABLE \"printer_file\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"printer_file\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"name\" varchar NOT NULL,\n \"date\" integer NOT NULL,\n \"display\" varchar NOT NULL,\n \"gcodeAnalysis\" text,\n \"hash\" varchar NOT NULL,\n \"origin\" varchar NOT NULL,\n \"path\" varchar NOT NULL,\n \"prints\" text,\n \"refs\" text,\n \"size\" integer,\n \"statistics\" text,\n \"type\" varchar,\n \"typePath\" text,\n \"customData\" text NOT NULL,\n CONSTRAINT \"FK_66046b90513581dfadc836223a4\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,iCAAb,MAA0E;CACxE,OAAO;CAEP,MAAa,GAAG,aAAyC;
|
|
1
|
+
{"version":3,"file":"1720338804844-RemovePrinterFile.js","names":[],"sources":["../../src/migrations/1720338804844-RemovePrinterFile.ts"],"sourcesContent":["import { MigrationInterface, QueryRunner } from \"typeorm\";\n\nexport class RemovePrinterFile1720338804844 implements MigrationInterface {\n name = \"RemovePrinterFile1720338804844\";\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n DROP TABLE \"printer_file\"\n `);\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"printer_file\" (\n \"id\" integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n \"printerId\" integer NOT NULL,\n \"name\" varchar NOT NULL,\n \"date\" integer NOT NULL,\n \"display\" varchar NOT NULL,\n \"gcodeAnalysis\" text,\n \"hash\" varchar NOT NULL,\n \"origin\" varchar NOT NULL,\n \"path\" varchar NOT NULL,\n \"prints\" text,\n \"refs\" text,\n \"size\" integer,\n \"statistics\" text,\n \"type\" varchar,\n \"typePath\" text,\n \"customData\" text NOT NULL,\n CONSTRAINT \"FK_66046b90513581dfadc836223a4\" FOREIGN KEY (\"printerId\") REFERENCES \"printer\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )\n `);\n }\n}\n"],"mappings":";AAEA,IAAa,iCAAb,MAA0E;CACxE,OAAO;CAEP,MAAa,GAAG,aAAyC;EACvD,MAAM,YAAY,MAAM;;UAElB;;CAGR,MAAa,KAAK,aAAyC;EACzD,MAAM,YAAY,MAAM;;;;;;;;;;;;;;;;;;;;UAoBlB"}
|