@grafana/runtime
Version:
Grafana Runtime Library
1 lines • 18.4 kB
Source Map (JSON)
{"version":3,"file":"config.mjs","sources":["../../src/config.ts"],"sourcesContent":["import { merge } from 'lodash';\n\nimport {\n AppPluginConfig as AppPluginConfigGrafanaData,\n AuthSettings,\n AzureSettings as AzureSettingsGrafanaData,\n BootData,\n BuildInfo,\n DataSourceInstanceSettings,\n FeatureToggles,\n GrafanaTheme,\n GrafanaTheme2,\n LicenseInfo,\n MapLayerOptions,\n OAuthSettings,\n PanelPluginMeta,\n PreinstalledPlugin as PreinstalledPluginGrafanaData,\n systemDateFormats,\n SystemDateFormatSettings,\n getThemeById,\n AngularMeta,\n PluginLoadingStrategy,\n PluginDependencies,\n PluginExtensions,\n TimeOption,\n UnifiedAlertingConfig,\n GrafanaConfig,\n CurrentUserDTO,\n} from '@grafana/data';\n\n/**\n * @deprecated Use the type from `@grafana/data`\n */\n// TODO remove in G13\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\n/**\n * @deprecated Use the type from `@grafana/data`\n */\n// TODO remove in G13\nexport interface AzureCloudInfo {\n name: string;\n displayName: string;\n}\n\n/**\n * @deprecated Use the type from `@grafana/data`\n */\n// TODO remove in G13\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\n/**\n * @deprecated Use the type from `@grafana/data`\n */\n// TODO remove in G13\nexport type PreinstalledPlugin = {\n id: string;\n version: string;\n};\n\n/**\n * Use to access Grafana config settings in application code.\n * This takes `window.grafanaBootData.settings` as input and returns a config object.\n */\nexport class GrafanaBootConfig {\n publicDashboardAccessToken?: string;\n publicDashboardsEnabled = true;\n snapshotEnabled = true;\n datasources: { [str: string]: DataSourceInstanceSettings } = {};\n panels: { [key: string]: PanelPluginMeta } = {};\n apps: Record<string, AppPluginConfigGrafanaData> = {};\n auth: AuthSettings = {};\n minRefreshInterval = '';\n appUrl = '';\n appSubUrl = '';\n namespace = 'default';\n windowTitlePrefix = 'Grafana - ';\n buildInfo: BuildInfo = {\n version: '1.0',\n commit: '1',\n env: 'production',\n } as BuildInfo;\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 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;\n viewersCanEdit = false;\n disableSanitizeHtml = false;\n trustedTypesDefaultPolicyEnabled = false;\n cspReportOnlyEnabled = false;\n liveEnabled = true;\n liveMessageSizeLimit = 65536;\n /** @deprecated Use `theme2` instead. */\n theme: GrafanaTheme;\n theme2: GrafanaTheme2;\n featureToggles: FeatureToggles = {};\n anonymousEnabled = false;\n anonymousDeviceLimit?: number;\n licenseInfo: LicenseInfo = {} as LicenseInfo;\n rendererAvailable = false;\n rendererVersion = '';\n rendererDefaultImageWidth = 1000;\n rendererDefaultImageHeight = 500;\n rendererDefaultImageScale = 1;\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: PreinstalledPluginGrafanaData[] = [];\n pluginsCDNBaseURL = '';\n expressionsEnabled = false;\n awsAllowedAuthProviders: string[] = [];\n awsAssumeRoleEnabled = false;\n azure: AzureSettingsGrafanaData = {\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: UnifiedAlertingConfig = {\n minInterval: '',\n stateHistory: {\n backend: undefined,\n primary: undefined,\n prometheusTargetDatasourceUID: undefined,\n prometheusMetricName: undefined,\n },\n recordingRulesEnabled: false,\n defaultRecordingRulesTargetDatasourceUID: undefined,\n\n // Backward compatibility fields - populated by backend\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?: string;\n googleAnalytics4Id?: string;\n googleAnalytics4SendManualPageViews = false;\n rudderstackWriteKey?: string;\n rudderstackDataPlaneUrl?: string;\n rudderstackSdkUrl?: string;\n rudderstackConfigUrl?: string;\n rudderstackIntegrationsUrl?: string;\n analyticsConsoleReporting = false;\n dashboardPerformanceMetrics: string[] = [];\n panelSeriesLimit = 0;\n sqlConnectionLimits = {\n maxOpenConns: 100,\n maxIdleConns: 100,\n connMaxLifetime: 14400,\n };\n defaultDatasourceManageAlertsUiToggle = true;\n defaultAllowRecordingRulesTargetAlertsUiToggle = true;\n tokenExpirationDayLimit?: number;\n enableFrontendSandboxForPlugins: string[] = [];\n sharedWithMeFolderUID?: string;\n rootFolderUID?: string;\n localFileSystemAvailable?: boolean;\n cloudMigrationIsTarget?: boolean;\n cloudMigrationPollIntervalMs = 2000;\n reportingStaticContext?: Record<string, string>;\n exploreDefaultTimeOffset = '1h';\n exploreHideLogsDownload?: boolean;\n quickRanges?: TimeOption[];\n pluginRestrictedAPIsAllowList?: Record<string, string[]>;\n pluginRestrictedAPIsBlockList?: Record<string, string[]>;\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 /**\n * regionalFormat used in Grafana's UI. Default to 'es-US' in the backend and overwritten when the user select a different one in SharedPreferences.\n * This is the regionalFormat that is used for date formatting and other locale-specific features.\n */\n regionalFormat: string;\n listDashboardScopesEndpoint = '';\n listScopesEndpoint = '';\n\n constructor(\n options: BootData['settings'] & {\n bootData: BootData;\n }\n ) {\n this.bootData = options.bootData;\n\n merge(this, options);\n\n if (this.dateFormats) {\n systemDateFormats.update(this.dateFormats);\n }\n\n overrideFeatureTogglesFromUrl(this);\n overrideFeatureTogglesFromLocalStorage(this);\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 this.regionalFormat = options.bootData.user.regionalFormat;\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\nlet bootData = window.grafanaBootData;\n\nif (!bootData) {\n if (process.env.NODE_ENV !== 'test') {\n console.error('window.grafanaBootData was not set by the time config was initialized');\n }\n\n bootData = {\n assets: {\n dark: '',\n light: '',\n },\n settings: {} as GrafanaConfig,\n user: {} as CurrentUserDTO,\n navTree: [],\n };\n}\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({\n ...bootData.settings,\n // need to separately include bootData here\n // this allows people to access the user object on config.bootData.user and maintains backwards compatibility\n // TODO expose a user object (similar to `GrafanaBootConfig`) and deprecate this recursive bootData\n bootData,\n});\n"],"names":["config"],"mappings":"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"}