{"version":3,"file":"apps.cjs","sources":["../../../../src/services/pluginMeta/apps.ts"],"sourcesContent":["import { type AppPluginConfig, PluginType } from '@grafana/data';\n\nimport { config } from '../../config';\nimport { getFeatureFlagClient } from '../../internal/openFeature';\nimport { FlagKeys } from '../../internal/openFeature/openfeature.gen';\n\nimport { FALLBACK_TO_BOOTDATA_WARNING } from './constants';\nimport { logPluginMetaDebug, logPluginMetaWarning } from './logging';\nimport { getAppPluginMapper } from './mappers/mappers';\nimport { initPluginMetas } from './plugins';\nimport type { AppPluginMetas, PluginMetasResponse } from './types';\n\nlet apps: AppPluginMetas = {};\n\nfunction initialized(): boolean {\n  return Boolean(Object.keys(apps).length);\n}\n\nfunction setApps(input: AppPluginMetas) {\n  apps = input;\n}\n\nfunction setMetas(metas: PluginMetasResponse) {\n  if (!metas.items.length) {\n    // something failed while trying to fetch plugin meta\n    // fallback to config.panels from bootdata\n    // eslint-disable-next-line @grafana/no-config-apps\n    setApps(config.apps);\n    logPluginMetaWarning(FALLBACK_TO_BOOTDATA_WARNING, { pluginType: PluginType.app });\n    return;\n  }\n\n  const mapper = getAppPluginMapper();\n  setApps(mapper(metas));\n}\n\nasync function initAppPluginMetas(): Promise<void> {\n  if (!getFeatureFlagClient().getBooleanValue(FlagKeys.PluginsUseMTPlugins, false)) {\n    // eslint-disable-next-line @grafana/no-config-apps\n    setApps(config.apps);\n    logPluginMetaDebug('PluginMeta: initializing app plugins cache with bootdata values', {});\n    return;\n  }\n\n  const metas = await initPluginMetas();\n  setMetas(metas);\n  logPluginMetaDebug('PluginMeta: initializing app plugins cache with meta values', {});\n}\n\nexport async function getAppPluginMetas(): Promise<AppPluginConfig[]> {\n  if (!initialized()) {\n    await initAppPluginMetas();\n  }\n\n  return Object.values(structuredClone(apps));\n}\n\nexport async function getAppPluginMeta(pluginId: string): Promise<AppPluginConfig | null> {\n  if (!initialized()) {\n    await initAppPluginMetas();\n  }\n\n  const app = apps[pluginId];\n  return app ? structuredClone(app) : null;\n}\n\n/**\n * Check if an app plugin is installed. The function does not check if the app plugin is enabled.\n * @param pluginId - The id of the app plugin.\n * @returns True if the app plugin is installed, false otherwise.\n */\nexport async function isAppPluginInstalled(pluginId: string): Promise<boolean> {\n  const app = await getAppPluginMeta(pluginId);\n  return Boolean(app);\n}\n\n/**\n * Get the version of an app plugin.\n * @param pluginId - The id of the app plugin.\n * @returns The version of the app plugin, or null if the plugin is not installed.\n */\nexport async function getAppPluginVersion(pluginId: string): Promise<string | null> {\n  const app = await getAppPluginMeta(pluginId);\n  return app?.version ?? null;\n}\n\nexport function setAppPluginMetas(override: AppPluginMetas): void {\n  if (process.env.NODE_ENV !== 'test') {\n    throw new Error('setAppPluginMetas() function can only be called from tests.');\n  }\n\n  setApps(structuredClone(override));\n}\n"],"names":["config","logPluginMetaWarning","FALLBACK_TO_BOOTDATA_WARNING","PluginType","getAppPluginMapper","getFeatureFlagClient","FlagKeys","logPluginMetaDebug","initPluginMetas"],"mappings":";;;;;;;;;;;;;;AAYA,IAAI,OAAuB,EAAC;AAE5B,SAAS,WAAA,GAAuB;AAC9B,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,EAAE,MAAM,CAAA;AACzC;AAEA,SAAS,QAAQ,KAAA,EAAuB;AACtC,EAAA,IAAA,GAAO,KAAA;AACT;AAEA,SAAS,SAAS,KAAA,EAA4B;AAC5C,EAAA,IAAI,CAAC,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ;AAIvB,IAAA,OAAA,CAAQA,cAAO,IAAI,CAAA;AACnB,IAAAC,4BAAA,CAAqBC,sCAAA,EAA8B,EAAE,UAAA,EAAYC,eAAA,CAAW,KAAK,CAAA;AACjF,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,SAASC,0BAAA,EAAmB;AAClC,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAC,CAAA;AACvB;AAEA,eAAe,kBAAA,GAAoC;AACjD,EAAA,IAAI,CAACC,0BAAA,EAAqB,CAAE,gBAAgBC,wBAAA,CAAS,mBAAA,EAAqB,KAAK,CAAA,EAAG;AAEhF,IAAA,OAAA,CAAQN,cAAO,IAAI,CAAA;AACnB,IAAAO,0BAAA,CAAmB,iEAAA,EAAmE,EAAE,CAAA;AACxF,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAMC,uBAAA,EAAgB;AACpC,EAAA,QAAA,CAAS,KAAK,CAAA;AACd,EAAAD,0BAAA,CAAmB,6DAAA,EAA+D,EAAE,CAAA;AACtF;AAEA,eAAsB,iBAAA,GAAgD;AACpE,EAAA,IAAI,CAAC,aAAY,EAAG;AAClB,IAAA,MAAM,kBAAA,EAAmB;AAAA,EAC3B;AAEA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,eAAA,CAAgB,IAAI,CAAC,CAAA;AAC5C;AAEA,eAAsB,iBAAiB,QAAA,EAAmD;AACxF,EAAA,IAAI,CAAC,aAAY,EAAG;AAClB,IAAA,MAAM,kBAAA,EAAmB;AAAA,EAC3B;AAEA,EAAA,MAAM,GAAA,GAAM,KAAK,QAAQ,CAAA;AACzB,EAAA,OAAO,GAAA,GAAM,eAAA,CAAgB,GAAG,CAAA,GAAI,IAAA;AACtC;AAOA,eAAsB,qBAAqB,QAAA,EAAoC;AAC7E,EAAA,MAAM,GAAA,GAAM,MAAM,gBAAA,CAAiB,QAAQ,CAAA;AAC3C,EAAA,OAAO,QAAQ,GAAG,CAAA;AACpB;AAOA,eAAsB,oBAAoB,QAAA,EAA0C;AAjFpF,EAAA,IAAA,EAAA;AAkFE,EAAA,MAAM,GAAA,GAAM,MAAM,gBAAA,CAAiB,QAAQ,CAAA;AAC3C,EAAA,OAAA,CAAO,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,YAAL,IAAA,GAAA,EAAA,GAAgB,IAAA;AACzB;AAEO,SAAS,kBAAkB,QAAA,EAAgC;AAChE,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,MAAA,EAAQ;AACnC,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AAEA,EAAA,OAAA,CAAQ,eAAA,CAAgB,QAAQ,CAAC,CAAA;AACnC;;;;;;;;"}