@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.
246 lines (245 loc) • 10.9 kB
JavaScript
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.129.0/helpers/decorateMetadata.js";
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.129.0/helpers/decorate.js";
import "../services/printer-api.interface.js";
import { validateInput } from "../handlers/validators.js";
import { AppConstants } from "../server.constants.js";
import { SettingsStore } from "../state/settings.store.js";
import { ROLES } from "../constants/authorization.constants.js";
import { authenticate, authorizeRoles } from "../middleware/authenticate.js";
import { demoUserNotAllowed } from "../middleware/demo.middleware.js";
import { loginRequiredSchema, registrationEnabledSchema } from "./validation/setting.validation.js";
import { PrinterCache } from "../state/printer.cache.js";
import { PrinterThumbnailCache } from "../state/printer-thumbnail.cache.js";
import { bambuSupportSchema, credentialCoreSettingUpdateSchema, frontendSettingsUpdateSchema, moonrakerSupportSchema, prusaLinkSupportSchema, sentryDiagnosticsEnabledSchema, timeoutSettingsUpdateSchema } from "../services/validators/settings-service.validation.js";
import { DELETE, GET, PATCH, POST, PUT, before, route } from "awilix-express";
//#region src/controllers/settings.controller.ts
var settings_controller_exports = /* @__PURE__ */ __exportAll({ SettingsController: () => SettingsController });
var _ref, _ref2, _ref3, _SettingsController;
let SettingsController = _SettingsController = class SettingsController {
logger;
constructor(loggerFactory, serverVersion, printerCache, printerService, settingsStore, printerThumbnailCache) {
this.serverVersion = serverVersion;
this.printerCache = printerCache;
this.printerService = printerService;
this.settingsStore = settingsStore;
this.printerThumbnailCache = printerThumbnailCache;
this.logger = loggerFactory(_SettingsController.name);
}
async getSettings(req, res) {
let connection;
try {
connection = {
clientIp: req.socket?.remoteAddress,
version: this.serverVersion
};
} catch (e) {
this.logger.warn("Could not fetch server IP address");
}
const settings = this.settingsStore.getSettings();
res.send({
...settings,
connection
});
}
async getSettingsSensitive(req, res) {
const settings = this.settingsStore.getSettingsSensitive();
res.send(settings);
}
async updateSentryDiagnosticsEnabled(req, res) {
const { enabled } = await validateInput(req.body, sentryDiagnosticsEnabledSchema);
const result = this.settingsStore.setSentryDiagnosticsEnabled(enabled);
res.send(result);
}
async updateMoonrakerSupport(req, res) {
const { enabled } = await validateInput(req.body, moonrakerSupportSchema);
const result = await this.settingsStore.setExperimentalMoonrakerSupport(enabled);
if (!enabled) {
const klipperPrinters = (await this.printerCache.listCachedPrinters(false)).filter((p) => p.printerType === 1);
for (const printer of klipperPrinters) await this.printerService.updateEnabled(printer.id, false);
}
res.send(result);
}
async updatePrusaLinkSupport(req, res) {
const { enabled } = await validateInput(req.body, prusaLinkSupportSchema);
const result = await this.settingsStore.setExperimentalPrusaLinkSupport(enabled);
if (!enabled) {
const prusaLinkPrinters = (await this.printerCache.listCachedPrinters(false)).filter((p) => p.printerType === 2);
for (const printer of prusaLinkPrinters) await this.printerService.updateEnabled(printer.id, false);
}
res.send(result);
}
async updateBambuSupport(req, res) {
const { enabled } = await validateInput(req.body, bambuSupportSchema);
const result = await this.settingsStore.setExperimentalBambuSupport(enabled);
if (!enabled) {
const bambuPrinters = (await this.printerCache.listCachedPrinters(false)).filter((p) => p.printerType === 3);
for (const printer of bambuPrinters) await this.printerService.updateEnabled(printer.id, false);
}
res.send(result);
}
async updateFrontendSettings(req, res) {
const validatedInput = await validateInput(req.body, frontendSettingsUpdateSchema);
const result = await this.settingsStore.updateFrontendSettings(validatedInput);
res.send(result);
}
async updateLoginRequiredSettings(req, res) {
const { loginRequired } = await validateInput(req.body, loginRequiredSchema);
const result = await this.settingsStore.setLoginRequired(loginRequired);
res.send(result);
}
async updateRegistrationEnabledSettings(req, res) {
const { registrationEnabled } = await validateInput(req.body, registrationEnabledSchema);
const result = await this.settingsStore.setRegistrationEnabled(registrationEnabled);
res.send(result);
}
async updateCredentialSettings(req, res) {
const validatedInput = await validateInput(req.body, credentialCoreSettingUpdateSchema);
await this.settingsStore.updateCoreCredentialSettings(validatedInput);
res.send();
}
async updateTimeoutSettings(req, res) {
const validatedInput = await validateInput(req.body, timeoutSettingsUpdateSchema);
const result = await this.settingsStore.updateTimeoutSettings(validatedInput);
res.send(result);
}
async getSlicerApiKey(req, res) {
const apiKey = this.settingsStore.getSlicerApiKey();
res.send({ slicerApiKey: apiKey });
}
async regenerateSlicerApiKey(req, res) {
const newApiKey = await this.settingsStore.generateSlicerApiKey();
this.logger.log("Slicer API key regenerated");
res.send({ slicerApiKey: newApiKey });
}
async deleteSlicerApiKey(req, res) {
await this.settingsStore.deleteSlicerApiKey();
this.logger.log("Slicer API key deleted");
res.send({ slicerApiKey: null });
}
};
__decorate([
GET(),
route("/"),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "getSettings", null);
__decorate([
GET(),
route("/sensitive"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "getSettingsSensitive", null);
__decorate([
PATCH(),
route("/sentry-diagnostics"),
before([demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updateSentryDiagnosticsEnabled", null);
__decorate([
PUT(),
route("/experimental-moonraker-support"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updateMoonrakerSupport", null);
__decorate([
PUT(),
route("/experimental-prusa-link-support"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updatePrusaLinkSupport", null);
__decorate([
PUT(),
route("/experimental-bambu-support"),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updateBambuSupport", null);
__decorate([
PUT(),
route("/frontend"),
before([authorizeRoles([ROLES.ADMIN])]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updateFrontendSettings", null);
__decorate([
PUT(),
route("/login-required"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updateLoginRequiredSettings", null);
__decorate([
PUT(),
route("/registration-enabled"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updateRegistrationEnabledSettings", null);
__decorate([
PUT(),
route("/credential"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updateCredentialSettings", null);
__decorate([
PUT(),
route("/timeout"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "updateTimeoutSettings", null);
__decorate([
GET(),
route("/slicer-api-key"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "getSlicerApiKey", null);
__decorate([
POST(),
route("/slicer-api-key/regenerate"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "regenerateSlicerApiKey", null);
__decorate([
DELETE(),
route("/slicer-api-key"),
before([authorizeRoles([ROLES.ADMIN]), demoUserNotAllowed]),
__decorateMetadata("design:type", Function),
__decorateMetadata("design:paramtypes", [Object, Object]),
__decorateMetadata("design:returntype", Promise)
], SettingsController.prototype, "deleteSlicerApiKey", null);
SettingsController = _SettingsController = __decorate([
route(AppConstants.apiRoute + "/settings"),
before([authenticate()]),
__decorateMetadata("design:paramtypes", [
Object,
String,
typeof (_ref = typeof PrinterCache !== "undefined" && PrinterCache) === "function" ? _ref : Object,
Object,
typeof (_ref2 = typeof SettingsStore !== "undefined" && SettingsStore) === "function" ? _ref2 : Object,
typeof (_ref3 = typeof PrinterThumbnailCache !== "undefined" && PrinterThumbnailCache) === "function" ? _ref3 : Object
])
], SettingsController);
//#endregion
export { SettingsController, settings_controller_exports };
//# sourceMappingURL=settings.controller.js.map