{"version":3,"file":"plugin.mjs","sources":["../../../src/types/plugin.ts"],"sourcesContent":["import { ComponentType } from 'react';\n\nimport { KeyValue } from './data';\nimport { IconName } from './icon';\n\n/** Describes plugins life cycle status */\nexport enum PluginState {\n  alpha = 'alpha', // Only included if `enable_alpha` config option is true\n  beta = 'beta', // Will show a warning banner\n  stable = 'stable', // Will not show anything\n  deprecated = 'deprecated', // Will continue to work -- but not show up in the options to add\n}\n\n/** Describes {@link https://grafana.com/docs/grafana/latest/plugins | type of plugin} */\nexport enum PluginType {\n  panel = 'panel',\n  datasource = 'datasource',\n  app = 'app',\n  renderer = 'renderer',\n}\n\n/** Describes status of {@link https://grafana.com/docs/grafana/latest/plugins/plugin-signatures/ | plugin signature} */\nexport enum PluginSignatureStatus {\n  internal = 'internal', // core plugin, no signature\n  valid = 'valid', // signed and accurate MANIFEST\n  invalid = 'invalid', // invalid signature\n  modified = 'modified', // valid signature, but content mismatch\n  missing = 'missing', // missing signature file\n}\n\n/** Describes level of {@link https://grafana.com/docs/grafana/latest/plugins/plugin-signatures/#plugin-signature-levels/ | plugin signature level} */\nexport enum PluginSignatureType {\n  grafana = 'grafana',\n  commercial = 'commercial',\n  community = 'community',\n  private = 'private',\n  core = 'core',\n}\n\n/** Describes error code returned from Grafana plugins API call */\nexport enum PluginErrorCode {\n  missingSignature = 'signatureMissing',\n  invalidSignature = 'signatureInvalid',\n  modifiedSignature = 'signatureModified',\n  failedBackendStart = 'failedBackendStart',\n  angular = 'angular',\n}\n\n/** Describes error returned from Grafana plugins API call */\nexport interface PluginError {\n  errorCode: PluginErrorCode;\n  pluginId: string;\n  pluginType?: PluginType;\n}\n\n/** @deprecated it will be removed in a future release */\nexport interface AngularMeta {\n  detected: boolean;\n  hideDeprecation: boolean;\n}\n\n// Signals to SystemJS how to load frontend js assets.\nexport enum PluginLoadingStrategy {\n  fetch = 'fetch',\n  script = 'script',\n}\n\nexport interface PluginMeta<T extends KeyValue = {}> {\n  id: string;\n  name: string;\n  type: PluginType;\n  info: PluginMetaInfo;\n  includes?: PluginInclude[];\n  state?: PluginState;\n  aliasIDs?: string[];\n\n  // System.load & relative URLS\n  module: string;\n  baseUrl: string;\n\n  // Define plugin requirements\n  dependencies?: PluginDependencies;\n\n  // Filled in by the backend\n  jsonData?: T;\n  secureJsonData?: KeyValue;\n  secureJsonFields?: KeyValue<boolean>;\n  enabled?: boolean;\n  autoEnabled?: boolean;\n  defaultNavUrl?: string;\n  hasUpdate?: boolean;\n  enterprise?: boolean;\n  latestVersion?: string;\n  pinned?: boolean;\n  signature?: PluginSignatureStatus;\n  signatureType?: PluginSignatureType;\n  signatureOrg?: string;\n  live?: boolean;\n  angular?: AngularMeta;\n  angularDetected?: boolean;\n  loadingStrategy?: PluginLoadingStrategy;\n  extensions?: PluginExtensions;\n  moduleHash?: string;\n\n  // Paths to the translations for the plugin\n  translations?: Record<string, string>;\n}\n\ninterface PluginDependencyInfo {\n  id: string;\n  name: string;\n  version: string;\n  type: PluginType;\n}\n\nexport interface PluginDependencies {\n  grafanaDependency?: string;\n  grafanaVersion: string;\n  plugins: PluginDependencyInfo[];\n  extensions: {\n    // A list of exposed component IDs\n    exposedComponents: string[];\n  };\n}\n\nexport type ExtensionInfo = {\n  targets: string | string[];\n  title: string;\n  description?: string;\n};\n\nexport interface PluginExtensions {\n  // The component extensions that the plugin registers\n  addedComponents: ExtensionInfo[];\n\n  addedFunctions: ExtensionInfo[];\n\n  // The link extensions that the plugin registers\n  addedLinks: ExtensionInfo[];\n\n  // The React components that the plugin exposes\n  exposedComponents: Array<{\n    id: string;\n    title: string;\n    description?: string;\n  }>;\n\n  // The extension points that the plugin provides\n  extensionPoints: Array<{\n    id: string;\n    title: string;\n    description?: string;\n  }>;\n}\n\nexport enum PluginIncludeType {\n  dashboard = 'dashboard',\n  page = 'page',\n\n  // Only valid for apps\n  panel = 'panel',\n  datasource = 'datasource',\n}\n\nexport interface PluginInclude {\n  type: PluginIncludeType;\n  name: string;\n  path?: string;\n  icon?: string;\n\n  // \"Admin\", \"Editor\" or \"Viewer\". If set then the include will only show up in the navigation if the user has the required roles.\n  role?: string;\n\n  // if action is set then the include will only show up in the navigation if the user has the required permission.\n  // The action will take precedence over the role.\n  action?: string;\n\n  // Adds the \"page\" or \"dashboard\" type includes to the navigation if set to `true`.\n  addToNav?: boolean;\n\n  // Angular app pages\n  component?: string;\n}\n\ninterface PluginMetaInfoLink {\n  name: string;\n  url: string;\n  target?: '_blank' | '_self' | '_parent' | '_top';\n}\n\nexport interface PluginBuildInfo {\n  time?: number;\n  repo?: string;\n  branch?: string;\n  hash?: string;\n  number?: number;\n  pr?: number;\n}\n\nexport interface ScreenshotInfo {\n  name: string;\n  path: string;\n}\n\nexport interface PluginMetaInfo {\n  author: {\n    name: string;\n    url?: string;\n  };\n  description: string;\n  links: PluginMetaInfoLink[];\n  logos: {\n    large: string;\n    small: string;\n  };\n  build?: PluginBuildInfo;\n  screenshots: ScreenshotInfo[];\n  updated: string;\n  version: string;\n  keywords?: string[] | null;\n}\n\nexport interface PluginConfigPageProps<T extends PluginMeta> {\n  plugin: GrafanaPlugin<T>;\n  query: KeyValue; // The URL query parameters\n}\n\nexport interface PluginConfigPage<T extends PluginMeta> {\n  title: string; // Display\n  icon?: IconName;\n  id: string; // Unique, in URL\n\n  body: ComponentType<PluginConfigPageProps<T>>;\n}\n\nexport class GrafanaPlugin<T extends PluginMeta = PluginMeta> {\n  // Meta is filled in by the plugin loading system\n  meta: T;\n\n  // This is set if the plugin system had errors loading the plugin\n  loadError?: boolean;\n\n  // Config control (app/datasource)\n  /** @deprecated it will be removed in a future release */\n  angularConfigCtrl?: any;\n\n  // Show configuration tabs on the plugin page\n  configPages?: Array<PluginConfigPage<T>>;\n\n  // Tabs on the plugin page\n  addConfigPage(tab: PluginConfigPage<T>) {\n    if (!this.configPages) {\n      this.configPages = [];\n    }\n    this.configPages.push(tab);\n    return this;\n  }\n\n  /**\n   * @deprecated -- this is no longer necessary and will be removed\n   */\n  setChannelSupport() {\n    console.warn('[deprecation] plugin is using ignored option: setChannelSupport', this.meta);\n    return this;\n  }\n\n  constructor() {\n    this.meta = {} as T;\n  }\n}\n"],"names":["PluginState","PluginType","PluginSignatureStatus","PluginSignatureType","PluginErrorCode","PluginLoadingStrategy","PluginIncludeType"],"mappings":"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"}