@grafana/runtime
Version:
Grafana Runtime Library
1 lines • 16.8 kB
Source Map (JSON)
{"version":3,"file":"config.mjs","sources":["../../src/config.ts"],"sourcesContent":["import { merge } from 'lodash';\n\nimport {\n AuthSettings,\n BootData,\n BuildInfo,\n DataSourceInstanceSettings,\n FeatureToggles,\n GrafanaConfig,\n GrafanaTheme,\n GrafanaTheme2,\n LicenseInfo,\n MapLayerOptions,\n OAuthSettings,\n PanelPluginMeta,\n systemDateFormats,\n SystemDateFormatSettings,\n getThemeById,\n AngularMeta,\n PluginLoadingStrategy,\n PluginDependencies,\n PluginExtensions,\n} from '@grafana/data';\n\nexport interface AzureSettings {\n cloud?: string;\n clouds?: AzureCloudInfo[];\n managedIdentityEnabled: boolean;\n workloadIdentityEnabled: boolean;\n userIdentityEnabled: boolean;\n userIdentityFallbackCredentialsEnabled: boolean;\n azureEntraPasswordCredentialsEnabled: boolean;\n}\n\nexport interface AzureCloudInfo {\n name: string;\n displayName: string;\n}\n\nexport type AppPluginConfig = {\n id: string;\n path: string;\n version: string;\n preload: boolean;\n angular: AngularMeta;\n loadingStrategy: PluginLoadingStrategy;\n dependencies: PluginDependencies;\n extensions: PluginExtensions;\n moduleHash?: string;\n};\n\nexport type PreinstalledPlugin = {\n id: string;\n version: string;\n};\n\nexport class GrafanaBootConfig implements GrafanaConfig {\n publicDashboardAccessToken?: string;\n publicDashboardsEnabled = true;\n snapshotEnabled = true;\n datasources: { [str: string]: DataSourceInstanceSettings } = {};\n panels: { [key: string]: PanelPluginMeta } = {};\n apps: Record<string, AppPluginConfig> = {};\n auth: AuthSettings = {};\n minRefreshInterval = '';\n appUrl = '';\n appSubUrl = '';\n namespace = 'default';\n windowTitlePrefix = '';\n buildInfo: BuildInfo;\n newPanelTitle = '';\n bootData: BootData;\n externalUserMngLinkUrl = '';\n externalUserMngLinkName = '';\n externalUserMngInfo = '';\n externalUserMngAnalytics = false;\n externalUserMngAnalyticsParams = '';\n allowOrgCreate = false;\n feedbackLinksEnabled = true;\n disableLoginForm = false;\n defaultDatasource = ''; // UID\n angularSupportEnabled = false;\n authProxyEnabled = false;\n exploreEnabled = false;\n queryHistoryEnabled = false;\n helpEnabled = false;\n profileEnabled = false;\n newsFeedEnabled = true;\n ldapEnabled = false;\n jwtHeaderName = '';\n jwtUrlLogin = false;\n sigV4AuthEnabled = false;\n azureAuthEnabled = false;\n secureSocksDSProxyEnabled = false;\n samlEnabled = false;\n samlName = '';\n autoAssignOrg = true;\n verifyEmailEnabled = false;\n oauth: OAuthSettings = {};\n rbacEnabled = true;\n disableUserSignUp = false;\n loginHint = '';\n passwordHint = '';\n loginError: string | undefined = undefined;\n viewersCanEdit = false;\n editorsCanAdmin = false;\n disableSanitizeHtml = false;\n trustedTypesDefaultPolicyEnabled = false;\n cspReportOnlyEnabled = false;\n liveEnabled = true;\n /** @deprecated Use `theme2` instead. */\n theme: GrafanaTheme;\n theme2: GrafanaTheme2;\n featureToggles: FeatureToggles = {};\n anonymousEnabled = false;\n anonymousDeviceLimit: number | undefined = undefined;\n licenseInfo: LicenseInfo = {} as LicenseInfo;\n rendererAvailable = false;\n rendererVersion = '';\n rendererDefaultImageWidth = 1000;\n rendererDefaultImageHeight = 500;\n rendererDefaultImageScale = 1;\n secretsManagerPluginEnabled = false;\n supportBundlesEnabled = false;\n http2Enabled = false;\n dateFormats?: SystemDateFormatSettings;\n grafanaJavascriptAgent = {\n enabled: false,\n customEndpoint: '',\n apiKey: '',\n allInstrumentationsEnabled: false,\n errorInstrumentalizationEnabled: true,\n consoleInstrumentalizationEnabled: false,\n webVitalsInstrumentalizationEnabled: false,\n tracingInstrumentalizationEnabled: false,\n };\n pluginCatalogURL = 'https://grafana.com/grafana/plugins/';\n pluginAdminEnabled = true;\n pluginAdminExternalManageEnabled = false;\n pluginCatalogHiddenPlugins: string[] = [];\n pluginCatalogManagedPlugins: string[] = [];\n pluginCatalogPreinstalledPlugins: PreinstalledPlugin[] = [];\n pluginsCDNBaseURL = '';\n expressionsEnabled = false;\n awsAllowedAuthProviders: string[] = [];\n awsAssumeRoleEnabled = false;\n azure: AzureSettings = {\n managedIdentityEnabled: false,\n workloadIdentityEnabled: false,\n userIdentityEnabled: false,\n userIdentityFallbackCredentialsEnabled: false,\n azureEntraPasswordCredentialsEnabled: false,\n };\n caching = {\n enabled: false,\n };\n geomapDefaultBaseLayerConfig?: MapLayerOptions;\n geomapDisableCustomBaseLayer?: boolean;\n unifiedAlertingEnabled = false;\n unifiedAlerting = {\n minInterval: '',\n alertStateHistoryBackend: undefined,\n alertStateHistoryPrimary: undefined,\n };\n applicationInsightsConnectionString?: string;\n applicationInsightsEndpointUrl?: string;\n recordedQueries = {\n enabled: true,\n };\n featureHighlights = {\n enabled: false,\n };\n reporting = {\n enabled: true,\n };\n analytics = {\n enabled: true,\n };\n googleAnalyticsId: undefined;\n googleAnalytics4Id: undefined;\n googleAnalytics4SendManualPageViews = false;\n rudderstackWriteKey: undefined;\n rudderstackDataPlaneUrl: undefined;\n rudderstackSdkUrl: undefined;\n rudderstackConfigUrl: undefined;\n rudderstackIntegrationsUrl: undefined;\n analyticsConsoleReporting = false;\n dashboardPerformanceMetrics: string[] = [];\n sqlConnectionLimits = {\n maxOpenConns: 100,\n maxIdleConns: 100,\n connMaxLifetime: 14400,\n };\n defaultDatasourceManageAlertsUiToggle = true;\n\n tokenExpirationDayLimit: undefined;\n enableFrontendSandboxForPlugins: string[] = [];\n sharedWithMeFolderUID: string | undefined;\n rootFolderUID: string | undefined;\n localFileSystemAvailable: boolean | undefined;\n cloudMigrationIsTarget: boolean | undefined;\n cloudMigrationFeedbackURL = '';\n cloudMigrationPollIntervalMs = 2000;\n reportingStaticContext?: Record<string, string>;\n exploreDefaultTimeOffset = '1h';\n exploreHideLogsDownload: boolean | undefined;\n\n /**\n * Language used in Grafana's UI. This is after the user's preference (or deteceted locale) is resolved to one of\n * Grafana's supported language.\n */\n language: string | undefined;\n\n constructor(options: GrafanaBootConfig) {\n this.bootData = options.bootData;\n\n const defaults = {\n datasources: {},\n windowTitlePrefix: 'Grafana - ',\n panels: {},\n newPanelTitle: 'Panel Title',\n playlist_timespan: '1m',\n unsaved_changes_warning: true,\n appUrl: '',\n appSubUrl: '',\n buildInfo: {\n version: '1.0',\n commit: '1',\n env: 'production',\n },\n viewersCanEdit: false,\n editorsCanAdmin: false,\n disableSanitizeHtml: false,\n };\n\n merge(this, defaults, options);\n\n this.buildInfo = options.buildInfo || defaults.buildInfo;\n\n if (this.dateFormats) {\n systemDateFormats.update(this.dateFormats);\n }\n\n overrideFeatureTogglesFromUrl(this);\n overrideFeatureTogglesFromLocalStorage(this);\n\n if (this.featureToggles.disableAngular) {\n this.angularSupportEnabled = false;\n }\n\n // Creating theme after applying feature toggle overrides in case we need to toggle anything\n this.theme2 = getThemeById(this.bootData.user.theme);\n this.bootData.user.lightTheme = this.theme2.isLight;\n this.theme = this.theme2.v1;\n }\n}\n\n// localstorage key: grafana.featureToggles\n// example value: panelEditor=1,panelInspector=1\nfunction overrideFeatureTogglesFromLocalStorage(config: GrafanaBootConfig) {\n const featureToggles = config.featureToggles;\n const localStorageKey = 'grafana.featureToggles';\n const localStorageValue = window.localStorage.getItem(localStorageKey);\n if (localStorageValue) {\n const features = localStorageValue.split(',');\n for (const feature of features) {\n const [featureName, featureValue] = feature.split('=');\n const toggleState = featureValue === 'true' || featureValue === '1';\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n featureToggles[featureName as keyof FeatureToggles] = toggleState;\n console.log(`Setting feature toggle ${featureName} = ${toggleState} via localstorage`);\n }\n }\n}\n\nfunction overrideFeatureTogglesFromUrl(config: GrafanaBootConfig) {\n if (window.location.href.indexOf('__feature') === -1) {\n return;\n }\n\n const isDevelopment = config.buildInfo.env === 'development';\n\n // Although most flags can not be changed from the URL in production,\n // some of them are safe (and useful!) to change dynamically from the browser URL\n const safeRuntimeFeatureFlags = new Set(['queryServiceFromUI', 'dashboardSceneSolo']);\n\n const params = new URLSearchParams(window.location.search);\n params.forEach((value, key) => {\n if (key.startsWith('__feature.')) {\n const featureToggles = config.featureToggles as Record<string, boolean>;\n const featureName = key.substring(10);\n\n const toggleState = value === 'true' || value === ''; // browser rewrites true as ''\n if (toggleState !== featureToggles[key]) {\n if (isDevelopment || safeRuntimeFeatureFlags.has(featureName)) {\n featureToggles[featureName] = toggleState;\n console.log(`Setting feature toggle ${featureName} = ${toggleState} via url`);\n } else {\n console.log(`Unable to change feature toggle ${featureName} via url in production.`);\n }\n }\n }\n });\n}\n\nconst bootData = (window as any).grafanaBootData || {\n settings: {},\n user: {},\n navTree: [],\n};\n\nconst options = bootData.settings;\noptions.bootData = bootData;\n\n/**\n * Use this to access the {@link GrafanaBootConfig} for the current running Grafana instance.\n *\n * @public\n */\nexport const config = new GrafanaBootConfig(options);\n"],"names":["options","config"],"mappings":"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"}