UNPKG

@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
"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