@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.
250 lines (249 loc) • 12.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "ServerPrivateController", {
enumerable: true,
get: function() {
return ServerPrivateController;
}
});
const _stream = require("stream");
const _awilixexpress = require("awilix-express");
const _authenticate = require("../middleware/authenticate");
const _serverconstants = require("../server.constants");
const _authorizationconstants = require("../constants/authorization.constants");
const _validators = require("../handlers/validators");
const _serverreleaseservice = require("../services/core/server-release.service");
const _clientbundleservice = require("../services/core/client-bundle.service");
const _printercache = require("../state/printer.cache");
const _yamlservice = require("../services/core/yaml.service");
const _multerservice = require("../services/core/multer.service");
const _logsmanagerservice = require("../services/core/logs-manager.service");
const _express = require("express");
const _demomiddleware = require("../middleware/demo.middleware");
const _githubservice = require("../services/core/github.service");
const _printerserviceinterface = require("../services/interfaces/printer.service.interface");
const _serverprivatevalidation = require("./validation/server-private.validation");
const _loggerfactory = require("../handlers/logger-factory");
function _ts_decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function _ts_metadata(k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
}
class ServerPrivateController {
serverReleaseService;
printerCache;
printerService;
clientBundleService;
githubService;
logDumpService;
yamlService;
multerService;
logger;
constructor(loggerFactory, serverReleaseService, printerCache, printerService, clientBundleService, githubService, logDumpService, yamlService, multerService){
this.serverReleaseService = serverReleaseService;
this.printerCache = printerCache;
this.printerService = printerService;
this.clientBundleService = clientBundleService;
this.githubService = githubService;
this.logDumpService = logDumpService;
this.yamlService = yamlService;
this.multerService = multerService;
this.logger = loggerFactory(ServerPrivateController.name);
}
async getReleaseStateInfo(req, res) {
await this.serverReleaseService.syncLatestRelease();
const updateState = this.serverReleaseService.getState();
res.send(updateState);
}
async getClientReleases(_req, res) {
const releaseSpec = await this.clientBundleService.getReleases();
res.send(releaseSpec);
}
async updateClientBundleGithub(req, res) {
const updateDto = await (0, _validators.validateMiddleware)(req, _serverprivatevalidation.updateClientBundleSchema);
const willExecute = await this.clientBundleService.shouldUpdateWithReason(true, _serverconstants.AppConstants.defaultClientMinimum, updateDto.downloadRelease, updateDto.allowDowngrade);
this.logger.log(`Will execute: ${willExecute?.shouldUpdate}, reason: ${willExecute?.reason}`);
if (!willExecute?.shouldUpdate) {
return res.send({
executed: false,
requestedVersion: willExecute.requestedVersion,
currentVersion: willExecute.currentVersion,
minimumVersion: willExecute.minimumVersion,
shouldUpdate: willExecute.shouldUpdate,
targetVersion: willExecute.targetVersion,
reason: willExecute?.reason
});
}
if (willExecute.targetVersion) {
await this.clientBundleService.downloadClientUpdate(willExecute.targetVersion);
}
return res.send({
executed: true,
requestedVersion: willExecute.requestedVersion,
currentVersion: willExecute.currentVersion,
minimumVersion: willExecute.minimumVersion,
shouldUpdate: willExecute.shouldUpdate,
targetVersion: willExecute.targetVersion,
reason: willExecute?.reason
});
}
async getGithubRateLimit(req, res) {
const rateLimitResponse = await this.githubService.getRateLimit();
res.send(rateLimitResponse.data);
}
async importPrintersAndFloorsYaml(req, res) {
const files = await this.multerService.multerLoadFileAsync(req, res, [
".yaml"
], false);
const firstFile = files[0];
const spec = await this.yamlService.importPrintersAndFloors(firstFile.buffer.toString());
res.send({
success: true,
spec
});
}
async exportPrintersAndFloorsYaml(req, res) {
const yaml = await this.yamlService.exportPrintersAndFloors(req.body);
const fileContents = Buffer.from(yaml);
const readStream = new _stream.PassThrough();
readStream.end(fileContents);
const fileName = `export-${_serverconstants.AppConstants.serverRepoName}-` + Date.now() + ".yaml";
res.set("Content-disposition", "attachment; filename=" + fileName);
res.set("Content-Type", "text/plain");
readStream.pipe(res);
}
async deleteAllPrinters(req, res) {
const printers = await this.printerCache.listCachedPrinters(true);
const printerIds = printers.map((p)=>p.id);
await this.printerService.deleteMany(printerIds);
res.send();
}
async clearLogs(req, res) {
const counts = await this.logDumpService.deleteOlderThanWeekAndMismatchingLogFiles();
res.send(counts);
}
async dumpLogZips(req, res) {
const filePath = await this.logDumpService.dumpZip();
res.sendFile(filePath);
}
}
_ts_decorate([
(0, _awilixexpress.GET)(),
(0, _awilixexpress.route)("/"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "getReleaseStateInfo", null);
_ts_decorate([
(0, _awilixexpress.GET)(),
(0, _awilixexpress.route)("/client-releases"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "getClientReleases", null);
_ts_decorate([
(0, _awilixexpress.POST)(),
(0, _awilixexpress.route)("/update-client-bundle-github"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "updateClientBundleGithub", null);
_ts_decorate([
(0, _awilixexpress.GET)(),
(0, _awilixexpress.route)("/github-rate-limit"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "getGithubRateLimit", null);
_ts_decorate([
(0, _awilixexpress.POST)(),
(0, _awilixexpress.route)("/import-printers-floors-yaml"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "importPrintersAndFloorsYaml", null);
_ts_decorate([
(0, _awilixexpress.POST)(),
(0, _awilixexpress.route)("/export-printers-floors-yaml"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "exportPrintersAndFloorsYaml", null);
_ts_decorate([
(0, _awilixexpress.DELETE)(),
(0, _awilixexpress.route)("/delete-all-printers"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "deleteAllPrinters", null);
_ts_decorate([
(0, _awilixexpress.DELETE)(),
(0, _awilixexpress.route)("/clear-outdated-fdm-monster-logs"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "clearLogs", null);
_ts_decorate([
(0, _awilixexpress.GET)(),
(0, _awilixexpress.POST)(),
(0, _awilixexpress.route)("/dump-fdm-monster-logs"),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _express.Request === "undefined" ? Object : _express.Request,
typeof _express.Response === "undefined" ? Object : _express.Response
]),
_ts_metadata("design:returntype", Promise)
], ServerPrivateController.prototype, "dumpLogZips", null);
ServerPrivateController = _ts_decorate([
(0, _awilixexpress.route)(_serverconstants.AppConstants.apiRoute + "/server"),
(0, _awilixexpress.before)([
(0, _authenticate.authenticate)(),
(0, _authenticate.authorizeRoles)([
_authorizationconstants.ROLES.ADMIN
]),
_demomiddleware.demoUserNotAllowed
]),
_ts_metadata("design:type", Function),
_ts_metadata("design:paramtypes", [
typeof _loggerfactory.ILoggerFactory === "undefined" ? Object : _loggerfactory.ILoggerFactory,
typeof _serverreleaseservice.ServerReleaseService === "undefined" ? Object : _serverreleaseservice.ServerReleaseService,
typeof _printercache.PrinterCache === "undefined" ? Object : _printercache.PrinterCache,
typeof _printerserviceinterface.IPrinterService === "undefined" ? Object : _printerserviceinterface.IPrinterService,
typeof _clientbundleservice.ClientBundleService === "undefined" ? Object : _clientbundleservice.ClientBundleService,
typeof _githubservice.GithubService === "undefined" ? Object : _githubservice.GithubService,
typeof _logsmanagerservice.LogDumpService === "undefined" ? Object : _logsmanagerservice.LogDumpService,
typeof _yamlservice.YamlService === "undefined" ? Object : _yamlservice.YamlService,
typeof _multerservice.MulterService === "undefined" ? Object : _multerservice.MulterService
])
], ServerPrivateController);
//# sourceMappingURL=server-private.controller.js.map