@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.
233 lines (232 loc) • 12 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "SettingsStore", {
enumerable: true,
get: function() {
return SettingsStore;
}
});
const _runtimeexceptions = require("../exceptions/runtime.exceptions");
const _serversettingsconstants = require("../constants/server-settings.constants");
const _node = require("@sentry/node");
const _envutils = require("../utils/env.utils");
const _serverconstants = require("../server.constants");
class SettingsStore {
settingsService;
isTypeormMode;
logger;
settings;
constructor(loggerFactory, settingsService, isTypeormMode){
this.settingsService = settingsService;
this.isTypeormMode = isTypeormMode;
this.settings = null;
this.logger = loggerFactory(SettingsStore.name);
}
getSettings() {
this.throwIfSettingsUnset();
const settings = this.settings;
return Object.freeze({
[_serversettingsconstants.serverSettingsKey]: {
loginRequired: settings[_serversettingsconstants.serverSettingsKey].loginRequired,
registration: settings[_serversettingsconstants.serverSettingsKey].registration,
sentryDiagnosticsEnabled: settings[_serversettingsconstants.serverSettingsKey].sentryDiagnosticsEnabled,
experimentalMoonrakerSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalMoonrakerSupport,
experimentalPrusaLinkSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalPrusaLinkSupport,
experimentalTypeormSupport: this.isTypeormMode,
experimentalClientSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalClientSupport,
experimentalThumbnailSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalThumbnailSupport
},
[_serversettingsconstants.wizardSettingKey]: settings[_serversettingsconstants.wizardSettingKey],
[_serversettingsconstants.frontendSettingKey]: settings[_serversettingsconstants.frontendSettingKey],
[_serversettingsconstants.printerFileCleanSettingKey]: settings[_serversettingsconstants.printerFileCleanSettingKey],
[_serversettingsconstants.timeoutSettingKey]: settings[_serversettingsconstants.timeoutSettingKey]
});
}
getSettingsSensitive() {
this.throwIfSettingsUnset();
const settings = this.settings;
return Object.freeze({
[_serversettingsconstants.credentialSettingsKey]: {
jwtExpiresIn: settings[_serversettingsconstants.credentialSettingsKey].jwtExpiresIn,
refreshTokenAttempts: settings[_serversettingsconstants.credentialSettingsKey].refreshTokenAttempts,
refreshTokenExpiry: settings[_serversettingsconstants.credentialSettingsKey].refreshTokenExpiry
},
[_serversettingsconstants.serverSettingsKey]: {
experimentalMoonrakerSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalMoonrakerSupport,
experimentalTypeormSupport: this.isTypeormMode,
experimentalClientSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalClientSupport,
experimentalThumbnailSupport: settings[_serversettingsconstants.serverSettingsKey].experimentalThumbnailSupport
}
});
}
async loadSettings() {
this.settings = await this.settingsService.getOrCreate();
await this.processSentryEnabled();
}
async getCredentialSettings() {
this.throwIfSettingsUnset();
return this.settings[_serversettingsconstants.credentialSettingsKey];
}
async getAnonymousDiagnosticsEnabled() {
this.throwIfSettingsUnset();
return this.settings[_serversettingsconstants.serverSettingsKey].sentryDiagnosticsEnabled;
}
async persistOptionalCredentialSettings(overrideJwtSecret, overrideJwtExpiresIn) {
this.throwIfSettingsUnset();
const credentialSettings = await this.getCredentialSettings();
if (overrideJwtSecret?.length) {
await this.settingsService.updateJwtSecretCredentialSetting({
jwtSecret: overrideJwtSecret
});
}
if (overrideJwtExpiresIn?.length) {
await this.updateCredentialSettings({
refreshTokenExpiry: credentialSettings.refreshTokenExpiry,
refreshTokenAttempts: credentialSettings.refreshTokenAttempts,
jwtExpiresIn: parseInt(overrideJwtExpiresIn)
});
}
this.settings[_serversettingsconstants.credentialSettingsKey] = await this.getCredentialSettings();
}
getWizardState() {
this.throwIfSettingsUnset();
const settings = this.settings;
return {
wizardCompleted: settings[_serversettingsconstants.wizardSettingKey].wizardCompleted,
wizardVersion: settings[_serversettingsconstants.wizardSettingKey].wizardVersion,
latestWizardVersion: _serverconstants.AppConstants.currentWizardVersion
};
}
isWizardCompleted() {
this.throwIfSettingsUnset();
const settings = this.settings;
return settings[_serversettingsconstants.wizardSettingKey].wizardCompleted && settings[_serversettingsconstants.wizardSettingKey].wizardVersion === _serverconstants.AppConstants.currentWizardVersion;
}
getWizardSettings() {
this.throwIfSettingsUnset();
return this.settings[_serversettingsconstants.wizardSettingKey];
}
isRegistrationEnabled() {
this.throwIfSettingsUnset();
return this.settings[_serversettingsconstants.serverSettingsKey].registration;
}
isThumbnailSupportEnabled() {
this.throwIfSettingsUnset();
return this.settings[_serversettingsconstants.serverSettingsKey].experimentalThumbnailSupport;
}
getServerSettings() {
return this.getSettings()[_serversettingsconstants.serverSettingsKey];
}
getTimeoutSettings() {
return this.getSettings()[_serversettingsconstants.timeoutSettingKey];
}
getFrontendSettings() {
return this.getSettings()[_serversettingsconstants.frontendSettingKey];
}
getFileCleanSettings() {
return this.getSettings()[_serversettingsconstants.printerFileCleanSettingKey];
}
isPreUploadFileCleanEnabled() {
return this.getSettings()[_serversettingsconstants.printerFileCleanSettingKey]?.autoRemoveOldFilesBeforeUpload;
}
async setWizardCompleted(version) {
this.settings = await this.settingsService.updateWizardSettings({
wizardCompleted: true,
wizardCompletedAt: new Date(),
wizardVersion: version
});
return this.getSettings();
}
async getLoginRequired() {
return this.getServerSettings().loginRequired;
}
async setLoginRequired(loginRequired = true) {
this.throwIfSettingsUnset();
this.settings[_serversettingsconstants.serverSettingsKey].loginRequired = loginRequired;
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
return this.getSettings();
}
async setRegistrationEnabled(registration = true) {
this.throwIfSettingsUnset();
this.settings[_serversettingsconstants.serverSettingsKey].registration = registration;
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
return this.getSettings();
}
async updateServerSettings(serverSettings) {
this.settings = await this.settingsService.updateServerSettings(serverSettings);
return this.getSettings();
}
async updateTimeoutSettings(timeoutSettings) {
this.settings = await this.settingsService.updateTimeoutSettings(timeoutSettings);
return this.getSettings();
}
async updateFileCleanSettings(fileClean) {
this.settings = await this.settingsService.updateFileCleanSettings(fileClean);
return this.getSettings();
}
async updateCredentialSettings(credentialSettings) {
this.settings = await this.settingsService.updateCredentialSettings(credentialSettings);
}
async setRefreshTokenSettings({ refreshTokenAttempts, refreshTokenExpiry }) {
this.throwIfSettingsUnset();
this.settings[_serversettingsconstants.credentialSettingsKey].refreshTokenAttempts = refreshTokenAttempts;
this.settings[_serversettingsconstants.credentialSettingsKey].refreshTokenExpiry = refreshTokenExpiry;
await this.updateCredentialSettings(this.settings[_serversettingsconstants.credentialSettingsKey]);
}
async setSentryDiagnosticsEnabled(sentryDiagnosticsEnabled) {
this.throwIfSettingsUnset();
this.settings[_serversettingsconstants.serverSettingsKey].sentryDiagnosticsEnabled = sentryDiagnosticsEnabled;
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
await this.processSentryEnabled();
return this.getSettings();
}
async setExperimentalMoonrakerSupport(experimentalMoonrakerSupport) {
this.throwIfSettingsUnset();
this.settings[_serversettingsconstants.serverSettingsKey].experimentalMoonrakerSupport = experimentalMoonrakerSupport;
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
return this.getSettings();
}
async setExperimentalThumbnailSupport(experimentalThumbnailSupport) {
this.throwIfSettingsUnset();
this.settings[_serversettingsconstants.serverSettingsKey].experimentalThumbnailSupport = experimentalThumbnailSupport;
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
return this.getSettings();
}
async setExperimentalPrusaLinkSupport(experimentalPrusaLinkSupport) {
this.throwIfSettingsUnset();
this.settings[_serversettingsconstants.serverSettingsKey].experimentalPrusaLinkSupport = experimentalPrusaLinkSupport;
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
return this.getSettings();
}
async setExperimentalClientSupport(experimentalClientSupport) {
this.throwIfSettingsUnset();
this.settings[_serversettingsconstants.serverSettingsKey].experimentalClientSupport = experimentalClientSupport;
this.settings = await this.settingsService.updateServerSettings(this.settings[_serversettingsconstants.serverSettingsKey]);
return this.getSettings();
}
async updateFrontendSettings(frontendSettings) {
this.settings = await this.settingsService.updateFrontendSettings(frontendSettings);
return this.getSettings();
}
throwIfSettingsUnset() {
if (!this.settings) throw new _runtimeexceptions.InternalServerException("Could not check server settings (server settings not loaded)");
}
async processSentryEnabled() {
const sentryEnabled = await this.getAnonymousDiagnosticsEnabled();
if (sentryEnabled) {
this.logger.log("Enabling Sentry for remote diagnostics");
} else {
this.logger.log("Disabling Sentry for remote diagnostics");
}
if ((0, _envutils.isTestEnvironment)()) return;
const client = (0, _node.getClient)();
if (!client) {
this.logger.warn("Could not apply Sentry. Was the SDK initialized?");
return;
}
client.getOptions().enabled = sentryEnabled;
}
}
//# sourceMappingURL=settings.store.js.map