/usr/share/grafana/public/app/plugins/datasource/zipkin/dist
{"version":3,"file":"module.js","mappings":"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","sources":["webpack://zipkin/external amd \"@grafana/ui\"","webpack://zipkin/../../../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://zipkin/external amd \"rxjs/operators\"","webpack://zipkin/external amd \"@emotion/css\"","webpack://zipkin/external amd \"lodash\"","webpack://zipkin/external amd \"rxjs\"","webpack://zipkin/external amd \"module\"","webpack://zipkin/external amd \"@grafana/runtime\"","webpack://zipkin/../../../../../node_modules/react/jsx-runtime.js","webpack://zipkin/external amd \"@grafana/data\"","webpack://zipkin/external amd \"react\"","webpack://zipkin/webpack/bootstrap","webpack://zipkin/webpack/runtime/compat get default export","webpack://zipkin/webpack/runtime/define property getters","webpack://zipkin/webpack/runtime/hasOwnProperty shorthand","webpack://zipkin/webpack/runtime/make namespace object","webpack://zipkin/webpack/runtime/publicPath","webpack://zipkin/./node_modules/grafana-public-path.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js","webpack://zipkin/../../../../../node_modules/react-use/esm/useDebounce.js","webpack://zipkin/../../../../../node_modules/react-use/esm/useTimeoutFn.js","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/TraceToLogs/TagMappingInput.tsx","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/TraceToLogs/TraceToLogsSettings.tsx","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/TraceToMetrics/TraceToMetricsSettings.tsx","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/NodeGraph/NodeGraphSettings.tsx","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/SpanBar/SpanBarSettings.tsx","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/DataSourceDescription.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/styles.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/types.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/Auth.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/Auth/utils.js","webpack://zipkin/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js","webpack://zipkin/./ConfigEditor.tsx","webpack://zipkin/../../../../../node_modules/tslib/tslib.es6.mjs","webpack://zipkin/../../../../../node_modules/react-use/esm/useMountedState.js","webpack://zipkin/../../../../../node_modules/react-use/esm/useAsyncFn.js","webpack://zipkin/../../../../../node_modules/react-use/esm/useEffectOnce.js","webpack://zipkin/../../../../../node_modules/react-use/esm/useMount.js","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/TemporaryAlert.tsx","webpack://zipkin/./QueryField.tsx","webpack://zipkin/../../../../../packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.ts","webpack://zipkin/./utils/graphTransform.ts","webpack://zipkin/./utils/transforms.ts","webpack://zipkin/./datasource.ts","webpack://zipkin/./module.ts"],"sourcesContent":["module.exports = __WEBPACK_EXTERNAL_MODULE__7__;","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__59__;","module.exports = __WEBPACK_EXTERNAL_MODULE__89__;","module.exports = __WEBPACK_EXTERNAL_MODULE__241__;","module.exports = __WEBPACK_EXTERNAL_MODULE__269__;","module.exports = __WEBPACK_EXTERNAL_MODULE__308__;","module.exports = __WEBPACK_EXTERNAL_MODULE__531__;","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__781__;","module.exports = __WEBPACK_EXTERNAL_MODULE__959__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"public/plugins/zipkin/\";","\n import amdMetaModule from 'amd-module';\n\n __webpack_public_path__ =\n amdMetaModule && amdMetaModule.uri\n ? amdMetaModule.uri.slice(0, amdMetaModule.uri.lastIndexOf('/') + 1)\n : 'public/plugins/zipkin/';\n ","import React__default, { useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, IconButton } from '@grafana/ui';\n\nconst GenericConfigSection = ({\n children,\n title,\n description,\n isCollapsible = false,\n isInitiallyOpen = true,\n kind = \"section\",\n className\n}) => {\n const { colors, typography, spacing } = useTheme2();\n const [isOpen, setIsOpen] = useState(isCollapsible ? isInitiallyOpen : true);\n const iconName = isOpen ? \"angle-up\" : \"angle-down\";\n const isSubSection = kind === \"sub-section\";\n const collapsibleButtonAriaLabel = `${isOpen ? \"Collapse\" : \"Expand\"} section ${title}`;\n const styles = {\n header: css({\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n }),\n title: css({\n margin: 0\n }),\n subtitle: css({\n margin: 0,\n fontWeight: typography.fontWeightRegular\n }),\n descriptionText: css({\n marginTop: spacing(isSubSection ? 0.25 : 0.5),\n marginBottom: 0,\n ...typography.bodySmall,\n color: colors.text.secondary\n }),\n content: css({\n marginTop: spacing(2)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.header }, kind === \"section\" ? /* @__PURE__ */ React__default.createElement(\"h3\", { className: styles.title }, title) : /* @__PURE__ */ React__default.createElement(\"h6\", { className: styles.subtitle }, title), isCollapsible && /* @__PURE__ */ React__default.createElement(\n IconButton,\n {\n name: iconName,\n onClick: () => setIsOpen(!isOpen),\n type: \"button\",\n size: \"xl\",\n \"aria-label\": collapsibleButtonAriaLabel\n }\n )), description && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.descriptionText }, description), isOpen && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.content }, children));\n};\n\nexport { GenericConfigSection };\n//# sourceMappingURL=GenericConfigSection.js.map\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"section\" }, children);\n};\n\nexport { ConfigSection };\n//# sourceMappingURL=ConfigSection.js.map\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nfunction ConfigDescriptionLink(props) {\n const { description, suffix, feature } = props;\n const text = `Learn more about ${feature}`;\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"span\", { className: styles.container }, description, /* @__PURE__ */ React__default.createElement(\n \"a\",\n {\n \"aria-label\": text,\n href: `https://grafana.com/docs/grafana/next/datasources/${suffix}`,\n rel: \"noreferrer\",\n target: \"_blank\"\n },\n text\n ));\n}\nconst getStyles = (theme) => {\n return {\n container: css({\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: \"underline\",\n marginLeft: \"5px\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n })\n };\n};\n\nexport { ConfigDescriptionLink };\n//# sourceMappingURL=ConfigDescriptionLink.js.map\n","import { useEffect } from 'react';\nimport useTimeoutFn from './useTimeoutFn';\nexport default function useDebounce(fn, ms, deps) {\n if (ms === void 0) { ms = 0; }\n if (deps === void 0) { deps = []; }\n var _a = useTimeoutFn(fn, ms), isReady = _a[0], cancel = _a[1], reset = _a[2];\n useEffect(reset, deps);\n return [isReady, cancel];\n}\n","import { useCallback, useEffect, useRef } from 'react';\nexport default function useTimeoutFn(fn, ms) {\n if (ms === void 0) { ms = 0; }\n var ready = useRef(false);\n var timeout = useRef();\n var callback = useRef(fn);\n var isReady = useCallback(function () { return ready.current; }, []);\n var set = useCallback(function () {\n ready.current = false;\n timeout.current && clearTimeout(timeout.current);\n timeout.current = setTimeout(function () {\n ready.current = true;\n callback.current();\n }, ms);\n }, [ms]);\n var clear = useCallback(function () {\n ready.current = null;\n timeout.current && clearTimeout(timeout.current);\n }, []);\n // update ref when function changes\n useEffect(function () {\n callback.current = fn;\n }, [fn]);\n // set on mount, clear on unmount\n useEffect(function () {\n set();\n return clear;\n }, [ms]);\n return [isReady, clear, set];\n}\n","export const validateIntervalRegex = /^(-?\\d+(?:\\.\\d+)?)(ms|[Mwdhmsy])$/;\n\nexport const validateInterval = (val: string, regex = validateIntervalRegex) => {\n const matches = val.match(regex);\n return matches || !val ? false : true;\n};\n","import { useState } from 'react';\nimport { useDebounce } from 'react-use';\n\nimport { InlineField, Input } from '@grafana/ui';\n\nimport { validateInterval } from './validation';\n\ninterface Props {\n value: string;\n onChange: (val: string) => void;\n isInvalidError: string;\n placeholder?: string;\n width?: number;\n ariaLabel?: string;\n label?: string;\n tooltip?: string;\n disabled?: boolean;\n validationRegex?: RegExp;\n}\n\ninterface FieldProps {\n labelWidth: number;\n disabled: boolean;\n invalid: boolean;\n error: string;\n label?: string;\n tooltip?: string;\n}\n\nexport const IntervalInput = (props: Props) => {\n const [intervalIsInvalid, setIntervalIsInvalid] = useState(() => {\n return props.value ? validateInterval(props.value, props.validationRegex) : false;\n });\n\n useDebounce(\n () => {\n setIntervalIsInvalid(validateInterval(props.value, props.validationRegex));\n },\n 500,\n [props.value]\n );\n\n const fieldProps: FieldProps = {\n labelWidth: 26,\n disabled: props.disabled ?? false,\n invalid: intervalIsInvalid,\n error: props.isInvalidError,\n };\n if (props.label) {\n fieldProps.label = props.label;\n fieldProps.tooltip = props.tooltip || '';\n }\n\n return (\n <InlineField {...fieldProps}>\n <Input\n type=\"text\"\n placeholder={props.placeholder || '0'}\n width={props.width || 40}\n onChange={(e) => {\n props.onChange(e.currentTarget.value);\n }}\n value={props.value}\n aria-label={props.ariaLabel || 'interval input'}\n />\n </InlineField>\n );\n};\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { InlineLabel, SegmentInput, ToolbarButton, useStyles2 } from '@grafana/ui';\n\nimport { TraceToLogsTag } from './TraceToLogsSettings';\n\ninterface Props {\n values: TraceToLogsTag[];\n onChange: (values: TraceToLogsTag[]) => void;\n id?: string;\n}\n\nexport const TagMappingInput = ({ values, onChange, id }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n {values.length ? (\n values.map((value, idx) => (\n <div className={styles.pair} key={idx}>\n <SegmentInput\n id={`${id}-key-${idx}`}\n placeholder={'Tag name'}\n value={value.key}\n onChange={(e) => {\n onChange(\n values.map((v, i) => {\n if (i === idx) {\n return { ...v, key: String(e) };\n }\n return v;\n })\n );\n }}\n />\n <InlineLabel aria-label=\"equals\" className={styles.operator}>\n as\n </InlineLabel>\n <SegmentInput\n id={`${id}-value-${idx}`}\n placeholder={'New name (optional)'}\n value={value.value || ''}\n onChange={(e) => {\n onChange(\n values.map((v, i) => {\n if (i === idx) {\n return { ...v, value: String(e) };\n }\n return v;\n })\n );\n }}\n />\n <ToolbarButton\n onClick={() => onChange([...values.slice(0, idx), ...values.slice(idx + 1)])}\n className={cx(styles.removeTag, 'query-part')}\n aria-label=\"Remove tag\"\n type=\"button\"\n icon=\"times\"\n />\n\n {idx === values.length - 1 ? (\n <ToolbarButton\n onClick={() => onChange([...values, { key: '', value: '' }])}\n className=\"query-part\"\n aria-label=\"Add tag\"\n type=\"button\"\n icon=\"plus\"\n />\n ) : null}\n </div>\n ))\n ) : (\n <ToolbarButton\n icon=\"plus\"\n onClick={() => onChange([...values, { key: '', value: '' }])}\n className=\"query-part\"\n aria-label=\"Add tag\"\n type=\"button\"\n />\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.spacing(0.5)} 0`,\n }),\n pair: css({\n display: 'flex',\n justifyContent: 'start',\n alignItems: 'center',\n }),\n operator: css({\n color: theme.v1.palette.orange,\n width: 'auto',\n }),\n removeTag: css({\n marginRight: theme.spacing(0.5),\n }),\n});\n","import { css } from '@emotion/css';\nimport { useCallback, useMemo } from 'react';\nimport * as React from 'react';\n\nimport { DataSourceJsonData, DataSourceInstanceSettings, DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSection } from '@grafana/plugin-ui';\nimport { DataSourcePicker } from '@grafana/runtime';\nimport { InlineField, InlineFieldRow, Input, InlineSwitch } from '@grafana/ui';\n\nimport { IntervalInput } from '../IntervalInput/IntervalInput';\n\nimport { TagMappingInput } from './TagMappingInput';\n\nexport interface TraceToLogsTag {\n key: string;\n value?: string;\n}\n\n// @deprecated use getTraceToLogsOptions to get the v2 version of this config from jsonData\nexport interface TraceToLogsOptions {\n datasourceUid?: string;\n tags?: string[];\n mappedTags?: TraceToLogsTag[];\n mapTagNamesEnabled?: boolean;\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n filterByTraceID?: boolean;\n filterBySpanID?: boolean;\n lokiSearch?: boolean; // legacy\n}\n\nexport interface TraceToLogsOptionsV2 {\n datasourceUid?: string;\n tags?: TraceToLogsTag[];\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n filterByTraceID?: boolean;\n filterBySpanID?: boolean;\n query?: string;\n customQuery: boolean;\n}\n\nexport interface TraceToLogsData extends DataSourceJsonData {\n tracesToLogs?: TraceToLogsOptions;\n tracesToLogsV2?: TraceToLogsOptionsV2;\n}\n\n/**\n * Gets new version of the traceToLogs config from the json data either returning directly or transforming the old\n * version to new and returning that.\n */\nexport function getTraceToLogsOptions(data?: TraceToLogsData): TraceToLogsOptionsV2 | undefined {\n if (data?.tracesToLogsV2) {\n return data.tracesToLogsV2;\n }\n if (!data?.tracesToLogs) {\n return undefined;\n }\n const traceToLogs: TraceToLogsOptionsV2 = {\n customQuery: false,\n };\n traceToLogs.datasourceUid = data.tracesToLogs.datasourceUid;\n traceToLogs.tags = data.tracesToLogs.mapTagNamesEnabled\n ? data.tracesToLogs.mappedTags\n : data.tracesToLogs.tags?.map((tag) => ({ key: tag }));\n traceToLogs.filterByTraceID = data.tracesToLogs.filterByTraceID;\n traceToLogs.filterBySpanID = data.tracesToLogs.filterBySpanID;\n traceToLogs.spanStartTimeShift = data.tracesToLogs.spanStartTimeShift;\n traceToLogs.spanEndTimeShift = data.tracesToLogs.spanEndTimeShift;\n return traceToLogs;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps<TraceToLogsData> {}\n\nexport function TraceToLogsSettings({ options, onOptionsChange }: Props) {\n const supportedDataSourceTypes = [\n 'loki',\n 'elasticsearch',\n 'grafana-splunk-datasource', // external\n 'grafana-opensearch-datasource', // external\n 'grafana-falconlogscale-datasource', // external\n 'googlecloud-logging-datasource', // external\n 'victoriametrics-logs-datasource', // external\n ];\n\n const traceToLogs = useMemo(\n (): TraceToLogsOptionsV2 => getTraceToLogsOptions(options.jsonData) || { customQuery: false },\n [options.jsonData]\n );\n const { query = '', tags, customQuery } = traceToLogs;\n\n const updateTracesToLogs = useCallback(\n (value: Partial<TraceToLogsOptionsV2>) => {\n // Cannot use updateDatasourcePluginJsonDataOption here as we need to update 2 keys, and they would overwrite each\n // other as updateDatasourcePluginJsonDataOption isn't synchronized\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n tracesToLogsV2: {\n ...traceToLogs,\n ...value,\n },\n tracesToLogs: undefined,\n },\n });\n },\n [onOptionsChange, options, traceToLogs]\n );\n\n return (\n <div className={css({ width: '100%' })}>\n <InlineFieldRow>\n <InlineField\n tooltip=\"The logs data source the trace is going to navigate to\"\n label=\"Data source\"\n labelWidth={26}\n >\n <DataSourcePicker\n inputId=\"trace-to-logs-data-source-picker\"\n filter={(ds) => supportedDataSourceTypes.includes(ds.type)}\n current={traceToLogs.datasourceUid}\n noDefault={true}\n width={40}\n onChange={(ds: DataSourceInstanceSettings) =>\n updateTracesToLogs({\n datasourceUid: ds.uid,\n })\n }\n onClear={() => updateTracesToLogs({ datasourceUid: undefined })}\n />\n </InlineField>\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('start')}\n tooltip={getTimeShiftTooltip('start', '0')}\n value={traceToLogs.spanStartTimeShift || ''}\n onChange={(val) => {\n updateTracesToLogs({ spanStartTimeShift: val });\n }}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('end')}\n tooltip={getTimeShiftTooltip('end', '0')}\n value={traceToLogs.spanEndTimeShift || ''}\n onChange={(val) => {\n updateTracesToLogs({ spanEndTimeShift: val });\n }}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <InlineField\n tooltip=\"Tags that will be used in the query. Default tags: 'cluster', 'hostname', 'namespace', 'pod', 'service.name', 'service.namespace'\"\n label=\"Tags\"\n labelWidth={26}\n >\n <TagMappingInput values={tags ?? []} onChange={(v) => updateTracesToLogs({ tags: v })} />\n </InlineField>\n </InlineFieldRow>\n\n <IdFilter\n disabled={customQuery}\n type={'trace'}\n id={'filterByTraceID'}\n value={Boolean(traceToLogs.filterByTraceID)}\n onChange={(val) => updateTracesToLogs({ filterByTraceID: val })}\n />\n <IdFilter\n disabled={customQuery}\n type={'span'}\n id={'filterBySpanID'}\n value={Boolean(traceToLogs.filterBySpanID)}\n onChange={(val) => updateTracesToLogs({ filterBySpanID: val })}\n />\n\n <InlineFieldRow>\n <InlineField\n tooltip=\"Use a custom query with the possibility to interpolate variables from the trace or span\"\n label=\"Use custom query\"\n labelWidth={26}\n >\n <InlineSwitch\n id={'customQuerySwitch'}\n value={customQuery}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) =>\n updateTracesToLogs({ customQuery: event.currentTarget.checked })\n }\n />\n </InlineField>\n </InlineFieldRow>\n\n {customQuery && (\n <InlineField\n label=\"Query\"\n labelWidth={26}\n tooltip=\"The query that will run when navigating from a trace to logs data source. Interpolate tags using the `$__tags` keyword\"\n grow\n >\n <Input\n label=\"Query\"\n type=\"text\"\n allowFullScreen\n value={query}\n onChange={(e) => updateTracesToLogs({ query: e.currentTarget.value })}\n />\n </InlineField>\n )}\n </div>\n );\n}\n\ninterface IdFilterProps {\n type: 'trace' | 'span';\n id: string;\n value: boolean;\n onChange: (val: boolean) => void;\n disabled: boolean;\n}\nfunction IdFilter(props: IdFilterProps) {\n return (\n <InlineFieldRow>\n <InlineField\n disabled={props.disabled}\n label={`Filter by ${props.type} ID`}\n labelWidth={26}\n grow\n tooltip={`Filters logs by ${props.type} ID, where the ${props.type} ID should be part of the log line`}\n >\n <InlineSwitch\n id={props.id}\n value={props.value}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) => props.onChange(event.currentTarget.checked)}\n />\n </InlineField>\n </InlineFieldRow>\n );\n}\n\nexport const getTimeShiftLabel = (type: 'start' | 'end') => {\n return `Span ${type} time shift`;\n};\n\nexport const getTimeShiftTooltip = (type: 'start' | 'end', defaultVal: string) => {\n return `Shifts the ${type} time of the span. Default: ${defaultVal} (Time units can be used here, for example: 5s, -1m, 3h)`;\n};\n\nexport const invalidTimeShiftError = 'Invalid time shift. See tooltip for examples.';\n\nexport const TraceToLogsSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#trace-to-logs' : '/#trace-to-logs';\n\n return (\n <ConfigSection\n title=\"Trace to logs\"\n description={\n <ConfigDescriptionLink\n description=\"Navigate from a trace span to the selected data source's logs.\"\n suffix={suffix}\n feature=\"trace to logs\"\n />\n }\n isCollapsible={true}\n isInitiallyOpen={true}\n >\n <TraceToLogsSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSection>\n );\n};\n","import { css } from '@emotion/css';\n\nimport {\n DataSourceInstanceSettings,\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSection } from '@grafana/plugin-ui';\nimport { DataSourcePicker } from '@grafana/runtime';\nimport { Button, InlineField, InlineFieldRow, Input, useStyles2 } from '@grafana/ui';\n\nimport { IntervalInput } from '../IntervalInput/IntervalInput';\nimport { TagMappingInput } from '../TraceToLogs/TagMappingInput';\nimport { getTimeShiftLabel, getTimeShiftTooltip, invalidTimeShiftError } from '../TraceToLogs/TraceToLogsSettings';\n\nexport interface TraceToMetricsOptions {\n datasourceUid?: string;\n tags?: Array<{ key: string; value: string }>;\n queries: TraceToMetricQuery[];\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n}\n\nexport interface TraceToMetricQuery {\n name?: string;\n query?: string;\n}\n\nexport interface TraceToMetricsData extends DataSourceJsonData {\n tracesToMetrics?: TraceToMetricsOptions;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps<TraceToMetricsData> {}\n\nexport function TraceToMetricsSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={css({ width: '100%' })}>\n <InlineFieldRow className={styles.row}>\n <InlineField\n tooltip=\"The Prometheus data source the trace is going to navigate to\"\n label=\"Data source\"\n labelWidth={26}\n >\n <DataSourcePicker\n inputId=\"trace-to-metrics-data-source-picker\"\n pluginId=\"prometheus\"\n current={options.jsonData.tracesToMetrics?.datasourceUid}\n noDefault={true}\n width={40}\n onChange={(ds: DataSourceInstanceSettings) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n datasourceUid: ds.uid,\n })\n }\n onClear={() =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n datasourceUid: undefined,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('start')}\n tooltip={getTimeShiftTooltip('start', '-2m')}\n value={options.jsonData.tracesToMetrics?.spanStartTimeShift || ''}\n onChange={(val) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n spanStartTimeShift: val,\n });\n }}\n placeholder={'-2m'}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('end')}\n tooltip={getTimeShiftTooltip('end', '2m')}\n value={options.jsonData.tracesToMetrics?.spanEndTimeShift || ''}\n onChange={(val) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n spanEndTimeShift: val,\n });\n }}\n placeholder={'2m'}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <InlineField tooltip=\"Tags that will be used in the metrics query\" label=\"Tags\" labelWidth={26}>\n <TagMappingInput\n values={options.jsonData.tracesToMetrics?.tags ?? []}\n onChange={(v) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n tags: v,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n\n {options.jsonData.tracesToMetrics?.queries?.map((query, i) => (\n <div key={i} className={styles.queryRow}>\n <InlineField label=\"Link Label\" labelWidth={26} tooltip=\"Descriptive label for the linked query\">\n <Input\n label=\"Link Label\"\n type=\"text\"\n allowFullScreen\n value={query.name}\n width={40}\n onChange={(e) => {\n const newQueries = (options.jsonData.tracesToMetrics?.queries ?? []).map(\n (traceToMetricQuery, index) => {\n return index === i ? { ...traceToMetricQuery, name: e.currentTarget.value } : traceToMetricQuery;\n }\n );\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: newQueries,\n });\n }}\n />\n </InlineField>\n <InlineField\n label=\"Query\"\n labelWidth={10}\n tooltip=\"The Prometheus query that will run when navigating from a trace to metrics. Interpolate tags using the `$__tags` keyword\"\n grow\n >\n <Input\n label=\"Query\"\n type=\"text\"\n allowFullScreen\n value={query.query}\n onChange={(e) => {\n const updatedQueries = (options.jsonData.tracesToMetrics?.queries ?? []).map(\n (traceToMetricQuery, index) => {\n return index === i ? { ...traceToMetricQuery, query: e.currentTarget.value } : traceToMetricQuery;\n }\n );\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: updatedQueries,\n });\n }}\n />\n </InlineField>\n\n <Button\n variant=\"destructive\"\n aria-label=\"Remove query\"\n icon=\"times\"\n type=\"button\"\n onClick={() => {\n const newQueries = options.jsonData.tracesToMetrics?.queries.filter((_, index) => index !== i);\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: newQueries,\n });\n }}\n />\n </div>\n ))}\n\n <Button\n variant=\"secondary\"\n title=\"Add query\"\n icon=\"plus\"\n type=\"button\"\n onClick={() => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: [...(options.jsonData.tracesToMetrics?.queries ?? []), { query: '' }],\n });\n }}\n >\n Add query\n </Button>\n </div>\n );\n}\n\nexport const TraceToMetricsSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#trace-to-metrics' : '/#trace-to-metrics';\n\n return (\n <ConfigSection\n title=\"Trace to metrics\"\n description={\n <ConfigDescriptionLink\n description=\"Navigate from a trace span to the selected data source's metrics.\"\n suffix={suffix}\n feature=\"trace to metrics\"\n />\n }\n isCollapsible={true}\n isInitiallyOpen={true}\n >\n <TraceToMetricsSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSection>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: {\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n },\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n queryRow: css({\n label: 'queryRow',\n display: 'flex',\n flexFlow: 'wrap',\n }),\n});\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSubSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"sub-section\" }, children);\n};\n\nexport { ConfigSubSection };\n//# sourceMappingURL=ConfigSubSection.js.map\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSubSection } from '@grafana/plugin-ui';\nimport { InlineField, InlineFieldRow, InlineSwitch, useStyles2 } from '@grafana/ui';\n\nexport interface NodeGraphOptions {\n enabled?: boolean;\n}\n\nexport interface NodeGraphData extends DataSourceJsonData {\n nodeGraph?: NodeGraphOptions;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps<NodeGraphData> {}\n\nexport function NodeGraphSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n <InlineFieldRow className={styles.row}>\n <InlineField\n tooltip=\"Displays the node graph above the trace view. Default: disabled\"\n label=\"Enable node graph\"\n labelWidth={26}\n >\n <InlineSwitch\n id=\"enableNodeGraph\"\n value={options.jsonData.nodeGraph?.enabled}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'nodeGraph', {\n ...options.jsonData.nodeGraph,\n enabled: event.currentTarget.checked,\n })\n }\n />\n </InlineField>\n </InlineFieldRow>\n </div>\n );\n}\n\nexport const NodeGraphSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#node-graph' : '/#node-graph';\n\n return (\n <ConfigSubSection\n title=\"Node graph\"\n description={\n <ConfigDescriptionLink\n description=\"Show or hide the node graph visualization.\"\n suffix={suffix}\n feature=\"the node graph\"\n />\n }\n >\n <NodeGraphSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSubSection>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: css({\n label: 'infoText',\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n }),\n container: css({\n label: 'container',\n width: '100%',\n }),\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n});\n","import { css } from '@emotion/css';\n\nimport {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n toOption,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSubSection } from '@grafana/plugin-ui';\nimport { InlineField, InlineFieldRow, Input, Select, useStyles2 } from '@grafana/ui';\n\nexport interface SpanBarOptions {\n type?: string;\n tag?: string;\n}\n\nexport interface SpanBarOptionsData extends DataSourceJsonData {\n spanBar?: SpanBarOptions;\n}\n\nexport const NONE = 'None';\nexport const DURATION = 'Duration';\nexport const TAG = 'Tag';\n\ninterface Props extends DataSourcePluginOptionsEditorProps<SpanBarOptionsData> {}\n\nexport default function SpanBarSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n const selectOptions = [NONE, DURATION, TAG].map(toOption);\n\n return (\n <div className={css({ width: '100%' })}>\n <InlineFieldRow className={styles.row}>\n <InlineField label=\"Label\" labelWidth={26} tooltip=\"Default: duration\" grow>\n <Select\n inputId=\"label\"\n options={selectOptions}\n value={options.jsonData.spanBar?.type || ''}\n onChange={(v) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'spanBar', {\n ...options.jsonData.spanBar,\n type: v?.value ?? '',\n });\n }}\n placeholder=\"Duration\"\n isClearable\n aria-label={'select-label-name'}\n width={40}\n />\n </InlineField>\n </InlineFieldRow>\n {options.jsonData.spanBar?.type === TAG && (\n <InlineFieldRow className={styles.row}>\n <InlineField\n label=\"Tag key\"\n labelWidth={26}\n tooltip=\"Tag key which will be used to get the tag value. A span's attributes and resources will be searched for the tag key\"\n >\n <Input\n type=\"text\"\n placeholder=\"Enter tag key\"\n onChange={(v) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'spanBar', {\n ...options.jsonData.spanBar,\n tag: v.currentTarget.value,\n })\n }\n value={options.jsonData.spanBar?.tag || ''}\n width={40}\n />\n </InlineField>\n </InlineFieldRow>\n )}\n </div>\n );\n}\n\nexport const SpanBarSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#span-bar' : '/#span-bar';\n\n return (\n <ConfigSubSection\n title=\"Span bar\"\n description={\n <ConfigDescriptionLink\n description=\"Add additional info next to the service and operation on a span bar row in the trace view.\"\n suffix={suffix}\n feature=\"the span bar\"\n />\n }\n >\n <SpanBarSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSubSection>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: css({\n label: 'infoText',\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n }),\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n});\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\n\nconst DataSourceDescription = ({ dataSourceName, docsLink, hasRequiredFields = true, className }) => {\n const theme = useTheme2();\n const styles = {\n container: css({\n p: {\n margin: 0\n },\n \"p + p\": {\n marginTop: theme.spacing(2)\n }\n }),\n text: css({\n ...theme.typography.body,\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: \"underline\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.text }, \"Before you can use the \", dataSourceName, \" data source, you must configure it below or in the config file. For detailed instructions,\", \" \", /* @__PURE__ */ React__default.createElement(\"a\", { href: docsLink, target: \"_blank\", rel: \"noreferrer\" }, \"view the documentation\"), \".\"), hasRequiredFields && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.text }, /* @__PURE__ */ React__default.createElement(\"i\", null, \"Fields marked with * are required\")));\n};\n\nexport { DataSourceDescription };\n//# sourceMappingURL=DataSourceDescription.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input } from '@grafana/ui';\nimport { ConfigSection } from '../ConfigSection/ConfigSection.js';\nimport '@grafana/data';\n\nconst ConnectionSettings = ({\n config,\n onChange,\n description,\n urlPlaceholder,\n urlTooltip,\n urlLabel,\n className\n}) => {\n const isValidUrl = config.url !== undefined && /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(config.url);\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(ConfigSection, { title: \"Connection\", description, className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"connection-url\",\n label: urlLabel || \"URL\",\n labelWidth: 24,\n tooltip: urlTooltip || /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, \"Specify a complete HTTP URL\", /* @__PURE__ */ React__default.createElement(\"br\", null), \"(for example https://example.com:8080)\"),\n grow: true,\n disabled: config.readOnly,\n required: true,\n invalid: !isValidUrl && !config.readOnly,\n error: isValidUrl ? \"\" : \"Please enter a valid URL\",\n interactive: true\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"connection-url\",\n \"aria-label\": \"Data source connection URL\",\n onChange: (event) => onChange({\n ...config,\n url: event.currentTarget.value\n }),\n value: config.url || \"\",\n placeholder: urlPlaceholder || \"URL\"\n }\n )\n )));\n};\n\nexport { ConnectionSettings };\n//# sourceMappingURL=ConnectionSettings.js.map\n","import { css } from '@emotion/css';\n\nconst useCommonStyles = () => {\n return {\n inlineFieldNoMarginRight: css({\n marginRight: 0\n }),\n // This is dirty hack to make configured secret input grow\n inlineFieldWithSecret: css({\n '[class$=\"layoutChildrenWrapper\"]:first-child': {\n flexGrow: 1\n }\n })\n };\n};\n\nexport { useCommonStyles };\n//# sourceMappingURL=styles.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, SecretInput } from '@grafana/ui';\nimport { useCommonStyles } from '../styles.js';\n\nconst BasicAuth = ({\n user,\n passwordConfigured,\n userLabel = \"User\",\n userTooltip = \"The username of the data source account\",\n userPlaceholder = \"User\",\n passwordLabel = \"Password\",\n passwordTooltip = \"The password of the data source account\",\n passwordPlaceholder = \"Password\",\n onUserChange,\n onPasswordChange,\n onPasswordReset,\n readOnly\n}) => {\n const commonStyles = useCommonStyles();\n const styles = {\n lastInlineField: css({\n marginBottom: 0\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n className: commonStyles.inlineFieldNoMarginRight,\n label: userLabel,\n labelWidth: 24,\n tooltip: userTooltip,\n required: true,\n htmlFor: \"basic-auth-user-input\",\n interactive: true,\n grow: true,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"basic-auth-user-input\",\n placeholder: userPlaceholder,\n value: user,\n onChange: (e) => onUserChange(e.currentTarget.value),\n required: true\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n className: cx(\n commonStyles.inlineFieldNoMarginRight,\n commonStyles.inlineFieldWithSecret,\n styles.lastInlineField\n ),\n label: passwordLabel,\n labelWidth: 24,\n tooltip: passwordTooltip,\n required: true,\n htmlFor: \"basic-auth-password-input\",\n interactive: true,\n grow: true,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretInput,\n {\n id: \"basic-auth-password-input\",\n isConfigured: passwordConfigured,\n onReset: readOnly ? () => {\n } : onPasswordReset,\n placeholder: passwordPlaceholder,\n onChange: (e) => onPasswordChange(e.currentTarget.value),\n required: true\n }\n )\n ));\n};\n\nexport { BasicAuth };\n//# sourceMappingURL=BasicAuth.js.map\n","import 'react';\n\nvar AuthMethod = /* @__PURE__ */ ((AuthMethod2) => {\n AuthMethod2[\"NoAuth\"] = \"NoAuth\";\n AuthMethod2[\"BasicAuth\"] = \"BasicAuth\";\n AuthMethod2[\"OAuthForward\"] = \"OAuthForward\";\n AuthMethod2[\"CrossSiteCredentials\"] = \"CrossSiteCredentials\";\n return AuthMethod2;\n})(AuthMethod || {});\n\nexport { AuthMethod };\n//# sourceMappingURL=types.js.map\n","import React__default, { useState, useMemo } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Field, Select } from '@grafana/ui';\nimport '@grafana/data';\nimport { BasicAuth } from './BasicAuth.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport { AuthMethod } from '../types.js';\n\nconst defaultOptions = {\n [AuthMethod.BasicAuth]: {\n label: \"Basic authentication\",\n value: AuthMethod.BasicAuth,\n description: \"Authenticate with your data source username and password\"\n },\n [AuthMethod.CrossSiteCredentials]: {\n label: \"Enable cross-site access control requests\",\n value: AuthMethod.CrossSiteCredentials,\n description: \"Allow cross-site Access-Control requests with your existing credentials and cookies. This enables the server to authenticate the user and perform authorized requests on their behalf on other domains.\"\n },\n [AuthMethod.OAuthForward]: {\n label: \"Forward OAuth Identity\",\n value: AuthMethod.OAuthForward,\n description: \"Forward the OAuth access token (and if available: the OIDC ID token) of the user querying to the data source\"\n },\n [AuthMethod.NoAuth]: {\n label: \"No Authentication\",\n value: AuthMethod.NoAuth,\n description: \"Data source is available without authentication\"\n }\n};\nconst AuthMethodSettings = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods: visibleMethodsFromProps,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n readOnly\n}) => {\n var _a, _b, _c, _d;\n const [authMethodChanged, setAuthMethodChanged] = useState(false);\n const { colors, spacing } = useTheme2();\n const visibleMethods = useMemo(\n () => {\n var _a2;\n return visibleMethodsFromProps != null ? visibleMethodsFromProps : [\n AuthMethod.BasicAuth,\n AuthMethod.OAuthForward,\n AuthMethod.NoAuth,\n ...(_a2 = customMethods == null ? undefined : customMethods.map((m) => m.id)) != null ? _a2 : []\n ];\n },\n [customMethods, visibleMethodsFromProps]\n );\n const hasSelect = visibleMethods.length > 1;\n const preparedOptions = useMemo(() => {\n var _a2;\n const customOptions = (_a2 = customMethods == null ? undefined : customMethods.reduce((acc, method) => {\n acc[method.id] = {\n label: method.label,\n value: method.id,\n description: method.description\n };\n return acc;\n }, {})) != null ? _a2 : {};\n const preparedDefaultOptions = {};\n let k;\n for (k in defaultOptions) {\n preparedDefaultOptions[k] = {\n ...defaultOptions[k],\n ...defaultOptionsOverrides == null ? undefined : defaultOptionsOverrides[k]\n };\n }\n const allOptions = {\n ...customOptions,\n ...preparedDefaultOptions\n };\n return visibleMethods.filter((method) => Boolean(allOptions[method])).map((method) => {\n const option = allOptions[method];\n if (method === mostCommonMethod && hasSelect) {\n return {\n ...option,\n label: `${option.label} (most common)`\n };\n }\n return option;\n });\n }, [visibleMethods, customMethods, defaultOptionsOverrides, mostCommonMethod, hasSelect]);\n let selected = selectedMethod;\n if (!hasSelect) {\n selected = visibleMethods[0];\n } else if (selectedMethod === AuthMethod.NoAuth && mostCommonMethod && !authMethodChanged) {\n selected = mostCommonMethod;\n }\n let AuthFieldsComponent = null;\n if (selected === AuthMethod.BasicAuth && basicAuth) {\n AuthFieldsComponent = /* @__PURE__ */ React__default.createElement(BasicAuth, { ...basicAuth, readOnly });\n } else if (selected.startsWith(\"custom-\")) {\n AuthFieldsComponent = (_b = (_a = customMethods == null ? undefined : customMethods.find((m) => m.id === selected)) == null ? undefined : _a.component) != null ? _b : null;\n }\n const title = hasSelect ? \"Authentication methods\" : (_c = preparedOptions[0].label) != null ? _c : \"\";\n const description = hasSelect ? \"Choose an authentication method to access the data source\" : (_d = preparedOptions[0].description) != null ? _d : \"\";\n const styles = {\n authMethods: css({\n marginTop: spacing(2.5),\n ...hasSelect && {\n padding: spacing(2),\n border: `1px solid ${colors.border.weak}`\n }\n }),\n selectedMethodFields: css({\n marginTop: spacing(1.5)\n })\n };\n return /* @__PURE__ */ React__default.createElement(ConfigSubSection, { title, description }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.authMethods }, hasSelect && /* @__PURE__ */ React__default.createElement(Field, { label: \"Authentication method\" }, /* @__PURE__ */ React__default.createElement(\n Select,\n {\n inputId: \"auth-method-select\",\n options: preparedOptions,\n value: selected,\n onChange: (option) => {\n setAuthMethodChanged(true);\n onAuthMethodSelect(option.value);\n },\n disabled: readOnly\n }\n )), AuthFieldsComponent && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.selectedMethodFields }, AuthFieldsComponent)));\n};\n\nexport { AuthMethodSettings };\n//# sourceMappingURL=AuthMethodSettings.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Checkbox, Tooltip, Icon } from '@grafana/ui';\n\nconst TLSSettingsSection = ({\n children,\n enabled,\n label,\n tooltipText,\n onToggle,\n readOnly\n}) => {\n const { colors, spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: 3\n }),\n checkboxContainer: css({\n display: \"flex\",\n alignItems: \"center\"\n }),\n infoIcon: css({\n marginTop: -2,\n marginLeft: 5,\n color: colors.text.secondary\n }),\n content: css({\n margin: spacing(1, 0, 2, 3)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.checkboxContainer }, /* @__PURE__ */ React__default.createElement(Checkbox, { value: enabled, label, onChange: () => onToggle(!enabled), disabled: readOnly }), /* @__PURE__ */ React__default.createElement(Tooltip, { placement: \"top\", content: tooltipText, interactive: true }, /* @__PURE__ */ React__default.createElement(Icon, { name: \"info-circle\", className: styles.infoIcon, size: \"sm\" }))), enabled && children && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.content }, children));\n};\n\nexport { TLSSettingsSection };\n//# sourceMappingURL=TLSSettingsSection.js.map\n","import React__default from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\nimport { useCommonStyles } from '../styles.js';\n\nconst SelfSignedCertificate = ({\n enabled,\n certificateConfigured,\n onToggle,\n onCertificateChange,\n onCertificateReset,\n tooltips,\n readOnly\n}) => {\n var _a;\n const commonStyles = useCommonStyles();\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"Add self-signed certificate\",\n tooltipText: \"Add your own Certificate Authority (CA) certificate on top of one generated by the certificate authorities for additional security measures\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"CA Certificate\",\n labelWidth: 24,\n tooltip: (_a = tooltips == null ? undefined : tooltips.certificateLabel) != null ? _a : \"Your self-signed certificate\",\n required: true,\n htmlFor: \"self-signed-certificate-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"self-signed-certificate-input\",\n isConfigured: certificateConfigured,\n onChange: (e) => onCertificateChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onCertificateReset,\n placeholder: \"Begins with --- BEGIN CERTIFICATE ---\",\n rows: 6,\n required: true\n }\n )\n )\n );\n};\n\nexport { SelfSignedCertificate };\n//# sourceMappingURL=SelfSignedCertificate.js.map\n","import React__default from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, Input, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\nimport { useCommonStyles } from '../styles.js';\n\nconst TLSClientAuth = ({\n enabled,\n serverName,\n clientCertificateConfigured,\n clientKeyConfigured,\n onToggle,\n onServerNameChange,\n onClientCertificateChange,\n onClientKeyChange,\n onClientCertificateReset,\n onClientKeyReset,\n tooltips,\n readOnly\n}) => {\n var _a, _b, _c;\n const commonStyles = useCommonStyles();\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"TLS Client Authentication\",\n tooltipText: \"Validate using TLS client authentication, in which the server authenticates the client\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"ServerName\",\n labelWidth: 24,\n tooltip: (_a = tooltips == null ? undefined : tooltips.serverNameLabel) != null ? _a : \"A Servername is used to verify the hostname on the returned certificate\",\n required: true,\n htmlFor: \"client-auth-servername-input\",\n interactive: true,\n grow: true,\n className: commonStyles.inlineFieldNoMarginRight,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"client-auth-servername-input\",\n placeholder: \"domain.example.com\",\n value: serverName,\n onChange: (e) => onServerNameChange(e.currentTarget.value),\n required: true\n }\n )\n ),\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Client Certificate\",\n labelWidth: 24,\n tooltip: (_b = tooltips == null ? undefined : tooltips.certificateLabel) != null ? _b : \"The client certificate can be generated from a Certificate Authority or be self-signed\",\n required: true,\n htmlFor: \"client-auth-client-certificate-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"client-auth-client-certificate-input\",\n isConfigured: clientCertificateConfigured,\n onChange: (e) => onClientCertificateChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onClientCertificateReset,\n placeholder: \"Begins with --- BEGIN CERTIFICATE ---\",\n rows: 6,\n required: true\n }\n )\n ),\n /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Client Key\",\n labelWidth: 24,\n tooltip: (_c = tooltips == null ? undefined : tooltips.keyLabel) != null ? _c : \"The client key can be generated from a Certificate Authority or be self-signed\",\n required: true,\n htmlFor: \"client-auth-client-key-input\",\n interactive: true,\n grow: true,\n className: cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret),\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretTextArea,\n {\n id: \"client-auth-client-key-input\",\n isConfigured: clientKeyConfigured,\n onChange: (e) => onClientKeyChange(e.currentTarget.value),\n onReset: readOnly ? () => {\n } : onClientKeyReset,\n placeholder: `Begins with --- RSA PRIVATE KEY CERTIFICATE ---`,\n rows: 6,\n required: true\n }\n )\n )\n );\n};\n\nexport { TLSClientAuth };\n//# sourceMappingURL=TLSClientAuth.js.map\n","import React__default from 'react';\nimport { TLSSettingsSection } from './TLSSettingsSection.js';\n\nconst SkipTLSVerification = ({ enabled, onToggle, readOnly }) => {\n return /* @__PURE__ */ React__default.createElement(\n TLSSettingsSection,\n {\n enabled,\n label: \"Skip TLS certificate validation\",\n tooltipText: \"Skipping TLS certificate validation is not recommended unless absolutely necessary or for testing\",\n onToggle: (newEnabled) => onToggle(newEnabled),\n readOnly\n }\n );\n};\n\nexport { SkipTLSVerification };\n//# sourceMappingURL=SkipTLSVerification.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\nimport { SelfSignedCertificate } from './SelfSignedCertificate.js';\nimport { TLSClientAuth } from './TLSClientAuth.js';\nimport { SkipTLSVerification } from './SkipTLSVerification.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst TLSSettings = ({ selfSignedCertificate, TLSClientAuth: TLSClientAuth$1, skipTLSVerification, readOnly }) => {\n const { spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: spacing(3)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\n ConfigSubSection,\n {\n className: styles.container,\n title: \"TLS settings\",\n description: \"Additional security measures that can be applied on top of authentication\"\n },\n /* @__PURE__ */ React__default.createElement(SelfSignedCertificate, { ...selfSignedCertificate, readOnly }),\n /* @__PURE__ */ React__default.createElement(TLSClientAuth, { ...TLSClientAuth$1, readOnly }),\n /* @__PURE__ */ React__default.createElement(SkipTLSVerification, { ...skipTLSVerification, readOnly })\n );\n};\n\nexport { TLSSettings };\n//# sourceMappingURL=TLSSettings.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useTheme2, InlineFieldRow, InlineField, Input, SecretInput, IconButton } from '@grafana/ui';\nimport { useCommonStyles } from '../styles.js';\n\nconst CustomHeader = ({ header, onChange, onBlur, onDelete, readOnly }) => {\n const { spacing } = useTheme2();\n const commonStyles = useCommonStyles();\n const styles = {\n container: css({\n alignItems: \"center\"\n }),\n input: css({\n minWidth: \"100%\"\n }),\n headerNameField: css({\n width: \"40%\",\n marginRight: 0,\n paddingRight: spacing(1)\n }),\n headerValueField: css({\n width: \"45%\",\n marginRight: 0\n }),\n removeHeaderBtn: css({\n margin: `0 0 3px 10px`\n })\n };\n return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(InlineFieldRow, { className: styles.container }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Header\",\n labelWidth: 9,\n grow: true,\n className: styles.headerNameField,\n htmlFor: `custom-header-${header.id}-name-input`,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: `custom-header-${header.id}-name-input`,\n placeholder: \"X-Custom-Header\",\n value: header.name,\n width: 12,\n onChange: (e) => onChange({ ...header, name: e.currentTarget.value }),\n onBlur,\n className: styles.input\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n label: \"Value\",\n labelWidth: 9,\n grow: true,\n className: cx(commonStyles.inlineFieldWithSecret, styles.headerValueField),\n htmlFor: `custom-header-${header.id}-value-input`,\n disabled: readOnly\n },\n /* @__PURE__ */ React__default.createElement(\n SecretInput,\n {\n id: `custom-header-${header.id}-value-input`,\n isConfigured: header.configured,\n placeholder: \"Header value\",\n value: header.value,\n width: 12,\n onChange: (e) => onChange({ ...header, value: e.currentTarget.value }),\n onReset: readOnly ? () => {\n } : () => onChange({ ...header, configured: false, value: \"\" }),\n onBlur,\n className: styles.input\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n IconButton,\n {\n name: \"trash-alt\",\n tooltip: \"Remove header\",\n tooltipPlacement: \"top\",\n className: styles.removeHeaderBtn,\n onClick: onDelete,\n type: \"button\",\n disabled: readOnly\n }\n )));\n};\n\nexport { CustomHeader };\n//# sourceMappingURL=CustomHeader.js.map\n","import React__default, { useState, useEffect } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Button } from '@grafana/ui';\nimport { CustomHeader } from './CustomHeader.js';\nimport { ConfigSubSection } from '../../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }) => {\n const { spacing } = useTheme2();\n const [headers, setHeaders] = useState(\n headersFromProps.map((header) => ({\n ...header,\n id: uniqueId(),\n value: \"\"\n }))\n );\n useEffect(() => {\n setHeaders((headers2) => {\n let changed = false;\n const newHeaders = headers2.map((header) => {\n var _a;\n const configured = (_a = headersFromProps.find((h) => h.name === header.name)) == null ? undefined : _a.configured;\n if (typeof configured !== \"undefined\" && header.configured !== configured) {\n changed = true;\n return { ...header, configured };\n }\n return header;\n });\n if (changed) {\n return newHeaders;\n }\n return headers2;\n });\n }, [headersFromProps]);\n const onHeaderAdd = () => {\n setHeaders([...headers, { id: uniqueId(), name: \"\", value: \"\", configured: false }]);\n };\n const onHeaderChange = (id, header) => {\n setHeaders(headers.map((h) => h.id === id ? { ...header } : h));\n };\n const onHeaderDelete = (id) => {\n const index = headers.findIndex((h) => h.id === id);\n if (index === -1) {\n return;\n }\n const newHeaders = [...headers];\n newHeaders.splice(index, 1);\n setHeaders(newHeaders);\n onChange(\n newHeaders.map(({ name, value, configured }) => ({\n name,\n value,\n configured\n }))\n );\n };\n const onBlur = () => {\n onChange(\n headers.map(({ name, value, configured }) => ({\n name,\n value,\n configured\n }))\n );\n };\n const styles = {\n container: css({\n marginTop: spacing(3)\n }),\n addHeaderButton: css({\n marginTop: spacing(1.5)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(\n ConfigSubSection,\n {\n title: \"HTTP headers\",\n description: \"Pass along additional context and metadata about the request/response\",\n isCollapsible: true,\n isInitiallyOpen: headers.length > 0\n },\n /* @__PURE__ */ React__default.createElement(\"div\", null, headers.map((header) => /* @__PURE__ */ React__default.createElement(\n CustomHeader,\n {\n key: header.id,\n header,\n onChange: (header2) => onHeaderChange(header2.id, header2),\n onDelete: () => onHeaderDelete(header.id),\n onBlur,\n readOnly\n }\n ))),\n /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.addHeaderButton }, /* @__PURE__ */ React__default.createElement(Button, { icon: \"plus\", variant: \"secondary\", fill: \"outline\", onClick: onHeaderAdd, disabled: readOnly }, headers.length === 0 ? \"Add header\" : \"Add another header\"))\n ));\n};\nfunction uniqueId() {\n return Math.random().toString(16).slice(2);\n}\n\nexport { CustomHeaders };\n//# sourceMappingURL=CustomHeaders.js.map\n","import React__default from 'react';\nimport { css } from '@emotion/css';\nimport { AuthMethodSettings } from './auth-method/AuthMethodSettings.js';\nimport { TLSSettings } from './tls/TLSSettings.js';\nimport '@grafana/ui';\nimport { CustomHeaders } from './custom-headers/CustomHeaders.js';\nimport { ConfigSection } from '../ConfigSection/ConfigSection.js';\nimport '@grafana/data';\n\nconst Auth = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n TLS,\n customHeaders,\n readOnly = false\n}) => {\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.container }, /* @__PURE__ */ React__default.createElement(ConfigSection, { title: \"Authentication\" }, /* @__PURE__ */ React__default.createElement(\n AuthMethodSettings,\n {\n selectedMethod,\n mostCommonMethod,\n customMethods,\n visibleMethods,\n defaultOptionsOverrides,\n onAuthMethodSelect,\n basicAuth,\n readOnly\n }\n ), TLS && /* @__PURE__ */ React__default.createElement(TLSSettings, { ...TLS, readOnly }), customHeaders && /* @__PURE__ */ React__default.createElement(CustomHeaders, { ...customHeaders, readOnly })));\n};\n\nexport { Auth };\n//# sourceMappingURL=Auth.js.map\n","import 'react';\nimport '@emotion/css';\nimport { AuthMethod } from './types.js';\nimport './auth-method/AuthMethodSettings.js';\nimport '@grafana/ui';\nimport '@grafana/data';\n\nconst headerNamePrefix = \"httpHeaderName\";\nconst headerValuePrefix = \"httpHeaderValue\";\nfunction convertLegacyAuthProps({\n config,\n onChange\n}) {\n const props = {\n selectedMethod: getSelectedMethod(config),\n onAuthMethodSelect: getOnAuthMethodSelectHandler(config, onChange),\n basicAuth: getBasicAuthProps(config, onChange),\n TLS: getTLSProps(config, onChange),\n customHeaders: getCustomHeaders(config, onChange),\n readOnly: config.readOnly\n };\n return props;\n}\nfunction getSelectedMethod(config) {\n if (config.basicAuth) {\n return AuthMethod.BasicAuth;\n }\n if (config.withCredentials) {\n return AuthMethod.CrossSiteCredentials;\n }\n if (config.jsonData.oauthPassThru) {\n return AuthMethod.OAuthForward;\n }\n return AuthMethod.NoAuth;\n}\nfunction getOnAuthMethodSelectHandler(config, onChange) {\n return (method) => {\n onChange({\n ...config,\n basicAuth: method === AuthMethod.BasicAuth,\n withCredentials: method === AuthMethod.CrossSiteCredentials,\n jsonData: {\n ...config.jsonData,\n oauthPassThru: method === AuthMethod.OAuthForward\n }\n });\n };\n}\nfunction getBasicAuthProps(config, onChange) {\n return {\n user: config.basicAuthUser,\n passwordConfigured: config.secureJsonFields.basicAuthPassword,\n onUserChange: (user) => onChange({ ...config, basicAuthUser: user }),\n onPasswordChange: (password) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n basicAuthPassword: password\n }\n }),\n onPasswordReset: () => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, basicAuthPassword: \"\" },\n secureJsonFields: {\n ...config.secureJsonFields,\n basicAuthPassword: false\n }\n })\n };\n}\nfunction getTLSProps(config, onChange) {\n var _a, _b, _c;\n return {\n selfSignedCertificate: {\n enabled: Boolean(config.jsonData.tlsAuthWithCACert),\n certificateConfigured: !!((_a = config.secureJsonFields) == null ? undefined : _a.tlsCACert),\n onToggle: (enabled) => enabled ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled }\n }) : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled },\n secureJsonData: { ...config.secureJsonData, tlsCACert: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false }\n }),\n onCertificateChange: (certificate) => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: certificate }\n }),\n onCertificateReset: () => onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false }\n })\n },\n TLSClientAuth: {\n enabled: config.jsonData.tlsAuth,\n serverName: config.jsonData.serverName,\n clientCertificateConfigured: !!((_b = config.secureJsonFields) == null ? undefined : _b.tlsClientCert),\n clientKeyConfigured: !!((_c = config.secureJsonFields) == null ? undefined : _c.tlsClientKey),\n onToggle: (enabled) => enabled ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled }\n }) : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled, serverName: \"\" },\n secureJsonData: { ...config.secureJsonData, tlsClientCert: \"\", tlsClientKey: \"\" },\n secureJsonFields: { ...config.secureJsonFields, tlsClientCert: false, tlsClientKey: false }\n }),\n onServerNameChange: (serverName) => onChange({\n ...config,\n jsonData: { ...config.jsonData, serverName }\n }),\n onClientCertificateChange: (clientCertificate) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: clientCertificate\n }\n }),\n onClientCertificateReset: () => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: \"\"\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientCert: false\n }\n }),\n onClientKeyChange: (clientKey) => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: clientKey\n }\n }),\n onClientKeyReset: () => onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: \"\"\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientKey: false\n }\n })\n },\n skipTLSVerification: {\n enabled: config.jsonData.tlsSkipVerify,\n onToggle: (enabled) => onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsSkipVerify: enabled }\n })\n }\n };\n}\nfunction getCustomHeaders(config, onChange) {\n const headers = Object.keys(config.jsonData).filter((key) => key.startsWith(headerNamePrefix)).sort().map((key) => {\n var _a;\n const index = key.slice(headerNamePrefix.length);\n return {\n name: config.jsonData[key],\n configured: (_a = config.secureJsonFields[`${headerValuePrefix}${index}`]) != null ? _a : false\n };\n });\n return {\n headers,\n onChange: (headers2) => {\n const newJsonData = Object.fromEntries(\n Object.entries(config.jsonData).filter(([key]) => !key.startsWith(headerNamePrefix))\n );\n const newSecureJsonData = Object.fromEntries(\n Object.entries(config.secureJsonData || {}).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n const newSecureJsonFields = Object.fromEntries(\n Object.entries(config.secureJsonFields).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n headers2.forEach((header, index) => {\n newJsonData[`${headerNamePrefix}${index + 1}`] = header.name;\n if (header.configured) {\n newSecureJsonFields[`${headerValuePrefix}${index + 1}`] = true;\n } else {\n newSecureJsonData[`${headerValuePrefix}${index + 1}`] = header.value;\n }\n });\n onChange({\n ...config,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n secureJsonFields: newSecureJsonFields\n });\n }\n };\n}\n\nexport { convertLegacyAuthProps, getBasicAuthProps, getCustomHeaders, getOnAuthMethodSelectHandler, getSelectedMethod, getTLSProps };\n//# sourceMappingURL=utils.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, TagsInput, Input } from '@grafana/ui';\nimport { ConfigSubSection } from '../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst AdvancedHttpSettings = ({\n config,\n onChange,\n className\n}) => {\n const onCookiesChange = (cookies) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n keepCookies: cookies\n }\n });\n };\n const onTimeoutChange = (event) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n timeout: parseInt(event.currentTarget.value, 10)\n }\n });\n };\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(ConfigSubSection, { title: \"Advanced HTTP settings\", className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"advanced-http-cookies\",\n label: \"Allowed cookies\",\n labelWidth: 24,\n tooltip: \"Grafana proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.\",\n disabled: config.readOnly,\n grow: true\n },\n /* @__PURE__ */ React__default.createElement(\n TagsInput,\n {\n id: \"advanced-http-cookies\",\n placeholder: \"New cookie (hit enter to add)\",\n tags: config.jsonData.keepCookies,\n onChange: onCookiesChange\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"advanced-http-timeout\",\n label: \"Timeout\",\n labelWidth: 24,\n tooltip: \"HTTP request timeout in seconds\",\n disabled: config.readOnly,\n grow: true\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"advanced-http-timeout\",\n type: \"number\",\n min: 0,\n placeholder: \"Timeout in seconds\",\n \"aria-label\": \"Timeout in seconds\",\n value: config.jsonData.timeout,\n onChange: onTimeoutChange\n }\n )\n ));\n};\n\nexport { AdvancedHttpSettings };\n//# sourceMappingURL=AdvancedHttpSettings.js.map\n","import { css } from '@emotion/css';\n\nimport { DataSourcePluginOptionsEditorProps, GrafanaTheme2 } from '@grafana/data';\nimport { NodeGraphSection, SpanBarSection, TraceToLogsSection, TraceToMetricsSection } from '@grafana/o11y-ds-frontend';\nimport {\n AdvancedHttpSettings,\n Auth,\n ConfigSection,\n ConnectionSettings,\n DataSourceDescription,\n convertLegacyAuthProps,\n} from '@grafana/plugin-ui';\nimport { config } from '@grafana/runtime';\nimport { useStyles2, Divider, Stack, SecureSocksProxySettings } from '@grafana/ui';\n\nexport type Props = DataSourcePluginOptionsEditorProps;\n\nexport const ConfigEditor = ({ options, onOptionsChange }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n <DataSourceDescription\n dataSourceName=\"Zipkin\"\n docsLink=\"https://grafana.com/docs/grafana/latest/datasources/zipkin\"\n hasRequiredFields={false}\n />\n\n <Divider spacing={4} />\n\n <ConnectionSettings config={options} onChange={onOptionsChange} urlPlaceholder=\"http://localhost:9411\" />\n\n <Divider spacing={4} />\n <Auth\n {...convertLegacyAuthProps({\n config: options,\n onChange: onOptionsChange,\n })}\n />\n\n <Divider spacing={4} />\n <TraceToLogsSection options={options} onOptionsChange={onOptionsChange} />\n <Divider spacing={4} />\n\n <TraceToMetricsSection options={options} onOptionsChange={onOptionsChange} />\n <Divider spacing={4} />\n\n <ConfigSection\n title=\"Additional settings\"\n description=\"Additional settings are optional settings that can be configured for more control over your data source.\"\n isCollapsible={true}\n isInitiallyOpen={false}\n >\n <Stack gap={5} direction=\"column\">\n <AdvancedHttpSettings config={options} onChange={onOptionsChange} />\n\n {config.secureSocksDSProxyEnabled && (\n <SecureSocksProxySettings options={options} onOptionsChange={onOptionsChange} />\n )}\n\n <NodeGraphSection options={options} onOptionsChange={onOptionsChange} />\n <SpanBarSection options={options} onOptionsChange={onOptionsChange} />\n </Stack>\n </ConfigSection>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n marginBottom: theme.spacing(2),\n maxWidth: '900px',\n }),\n});\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { useCallback, useEffect, useRef } from 'react';\nexport default function useMountedState() {\n var mountedRef = useRef(false);\n var get = useCallback(function () { return mountedRef.current; }, []);\n useEffect(function () {\n mountedRef.current = true;\n return function () {\n mountedRef.current = false;\n };\n }, []);\n return get;\n}\n","import { __assign } from \"tslib\";\nimport { useCallback, useRef, useState } from 'react';\nimport useMountedState from './useMountedState';\nexport default function useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = useRef(0);\n var isMounted = useMountedState();\n var _a = useState(initialState), state = _a[0], set = _a[1];\n var callback = useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (__assign(__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\n","import { useEffect } from 'react';\nvar useEffectOnce = function (effect) {\n useEffect(effect, []);\n};\nexport default useEffectOnce;\n","import useEffectOnce from './useEffectOnce';\nvar useMount = function (fn) {\n useEffectOnce(function () {\n fn();\n });\n};\nexport default useMount;\n","import { css } from '@emotion/css';\nimport { useEffect, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Alert, AlertVariant, useTheme2 } from '@grafana/ui';\n\nenum AlertTimeout {\n Error = 7000,\n Info = 3000,\n Success = 3000,\n Warning = 5000,\n}\n\nconst getStyle = (theme: GrafanaTheme2) => {\n return css({\n position: 'absolute',\n zIndex: theme.zIndex.portal,\n top: 0,\n right: 10,\n });\n};\n\nconst timeoutMap = {\n ['error']: AlertTimeout.Error,\n ['info']: AlertTimeout.Info,\n ['success']: AlertTimeout.Success,\n ['warning']: AlertTimeout.Warning,\n};\n\ntype AlertProps = {\n // Severity of the alert. Controls the style of the alert (e.g., background color)\n severity: AlertVariant;\n // Displayed message. If set to empty string, the alert is not displayed\n text: string;\n};\n\nexport const TemporaryAlert = (props: AlertProps) => {\n const style = getStyle(useTheme2());\n const [visible, setVisible] = useState(false);\n const [timer, setTimer] = useState<NodeJS.Timeout>();\n\n useEffect(() => {\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [timer]);\n\n useEffect(() => {\n if (props.text !== '') {\n setVisible(true);\n\n const timer = setTimeout(() => {\n setVisible(false);\n }, timeoutMap[props.severity]);\n setTimer(timer);\n }\n }, [props.severity, props.text]);\n\n return (\n <>\n {visible && (\n <Alert\n className={style}\n elevated={true}\n onRemove={() => setVisible(false)}\n severity={props.severity}\n title={props.text}\n />\n )}\n </>\n );\n};\n","import { css } from '@emotion/css';\nimport { fromPairs } from 'lodash';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useAsyncFn, useMount, useMountedState } from 'react-use';\nimport { AsyncState } from 'react-use/lib/useAsyncFn';\n\nimport { GrafanaTheme2, QueryEditorProps } from '@grafana/data';\nimport { TemporaryAlert } from '@grafana/o11y-ds-frontend';\nimport {\n ButtonCascader,\n CascaderOption,\n FileDropzone,\n InlineField,\n InlineFieldRow,\n RadioButtonGroup,\n useTheme2,\n QueryField,\n useStyles2,\n Modal,\n Stack,\n Button,\n} from '@grafana/ui';\n\nimport { ZipkinDatasource } from './datasource';\nimport { ZipkinQuery, ZipkinQueryType, ZipkinSpan } from './types';\n\ntype Props = QueryEditorProps<ZipkinDatasource, ZipkinQuery>;\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n tracesCascader: css({\n label: 'tracesCascader',\n marginRight: theme.spacing(1),\n }),\n };\n};\n\nexport const ZipkinQueryField = ({ query, onChange, onRunQuery, datasource }: Props) => {\n const [uploadModalOpen, setUploadModalOpen] = useState(false);\n const [alertText, setAlertText] = useState('');\n const serviceOptions = useServices(datasource, setAlertText);\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const { onLoadOptions, allOptions } = useLoadOptions(datasource, setAlertText);\n\n const onSelectTrace = useCallback(\n (values: string[], selectedOptions: CascaderOption[]) => {\n if (selectedOptions.length === 3) {\n const traceID = selectedOptions[2].value;\n onChange({ ...query, query: traceID });\n onRunQuery();\n }\n },\n [onChange, onRunQuery, query]\n );\n\n useEffect(() => {\n if (!query.queryType) {\n onChange({\n ...query,\n queryType: 'traceID',\n });\n }\n }, [query, onChange]);\n\n const onChangeQuery = (value: string) => {\n const nextQuery = { ...query, query: value };\n onChange(nextQuery);\n };\n\n let cascaderOptions = useMapToCascaderOptions(serviceOptions, allOptions);\n\n return (\n <>\n <Modal title={'Upload trace'} isOpen={uploadModalOpen} onDismiss={() => setUploadModalOpen(false)}>\n <div className={css({ padding: theme.spacing(2) })}>\n <FileDropzone\n options={{ multiple: false }}\n onLoad={(result) => {\n datasource.uploadedJson = result;\n onChange({\n ...query,\n queryType: 'upload',\n });\n setUploadModalOpen(false);\n onRunQuery();\n }}\n />\n </div>\n </Modal>\n <InlineFieldRow>\n <InlineField label=\"Query type\" grow={true}>\n <Stack gap={1} alignItems=\"center\" justifyContent=\"space-between\">\n <RadioButtonGroup<ZipkinQueryType>\n options={[{ value: 'traceID', label: 'TraceID' }]}\n value={query.queryType || 'traceID'}\n onChange={(v) =>\n onChange({\n ...query,\n queryType: v,\n })\n }\n size=\"md\"\n />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => {\n setUploadModalOpen(true);\n }}\n >\n Import trace\n </Button>\n </Stack>\n </InlineField>\n </InlineFieldRow>\n {query.queryType === 'traceID' && (\n <InlineFieldRow>\n <ButtonCascader\n options={cascaderOptions}\n onChange={onSelectTrace}\n loadData={onLoadOptions}\n variant=\"secondary\"\n buttonProps={{ className: styles.tracesCascader }}\n >\n Traces\n </ButtonCascader>\n <div className=\"gf-form gf-form--grow flex-shrink-1 min-width-15\">\n <QueryField\n query={query.query}\n onChange={onChangeQuery}\n onRunQuery={onRunQuery}\n placeholder={'Insert Trace ID (run with Shift+Enter)'}\n portalOrigin=\"zipkin\"\n />\n </div>\n </InlineFieldRow>\n )}\n {alertText && <TemporaryAlert text={alertText} severity={'error'} />}\n </>\n );\n};\n\n// Exported for tests\nexport function useServices(\n datasource: ZipkinDatasource,\n setErrorText: (text: string) => void\n): AsyncState<CascaderOption[]> {\n const [servicesOptions, fetch] = useAsyncFn(async (): Promise<CascaderOption[]> => {\n try {\n const services: string[] | null = await datasource.metadataRequest('services');\n if (services) {\n return services.sort().map((service) => ({\n label: service,\n value: service,\n isLeaf: false,\n }));\n }\n return [];\n } catch (error) {\n const errorToShow = error instanceof Error ? error : 'An unknown error occurred';\n const errorText = `Failed to load spans from Zipkin: ${errorToShow.toString()}`;\n setErrorText(errorText);\n throw error;\n }\n }, [datasource]);\n\n useMount(() => {\n // We should probably call this periodically to get new services after mount.\n fetch();\n });\n\n return servicesOptions;\n}\n\ntype OptionsState = {\n [serviceName: string]: {\n [spanName: string]: {\n [traceId: string]: string;\n };\n };\n};\n\n// Exported for tests\nexport function useLoadOptions(datasource: ZipkinDatasource, setErrorText: (text: string) => void) {\n const isMounted = useMountedState();\n const [allOptions, setAllOptions] = useState<OptionsState>({});\n\n const [, fetchSpans] = useAsyncFn(\n async function findSpans(service: string): Promise<void> {\n try {\n // The response of this should have been full ZipkinSpan objects based on API docs but is just list\n // of span names.\n // TODO: check if this is some issue of version used or something else\n const response: string[] = await datasource.metadataRequest('spans', { serviceName: service });\n if (isMounted()) {\n setAllOptions((state) => {\n const spanOptions = fromPairs(response.map((span: string) => [span, undefined]));\n return {\n ...state,\n [service]: spanOptions as any,\n };\n });\n }\n } catch (error) {\n const errorToShow = error instanceof Error ? error : 'An unknown error occurred';\n const errorText = `Failed to load spans from Zipkin: ${errorToShow.toString()}`;\n setErrorText(errorText);\n throw error;\n }\n },\n [datasource, allOptions]\n );\n\n const [, fetchTraces] = useAsyncFn(\n async function findTraces(serviceName: string, spanName: string): Promise<void> {\n const search = {\n serviceName,\n spanName,\n // See other params and default here https://zipkin.io/zipkin-api/#/default/get_traces\n };\n try {\n // This should return just root traces as there isn't any nesting\n const traces: ZipkinSpan[][] = await datasource.metadataRequest('traces', search);\n if (isMounted()) {\n const newTraces = traces.length\n ? fromPairs(\n traces.map((trace) => {\n const rootSpan = trace.find((span) => !span.parentId)!;\n\n return [`${rootSpan.name} [${Math.floor(rootSpan.duration / 1000)} ms]`, rootSpan.traceId];\n })\n )\n : noTracesOptions;\n\n setAllOptions((state) => {\n const spans = state[serviceName];\n return {\n ...state,\n [serviceName]: {\n ...spans,\n [spanName]: newTraces,\n },\n };\n });\n }\n } catch (error) {\n const errorToShow = error instanceof Error ? error : 'An unknown error occurred';\n const errorText = `Failed to load spans from Zipkin: ${errorToShow.toString()}`;\n setErrorText(errorText);\n throw error;\n }\n },\n [datasource]\n );\n\n const onLoadOptions = useCallback(\n (selectedOptions: CascaderOption[]) => {\n const service = selectedOptions[0].value;\n if (selectedOptions.length === 1) {\n fetchSpans(service);\n } else if (selectedOptions.length === 2) {\n const spanName = selectedOptions[1].value;\n fetchTraces(service, spanName);\n }\n },\n [fetchSpans, fetchTraces]\n );\n\n return {\n onLoadOptions,\n allOptions,\n };\n}\n\nfunction useMapToCascaderOptions(services: AsyncState<CascaderOption[]>, allOptions: OptionsState) {\n return useMemo(() => {\n let cascaderOptions: CascaderOption[] = [];\n\n if (services.value && services.value.length) {\n cascaderOptions = services.value.map((services) => {\n return {\n ...services,\n children:\n allOptions[services.value] &&\n Object.keys(allOptions[services.value]).map((spanName) => {\n return {\n label: spanName,\n value: spanName,\n isLeaf: false,\n children:\n allOptions[services.value][spanName] &&\n Object.keys(allOptions[services.value][spanName]).map((traceName) => {\n return {\n label: traceName,\n value: allOptions[services.value][spanName][traceName],\n };\n }),\n };\n }),\n };\n });\n } else if (services.value && !services.value.length) {\n cascaderOptions = noTracesFoundOptions;\n }\n\n return cascaderOptions;\n }, [services, allOptions]);\n}\n\nconst NO_TRACES_KEY = '__NO_TRACES__';\nconst noTracesFoundOptions = [\n {\n label: 'No traces found',\n value: 'no_traces',\n isLeaf: true,\n\n // Cannot be disabled because then cascader shows 'loading' for some reason.\n // disabled: true,\n },\n];\n\nconst noTracesOptions = {\n '[No traces in time range]': NO_TRACES_KEY,\n};\n","import {\n FieldType,\n NodeGraphDataFrameFieldNames as Fields,\n DataFrameView,\n DataFrame,\n MutableDataFrame,\n} from '@grafana/data';\n\nexport function createNodeGraphFrames(data: DataFrame): DataFrame[] {\n const { nodes, edges } = convertTraceToGraph(data);\n const [nodesFrame, edgesFrame] = makeFrames();\n\n for (const node of nodes) {\n nodesFrame.add(node);\n }\n for (const edge of edges) {\n edgesFrame.add(edge);\n }\n\n return [nodesFrame, edgesFrame];\n}\n\nfunction convertTraceToGraph(data: DataFrame): { nodes: Node[]; edges: Edge[] } {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const view = new DataFrameView<TraceRow>(data);\n\n const traceDuration = findTraceDuration(view);\n const spanMap = makeSpanMap((index) => {\n if (index >= data.length) {\n return undefined;\n }\n const span = view.get(index);\n return {\n span: { ...span },\n id: span.spanID,\n parentIds: span.parentSpanID ? [span.parentSpanID] : [],\n };\n });\n\n for (let i = 0; i < view.length; i++) {\n const row = view.get(i);\n\n const ranges: Array<[number, number]> = spanMap[row.spanID].children.map((c) => {\n const span = spanMap[c].span;\n return [span.startTime, span.startTime + span.duration];\n });\n const childrenDuration = getNonOverlappingDuration(ranges);\n const selfDuration = row.duration - childrenDuration;\n const stats = getStats(row.duration, traceDuration, selfDuration);\n\n nodes.push({\n [Fields.id]: row.spanID,\n [Fields.title]: row.serviceName ?? '',\n [Fields.subTitle]: row.operationName,\n [Fields.mainStat]: stats.main,\n [Fields.secondaryStat]: stats.secondary,\n [Fields.color]: selfDuration / traceDuration,\n });\n\n // Sometimes some span can be missing. Don't add edges for those.\n if (row.parentSpanID && spanMap[row.parentSpanID].span) {\n edges.push({\n [Fields.id]: row.parentSpanID + '--' + row.spanID,\n [Fields.target]: row.spanID,\n [Fields.source]: row.parentSpanID,\n });\n }\n }\n\n return { nodes, edges };\n}\n\n/**\n * Get non overlapping duration of the ranges as they can overlap or have gaps.\n */\nexport function getNonOverlappingDuration(ranges: Array<[number, number]>): number {\n ranges.sort((a, b) => a[0] - b[0]);\n const mergedRanges = ranges.reduce<Array<[number, number]>>((acc, range) => {\n if (!acc.length) {\n return [range];\n }\n const tail = acc.slice(-1)[0];\n const [prevStart, prevEnd] = tail;\n const [start, end] = range;\n if (end < prevEnd) {\n // In this case the range is completely inside the prev range so we can just ignore it.\n return acc;\n }\n\n if (start > prevEnd) {\n // There is no overlap so we can just add it to stack\n return [...acc, range];\n }\n\n // We know there is overlap and current range ends later than previous so we can just extend the range\n return [...acc.slice(0, -1), [prevStart, end]];\n }, []);\n\n return mergedRanges.reduce((acc, range) => {\n return acc + (range[1] - range[0]);\n }, 0);\n}\n\n/**\n * Returns a map of the spans with children array for easier processing. It will also contain empty spans in case\n * span is missing but other spans are its children. This is more generic because it needs to allow iterating over\n * both arrays and dataframe views.\n */\nexport function makeSpanMap<T>(getSpan: (index: number) => { span: T; id: string; parentIds: string[] } | undefined): {\n [id: string]: { span: T; children: string[] };\n} {\n const spanMap: { [id: string]: { span?: T; children: string[] } } = {};\n\n let span;\n for (let index = 0; (span = getSpan(index)), !!span; index++) {\n if (!spanMap[span.id]) {\n spanMap[span.id] = {\n span: span.span,\n children: [],\n };\n } else {\n spanMap[span.id].span = span.span;\n }\n\n for (const parentId of span.parentIds) {\n if (parentId) {\n if (!spanMap[parentId]) {\n spanMap[parentId] = {\n span: undefined,\n children: [span.id],\n };\n } else {\n spanMap[parentId].children.push(span.id);\n }\n }\n }\n }\n // Discussion on this type assertion here: https://github.com/grafana/grafana/pull/80362/files#r1451019375\n return spanMap as { [id: string]: { span: T; children: string[] } };\n}\n\nexport function getStats(duration: number, traceDuration: number, selfDuration: number) {\n return {\n main: `${toFixedNoTrailingZeros(duration)}ms (${toFixedNoTrailingZeros((duration / traceDuration) * 100)}%)`,\n secondary: `${toFixedNoTrailingZeros(selfDuration)}ms (${toFixedNoTrailingZeros(\n (selfDuration / duration) * 100\n )}%)`,\n };\n}\n\nfunction toFixedNoTrailingZeros(n: number) {\n return parseFloat(n.toFixed(2));\n}\n\n/**\n * Create default frames used when returning data for node graph.\n */\nexport function makeFrames() {\n const nodesFrame = new MutableDataFrame({\n fields: [\n { name: Fields.id, type: FieldType.string },\n { name: Fields.title, type: FieldType.string },\n { name: Fields.subTitle, type: FieldType.string },\n { name: Fields.mainStat, type: FieldType.string, config: { displayName: 'Total time (% of trace)' } },\n { name: Fields.secondaryStat, type: FieldType.string, config: { displayName: 'Self time (% of total)' } },\n {\n name: Fields.color,\n type: FieldType.number,\n config: { color: { mode: 'continuous-GrYlRd' }, displayName: 'Self time / Trace duration' },\n },\n ],\n meta: {\n preferredVisualisationType: 'nodeGraph',\n },\n });\n\n const edgesFrame = new MutableDataFrame({\n fields: [\n { name: Fields.id, type: FieldType.string },\n { name: Fields.target, type: FieldType.string },\n { name: Fields.source, type: FieldType.string },\n ],\n meta: {\n preferredVisualisationType: 'nodeGraph',\n },\n });\n\n return [nodesFrame, edgesFrame];\n}\n\n/**\n * Get the duration of the whole trace as it isn't a part of the response data.\n * Note: Seems like this should be the same as just longest span, but this is probably safer.\n */\nfunction findTraceDuration(view: DataFrameView<TraceRow>): number {\n let traceEndTime = 0;\n let traceStartTime = Infinity;\n\n for (let i = 0; i < view.length; i++) {\n const row = view.get(i);\n\n if (row.startTime < traceStartTime) {\n traceStartTime = row.startTime;\n }\n\n if (row.startTime + row.duration > traceEndTime) {\n traceEndTime = row.startTime + row.duration;\n }\n }\n\n return traceEndTime - traceStartTime;\n}\n\ninterface Node {\n [Fields.id]: string;\n [Fields.title]: string;\n [Fields.subTitle]: string;\n [Fields.mainStat]: string;\n [Fields.secondaryStat]: string;\n [Fields.color]: number;\n}\n\ninterface Edge {\n [Fields.id]: string;\n [Fields.target]: string;\n [Fields.source]: string;\n}\n\ninterface TraceRow {\n traceID: string;\n spanID: string;\n parentSpanID: string;\n operationName: string;\n serviceName: string;\n serviceTags: string;\n startTime: number;\n duration: number;\n logs: string;\n tags: string;\n}\n","import { DataFrame, NodeGraphDataFrameFieldNames as Fields } from '@grafana/data';\nimport { getNonOverlappingDuration, getStats, makeFrames, makeSpanMap } from '@grafana/o11y-ds-frontend';\n\nimport { ZipkinSpan } from '../types';\n\ninterface Node {\n [Fields.id]: string;\n [Fields.title]: string;\n [Fields.subTitle]: string;\n [Fields.mainStat]: string;\n [Fields.secondaryStat]: string;\n [Fields.color]: number;\n}\n\ninterface Edge {\n [Fields.id]: string;\n [Fields.target]: string;\n [Fields.source]: string;\n}\n\nexport function createGraphFrames(data: ZipkinSpan[]): DataFrame[] {\n const { nodes, edges } = convertTraceToGraph(data);\n const [nodesFrame, edgesFrame] = makeFrames();\n\n for (const node of nodes) {\n nodesFrame.add(node);\n }\n\n for (const edge of edges) {\n edgesFrame.add(edge);\n }\n\n return [nodesFrame, edgesFrame];\n}\n\nfunction convertTraceToGraph(spans: ZipkinSpan[]): { nodes: Node[]; edges: Edge[] } {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const traceDuration = findTraceDuration(spans);\n const spanMap = makeSpanMap((index) => {\n if (index >= spans.length) {\n return undefined;\n }\n return {\n span: spans[index],\n id: spans[index].id,\n parentIds: spans[index].parentId ? [spans[index].parentId!] : [],\n };\n });\n\n for (const span of spans) {\n const ranges: Array<[number, number]> = spanMap[span.id].children.map((c) => {\n const span = spanMap[c].span;\n return [span.timestamp, span.timestamp + span.duration];\n });\n const childrenDuration = getNonOverlappingDuration(ranges);\n const selfDuration = span.duration - childrenDuration;\n const stats = getStats(span.duration / 1000, traceDuration / 1000, selfDuration / 1000);\n\n nodes.push({\n [Fields.id]: span.id,\n [Fields.title]: span.localEndpoint?.serviceName || span.remoteEndpoint?.serviceName || 'unknown',\n [Fields.subTitle]: span.name,\n [Fields.mainStat]: stats.main,\n [Fields.secondaryStat]: stats.secondary,\n [Fields.color]: selfDuration / traceDuration,\n });\n\n if (span.parentId && spanMap[span.parentId].span) {\n edges.push({\n [Fields.id]: span.parentId + '--' + span.id,\n [Fields.target]: span.id,\n [Fields.source]: span.parentId,\n });\n }\n }\n\n return { nodes, edges };\n}\n\n/**\n * Get the duration of the whole trace as it isn't a part of the response data.\n * Note: Seems like this should be the same as just longest span, but this is probably safer.\n */\nfunction findTraceDuration(spans: ZipkinSpan[]): number {\n let traceEndTime = 0;\n let traceStartTime = Infinity;\n\n for (const span of spans) {\n if (span.timestamp < traceStartTime) {\n traceStartTime = span.timestamp;\n }\n\n if (span.timestamp + span.duration > traceEndTime) {\n traceEndTime = span.timestamp + span.duration;\n }\n }\n return traceEndTime - traceStartTime;\n}\n","import { DataFrame, FieldType, MutableDataFrame, TraceKeyValuePair, TraceLog, TraceSpanRow } from '@grafana/data';\n\nimport { ZipkinAnnotation, ZipkinEndpoint, ZipkinSpan } from '../types';\n\n/**\n * Transforms response to Grafana trace data frame.\n */\nexport function transformResponse(zSpans: ZipkinSpan[]): DataFrame {\n const spanRows = zSpans.map(transformSpan);\n const frame = new MutableDataFrame({\n fields: [\n { name: 'traceID', type: FieldType.string, values: [] },\n { name: 'spanID', type: FieldType.string, values: [] },\n { name: 'parentSpanID', type: FieldType.string, values: [] },\n { name: 'operationName', type: FieldType.string, values: [] },\n { name: 'serviceName', type: FieldType.string, values: [] },\n { name: 'serviceTags', type: FieldType.other, values: [] },\n { name: 'startTime', type: FieldType.number, values: [] },\n { name: 'duration', type: FieldType.number, values: [] },\n { name: 'logs', type: FieldType.other, values: [] },\n { name: 'tags', type: FieldType.other, values: [] },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'zipkin',\n },\n },\n });\n\n for (const span of spanRows) {\n frame.add(span);\n }\n\n return frame;\n}\n\nfunction transformSpan(span: ZipkinSpan): TraceSpanRow {\n const row = {\n traceID: span.traceId,\n spanID: span.id,\n parentSpanID: span.parentId,\n operationName: span.name,\n serviceName: span.localEndpoint?.serviceName || span.remoteEndpoint?.serviceName || 'unknown',\n serviceTags: serviceTags(span),\n startTime: span.timestamp / 1000,\n duration: span.duration / 1000,\n logs: span.annotations?.map(transformAnnotation) ?? [],\n tags: Object.keys(span.tags || {}).reduce<TraceKeyValuePair[]>((acc, key) => {\n // If tag is error we remap it to simple boolean so that the trace ui will show an error icon.\n if (key === 'error') {\n acc.push({\n key: 'error',\n value: true,\n });\n\n acc.push({\n key: 'errorValue',\n value: span.tags!['error'],\n });\n return acc;\n }\n acc.push({ key, value: span.tags![key] });\n return acc;\n }, []),\n };\n\n if (span.kind) {\n row.tags = [\n {\n key: 'kind',\n value: span.kind,\n },\n ...(row.tags ?? []),\n ];\n }\n\n if (span.shared) {\n row.tags = [\n {\n key: 'shared',\n value: span.shared,\n },\n ...(row.tags ?? []),\n ];\n }\n\n return row;\n}\n\n/**\n * Maps annotations as a log as that seems to be the closest thing.\n * See https://zipkin.io/zipkin-api/#/default/get_trace__traceId_\n */\nfunction transformAnnotation(annotation: ZipkinAnnotation): TraceLog {\n return {\n timestamp: annotation.timestamp,\n fields: [\n {\n key: 'annotation',\n value: annotation.value,\n },\n ],\n };\n}\n\nfunction serviceTags(span: ZipkinSpan): TraceKeyValuePair[] {\n const endpoint = span.localEndpoint || span.remoteEndpoint;\n if (!endpoint) {\n return [];\n }\n return [\n valueToTag('ipv4', endpoint.ipv4),\n valueToTag('ipv6', endpoint.ipv6),\n valueToTag('port', endpoint.port),\n valueToTag('endpointType', span.localEndpoint ? 'local' : 'remote'),\n ].filter((item): item is TraceKeyValuePair => Boolean(item));\n}\n\nfunction valueToTag<T>(key: string, value: T): TraceKeyValuePair<T> | undefined {\n if (!value) {\n return undefined;\n }\n return {\n key,\n value,\n };\n}\n\n/**\n * Transforms data frame to Zipkin response\n */\nexport const transformToZipkin = (data: MutableDataFrame<TraceSpanRow>): ZipkinSpan[] => {\n let response: ZipkinSpan[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const span = data.get(i);\n response.push({\n traceId: span.traceID,\n parentId: span.parentSpanID,\n name: span.operationName,\n id: span.spanID,\n timestamp: span.startTime * 1000,\n duration: span.duration * 1000,\n ...getEndpoint(span),\n annotations: span.logs?.length\n ? span.logs.map((l: TraceLog) => ({ timestamp: l.timestamp, value: l.fields[0].value }))\n : undefined,\n tags: span.tags?.length\n ? span.tags\n .filter((t: TraceKeyValuePair) => t.key !== 'kind' && t.key !== 'endpointType' && t.key !== 'shared')\n .reduce((tags: { [key: string]: string }, t: TraceKeyValuePair) => {\n if (t.key === 'error') {\n return {\n ...tags,\n [t.key]: span.tags?.find((t: TraceKeyValuePair) => t.key === 'errorValue')?.value || '',\n };\n }\n return { ...tags, [t.key]: t.value };\n }, {})\n : undefined,\n kind: span.tags?.find((t: TraceKeyValuePair) => t.key === 'kind')?.value,\n shared: span.tags?.find((t: TraceKeyValuePair) => t.key === 'shared')?.value,\n });\n }\n\n return response;\n};\n\n// Returns remote or local endpoint object\nconst getEndpoint = (span: TraceSpanRow): { [key: string]: ZipkinEndpoint } | undefined => {\n const key =\n span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'endpointType')?.value === 'local'\n ? 'localEndpoint'\n : 'remoteEndpoint';\n return span.serviceName !== 'unknown'\n ? {\n [key]: {\n serviceName: span.serviceName,\n ipv4: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'ipv4')?.value,\n ipv6: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'ipv6')?.value,\n port: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'port')?.value,\n },\n }\n : undefined;\n};\n","import { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n DataSourceJsonData,\n FieldType,\n createDataFrame,\n ScopedVars,\n toDataFrame,\n} from '@grafana/data';\nimport { createNodeGraphFrames, NodeGraphOptions, SpanBarOptions } from '@grafana/o11y-ds-frontend';\nimport { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport { ZipkinQuery, ZipkinSpan } from './types';\nimport { createGraphFrames } from './utils/graphTransform';\nimport { transformResponse } from './utils/transforms';\n\nexport interface ZipkinJsonData extends DataSourceJsonData {\n nodeGraph?: NodeGraphOptions;\n}\n\nexport class ZipkinDatasource extends DataSourceWithBackend<ZipkinQuery, ZipkinJsonData> {\n uploadedJson: string | ArrayBuffer | null = null;\n nodeGraph?: NodeGraphOptions;\n spanBar?: SpanBarOptions;\n constructor(\n instanceSettings: DataSourceInstanceSettings<ZipkinJsonData>,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.nodeGraph = instanceSettings.jsonData.nodeGraph;\n }\n\n query(options: DataQueryRequest<ZipkinQuery>): Observable<DataQueryResponse> {\n const target = options.targets[0];\n if (target.queryType === 'upload') {\n if (!this.uploadedJson) {\n return of({ data: [] });\n }\n\n try {\n const traceData = JSON.parse(this.uploadedJson as string);\n return of(responseToDataQueryResponse({ data: traceData }, this.nodeGraph?.enabled));\n } catch (error) {\n return of({ error: { message: 'JSON is not valid Zipkin format' }, data: [] });\n }\n }\n\n if (target.query) {\n return super.query(options).pipe(\n map((response) => {\n if (this.nodeGraph?.enabled) {\n return addNodeGraphFramesToResponse(response);\n }\n return response;\n })\n );\n }\n return of(emptyDataQueryResponse);\n }\n\n async metadataRequest(url: string, params?: Record<string, unknown>) {\n return await this.getResource(url, params);\n }\n\n async testDatasource(): Promise<{ status: string; message: string }> {\n return await super.testDatasource();\n }\n\n getQueryDisplayText(query: ZipkinQuery): string {\n return query.query;\n }\n\n interpolateVariablesInQueries(queries: ZipkinQuery[], scopedVars: ScopedVars): ZipkinQuery[] {\n if (!queries || queries.length === 0) {\n return [];\n }\n\n return queries.map((query) => {\n return {\n ...query,\n datasource: this.getRef(),\n ...this.applyTemplateVariables(query, scopedVars),\n };\n });\n }\n\n applyTemplateVariables(query: ZipkinQuery, scopedVars: ScopedVars) {\n const expandedQuery = { ...query };\n\n return {\n ...expandedQuery,\n query: this.templateSrv.replace(query.query ?? '', scopedVars),\n };\n }\n}\n\nfunction responseToDataQueryResponse(response: { data: ZipkinSpan[] }, nodeGraph = false): DataQueryResponse {\n let data = response?.data ? [transformResponse(response?.data)] : [];\n if (nodeGraph) {\n data.push(...createGraphFrames(response?.data));\n }\n return {\n data,\n };\n}\n\nexport function addNodeGraphFramesToResponse(response: DataQueryResponse): DataQueryResponse {\n if (!response.data || response.data.length === 0) {\n return response;\n }\n\n // This is frame, but it is not typed, so we use toDataFrame to convert it to DataFrame\n const frame = toDataFrame(response.data[0]);\n const data = [...response.data];\n data.push(...createNodeGraphFrames(frame));\n return {\n ...response,\n data,\n };\n}\n\nconst emptyDataQueryResponse = {\n data: [\n createDataFrame({\n fields: [\n {\n name: 'trace',\n type: FieldType.trace,\n values: [],\n },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'zipkin',\n },\n },\n }),\n ],\n};\n","import { DataSourcePlugin } from '@grafana/data';\n\nimport { ConfigEditor } from './ConfigEditor';\nimport { ZipkinQueryField } from './QueryField';\nimport { ZipkinDatasource } from './datasource';\n\nexport const plugin = new DataSourcePlugin(ZipkinDatasource)\n .setQueryEditor(ZipkinQueryField)\n .setConfigEditor(ConfigEditor);\n"],"names":["module","exports","__WEBPACK_EXTERNAL_MODULE__7__","f","k","Symbol","for","l","m","Object","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","Fragment","jsx","jsxs","__WEBPACK_EXTERNAL_MODULE__59__","__WEBPACK_EXTERNAL_MODULE__89__","__WEBPACK_EXTERNAL_MODULE__241__","__WEBPACK_EXTERNAL_MODULE__269__","__WEBPACK_EXTERNAL_MODULE__308__","__WEBPACK_EXTERNAL_MODULE__531__","__WEBPACK_EXTERNAL_MODULE__781__","__WEBPACK_EXTERNAL_MODULE__959__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","o","defineProperty","enumerable","get","obj","prop","r","toStringTag","value","slice","lastIndexOf","GenericConfigSection","children","title","description","isCollapsible","isInitiallyOpen","kind","className","colors","typography","spacing","useTheme2","isOpen","setIsOpen","useState","iconName","isSubSection","collapsibleButtonAriaLabel","styles","header","css","display","justifyContent","alignItems","margin","subtitle","fontWeight","fontWeightRegular","descriptionText","marginTop","marginBottom","bodySmall","color","text","secondary","content","IconButton","name","onClick","size","ConfigSection","ConfigDescriptionLink","suffix","feature","useStyles2","getStyles","container","href","rel","target","theme","link","textDecoration","marginLeft","useDebounce","fn","ms","deps","_a","ready","useRef","timeout","callback","isReady","useCallback","set","clearTimeout","setTimeout","clear","useEffect","useTimeoutFn","cancel","reset","validateIntervalRegex","validateInterval","val","regex","match","IntervalInput","intervalIsInvalid","setIntervalIsInvalid","validationRegex","fieldProps","labelWidth","disabled","invalid","error","isInvalidError","label","tooltip","InlineField","Input","placeholder","width","onChange","currentTarget","aria-label","ariaLabel","TagMappingInput","values","id","div","wrapper","length","map","idx","pair","SegmentInput","v","i","String","InlineLabel","operator","ToolbarButton","cx","removeTag","icon","flexDirection","gap","v1","palette","orange","marginRight","TraceToLogsSettings","options","onOptionsChange","supportedDataSourceTypes","traceToLogs","useMemo","data","tracesToLogsV2","tracesToLogs","customQuery","datasourceUid","tags","mapTagNamesEnabled","mappedTags","tag","filterByTraceID","filterBySpanID","spanStartTimeShift","spanEndTimeShift","getTraceToLogsOptions","jsonData","query","updateTracesToLogs","InlineFieldRow","DataSourcePicker","inputId","filter","ds","includes","noDefault","uid","onClear","getTimeShiftLabel","getTimeShiftTooltip","invalidTimeShiftError","IdFilter","Boolean","InlineSwitch","event","checked","grow","allowFullScreen","defaultVal","TraceToLogsSection","TraceToMetricsSettings","row","pluginId","tracesToMetrics","updateDatasourcePluginJsonDataOption","queries","queryRow","newQueries","traceToMetricQuery","index","updatedQueries","Button","variant","_","TraceToMetricsSection","infoText","paddingBottom","flexFlow","ConfigSubSection","NodeGraphSettings","nodeGraph","enabled","NodeGraphSection","NONE","DURATION","TAG","SpanBarSettings","selectOptions","toOption","Select","spanBar","isClearable","SpanBarSection","DataSourceDescription","dataSourceName","docsLink","hasRequiredFields","body","ConnectionSettings","config","urlPlaceholder","urlTooltip","urlLabel","isValidUrl","url","test","maxWidth","htmlFor","readOnly","required","interactive","useCommonStyles","inlineFieldNoMarginRight","inlineFieldWithSecret","flexGrow","BasicAuth","user","passwordConfigured","userLabel","userTooltip","userPlaceholder","passwordLabel","passwordTooltip","passwordPlaceholder","onUserChange","onPasswordChange","onPasswordReset","commonStyles","lastInlineField","SecretInput","isConfigured","onReset","AuthMethod","AuthMethod2","defaultOptions","CrossSiteCredentials","OAuthForward","NoAuth","AuthMethodSettings","selectedMethod","mostCommonMethod","visibleMethods","visibleMethodsFromProps","defaultOptionsOverrides","customMethods","onAuthMethodSelect","basicAuth","_b","_c","_d","authMethodChanged","setAuthMethodChanged","_a2","hasSelect","preparedOptions","customOptions","reduce","acc","method","preparedDefaultOptions","allOptions","option","selected","AuthFieldsComponent","startsWith","find","component","authMethods","padding","border","weak","selectedMethodFields","Field","TLSSettingsSection","tooltipText","onToggle","checkboxContainer","infoIcon","Checkbox","Tooltip","placement","Icon","SelfSignedCertificate","certificateConfigured","onCertificateChange","onCertificateReset","tooltips","newEnabled","certificateLabel","SecretTextArea","rows","TLSClientAuth","serverName","clientCertificateConfigured","clientKeyConfigured","onServerNameChange","onClientCertificateChange","onClientKeyChange","onClientCertificateReset","onClientKeyReset","serverNameLabel","keyLabel","SkipTLSVerification","TLSSettings","selfSignedCertificate","TLSClientAuth$1","skipTLSVerification","CustomHeader","onBlur","onDelete","input","minWidth","headerNameField","paddingRight","headerValueField","removeHeaderBtn","configured","tooltipPlacement","CustomHeaders","headers","headersFromProps","setHeaders","uniqueId","headers2","changed","newHeaders","addHeaderButton","header2","onHeaderChange","findIndex","splice","onHeaderDelete","fill","Math","random","toString","Auth","TLS","customHeaders","headerNamePrefix","headerValuePrefix","convertLegacyAuthProps","getSelectedMethod","getOnAuthMethodSelectHandler","getBasicAuthProps","getTLSProps","getCustomHeaders","withCredentials","oauthPassThru","basicAuthUser","secureJsonFields","basicAuthPassword","password","secureJsonData","tlsAuthWithCACert","tlsCACert","certificate","tlsAuth","tlsClientCert","tlsClientKey","clientCertificate","clientKey","tlsSkipVerify","keys","sort","newJsonData","fromEntries","entries","newSecureJsonData","newSecureJsonFields","forEach","AdvancedHttpSettings","TagsInput","keepCookies","cookies","min","parseInt","__assign","assign","t","s","arguments","apply","this","create","SuppressedError","useMountedState","mountedRef","useAsyncFn","initialState","loading","lastCallId","isMounted","state","args","_i","callId","prevState","then","effect","timeoutMap","TemporaryAlert","style","position","zIndex","portal","top","right","visible","setVisible","timer","setTimer","severity","Alert","elevated","onRemove","tracesCascader","noTracesFoundOptions","isLeaf","noTracesOptions","createNodeGraphFrames","nodes","edges","view","DataFrameView","traceDuration","traceEndTime","traceStartTime","Infinity","startTime","duration","findTraceDuration","spanMap","makeSpanMap","span","spanID","parentIds","parentSpanID","childrenDuration","getNonOverlappingDuration","selfDuration","stats","getStats","push","Fields","serviceName","subTitle","operationName","mainStat","main","secondaryStat","source","convertTraceToGraph","nodesFrame","edgesFrame","makeFrames","node","add","edge","ranges","range","tail","prevStart","prevEnd","start","end","getSpan","parentId","toFixedNoTrailingZeros","parseFloat","toFixed","MutableDataFrame","fields","FieldType","string","displayName","number","mode","meta","preferredVisualisationType","createGraphFrames","spans","timestamp","localEndpoint","remoteEndpoint","transformResponse","zSpans","spanRows","transformSpan","frame","other","custom","traceFormat","traceID","traceId","serviceTags","logs","transformAnnotation","annotations","shared","annotation","endpoint","valueToTag","ipv4","ipv6","port","item","ZipkinDatasource","DataSourceWithBackend","targets","queryType","uploadedJson","of","traceData","JSON","parse","response","responseToDataQueryResponse","message","super","pipe","toDataFrame","addNodeGraphFramesToResponse","emptyDataQueryResponse","metadataRequest","params","getResource","testDatasource","getQueryDisplayText","interpolateVariablesInQueries","scopedVars","datasource","getRef","applyTemplateVariables","expandedQuery","templateSrv","replace","constructor","instanceSettings","getTemplateSrv","createDataFrame","trace","plugin","DataSourcePlugin","setQueryEditor","onRunQuery","uploadModalOpen","setUploadModalOpen","alertText","setAlertText","serviceOptions","setErrorText","servicesOptions","fetch","services","service","errorText","Error","useMount","useServices","onLoadOptions","setAllOptions","fetchSpans","spanOptions","fromPairs","fetchTraces","spanName","search","traces","newTraces","rootSpan","floor","selectedOptions","useLoadOptions","onSelectTrace","cascaderOptions","traceName","useMapToCascaderOptions","Modal","onDismiss","FileDropzone","multiple","onLoad","result","Stack","RadioButtonGroup","ButtonCascader","loadData","buttonProps","QueryField","nextQuery","portalOrigin","setConfigEditor","Divider","direction","secureSocksDSProxyEnabled","SecureSocksProxySettings"],"sourceRoot":""}
.
Edit
..
Edit
CHANGELOG.md
Edit
LICENSE
Edit
README.md
Edit
img
Edit
mocks
Edit
module.js
Edit
module.js.LICENSE.txt
Edit
module.js.map
Edit
plugin.json
Edit