@grafana/runtime
Version:
Grafana Runtime Library
212 lines (209 loc) • 7.12 kB
JavaScript
import { merge } from 'lodash';
import { systemDateFormats, getThemeById } from '@grafana/data';
class GrafanaBootConfig {
constructor(options2) {
this.publicDashboardsEnabled = true;
this.snapshotEnabled = true;
this.datasources = {};
this.panels = {};
this.apps = {};
this.auth = {};
this.minRefreshInterval = "";
this.appUrl = "";
this.appSubUrl = "";
this.namespace = "default";
this.windowTitlePrefix = "";
this.newPanelTitle = "";
this.externalUserMngLinkUrl = "";
this.externalUserMngLinkName = "";
this.externalUserMngInfo = "";
this.externalUserMngAnalytics = false;
this.externalUserMngAnalyticsParams = "";
this.allowOrgCreate = false;
this.feedbackLinksEnabled = true;
this.disableLoginForm = false;
this.defaultDatasource = "";
// UID
this.angularSupportEnabled = false;
this.authProxyEnabled = false;
this.exploreEnabled = false;
this.queryHistoryEnabled = false;
this.helpEnabled = false;
this.profileEnabled = false;
this.newsFeedEnabled = true;
this.ldapEnabled = false;
this.jwtHeaderName = "";
this.jwtUrlLogin = false;
this.sigV4AuthEnabled = false;
this.azureAuthEnabled = false;
this.secureSocksDSProxyEnabled = false;
this.samlEnabled = false;
this.samlName = "";
this.autoAssignOrg = true;
this.verifyEmailEnabled = false;
this.oauth = {};
this.rbacEnabled = true;
this.disableUserSignUp = false;
this.loginHint = "";
this.passwordHint = "";
this.loginError = undefined;
this.viewersCanEdit = false;
this.editorsCanAdmin = false;
this.disableSanitizeHtml = false;
this.trustedTypesDefaultPolicyEnabled = false;
this.cspReportOnlyEnabled = false;
this.liveEnabled = true;
this.featureToggles = {};
this.anonymousEnabled = false;
this.anonymousDeviceLimit = undefined;
this.licenseInfo = {};
this.rendererAvailable = false;
this.rendererVersion = "";
this.rendererDefaultImageWidth = 1e3;
this.rendererDefaultImageHeight = 500;
this.rendererDefaultImageScale = 1;
this.secretsManagerPluginEnabled = false;
this.supportBundlesEnabled = false;
this.http2Enabled = false;
this.grafanaJavascriptAgent = {
enabled: false,
customEndpoint: "",
apiKey: "",
allInstrumentationsEnabled: false,
errorInstrumentalizationEnabled: true,
consoleInstrumentalizationEnabled: false,
webVitalsInstrumentalizationEnabled: false,
tracingInstrumentalizationEnabled: false
};
this.pluginCatalogURL = "https://grafana.com/grafana/plugins/";
this.pluginAdminEnabled = true;
this.pluginAdminExternalManageEnabled = false;
this.pluginCatalogHiddenPlugins = [];
this.pluginCatalogManagedPlugins = [];
this.pluginCatalogPreinstalledPlugins = [];
this.pluginsCDNBaseURL = "";
this.expressionsEnabled = false;
this.awsAllowedAuthProviders = [];
this.awsAssumeRoleEnabled = false;
this.azure = {
managedIdentityEnabled: false,
workloadIdentityEnabled: false,
userIdentityEnabled: false,
userIdentityFallbackCredentialsEnabled: false,
azureEntraPasswordCredentialsEnabled: false
};
this.caching = {
enabled: false
};
this.unifiedAlertingEnabled = false;
this.unifiedAlerting = {
minInterval: "",
alertStateHistoryBackend: undefined,
alertStateHistoryPrimary: undefined
};
this.recordedQueries = {
enabled: true
};
this.featureHighlights = {
enabled: false
};
this.reporting = {
enabled: true
};
this.analytics = {
enabled: true
};
this.googleAnalytics4SendManualPageViews = false;
this.analyticsConsoleReporting = false;
this.dashboardPerformanceMetrics = [];
this.sqlConnectionLimits = {
maxOpenConns: 100,
maxIdleConns: 100,
connMaxLifetime: 14400
};
this.defaultDatasourceManageAlertsUiToggle = true;
this.enableFrontendSandboxForPlugins = [];
this.cloudMigrationFeedbackURL = "";
this.cloudMigrationPollIntervalMs = 2e3;
this.exploreDefaultTimeOffset = "1h";
this.bootData = options2.bootData;
const defaults = {
datasources: {},
windowTitlePrefix: "Grafana - ",
panels: {},
newPanelTitle: "Panel Title",
playlist_timespan: "1m",
unsaved_changes_warning: true,
appUrl: "",
appSubUrl: "",
buildInfo: {
version: "1.0",
commit: "1",
env: "production"
},
viewersCanEdit: false,
editorsCanAdmin: false,
disableSanitizeHtml: false
};
merge(this, defaults, options2);
this.buildInfo = options2.buildInfo || defaults.buildInfo;
if (this.dateFormats) {
systemDateFormats.update(this.dateFormats);
}
overrideFeatureTogglesFromUrl(this);
overrideFeatureTogglesFromLocalStorage(this);
if (this.featureToggles.disableAngular) {
this.angularSupportEnabled = false;
}
this.theme2 = getThemeById(this.bootData.user.theme);
this.bootData.user.lightTheme = this.theme2.isLight;
this.theme = this.theme2.v1;
}
}
function overrideFeatureTogglesFromLocalStorage(config2) {
const featureToggles = config2.featureToggles;
const localStorageKey = "grafana.featureToggles";
const localStorageValue = window.localStorage.getItem(localStorageKey);
if (localStorageValue) {
const features = localStorageValue.split(",");
for (const feature of features) {
const [featureName, featureValue] = feature.split("=");
const toggleState = featureValue === "true" || featureValue === "1";
featureToggles[featureName] = toggleState;
console.log(`Setting feature toggle ${featureName} = ${toggleState} via localstorage`);
}
}
}
function overrideFeatureTogglesFromUrl(config2) {
if (window.location.href.indexOf("__feature") === -1) {
return;
}
const isDevelopment = config2.buildInfo.env === "development";
const safeRuntimeFeatureFlags = /* @__PURE__ */ new Set(["queryServiceFromUI", "dashboardSceneSolo"]);
const params = new URLSearchParams(window.location.search);
params.forEach((value, key) => {
if (key.startsWith("__feature.")) {
const featureToggles = config2.featureToggles;
const featureName = key.substring(10);
const toggleState = value === "true" || value === "";
if (toggleState !== featureToggles[key]) {
if (isDevelopment || safeRuntimeFeatureFlags.has(featureName)) {
featureToggles[featureName] = toggleState;
console.log(`Setting feature toggle ${featureName} = ${toggleState} via url`);
} else {
console.log(`Unable to change feature toggle ${featureName} via url in production.`);
}
}
}
});
}
const bootData = window.grafanaBootData || {
settings: {},
user: {},
navTree: []
};
const options = bootData.settings;
options.bootData = bootData;
const config = new GrafanaBootConfig(options);
export { GrafanaBootConfig, config };
//# sourceMappingURL=config.mjs.map