{"version":3,"file":"plugins.cjs","sources":["../../../../src/services/pluginMeta/plugins.ts"],"sourcesContent":["import { config } from '../../config';\nimport { getFeatureFlagClient } from '../../internal/openFeature';\nimport { FlagKeys } from '../../internal/openFeature/openfeature.gen';\nimport { getCachedPromise } from '../../utils/getCachedPromise';\n\nimport { logPluginMetaError } from './logging';\nimport type { PluginMetasResponse } from './types';\nimport { type Meta } from './types/meta/meta_object_gen';\nimport { type Plugin } from './types/plugin/plugin_object_gen';\nimport { defaultSpec } from './types/plugin/types.spec.gen';\n\nfunction getApiVersion(): string {\n  return 'v0alpha1';\n}\n\nasync function loadPluginMetas(): Promise<PluginMetasResponse> {\n  if (!getFeatureFlagClient().getBooleanValue(FlagKeys.PluginsUseMTPlugins, false)) {\n    const result = { items: [] };\n    return result;\n  }\n\n  const metas = await fetch(`apis/plugins.grafana.app/${getApiVersion()}/namespaces/${config.namespace}/metas`);\n  if (!metas.ok) {\n    const error = new Error(`Failed to load plugin metas ${metas.status}:${metas.statusText}`);\n    logPluginMetaError('PluginMeta: failed to load plugin metas', error, {\n      status: String(metas.status),\n      statusText: metas.statusText,\n    });\n    throw error;\n  }\n\n  const result = await metas.json();\n  return result;\n}\n\nexport async function installPluginMeta(pluginId: string, version: string): Promise<void> {\n  if (!getFeatureFlagClient().getBooleanValue(FlagKeys.PluginsUseMTPlugins, false)) {\n    return;\n  }\n\n  const spec = { ...defaultSpec(), id: pluginId, version };\n  const metadata = { name: pluginId, namespace: config.namespace };\n  const data: Plugin = {\n    apiVersion: `plugins.grafana.app/${getApiVersion()}`,\n    kind: 'Plugin',\n    metadata,\n    spec,\n    status: {},\n  };\n\n  const result = await fetch(`apis/plugins.grafana.app/${getApiVersion()}/namespaces/${config.namespace}/plugins`, {\n    method: 'POST',\n    body: JSON.stringify(data),\n    headers: { 'content-type': 'application/json' },\n  });\n\n  if (!result.ok) {\n    const error = new Error(`Failed to install plugin ${pluginId} ${result.status}:${result.statusText}`);\n    logPluginMetaError('PluginMeta: failed to install plugin', error, {\n      pluginId,\n      status: String(result.status),\n      statusText: result.statusText,\n    });\n    throw error;\n  }\n}\n\nexport async function uninstallPluginMeta(pluginId: string): Promise<void> {\n  if (!getFeatureFlagClient().getBooleanValue(FlagKeys.PluginsUseMTPlugins, false)) {\n    return;\n  }\n\n  const result = await fetch(\n    `apis/plugins.grafana.app/${getApiVersion()}/namespaces/${config.namespace}/plugins/${pluginId}`,\n    {\n      method: 'DELETE',\n    }\n  );\n\n  if (!result.ok) {\n    const error = new Error(`Failed to uninstall plugin ${pluginId} ${result.status}:${result.statusText}`);\n    logPluginMetaError('PluginMeta: failed to uninstall plugin', error, {\n      pluginId,\n      status: String(result.status),\n      statusText: result.statusText,\n    });\n    throw error;\n  }\n}\n\nexport function initPluginMetas(): Promise<PluginMetasResponse> {\n  return getCachedPromise(loadPluginMetas, { defaultValue: { items: [] } });\n}\n\nexport function refetchPluginMetas(): Promise<PluginMetasResponse> {\n  return getCachedPromise(loadPluginMetas, {\n    defaultValue: { items: [] },\n    invalidate: true,\n  });\n}\n\nexport async function getPluginMetaFromCache(pluginId: string): Promise<Meta | null> {\n  if (!getFeatureFlagClient().getBooleanValue(FlagKeys.PluginsUseMTPlugins, false)) {\n    return null;\n  }\n\n  const metas = await initPluginMetas();\n  const meta = metas.items.find((i) => i.spec.pluginJson.id === pluginId);\n  return meta ? structuredClone(meta) : null;\n}\n\nexport async function refetchPluginMeta(pluginId: string): Promise<Meta | null> {\n  if (!getFeatureFlagClient().getBooleanValue(FlagKeys.PluginsUseMTPlugins, false)) {\n    return null;\n  }\n\n  const metas = await refetchPluginMetas();\n  const meta = metas.items.find((i) => i.spec.pluginJson.id === pluginId);\n  return meta ? structuredClone(meta) : null;\n}\n"],"names":["getFeatureFlagClient","FlagKeys","result","config","logPluginMetaError","defaultSpec","getCachedPromise"],"mappings":"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"}