@grafana/aws-sdk 0.0.39 → 0.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ConnectionConfig.d.ts +1 -0
- package/dist/index.development.js +15 -14
- package/dist/index.development.js.map +1 -1
- package/dist/index.production.js +2 -2
- package/dist/index.production.js.map +1 -1
- package/dist/sql/ConfigEditor/ConfigSelect.d.ts +1 -0
- package/dist/sql/ConfigEditor/InlineInput.d.ts +1 -0
- package/package.json +1 -1
|
@@ -72,7 +72,7 @@ const ConnectionConfig = (props) => {
|
|
|
72
72
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
73
73
|
const [regions, setRegions] = React.useState((props.standardRegions || standardRegions).map(toOption));
|
|
74
74
|
const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;
|
|
75
|
-
const options = props
|
|
75
|
+
const { labelWidth = 28, options } = props;
|
|
76
76
|
let profile = options.jsonData.profile;
|
|
77
77
|
if (profile === undefined) {
|
|
78
78
|
profile = options.database;
|
|
@@ -94,27 +94,27 @@ const ConnectionConfig = (props) => {
|
|
|
94
94
|
loadRegions().then((regions) => setRegions(regions.map(toOption)));
|
|
95
95
|
}, [loadRegions]);
|
|
96
96
|
return (React__default.createElement(ui.FieldSet, { label: skipHeader ? '' : 'Connection Details', "data-testid": "connection-config" },
|
|
97
|
-
React__default.createElement(ui.InlineField, { label: "Authentication Provider", labelWidth:
|
|
97
|
+
React__default.createElement(ui.InlineField, { label: "Authentication Provider", labelWidth: labelWidth, tooltip: "Specify which AWS credentials chain to use." },
|
|
98
98
|
React__default.createElement(ui.Select, { "aria-label": "Authentication Provider", className: "width-30", value: currentProvider, options: awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value)), defaultValue: options.jsonData.authType, onChange: (option) => {
|
|
99
99
|
data.onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);
|
|
100
100
|
}, menuShouldPortal: true })),
|
|
101
|
-
options.jsonData.authType === 'credentials' && (React__default.createElement(ui.InlineField, { label: "Credentials Profile Name", labelWidth:
|
|
101
|
+
options.jsonData.authType === 'credentials' && (React__default.createElement(ui.InlineField, { label: "Credentials Profile Name", labelWidth: labelWidth, tooltip: "Credentials profile name, as specified in ~/.aws/credentials, leave blank for default." },
|
|
102
102
|
React__default.createElement(ui.Input, { "aria-label": "Credentials Profile Name", className: "width-30", placeholder: "default", value: profile, onChange: data.onUpdateDatasourceJsonDataOption(props, 'profile') }))),
|
|
103
103
|
options.jsonData.authType === 'keys' && (React__default.createElement(React__default.Fragment, null,
|
|
104
|
-
React__default.createElement(ui.InlineField, { label: "Access Key ID", labelWidth:
|
|
104
|
+
React__default.createElement(ui.InlineField, { label: "Access Key ID", labelWidth: labelWidth }, ((_b = props.options.secureJsonFields) === null || _b === void 0 ? void 0 : _b.accessKey) ? (React__default.createElement(ui.ButtonGroup, { className: "width-30" },
|
|
105
105
|
React__default.createElement(ui.Input, { disabled: true, placeholder: "Configured" }),
|
|
106
106
|
React__default.createElement(ui.ToolbarButton, { icon: "edit", tooltip: "Edit Access Key ID", type: "button", onClick: data.onUpdateDatasourceResetOption(props, 'accessKey') }))) : (React__default.createElement(ui.Input, { "aria-label": "Access Key ID", className: "width-30", value: (_d = (_c = options.secureJsonData) === null || _c === void 0 ? void 0 : _c.accessKey) !== null && _d !== void 0 ? _d : '', onChange: data.onUpdateDatasourceSecureJsonDataOption(props, 'accessKey') }))),
|
|
107
|
-
React__default.createElement(ui.InlineField, { label: "Secret Access Key", labelWidth:
|
|
107
|
+
React__default.createElement(ui.InlineField, { label: "Secret Access Key", labelWidth: labelWidth }, ((_e = props.options.secureJsonFields) === null || _e === void 0 ? void 0 : _e.secretKey) ? (React__default.createElement(ui.ButtonGroup, { className: "width-30" },
|
|
108
108
|
React__default.createElement(ui.Input, { disabled: true, placeholder: "Configured" }),
|
|
109
109
|
React__default.createElement(ui.ToolbarButton, { icon: "edit", type: "button", tooltip: "Edit Secret Access Key", onClick: data.onUpdateDatasourceResetOption(props, 'secretKey') }))) : (React__default.createElement(ui.Input, { "aria-label": "Secret Access Key", className: "width-30", value: (_g = (_f = options.secureJsonData) === null || _f === void 0 ? void 0 : _f.secretKey) !== null && _g !== void 0 ? _g : '', onChange: data.onUpdateDatasourceSecureJsonDataOption(props, 'secretKey') }))))),
|
|
110
110
|
awsAssumeRoleEnabled && (React__default.createElement(React__default.Fragment, null,
|
|
111
|
-
React__default.createElement(ui.InlineField, { label: "Assume Role ARN", labelWidth:
|
|
111
|
+
React__default.createElement(ui.InlineField, { label: "Assume Role ARN", labelWidth: labelWidth, tooltip: "Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all" },
|
|
112
112
|
React__default.createElement(ui.Input, { "aria-label": "Assume Role ARN", className: "width-30", placeholder: "arn:aws:iam:*", value: options.jsonData.assumeRoleArn || '', onChange: data.onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn') })),
|
|
113
|
-
React__default.createElement(ui.InlineField, { label: "External ID", labelWidth:
|
|
113
|
+
React__default.createElement(ui.InlineField, { label: "External ID", labelWidth: labelWidth, tooltip: "If you are assuming a role in another account, that has been created with an external ID, specify the external ID here." },
|
|
114
114
|
React__default.createElement(ui.Input, { "aria-label": "External ID", className: "width-30", placeholder: "External ID", value: options.jsonData.externalId || '', onChange: data.onUpdateDatasourceJsonDataOption(props, 'externalId') })))),
|
|
115
|
-
!skipEndpoint && (React__default.createElement(ui.InlineField, { label: "Endpoint", labelWidth:
|
|
115
|
+
!skipEndpoint && (React__default.createElement(ui.InlineField, { label: "Endpoint", labelWidth: labelWidth, tooltip: "Optionally, specify a custom endpoint for the service" },
|
|
116
116
|
React__default.createElement(ui.Input, { "aria-label": "Endpoint", className: "width-30", placeholder: (_h = props.defaultEndpoint) !== null && _h !== void 0 ? _h : 'https://{service}.{region}.amazonaws.com', value: options.jsonData.endpoint || '', onChange: data.onUpdateDatasourceJsonDataOption(props, 'endpoint') }))),
|
|
117
|
-
React__default.createElement(ui.InlineField, { label: "Default Region", labelWidth:
|
|
117
|
+
React__default.createElement(ui.InlineField, { label: "Default Region", labelWidth: labelWidth, tooltip: "Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region." },
|
|
118
118
|
React__default.createElement(ui.Select, { "aria-label": "Default Region", className: "width-30", value: regions.find((region) => region.value === options.jsonData.defaultRegion), options: regions, defaultValue: options.jsonData.defaultRegion, allowCustomValue: true, onChange: data.onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion'), formatCreateLabel: (r) => `Use region: ${r}`, menuShouldPortal: true })),
|
|
119
119
|
props.children));
|
|
120
120
|
};
|
|
@@ -261,11 +261,11 @@ function ResourceSelector(props) {
|
|
|
261
261
|
}
|
|
262
262
|
|
|
263
263
|
function ConfigSelect(props) {
|
|
264
|
-
var _a, _b;
|
|
264
|
+
var _a, _b, _c;
|
|
265
265
|
const { jsonData } = props.options;
|
|
266
266
|
const commonProps = {
|
|
267
267
|
title: jsonData.defaultRegion ? '' : 'select a default region',
|
|
268
|
-
labelWidth: 28,
|
|
268
|
+
labelWidth: (_a = props.labelWidth) !== null && _a !== void 0 ? _a : 28,
|
|
269
269
|
className: 'width-30',
|
|
270
270
|
};
|
|
271
271
|
// Any change in the AWS connection details will affect selectors
|
|
@@ -276,14 +276,15 @@ function ConfigSelect(props) {
|
|
|
276
276
|
props.options.jsonData.endpoint,
|
|
277
277
|
props.options.jsonData.externalId,
|
|
278
278
|
props.options.jsonData.profile,
|
|
279
|
-
(
|
|
280
|
-
(
|
|
279
|
+
(_b = props.options.secureJsonData) === null || _b === void 0 ? void 0 : _b.accessKey,
|
|
280
|
+
(_c = props.options.secureJsonData) === null || _c === void 0 ? void 0 : _c.secretKey,
|
|
281
281
|
].concat(props.dependencies);
|
|
282
282
|
return (React__default.createElement(ResourceSelector, Object.assign({ label: props.label, "data-testid": props['data-testid'], onChange: props.onChange, fetch: props.fetch, value: props.value, saveOptions: props.saveOptions, dependencies: dependencies, hidden: props.hidden, disabled: props.disabled || !jsonData.defaultRegion, allowCustomValue: props.allowCustomValue, autoFocus: props.autoFocus, backspaceRemovesValue: props.backspaceRemovesValue, className: props.className, invalid: props.invalid, isClearable: props.isClearable, isMulti: props.isMulti, inputId: props.inputId, showAllSelectedWhenOpen: props.showAllSelectedWhenOpen, maxMenuHeight: props.maxMenuHeight, minMenuHeight: props.minMenuHeight, maxVisibleValues: props.maxVisibleValues, menuPlacement: props.menuPlacement, menuPosition: props.menuPosition, noOptionsMessage: props.noOptionsMessage, onBlur: props.onBlur, onCreateOption: props.onCreateOption, onInputChange: props.onInputChange, placeholder: props.placeholder, width: props.width, isOptionDisabled: props.isOptionDisabled }, commonProps)));
|
|
283
283
|
}
|
|
284
284
|
|
|
285
285
|
function InlineInput(props) {
|
|
286
|
-
|
|
286
|
+
var _a;
|
|
287
|
+
return (React__default.createElement(ui.InlineField, { label: props.label, labelWidth: (_a = props.labelWidth) !== null && _a !== void 0 ? _a : 28, tooltip: props.tooltip, hidden: props.hidden, disabled: props.disabled },
|
|
287
288
|
React__default.createElement(ui.Input, { "data-testid": props['data-testid'], className: "width-30", value: props.value, onChange: props.onChange, placeholder: props.placeholder, disabled: props.disabled })));
|
|
288
289
|
}
|
|
289
290
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.development.js","sources":["../src/regions.ts","../src/types.ts","../src/providers.ts","../src/ConnectionConfig.tsx","../src/SIGV4ConnectionConfig.tsx","../src/sql/types.ts","../src/sql/ResourceSelector.tsx","../src/sql/ConfigEditor/ConfigSelect.tsx","../src/sql/ConfigEditor/InlineInput.tsx","../src/sql/QueryEditor/QueryCodeEditor.tsx","../src/sql/QueryEditor/FormatSelect.tsx","../src/sql/QueryEditor/FillValueSelect.tsx","../src/sql/utils/utils.ts"],"sourcesContent":["export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ca-central-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-north-1',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'me-south-1',\n 'sa-east-1',\n 'us-east-1',\n 'us-east-2',\n 'us-gov-east-1',\n 'us-gov-west-1',\n 'us-iso-east-1',\n 'us-isob-east-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import { DataSourceJsonData, DataSourceSettings } from '@grafana/data';\n\nexport enum AwsAuthType {\n Keys = 'keys',\n Credentials = 'credentials',\n Default = 'default', // was 'arn',\n EC2IAMRole = 'ec2_iam_role',\n /**\n * @deprecated use default\n */\n ARN = 'arn',\n}\n\nexport interface AwsAuthDataSourceJsonData extends DataSourceJsonData {\n authType?: AwsAuthType;\n assumeRoleArn?: string;\n externalId?: string;\n profile?: string; // Credentials profile name, as specified in ~/.aws/credentials\n defaultRegion?: string; // region if it is not defined by your credentials file\n endpoint?: string;\n}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\n },\n {\n label: 'AWS SDK Default',\n value: AwsAuthType.Default,\n },\n {\n label: 'Access & secret key',\n value: AwsAuthType.Keys,\n },\n {\n label: 'Credentials file',\n value: AwsAuthType.Credentials,\n },\n] as Array<SelectableValue<AwsAuthType>>;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\n\nimport { standardRegions } from './regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from './types';\nimport { awsAuthProviderOptions } from './providers';\n\nconst toOption = (value: string) => ({ value, label: value });\n\nexport interface ConnectionConfigProps<J = AwsAuthDataSourceJsonData, S = AwsAuthDataSourceSecureJsonData>\n extends DataSourcePluginOptionsEditorProps<J, S> {\n standardRegions?: string[];\n loadRegions?: () => Promise<string[]>;\n defaultEndpoint?: string;\n skipHeader?: boolean;\n skipEndpoint?: boolean;\n children?: React.ReactNode;\n}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const options = props.options;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n\n const settings = (window as any).grafanaBootData.settings;\n const awsAllowedAuthProviders = useMemo(\n () => settings.awsAllowedAuthProviders ?? [AwsAuthType.Default, AwsAuthType.Keys, AwsAuthType.Credentials],\n [settings.awsAllowedAuthProviders]\n );\n const awsAssumeRoleEnabled = settings.awsAssumeRoleEnabled ?? true;\n\n const currentProvider = awsAuthProviderOptions.find((p) => p.value === options.jsonData.authType);\n\n useEffect(() => {\n // Make sure a authType exists in the current model\n if (!currentProvider && awsAllowedAuthProviders.length) {\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange, awsAllowedAuthProviders]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={28}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className=\"width-30\"\n value={currentProvider}\n options={awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value!))}\n defaultValue={options.jsonData.authType}\n onChange={(option) => {\n onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);\n }}\n menuShouldPortal={true}\n />\n </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={28}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className=\"width-30\"\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={28}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n tooltip=\"Edit Access Key ID\"\n type=\"button\"\n onClick={onUpdateDatasourceResetOption(props as any, 'accessKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Access Key ID\"\n className=\"width-30\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={28}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n type=\"button\"\n tooltip=\"Edit Secret Access Key\"\n onClick={onUpdateDatasourceResetOption(props as any, 'secretKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Secret Access Key\"\n className=\"width-30\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={28}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className=\"width-30\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n <InlineField\n label=\"External ID\"\n labelWidth={28}\n tooltip=\"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.\"\n >\n <Input\n aria-label=\"External ID\"\n className=\"width-30\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n </>\n )}\n {!skipEndpoint && (\n <InlineField label=\"Endpoint\" labelWidth={28} tooltip=\"Optionally, specify a custom endpoint for the service\">\n <Input\n aria-label=\"Endpoint\"\n className=\"width-30\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={28}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className=\"width-30\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n menuShouldPortal={true}\n />\n </InlineField>\n {props.children}\n </FieldSet>\n );\n};\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig, ConnectionConfigProps } from './ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData } from './types';\n\nexport const SIGV4ConnectionConfig: React.FC<DataSourcePluginOptionsEditorProps<any, any>> = (\n props: DataSourcePluginOptionsEditorProps<any, any>\n) => {\n const { onOptionsChange, options } = props;\n\n // Map HttpSettings props to ConnectionConfigProps\n const connectionConfigProps: ConnectionConfigProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> = {\n onOptionsChange: (awsDataSourceSettings) => {\n const dataSourceSettings: DataSourceSettings<any, any> = {\n ...options,\n jsonData: {\n ...options.jsonData,\n sigV4AuthType: awsDataSourceSettings.jsonData.authType,\n sigV4Profile: awsDataSourceSettings.jsonData.profile,\n sigV4AssumeRoleArn: awsDataSourceSettings.jsonData.assumeRoleArn,\n sigV4ExternalId: awsDataSourceSettings.jsonData.externalId,\n sigV4Region: awsDataSourceSettings.jsonData.defaultRegion,\n sigV4Endpoint: awsDataSourceSettings.jsonData.endpoint,\n },\n secureJsonFields: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonFields?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonFields?.secretKey,\n },\n secureJsonData: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonData?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonData?.secretKey,\n },\n };\n onOptionsChange(dataSourceSettings);\n },\n options: {\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: options.jsonData.sigV4AuthType,\n profile: options.jsonData.sigV4Profile,\n assumeRoleArn: options.jsonData.sigV4AssumeRoleArn,\n externalId: options.jsonData.sigV4ExternalId,\n defaultRegion: options.jsonData.sigV4Region,\n endpoint: options.jsonData.sigV4Endpoint,\n },\n secureJsonFields: {\n accessKey: options.secureJsonFields?.sigV4AccessKey,\n secretKey: options.secureJsonFields?.sigV4SecretKey,\n },\n secureJsonData: {\n accessKey: options.secureJsonData?.sigV4AccessKey,\n secretKey: options.secureJsonData?.sigV4SecretKey,\n },\n },\n };\n\n return (\n <>\n <div className=\"gf-form\">\n <h6>SigV4 Auth Details</h6>\n </div>\n <ConnectionConfig {...connectionConfigProps} skipHeader skipEndpoint></ConnectionConfig>\n </>\n );\n};\n","import { DataQuery } from '@grafana/data';\nimport { FillValueOptions } from './QueryEditor/FillValueSelect';\n\nexport const defaultKey = '__default';\n\nexport interface SQLQuery extends DataQuery {\n rawSQL: string;\n format?: number;\n fillMode?: { mode: FillValueOptions; value?: number };\n}\n","import { SelectableValue } from '@grafana/data';\nimport { InlineField, Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n value: string | null;\n dependencies?: Array<string | null | undefined>;\n tooltip?: string;\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const [resource, setResource] = useState<string | null>(props.value || props.default || null);\n const [resources, setResources] = useState<Array<string | SelectableValue>>(resource ? [resource] : []);\n const [dependencies, setDependencies] = useState(props.dependencies);\n const [isLoading, setIsLoading] = useState(false);\n const [fetched, setFetched] = useState(false);\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>(props.default ? defaultOpts : []);\n useEffect(() => {\n if (props.resources !== undefined) {\n setResources(props.resources);\n }\n }, [props.resources]);\n useEffect(() => {\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n if (resources.length) {\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n setOptions(newOptions);\n } else {\n setOptions([]);\n }\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(props.dependencies, dependencies)) {\n setFetched(false);\n setResource(null);\n props.onChange(null);\n setDependencies(props.dependencies);\n }\n }, [props, dependencies]);\n\n const fetch = async () => {\n if (fetched) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = await props.fetch();\n setResources(resources);\n } finally {\n setFetched(true);\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n props.onChange(e);\n if (e.value) {\n setResource(e.value);\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <InlineField label={props.label} labelWidth={props.labelWidth} tooltip={props.tooltip} hidden={props.hidden}>\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n {...props}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n </div>\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\n\nexport interface ConfigSelectProps\n extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: 28,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: string[] = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n className={props.className}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n placeholder={props.placeholder}\n width={props.width}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\n\nexport interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {\n value: string;\n onChange: (e: FormEvent<HTMLInputElement>) => void;\n label?: string;\n tooltip?: string;\n placeholder?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={28}\n tooltip={props.tooltip}\n hidden={props.hidden}\n disabled={props.disabled}\n >\n <Input\n data-testid={props['data-testid']}\n className=\"width-30\"\n value={props.value}\n onChange={props.onChange}\n placeholder={props.placeholder}\n disabled={props.disabled}\n />\n </InlineField>\n );\n}\n","import { defaults } from 'lodash';\n\nimport React, { useRef, useEffect } from 'react';\nimport { CodeEditor, CodeEditorSuggestionItem, CodeEditorMonacoOptions } from '@grafana/ui';\nimport { DataQuery } from '@grafana/data';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: CodeEditorMonacoOptions;\n};\n\ntype Props<TQuery extends DataQuery> = {\n query: TQuery;\n language: string;\n editorProps?: EditorProps;\n onChange: (value: TQuery) => void;\n onRunQuery: () => void;\n getSuggestions: (query: TQuery) => CodeEditorSuggestionItem[];\n};\n\nexport function QueryCodeEditor<TQuery extends DataQuery>(props: Props<TQuery>) {\n const { getSuggestions, query } = props;\n const { rawSQL } = defaults(props.query, { rawSQL: '' });\n const onRawSqlChange = (rawSQL: string) => {\n const query = {\n ...props.query,\n rawSQL,\n };\n props.onChange(query);\n props.onRunQuery();\n };\n\n // Use a reference for suggestions because a bug in CodeEditor getSuggestions\n // https://github.com/grafana/grafana/issues/40121\n // It was been fixed in 8.3 but keeping the workaround here to support older\n // versions.\n const suggestionsRef = useRef<CodeEditorSuggestionItem[]>([]);\n useEffect(() => {\n suggestionsRef.current = getSuggestions(query);\n }, [getSuggestions, query]);\n\n return (\n <CodeEditor\n language={props.language}\n value={rawSQL}\n onBlur={onRawSqlChange}\n showMiniMap={false}\n showLineNumbers={true}\n getSuggestions={() => suggestionsRef.current}\n height=\"240px\"\n {...props.editorProps}\n />\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n query: TQuery;\n options: Array<SelectableValue<FormatOptions>>;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(\n props: FormatSelectProps<TQuery, FormatOptions>\n) {\n const onChangeFormat = (e: SelectableValue<FormatOptions>) => {\n props.onChange({\n ...props.query,\n format: e.value || 0,\n });\n props.onRunQuery?.();\n };\n return (\n <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/ui';\n\nexport enum FillValueOptions {\n Previous,\n Null,\n Value,\n}\n\nexport const SelectableFillValueOptions: Array<SelectableValue<FillValueOptions>> = [\n {\n label: 'Previous Value',\n value: FillValueOptions.Previous,\n },\n {\n label: 'NULL',\n value: FillValueOptions.Null,\n },\n {\n label: 'Value',\n value: FillValueOptions.Value,\n },\n];\n\nexport type FillValueSelectProps<TQuery extends DataQuery> = {\n query: TQuery;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>) {\n return (\n <>\n <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </InlineField>\n )}\n </>\n );\n}\n","import { ScopedVars, VariableModel } from '@grafana/data';\nimport { SQLQuery } from '../types';\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind } from '@grafana/ui';\n\n/**\n * Do not execute queries that do not exist yet\n */\nexport function filterSQLQuery(query: SQLQuery): boolean {\n return !!query.rawSQL;\n}\n\nexport function applySQLTemplateVariables(\n query: SQLQuery,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): SQLQuery {\n const templateSrv = getTemplateSrv();\n return {\n ...query,\n rawSQL: templateSrv.replace(query.rawSQL, scopedVars, interpolateVariable),\n };\n}\n\nfunction interpolateVariable(value: string | string[]) {\n if (typeof value === 'string') {\n return value;\n }\n\n const quotedValues = value.map((v) => {\n return quoteLiteral(v);\n });\n return quotedValues.join(',');\n}\n\nfunction quoteLiteral(value: any) {\n return \"'\" + String(value).replace(/'/g, \"''\") + \"'\";\n}\n\nexport const appendTemplateVariablesAsSuggestions = (getTemplateSrv: () => any, sugs: CodeEditorSuggestionItem[]) => {\n const templateSrv = getTemplateSrv();\n const templateSugs: CodeEditorSuggestionItem[] = [];\n templateSrv.getVariables().forEach((variable: VariableModel) => {\n const label = '$' + variable.name;\n let val = templateSrv.replace(label);\n if (val === label) {\n val = '';\n }\n templateSugs.push({\n label,\n kind: CodeEditorSuggestionItemKind.Text,\n detail: `(Template Variable) ${val}`,\n });\n });\n\n return sugs.concat(templateSugs);\n};\n"],"names":["AwsAuthType","useState","useMemo","useEffect","React","FieldSet","InlineField","Select","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","ButtonGroup","ToolbarButton","onUpdateDatasourceResetOption","onUpdateDatasourceSecureJsonDataOption","isEqual","defaults","useRef","CodeEditor","FillValueOptions","CodeEditorSuggestionItemKind"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.development.js","sources":["../src/regions.ts","../src/types.ts","../src/providers.ts","../src/ConnectionConfig.tsx","../src/SIGV4ConnectionConfig.tsx","../src/sql/types.ts","../src/sql/ResourceSelector.tsx","../src/sql/ConfigEditor/ConfigSelect.tsx","../src/sql/ConfigEditor/InlineInput.tsx","../src/sql/QueryEditor/QueryCodeEditor.tsx","../src/sql/QueryEditor/FormatSelect.tsx","../src/sql/QueryEditor/FillValueSelect.tsx","../src/sql/utils/utils.ts"],"sourcesContent":["export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ca-central-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-north-1',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'me-south-1',\n 'sa-east-1',\n 'us-east-1',\n 'us-east-2',\n 'us-gov-east-1',\n 'us-gov-west-1',\n 'us-iso-east-1',\n 'us-isob-east-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import { DataSourceJsonData, DataSourceSettings } from '@grafana/data';\n\nexport enum AwsAuthType {\n Keys = 'keys',\n Credentials = 'credentials',\n Default = 'default', // was 'arn',\n EC2IAMRole = 'ec2_iam_role',\n /**\n * @deprecated use default\n */\n ARN = 'arn',\n}\n\nexport interface AwsAuthDataSourceJsonData extends DataSourceJsonData {\n authType?: AwsAuthType;\n assumeRoleArn?: string;\n externalId?: string;\n profile?: string; // Credentials profile name, as specified in ~/.aws/credentials\n defaultRegion?: string; // region if it is not defined by your credentials file\n endpoint?: string;\n}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\n },\n {\n label: 'AWS SDK Default',\n value: AwsAuthType.Default,\n },\n {\n label: 'Access & secret key',\n value: AwsAuthType.Keys,\n },\n {\n label: 'Credentials file',\n value: AwsAuthType.Credentials,\n },\n] as Array<SelectableValue<AwsAuthType>>;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\n\nimport { standardRegions } from './regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from './types';\nimport { awsAuthProviderOptions } from './providers';\n\nconst toOption = (value: string) => ({ value, label: value });\n\nexport interface ConnectionConfigProps<J = AwsAuthDataSourceJsonData, S = AwsAuthDataSourceSecureJsonData>\n extends DataSourcePluginOptionsEditorProps<J, S> {\n standardRegions?: string[];\n loadRegions?: () => Promise<string[]>;\n defaultEndpoint?: string;\n skipHeader?: boolean;\n skipEndpoint?: boolean;\n children?: React.ReactNode;\n labelWidth?: number;\n}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const { labelWidth = 28, options } = props;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n\n const settings = (window as any).grafanaBootData.settings;\n const awsAllowedAuthProviders = useMemo(\n () => settings.awsAllowedAuthProviders ?? [AwsAuthType.Default, AwsAuthType.Keys, AwsAuthType.Credentials],\n [settings.awsAllowedAuthProviders]\n );\n const awsAssumeRoleEnabled = settings.awsAssumeRoleEnabled ?? true;\n\n const currentProvider = awsAuthProviderOptions.find((p) => p.value === options.jsonData.authType);\n\n useEffect(() => {\n // Make sure a authType exists in the current model\n if (!currentProvider && awsAllowedAuthProviders.length) {\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange, awsAllowedAuthProviders]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={labelWidth}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className=\"width-30\"\n value={currentProvider}\n options={awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value!))}\n defaultValue={options.jsonData.authType}\n onChange={(option) => {\n onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);\n }}\n menuShouldPortal={true}\n />\n </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={labelWidth}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className=\"width-30\"\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={labelWidth}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n tooltip=\"Edit Access Key ID\"\n type=\"button\"\n onClick={onUpdateDatasourceResetOption(props as any, 'accessKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Access Key ID\"\n className=\"width-30\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={labelWidth}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n type=\"button\"\n tooltip=\"Edit Secret Access Key\"\n onClick={onUpdateDatasourceResetOption(props as any, 'secretKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Secret Access Key\"\n className=\"width-30\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={labelWidth}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className=\"width-30\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n <InlineField\n label=\"External ID\"\n labelWidth={labelWidth}\n tooltip=\"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.\"\n >\n <Input\n aria-label=\"External ID\"\n className=\"width-30\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n </>\n )}\n {!skipEndpoint && (\n <InlineField\n label=\"Endpoint\"\n labelWidth={labelWidth}\n tooltip=\"Optionally, specify a custom endpoint for the service\"\n >\n <Input\n aria-label=\"Endpoint\"\n className=\"width-30\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={labelWidth}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className=\"width-30\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n menuShouldPortal={true}\n />\n </InlineField>\n {props.children}\n </FieldSet>\n );\n};\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig, ConnectionConfigProps } from './ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData } from './types';\n\nexport const SIGV4ConnectionConfig: React.FC<DataSourcePluginOptionsEditorProps<any, any>> = (\n props: DataSourcePluginOptionsEditorProps<any, any>\n) => {\n const { onOptionsChange, options } = props;\n\n // Map HttpSettings props to ConnectionConfigProps\n const connectionConfigProps: ConnectionConfigProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> = {\n onOptionsChange: (awsDataSourceSettings) => {\n const dataSourceSettings: DataSourceSettings<any, any> = {\n ...options,\n jsonData: {\n ...options.jsonData,\n sigV4AuthType: awsDataSourceSettings.jsonData.authType,\n sigV4Profile: awsDataSourceSettings.jsonData.profile,\n sigV4AssumeRoleArn: awsDataSourceSettings.jsonData.assumeRoleArn,\n sigV4ExternalId: awsDataSourceSettings.jsonData.externalId,\n sigV4Region: awsDataSourceSettings.jsonData.defaultRegion,\n sigV4Endpoint: awsDataSourceSettings.jsonData.endpoint,\n },\n secureJsonFields: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonFields?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonFields?.secretKey,\n },\n secureJsonData: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonData?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonData?.secretKey,\n },\n };\n onOptionsChange(dataSourceSettings);\n },\n options: {\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: options.jsonData.sigV4AuthType,\n profile: options.jsonData.sigV4Profile,\n assumeRoleArn: options.jsonData.sigV4AssumeRoleArn,\n externalId: options.jsonData.sigV4ExternalId,\n defaultRegion: options.jsonData.sigV4Region,\n endpoint: options.jsonData.sigV4Endpoint,\n },\n secureJsonFields: {\n accessKey: options.secureJsonFields?.sigV4AccessKey,\n secretKey: options.secureJsonFields?.sigV4SecretKey,\n },\n secureJsonData: {\n accessKey: options.secureJsonData?.sigV4AccessKey,\n secretKey: options.secureJsonData?.sigV4SecretKey,\n },\n },\n };\n\n return (\n <>\n <div className=\"gf-form\">\n <h6>SigV4 Auth Details</h6>\n </div>\n <ConnectionConfig {...connectionConfigProps} skipHeader skipEndpoint></ConnectionConfig>\n </>\n );\n};\n","import { DataQuery } from '@grafana/data';\nimport { FillValueOptions } from './QueryEditor/FillValueSelect';\n\nexport const defaultKey = '__default';\n\nexport interface SQLQuery extends DataQuery {\n rawSQL: string;\n format?: number;\n fillMode?: { mode: FillValueOptions; value?: number };\n}\n","import { SelectableValue } from '@grafana/data';\nimport { InlineField, Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n value: string | null;\n dependencies?: Array<string | null | undefined>;\n tooltip?: string;\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const [resource, setResource] = useState<string | null>(props.value || props.default || null);\n const [resources, setResources] = useState<Array<string | SelectableValue>>(resource ? [resource] : []);\n const [dependencies, setDependencies] = useState(props.dependencies);\n const [isLoading, setIsLoading] = useState(false);\n const [fetched, setFetched] = useState(false);\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>(props.default ? defaultOpts : []);\n useEffect(() => {\n if (props.resources !== undefined) {\n setResources(props.resources);\n }\n }, [props.resources]);\n useEffect(() => {\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n if (resources.length) {\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n setOptions(newOptions);\n } else {\n setOptions([]);\n }\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(props.dependencies, dependencies)) {\n setFetched(false);\n setResource(null);\n props.onChange(null);\n setDependencies(props.dependencies);\n }\n }, [props, dependencies]);\n\n const fetch = async () => {\n if (fetched) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = await props.fetch();\n setResources(resources);\n } finally {\n setFetched(true);\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n props.onChange(e);\n if (e.value) {\n setResource(e.value);\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <InlineField label={props.label} labelWidth={props.labelWidth} tooltip={props.tooltip} hidden={props.hidden}>\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n {...props}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n </div>\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\n\nexport interface ConfigSelectProps\n extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n labelWidth?: number;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: props.labelWidth ?? 28,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: string[] = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n className={props.className}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n placeholder={props.placeholder}\n width={props.width}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\n\nexport interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {\n value: string;\n onChange: (e: FormEvent<HTMLInputElement>) => void;\n label?: string;\n tooltip?: string;\n placeholder?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n labelWidth?: number;\n}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={props.labelWidth ?? 28}\n tooltip={props.tooltip}\n hidden={props.hidden}\n disabled={props.disabled}\n >\n <Input\n data-testid={props['data-testid']}\n className=\"width-30\"\n value={props.value}\n onChange={props.onChange}\n placeholder={props.placeholder}\n disabled={props.disabled}\n />\n </InlineField>\n );\n}\n","import { defaults } from 'lodash';\n\nimport React, { useRef, useEffect } from 'react';\nimport { CodeEditor, CodeEditorSuggestionItem, CodeEditorMonacoOptions } from '@grafana/ui';\nimport { DataQuery } from '@grafana/data';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: CodeEditorMonacoOptions;\n};\n\ntype Props<TQuery extends DataQuery> = {\n query: TQuery;\n language: string;\n editorProps?: EditorProps;\n onChange: (value: TQuery) => void;\n onRunQuery: () => void;\n getSuggestions: (query: TQuery) => CodeEditorSuggestionItem[];\n};\n\nexport function QueryCodeEditor<TQuery extends DataQuery>(props: Props<TQuery>) {\n const { getSuggestions, query } = props;\n const { rawSQL } = defaults(props.query, { rawSQL: '' });\n const onRawSqlChange = (rawSQL: string) => {\n const query = {\n ...props.query,\n rawSQL,\n };\n props.onChange(query);\n props.onRunQuery();\n };\n\n // Use a reference for suggestions because a bug in CodeEditor getSuggestions\n // https://github.com/grafana/grafana/issues/40121\n // It was been fixed in 8.3 but keeping the workaround here to support older\n // versions.\n const suggestionsRef = useRef<CodeEditorSuggestionItem[]>([]);\n useEffect(() => {\n suggestionsRef.current = getSuggestions(query);\n }, [getSuggestions, query]);\n\n return (\n <CodeEditor\n language={props.language}\n value={rawSQL}\n onBlur={onRawSqlChange}\n showMiniMap={false}\n showLineNumbers={true}\n getSuggestions={() => suggestionsRef.current}\n height=\"240px\"\n {...props.editorProps}\n />\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n query: TQuery;\n options: Array<SelectableValue<FormatOptions>>;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(\n props: FormatSelectProps<TQuery, FormatOptions>\n) {\n const onChangeFormat = (e: SelectableValue<FormatOptions>) => {\n props.onChange({\n ...props.query,\n format: e.value || 0,\n });\n props.onRunQuery?.();\n };\n return (\n <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/ui';\n\nexport enum FillValueOptions {\n Previous,\n Null,\n Value,\n}\n\nexport const SelectableFillValueOptions: Array<SelectableValue<FillValueOptions>> = [\n {\n label: 'Previous Value',\n value: FillValueOptions.Previous,\n },\n {\n label: 'NULL',\n value: FillValueOptions.Null,\n },\n {\n label: 'Value',\n value: FillValueOptions.Value,\n },\n];\n\nexport type FillValueSelectProps<TQuery extends DataQuery> = {\n query: TQuery;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>) {\n return (\n <>\n <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </InlineField>\n )}\n </>\n );\n}\n","import { ScopedVars, VariableModel } from '@grafana/data';\nimport { SQLQuery } from '../types';\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind } from '@grafana/ui';\n\n/**\n * Do not execute queries that do not exist yet\n */\nexport function filterSQLQuery(query: SQLQuery): boolean {\n return !!query.rawSQL;\n}\n\nexport function applySQLTemplateVariables(\n query: SQLQuery,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): SQLQuery {\n const templateSrv = getTemplateSrv();\n return {\n ...query,\n rawSQL: templateSrv.replace(query.rawSQL, scopedVars, interpolateVariable),\n };\n}\n\nfunction interpolateVariable(value: string | string[]) {\n if (typeof value === 'string') {\n return value;\n }\n\n const quotedValues = value.map((v) => {\n return quoteLiteral(v);\n });\n return quotedValues.join(',');\n}\n\nfunction quoteLiteral(value: any) {\n return \"'\" + String(value).replace(/'/g, \"''\") + \"'\";\n}\n\nexport const appendTemplateVariablesAsSuggestions = (getTemplateSrv: () => any, sugs: CodeEditorSuggestionItem[]) => {\n const templateSrv = getTemplateSrv();\n const templateSugs: CodeEditorSuggestionItem[] = [];\n templateSrv.getVariables().forEach((variable: VariableModel) => {\n const label = '$' + variable.name;\n let val = templateSrv.replace(label);\n if (val === label) {\n val = '';\n }\n templateSugs.push({\n label,\n kind: CodeEditorSuggestionItemKind.Text,\n detail: `(Template Variable) ${val}`,\n });\n });\n\n return sugs.concat(templateSugs);\n};\n"],"names":["AwsAuthType","useState","useMemo","useEffect","React","FieldSet","InlineField","Select","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","ButtonGroup","ToolbarButton","onUpdateDatasourceResetOption","onUpdateDatasourceSecureJsonDataOption","isEqual","defaults","useRef","CodeEditor","FillValueOptions","CodeEditorSuggestionItemKind"],"mappings":"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"}
|
package/dist/index.production.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),a=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,n=require("@grafana/ui"),l=require("@grafana/data"),s=require("lodash");const o=["af-south-1","ap-east-1","ap-northeast-1","ap-northeast-2","ap-northeast-3","ap-south-1","ap-southeast-1","ap-southeast-2","ca-central-1","cn-north-1","cn-northwest-1","eu-central-1","eu-north-1","eu-west-1","eu-west-2","eu-west-3","me-south-1","sa-east-1","us-east-1","us-east-2","us-gov-east-1","us-gov-west-1","us-iso-east-1","us-isob-east-1","us-west-1","us-west-2"];var i;(i=exports.AwsAuthType||(exports.AwsAuthType={})).Keys="keys",i.Credentials="credentials",i.Default="default",i.EC2IAMRole="ec2_iam_role",i.ARN="arn";const u=[{label:"Workspace IAM Role",value:exports.AwsAuthType.EC2IAMRole},{label:"AWS SDK Default",value:exports.AwsAuthType.Default},{label:"Access & secret key",value:exports.AwsAuthType.Keys},{label:"Credentials file",value:exports.AwsAuthType.Credentials}],r=e=>({value:e,label:e}),c=e=>{var s,i,c,d,p,h,g,v;const[m,f]=t.useState((e.standardRegions||o).map(r)),{loadRegions:b,onOptionsChange:y,skipHeader:D=!1,skipEndpoint:E=!1}=e,O=e
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),a=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,n=require("@grafana/ui"),l=require("@grafana/data"),s=require("lodash");const o=["af-south-1","ap-east-1","ap-northeast-1","ap-northeast-2","ap-northeast-3","ap-south-1","ap-southeast-1","ap-southeast-2","ca-central-1","cn-north-1","cn-northwest-1","eu-central-1","eu-north-1","eu-west-1","eu-west-2","eu-west-3","me-south-1","sa-east-1","us-east-1","us-east-2","us-gov-east-1","us-gov-west-1","us-iso-east-1","us-isob-east-1","us-west-1","us-west-2"];var i;(i=exports.AwsAuthType||(exports.AwsAuthType={})).Keys="keys",i.Credentials="credentials",i.Default="default",i.EC2IAMRole="ec2_iam_role",i.ARN="arn";const u=[{label:"Workspace IAM Role",value:exports.AwsAuthType.EC2IAMRole},{label:"AWS SDK Default",value:exports.AwsAuthType.Default},{label:"Access & secret key",value:exports.AwsAuthType.Keys},{label:"Credentials file",value:exports.AwsAuthType.Credentials}],r=e=>({value:e,label:e}),c=e=>{var s,i,c,d,p,h,g,v;const[m,f]=t.useState((e.standardRegions||o).map(r)),{loadRegions:b,onOptionsChange:y,skipHeader:D=!1,skipEndpoint:E=!1}=e,{labelWidth:O=28,options:j}=e;let w=j.jsonData.profile;void 0===w&&(w=j.database);const A=window.grafanaBootData.settings,C=t.useMemo(()=>{var e;return null!==(e=A.awsAllowedAuthProviders)&&void 0!==e?e:[exports.AwsAuthType.Default,exports.AwsAuthType.Keys,exports.AwsAuthType.Credentials]},[A.awsAllowedAuthProviders]),S=null===(s=A.awsAssumeRoleEnabled)||void 0===s||s,V=u.find(e=>e.value===j.jsonData.authType);return t.useEffect(()=>{!V&&C.length&&y(Object.assign(Object.assign({},j),{jsonData:Object.assign(Object.assign({},j.jsonData),{authType:C[0]})}))},[V,j,y,C]),t.useEffect(()=>{b&&b().then(e=>f(e.map(r)))},[b]),a.createElement(n.FieldSet,{label:D?"":"Connection Details","data-testid":"connection-config"},a.createElement(n.InlineField,{label:"Authentication Provider",labelWidth:O,tooltip:"Specify which AWS credentials chain to use."},a.createElement(n.Select,{"aria-label":"Authentication Provider",className:"width-30",value:V,options:u.filter(e=>C.includes(e.value)),defaultValue:j.jsonData.authType,onChange:t=>{l.onUpdateDatasourceJsonDataOptionSelect(e,"authType")(t)},menuShouldPortal:!0})),"credentials"===j.jsonData.authType&&a.createElement(n.InlineField,{label:"Credentials Profile Name",labelWidth:O,tooltip:"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default."},a.createElement(n.Input,{"aria-label":"Credentials Profile Name",className:"width-30",placeholder:"default",value:w,onChange:l.onUpdateDatasourceJsonDataOption(e,"profile")})),"keys"===j.jsonData.authType&&a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Access Key ID",labelWidth:O},(null===(i=e.options.secureJsonFields)||void 0===i?void 0:i.accessKey)?a.createElement(n.ButtonGroup,{className:"width-30"},a.createElement(n.Input,{disabled:!0,placeholder:"Configured"}),a.createElement(n.ToolbarButton,{icon:"edit",tooltip:"Edit Access Key ID",type:"button",onClick:l.onUpdateDatasourceResetOption(e,"accessKey")})):a.createElement(n.Input,{"aria-label":"Access Key ID",className:"width-30",value:null!==(d=null===(c=j.secureJsonData)||void 0===c?void 0:c.accessKey)&&void 0!==d?d:"",onChange:l.onUpdateDatasourceSecureJsonDataOption(e,"accessKey")})),a.createElement(n.InlineField,{label:"Secret Access Key",labelWidth:O},(null===(p=e.options.secureJsonFields)||void 0===p?void 0:p.secretKey)?a.createElement(n.ButtonGroup,{className:"width-30"},a.createElement(n.Input,{disabled:!0,placeholder:"Configured"}),a.createElement(n.ToolbarButton,{icon:"edit",type:"button",tooltip:"Edit Secret Access Key",onClick:l.onUpdateDatasourceResetOption(e,"secretKey")})):a.createElement(n.Input,{"aria-label":"Secret Access Key",className:"width-30",value:null!==(g=null===(h=j.secureJsonData)||void 0===h?void 0:h.secretKey)&&void 0!==g?g:"",onChange:l.onUpdateDatasourceSecureJsonDataOption(e,"secretKey")}))),S&&a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Assume Role ARN",labelWidth:O,tooltip:"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all"},a.createElement(n.Input,{"aria-label":"Assume Role ARN",className:"width-30",placeholder:"arn:aws:iam:*",value:j.jsonData.assumeRoleArn||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"assumeRoleArn")})),a.createElement(n.InlineField,{label:"External ID",labelWidth:O,tooltip:"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here."},a.createElement(n.Input,{"aria-label":"External ID",className:"width-30",placeholder:"External ID",value:j.jsonData.externalId||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"externalId")}))),!E&&a.createElement(n.InlineField,{label:"Endpoint",labelWidth:O,tooltip:"Optionally, specify a custom endpoint for the service"},a.createElement(n.Input,{"aria-label":"Endpoint",className:"width-30",placeholder:null!==(v=e.defaultEndpoint)&&void 0!==v?v:"https://{service}.{region}.amazonaws.com",value:j.jsonData.endpoint||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"endpoint")})),a.createElement(n.InlineField,{label:"Default Region",labelWidth:O,tooltip:"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region."},a.createElement(n.Select,{"aria-label":"Default Region",className:"width-30",value:m.find(e=>e.value===j.jsonData.defaultRegion),options:m,defaultValue:j.jsonData.defaultRegion,allowCustomValue:!0,onChange:l.onUpdateDatasourceJsonDataOptionSelect(e,"defaultRegion"),formatCreateLabel:e=>"Use region: "+e,menuShouldPortal:!0})),e.children)};
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -13,5 +13,5 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
15
|
***************************************************************************** */
|
|
16
|
-
function d(e,t,a,n){return new(a||(a=Promise))((function(l,s){function o(e){try{u(n.next(e))}catch(e){s(e)}}function i(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?l(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(o,i)}u((n=n.apply(e,t||[])).next())}))}function p(e){const[l,o]=t.useState(e.value||e.default||null),[i,u]=t.useState(l?[l]:[]),[r,c]=t.useState(e.dependencies),[p,h]=t.useState(!1),[g,v]=t.useState(!1),m=t.useMemo(()=>{const t=[{label:`default (${e.default})`,value:"__default",description:"Default value set in the data source"}];return e.value&&"__default"!==e.value&&t.push({label:e.value,value:e.value}),t},[e.default,e.value]),[f,b]=t.useState(e.default?m:[]);t.useEffect(()=>{void 0!==e.resources&&u(e.resources)},[e.resources]),t.useEffect(()=>{const t=e.default?m:[];i.length?(i.forEach(e=>{const a="string"==typeof e?e:e.value;t.find(e=>e.value===a)||("string"==typeof e?t.push({label:e,value:e}):t.push(e))}),b(t)):b([])},[i,m,e.default]),t.useEffect(()=>{s.isEqual(e.dependencies,r)||(v(!1),o(null),e.onChange(null),c(e.dependencies))},[e,r]);const y=()=>d(this,void 0,void 0,(function*(){if(!g){e.saveOptions&&(yield e.saveOptions());try{const t=yield e.fetch();u(t)}finally{v(!0)}}})),D=()=>d(this,void 0,void 0,(function*(){h(!0);try{yield y()}finally{h(!1)}}));return a.createElement(n.InlineField,{label:e.label,labelWidth:e.labelWidth,tooltip:e.tooltip,hidden:e.hidden},a.createElement("div",{"data-testid":e["data-testid"],title:e.title},a.createElement(n.Select,Object.assign({},e,{"aria-label":e.label,options:f,onChange:t=>{e.onChange(t),t.value&&o(t.value)},isLoading:p,className:e.className||"min-width-6",onOpenMenu:()=>e.fetch&&D(),menuShouldPortal:!0}))))}var h;(h=exports.FillValueOptions||(exports.FillValueOptions={}))[h.Previous=0]="Previous",h[h.Null=1]="Null",h[h.Value=2]="Value";const g=[{label:"Previous Value",value:exports.FillValueOptions.Previous},{label:"NULL",value:exports.FillValueOptions.Null},{label:"Value",value:exports.FillValueOptions.Value}];function v(e){if("string"==typeof e)return e;return e.map(e=>function(e){return"'"+String(e).replace(/'/g,"''")+"'"}(e)).join(",")}exports.ConfigSelect=function(e){var t,n;const{jsonData:
|
|
16
|
+
function d(e,t,a,n){return new(a||(a=Promise))((function(l,s){function o(e){try{u(n.next(e))}catch(e){s(e)}}function i(e){try{u(n.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?l(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(o,i)}u((n=n.apply(e,t||[])).next())}))}function p(e){const[l,o]=t.useState(e.value||e.default||null),[i,u]=t.useState(l?[l]:[]),[r,c]=t.useState(e.dependencies),[p,h]=t.useState(!1),[g,v]=t.useState(!1),m=t.useMemo(()=>{const t=[{label:`default (${e.default})`,value:"__default",description:"Default value set in the data source"}];return e.value&&"__default"!==e.value&&t.push({label:e.value,value:e.value}),t},[e.default,e.value]),[f,b]=t.useState(e.default?m:[]);t.useEffect(()=>{void 0!==e.resources&&u(e.resources)},[e.resources]),t.useEffect(()=>{const t=e.default?m:[];i.length?(i.forEach(e=>{const a="string"==typeof e?e:e.value;t.find(e=>e.value===a)||("string"==typeof e?t.push({label:e,value:e}):t.push(e))}),b(t)):b([])},[i,m,e.default]),t.useEffect(()=>{s.isEqual(e.dependencies,r)||(v(!1),o(null),e.onChange(null),c(e.dependencies))},[e,r]);const y=()=>d(this,void 0,void 0,(function*(){if(!g){e.saveOptions&&(yield e.saveOptions());try{const t=yield e.fetch();u(t)}finally{v(!0)}}})),D=()=>d(this,void 0,void 0,(function*(){h(!0);try{yield y()}finally{h(!1)}}));return a.createElement(n.InlineField,{label:e.label,labelWidth:e.labelWidth,tooltip:e.tooltip,hidden:e.hidden},a.createElement("div",{"data-testid":e["data-testid"],title:e.title},a.createElement(n.Select,Object.assign({},e,{"aria-label":e.label,options:f,onChange:t=>{e.onChange(t),t.value&&o(t.value)},isLoading:p,className:e.className||"min-width-6",onOpenMenu:()=>e.fetch&&D(),menuShouldPortal:!0}))))}var h;(h=exports.FillValueOptions||(exports.FillValueOptions={}))[h.Previous=0]="Previous",h[h.Null=1]="Null",h[h.Value=2]="Value";const g=[{label:"Previous Value",value:exports.FillValueOptions.Previous},{label:"NULL",value:exports.FillValueOptions.Null},{label:"Value",value:exports.FillValueOptions.Value}];function v(e){if("string"==typeof e)return e;return e.map(e=>function(e){return"'"+String(e).replace(/'/g,"''")+"'"}(e)).join(",")}exports.ConfigSelect=function(e){var t,n,l;const{jsonData:s}=e.options,o={title:s.defaultRegion?"":"select a default region",labelWidth:null!==(t=e.labelWidth)&&void 0!==t?t:28,className:"width-30"},i=[e.options.jsonData.assumeRoleArn,e.options.jsonData.authType,e.options.jsonData.defaultRegion,e.options.jsonData.endpoint,e.options.jsonData.externalId,e.options.jsonData.profile,null===(n=e.options.secureJsonData)||void 0===n?void 0:n.accessKey,null===(l=e.options.secureJsonData)||void 0===l?void 0:l.secretKey].concat(e.dependencies);return a.createElement(p,Object.assign({label:e.label,"data-testid":e["data-testid"],onChange:e.onChange,fetch:e.fetch,value:e.value,saveOptions:e.saveOptions,dependencies:i,hidden:e.hidden,disabled:e.disabled||!s.defaultRegion,allowCustomValue:e.allowCustomValue,autoFocus:e.autoFocus,backspaceRemovesValue:e.backspaceRemovesValue,className:e.className,invalid:e.invalid,isClearable:e.isClearable,isMulti:e.isMulti,inputId:e.inputId,showAllSelectedWhenOpen:e.showAllSelectedWhenOpen,maxMenuHeight:e.maxMenuHeight,minMenuHeight:e.minMenuHeight,maxVisibleValues:e.maxVisibleValues,menuPlacement:e.menuPlacement,menuPosition:e.menuPosition,noOptionsMessage:e.noOptionsMessage,onBlur:e.onBlur,onCreateOption:e.onCreateOption,onInputChange:e.onInputChange,placeholder:e.placeholder,width:e.width,isOptionDisabled:e.isOptionDisabled},o))},exports.ConnectionConfig=c,exports.FillValueSelect=function(e){var t,l,s;return a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Fill value",tooltip:"value to fill missing points"},a.createElement(n.Select,{"aria-label":"Fill value",options:g,value:null!==(l=null===(t=e.query.fillMode)||void 0===t?void 0:t.mode)&&void 0!==l?l:exports.FillValueOptions.Previous,onChange:({value:t})=>{var a;e.onChange(Object.assign(Object.assign({},e.query),{fillMode:Object.assign(Object.assign({},e.query.fillMode),{mode:t})})),null===(a=e.onRunQuery)||void 0===a||a.call(e)},className:"width-12",menuShouldPortal:!0})),(null===(s=e.query.fillMode)||void 0===s?void 0:s.mode)===exports.FillValueOptions.Value&&a.createElement(n.InlineField,{label:"Value",labelWidth:11},a.createElement(n.Input,{type:"number","aria-label":"Value",value:e.query.fillMode.value,onChange:({currentTarget:t})=>e.onChange(Object.assign(Object.assign({},e.query),{fillMode:{mode:exports.FillValueOptions.Value,value:t.valueAsNumber}})),onBlur:()=>{var t;return null===(t=e.onRunQuery)||void 0===t?void 0:t.call(e)}})))},exports.FormatSelect=function(e){return a.createElement(n.InlineField,{label:"Format as",labelWidth:11},a.createElement(n.Select,{"aria-label":"Format as",options:e.options,value:e.query.format,onChange:t=>{var a;e.onChange(Object.assign(Object.assign({},e.query),{format:t.value||0})),null===(a=e.onRunQuery)||void 0===a||a.call(e)},className:"width-12",menuShouldPortal:!0}))},exports.InlineInput=function(e){var t;return a.createElement(n.InlineField,{label:e.label,labelWidth:null!==(t=e.labelWidth)&&void 0!==t?t:28,tooltip:e.tooltip,hidden:e.hidden,disabled:e.disabled},a.createElement(n.Input,{"data-testid":e["data-testid"],className:"width-30",value:e.value,onChange:e.onChange,placeholder:e.placeholder,disabled:e.disabled}))},exports.QueryCodeEditor=function(e){const{getSuggestions:l,query:o}=e,{rawSQL:i}=s.defaults(e.query,{rawSQL:""}),u=t.useRef([]);return t.useEffect(()=>{u.current=l(o)},[l,o]),a.createElement(n.CodeEditor,Object.assign({language:e.language,value:i,onBlur:t=>{const a=Object.assign(Object.assign({},e.query),{rawSQL:t});e.onChange(a),e.onRunQuery()},showMiniMap:!1,showLineNumbers:!0,getSuggestions:()=>u.current,height:"240px"},e.editorProps))},exports.ResourceSelector=p,exports.SIGV4ConnectionConfig=e=>{var t,n,l,s;const{onOptionsChange:o,options:i}=e,u={onOptionsChange:e=>{var t,a,n,l;const s=Object.assign(Object.assign({},i),{jsonData:Object.assign(Object.assign({},i.jsonData),{sigV4AuthType:e.jsonData.authType,sigV4Profile:e.jsonData.profile,sigV4AssumeRoleArn:e.jsonData.assumeRoleArn,sigV4ExternalId:e.jsonData.externalId,sigV4Region:e.jsonData.defaultRegion,sigV4Endpoint:e.jsonData.endpoint}),secureJsonFields:{sigV4AccessKey:null===(t=e.secureJsonFields)||void 0===t?void 0:t.accessKey,sigV4SecretKey:null===(a=e.secureJsonFields)||void 0===a?void 0:a.secretKey},secureJsonData:{sigV4AccessKey:null===(n=e.secureJsonData)||void 0===n?void 0:n.accessKey,sigV4SecretKey:null===(l=e.secureJsonData)||void 0===l?void 0:l.secretKey}});o(s)},options:Object.assign(Object.assign({},i),{jsonData:Object.assign(Object.assign({},i.jsonData),{authType:i.jsonData.sigV4AuthType,profile:i.jsonData.sigV4Profile,assumeRoleArn:i.jsonData.sigV4AssumeRoleArn,externalId:i.jsonData.sigV4ExternalId,defaultRegion:i.jsonData.sigV4Region,endpoint:i.jsonData.sigV4Endpoint}),secureJsonFields:{accessKey:null===(t=i.secureJsonFields)||void 0===t?void 0:t.sigV4AccessKey,secretKey:null===(n=i.secureJsonFields)||void 0===n?void 0:n.sigV4SecretKey},secureJsonData:{accessKey:null===(l=i.secureJsonData)||void 0===l?void 0:l.sigV4AccessKey,secretKey:null===(s=i.secureJsonData)||void 0===s?void 0:s.sigV4SecretKey}})};return a.createElement(a.Fragment,null,a.createElement("div",{className:"gf-form"},a.createElement("h6",null,"SigV4 Auth Details")),a.createElement(c,Object.assign({},u,{skipHeader:!0,skipEndpoint:!0})))},exports.appendTemplateVariablesAsSuggestions=(e,t)=>{const a=e(),l=[];return a.getVariables().forEach(e=>{const t="$"+e.name;let s=a.replace(t);s===t&&(s=""),l.push({label:t,kind:n.CodeEditorSuggestionItemKind.Text,detail:"(Template Variable) "+s})}),t.concat(l)},exports.applySQLTemplateVariables=function(e,t,a){const n=a();return Object.assign(Object.assign({},e),{rawSQL:n.replace(e.rawSQL,t,v)})},exports.awsAuthProviderOptions=u,exports.filterSQLQuery=function(e){return!!e.rawSQL},exports.standardRegions=o;
|
|
17
17
|
//# sourceMappingURL=index.production.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.production.js","sources":["../src/regions.ts","../src/types.ts","../src/providers.ts","../src/ConnectionConfig.tsx","../src/sql/ResourceSelector.tsx","../src/sql/types.ts","../src/sql/QueryEditor/FillValueSelect.tsx","../src/sql/utils/utils.ts","../src/sql/ConfigEditor/ConfigSelect.tsx","../src/sql/QueryEditor/FormatSelect.tsx","../src/sql/ConfigEditor/InlineInput.tsx","../src/sql/QueryEditor/QueryCodeEditor.tsx","../src/SIGV4ConnectionConfig.tsx"],"sourcesContent":["export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ca-central-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-north-1',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'me-south-1',\n 'sa-east-1',\n 'us-east-1',\n 'us-east-2',\n 'us-gov-east-1',\n 'us-gov-west-1',\n 'us-iso-east-1',\n 'us-isob-east-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import { DataSourceJsonData, DataSourceSettings } from '@grafana/data';\n\nexport enum AwsAuthType {\n Keys = 'keys',\n Credentials = 'credentials',\n Default = 'default', // was 'arn',\n EC2IAMRole = 'ec2_iam_role',\n /**\n * @deprecated use default\n */\n ARN = 'arn',\n}\n\nexport interface AwsAuthDataSourceJsonData extends DataSourceJsonData {\n authType?: AwsAuthType;\n assumeRoleArn?: string;\n externalId?: string;\n profile?: string; // Credentials profile name, as specified in ~/.aws/credentials\n defaultRegion?: string; // region if it is not defined by your credentials file\n endpoint?: string;\n}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\n },\n {\n label: 'AWS SDK Default',\n value: AwsAuthType.Default,\n },\n {\n label: 'Access & secret key',\n value: AwsAuthType.Keys,\n },\n {\n label: 'Credentials file',\n value: AwsAuthType.Credentials,\n },\n] as Array<SelectableValue<AwsAuthType>>;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\n\nimport { standardRegions } from './regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from './types';\nimport { awsAuthProviderOptions } from './providers';\n\nconst toOption = (value: string) => ({ value, label: value });\n\nexport interface ConnectionConfigProps<J = AwsAuthDataSourceJsonData, S = AwsAuthDataSourceSecureJsonData>\n extends DataSourcePluginOptionsEditorProps<J, S> {\n standardRegions?: string[];\n loadRegions?: () => Promise<string[]>;\n defaultEndpoint?: string;\n skipHeader?: boolean;\n skipEndpoint?: boolean;\n children?: React.ReactNode;\n}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const options = props.options;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n\n const settings = (window as any).grafanaBootData.settings;\n const awsAllowedAuthProviders = useMemo(\n () => settings.awsAllowedAuthProviders ?? [AwsAuthType.Default, AwsAuthType.Keys, AwsAuthType.Credentials],\n [settings.awsAllowedAuthProviders]\n );\n const awsAssumeRoleEnabled = settings.awsAssumeRoleEnabled ?? true;\n\n const currentProvider = awsAuthProviderOptions.find((p) => p.value === options.jsonData.authType);\n\n useEffect(() => {\n // Make sure a authType exists in the current model\n if (!currentProvider && awsAllowedAuthProviders.length) {\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange, awsAllowedAuthProviders]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={28}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className=\"width-30\"\n value={currentProvider}\n options={awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value!))}\n defaultValue={options.jsonData.authType}\n onChange={(option) => {\n onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);\n }}\n menuShouldPortal={true}\n />\n </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={28}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className=\"width-30\"\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={28}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n tooltip=\"Edit Access Key ID\"\n type=\"button\"\n onClick={onUpdateDatasourceResetOption(props as any, 'accessKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Access Key ID\"\n className=\"width-30\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={28}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n type=\"button\"\n tooltip=\"Edit Secret Access Key\"\n onClick={onUpdateDatasourceResetOption(props as any, 'secretKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Secret Access Key\"\n className=\"width-30\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={28}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className=\"width-30\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n <InlineField\n label=\"External ID\"\n labelWidth={28}\n tooltip=\"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.\"\n >\n <Input\n aria-label=\"External ID\"\n className=\"width-30\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n </>\n )}\n {!skipEndpoint && (\n <InlineField label=\"Endpoint\" labelWidth={28} tooltip=\"Optionally, specify a custom endpoint for the service\">\n <Input\n aria-label=\"Endpoint\"\n className=\"width-30\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={28}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className=\"width-30\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n menuShouldPortal={true}\n />\n </InlineField>\n {props.children}\n </FieldSet>\n );\n};\n","import { SelectableValue } from '@grafana/data';\nimport { InlineField, Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n value: string | null;\n dependencies?: Array<string | null | undefined>;\n tooltip?: string;\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const [resource, setResource] = useState<string | null>(props.value || props.default || null);\n const [resources, setResources] = useState<Array<string | SelectableValue>>(resource ? [resource] : []);\n const [dependencies, setDependencies] = useState(props.dependencies);\n const [isLoading, setIsLoading] = useState(false);\n const [fetched, setFetched] = useState(false);\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>(props.default ? defaultOpts : []);\n useEffect(() => {\n if (props.resources !== undefined) {\n setResources(props.resources);\n }\n }, [props.resources]);\n useEffect(() => {\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n if (resources.length) {\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n setOptions(newOptions);\n } else {\n setOptions([]);\n }\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(props.dependencies, dependencies)) {\n setFetched(false);\n setResource(null);\n props.onChange(null);\n setDependencies(props.dependencies);\n }\n }, [props, dependencies]);\n\n const fetch = async () => {\n if (fetched) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = await props.fetch();\n setResources(resources);\n } finally {\n setFetched(true);\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n props.onChange(e);\n if (e.value) {\n setResource(e.value);\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <InlineField label={props.label} labelWidth={props.labelWidth} tooltip={props.tooltip} hidden={props.hidden}>\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n {...props}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n </div>\n </InlineField>\n );\n}\n","import { DataQuery } from '@grafana/data';\nimport { FillValueOptions } from './QueryEditor/FillValueSelect';\n\nexport const defaultKey = '__default';\n\nexport interface SQLQuery extends DataQuery {\n rawSQL: string;\n format?: number;\n fillMode?: { mode: FillValueOptions; value?: number };\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/ui';\n\nexport enum FillValueOptions {\n Previous,\n Null,\n Value,\n}\n\nexport const SelectableFillValueOptions: Array<SelectableValue<FillValueOptions>> = [\n {\n label: 'Previous Value',\n value: FillValueOptions.Previous,\n },\n {\n label: 'NULL',\n value: FillValueOptions.Null,\n },\n {\n label: 'Value',\n value: FillValueOptions.Value,\n },\n];\n\nexport type FillValueSelectProps<TQuery extends DataQuery> = {\n query: TQuery;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>) {\n return (\n <>\n <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </InlineField>\n )}\n </>\n );\n}\n","import { ScopedVars, VariableModel } from '@grafana/data';\nimport { SQLQuery } from '../types';\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind } from '@grafana/ui';\n\n/**\n * Do not execute queries that do not exist yet\n */\nexport function filterSQLQuery(query: SQLQuery): boolean {\n return !!query.rawSQL;\n}\n\nexport function applySQLTemplateVariables(\n query: SQLQuery,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): SQLQuery {\n const templateSrv = getTemplateSrv();\n return {\n ...query,\n rawSQL: templateSrv.replace(query.rawSQL, scopedVars, interpolateVariable),\n };\n}\n\nfunction interpolateVariable(value: string | string[]) {\n if (typeof value === 'string') {\n return value;\n }\n\n const quotedValues = value.map((v) => {\n return quoteLiteral(v);\n });\n return quotedValues.join(',');\n}\n\nfunction quoteLiteral(value: any) {\n return \"'\" + String(value).replace(/'/g, \"''\") + \"'\";\n}\n\nexport const appendTemplateVariablesAsSuggestions = (getTemplateSrv: () => any, sugs: CodeEditorSuggestionItem[]) => {\n const templateSrv = getTemplateSrv();\n const templateSugs: CodeEditorSuggestionItem[] = [];\n templateSrv.getVariables().forEach((variable: VariableModel) => {\n const label = '$' + variable.name;\n let val = templateSrv.replace(label);\n if (val === label) {\n val = '';\n }\n templateSugs.push({\n label,\n kind: CodeEditorSuggestionItemKind.Text,\n detail: `(Template Variable) ${val}`,\n });\n });\n\n return sugs.concat(templateSugs);\n};\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\n\nexport interface ConfigSelectProps\n extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: 28,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: string[] = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n className={props.className}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n placeholder={props.placeholder}\n width={props.width}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n query: TQuery;\n options: Array<SelectableValue<FormatOptions>>;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(\n props: FormatSelectProps<TQuery, FormatOptions>\n) {\n const onChangeFormat = (e: SelectableValue<FormatOptions>) => {\n props.onChange({\n ...props.query,\n format: e.value || 0,\n });\n props.onRunQuery?.();\n };\n return (\n <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\n\nexport interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {\n value: string;\n onChange: (e: FormEvent<HTMLInputElement>) => void;\n label?: string;\n tooltip?: string;\n placeholder?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={28}\n tooltip={props.tooltip}\n hidden={props.hidden}\n disabled={props.disabled}\n >\n <Input\n data-testid={props['data-testid']}\n className=\"width-30\"\n value={props.value}\n onChange={props.onChange}\n placeholder={props.placeholder}\n disabled={props.disabled}\n />\n </InlineField>\n );\n}\n","import { defaults } from 'lodash';\n\nimport React, { useRef, useEffect } from 'react';\nimport { CodeEditor, CodeEditorSuggestionItem, CodeEditorMonacoOptions } from '@grafana/ui';\nimport { DataQuery } from '@grafana/data';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: CodeEditorMonacoOptions;\n};\n\ntype Props<TQuery extends DataQuery> = {\n query: TQuery;\n language: string;\n editorProps?: EditorProps;\n onChange: (value: TQuery) => void;\n onRunQuery: () => void;\n getSuggestions: (query: TQuery) => CodeEditorSuggestionItem[];\n};\n\nexport function QueryCodeEditor<TQuery extends DataQuery>(props: Props<TQuery>) {\n const { getSuggestions, query } = props;\n const { rawSQL } = defaults(props.query, { rawSQL: '' });\n const onRawSqlChange = (rawSQL: string) => {\n const query = {\n ...props.query,\n rawSQL,\n };\n props.onChange(query);\n props.onRunQuery();\n };\n\n // Use a reference for suggestions because a bug in CodeEditor getSuggestions\n // https://github.com/grafana/grafana/issues/40121\n // It was been fixed in 8.3 but keeping the workaround here to support older\n // versions.\n const suggestionsRef = useRef<CodeEditorSuggestionItem[]>([]);\n useEffect(() => {\n suggestionsRef.current = getSuggestions(query);\n }, [getSuggestions, query]);\n\n return (\n <CodeEditor\n language={props.language}\n value={rawSQL}\n onBlur={onRawSqlChange}\n showMiniMap={false}\n showLineNumbers={true}\n getSuggestions={() => suggestionsRef.current}\n height=\"240px\"\n {...props.editorProps}\n />\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig, ConnectionConfigProps } from './ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData } from './types';\n\nexport const SIGV4ConnectionConfig: React.FC<DataSourcePluginOptionsEditorProps<any, any>> = (\n props: DataSourcePluginOptionsEditorProps<any, any>\n) => {\n const { onOptionsChange, options } = props;\n\n // Map HttpSettings props to ConnectionConfigProps\n const connectionConfigProps: ConnectionConfigProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> = {\n onOptionsChange: (awsDataSourceSettings) => {\n const dataSourceSettings: DataSourceSettings<any, any> = {\n ...options,\n jsonData: {\n ...options.jsonData,\n sigV4AuthType: awsDataSourceSettings.jsonData.authType,\n sigV4Profile: awsDataSourceSettings.jsonData.profile,\n sigV4AssumeRoleArn: awsDataSourceSettings.jsonData.assumeRoleArn,\n sigV4ExternalId: awsDataSourceSettings.jsonData.externalId,\n sigV4Region: awsDataSourceSettings.jsonData.defaultRegion,\n sigV4Endpoint: awsDataSourceSettings.jsonData.endpoint,\n },\n secureJsonFields: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonFields?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonFields?.secretKey,\n },\n secureJsonData: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonData?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonData?.secretKey,\n },\n };\n onOptionsChange(dataSourceSettings);\n },\n options: {\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: options.jsonData.sigV4AuthType,\n profile: options.jsonData.sigV4Profile,\n assumeRoleArn: options.jsonData.sigV4AssumeRoleArn,\n externalId: options.jsonData.sigV4ExternalId,\n defaultRegion: options.jsonData.sigV4Region,\n endpoint: options.jsonData.sigV4Endpoint,\n },\n secureJsonFields: {\n accessKey: options.secureJsonFields?.sigV4AccessKey,\n secretKey: options.secureJsonFields?.sigV4SecretKey,\n },\n secureJsonData: {\n accessKey: options.secureJsonData?.sigV4AccessKey,\n secretKey: options.secureJsonData?.sigV4SecretKey,\n },\n },\n };\n\n return (\n <>\n <div className=\"gf-form\">\n <h6>SigV4 Auth Details</h6>\n </div>\n <ConnectionConfig {...connectionConfigProps} skipHeader skipEndpoint></ConnectionConfig>\n </>\n );\n};\n"],"names":["standardRegions","AwsAuthType","awsAuthProviderOptions","label","value","EC2IAMRole","Default","Keys","Credentials","toOption","ConnectionConfig","props","regions","setRegions","useState","map","loadRegions","onOptionsChange","skipHeader","skipEndpoint","options","profile","jsonData","undefined","database","settings","window","grafanaBootData","awsAllowedAuthProviders","useMemo","awsAssumeRoleEnabled","currentProvider","find","p","authType","useEffect","length","then","React","FieldSet","InlineField","labelWidth","tooltip","Select","className","filter","opt","includes","defaultValue","onChange","option","onUpdateDatasourceJsonDataOptionSelect","menuShouldPortal","Input","placeholder","onUpdateDatasourceJsonDataOption","secureJsonFields","accessKey","ButtonGroup","disabled","ToolbarButton","icon","type","onClick","onUpdateDatasourceResetOption","secureJsonData","onUpdateDatasourceSecureJsonDataOption","secretKey","assumeRoleArn","externalId","defaultEndpoint","endpoint","region","defaultRegion","allowCustomValue","formatCreateLabel","r","children","ResourceSelector","resource","setResource","default","resources","setResources","dependencies","setDependencies","isLoading","setIsLoading","fetched","setFetched","defaultOpts","opts","description","push","setOptions","newOptions","forEach","o","isEqual","fetch","saveOptions","hidden","title","e","onOpenMenu","FillValueOptions","SelectableFillValueOptions","Previous","Null","Value","interpolateVariable","v","String","replace","quoteLiteral","join","commonProps","concat","autoFocus","backspaceRemovesValue","invalid","isClearable","isMulti","inputId","showAllSelectedWhenOpen","maxMenuHeight","minMenuHeight","maxVisibleValues","menuPlacement","menuPosition","noOptionsMessage","onBlur","onCreateOption","onInputChange","width","isOptionDisabled","query","fillMode","mode","onRunQuery","currentTarget","valueAsNumber","format","getSuggestions","rawSQL","defaults","suggestionsRef","useRef","current","CodeEditor","language","showMiniMap","showLineNumbers","height","editorProps","connectionConfigProps","awsDataSourceSettings","dataSourceSettings","sigV4AuthType","sigV4Profile","sigV4AssumeRoleArn","sigV4ExternalId","sigV4Region","sigV4Endpoint","sigV4AccessKey","sigV4SecretKey","getTemplateSrv","sugs","templateSrv","templateSugs","getVariables","variable","name","val","kind","CodeEditorSuggestionItemKind","Text","detail","scopedVars"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.production.js","sources":["../src/regions.ts","../src/types.ts","../src/providers.ts","../src/ConnectionConfig.tsx","../src/sql/ResourceSelector.tsx","../src/sql/types.ts","../src/sql/QueryEditor/FillValueSelect.tsx","../src/sql/utils/utils.ts","../src/sql/ConfigEditor/ConfigSelect.tsx","../src/sql/QueryEditor/FormatSelect.tsx","../src/sql/ConfigEditor/InlineInput.tsx","../src/sql/QueryEditor/QueryCodeEditor.tsx","../src/SIGV4ConnectionConfig.tsx"],"sourcesContent":["export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ca-central-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-north-1',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'me-south-1',\n 'sa-east-1',\n 'us-east-1',\n 'us-east-2',\n 'us-gov-east-1',\n 'us-gov-west-1',\n 'us-iso-east-1',\n 'us-isob-east-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import { DataSourceJsonData, DataSourceSettings } from '@grafana/data';\n\nexport enum AwsAuthType {\n Keys = 'keys',\n Credentials = 'credentials',\n Default = 'default', // was 'arn',\n EC2IAMRole = 'ec2_iam_role',\n /**\n * @deprecated use default\n */\n ARN = 'arn',\n}\n\nexport interface AwsAuthDataSourceJsonData extends DataSourceJsonData {\n authType?: AwsAuthType;\n assumeRoleArn?: string;\n externalId?: string;\n profile?: string; // Credentials profile name, as specified in ~/.aws/credentials\n defaultRegion?: string; // region if it is not defined by your credentials file\n endpoint?: string;\n}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\n },\n {\n label: 'AWS SDK Default',\n value: AwsAuthType.Default,\n },\n {\n label: 'Access & secret key',\n value: AwsAuthType.Keys,\n },\n {\n label: 'Credentials file',\n value: AwsAuthType.Credentials,\n },\n] as Array<SelectableValue<AwsAuthType>>;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\n\nimport { standardRegions } from './regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from './types';\nimport { awsAuthProviderOptions } from './providers';\n\nconst toOption = (value: string) => ({ value, label: value });\n\nexport interface ConnectionConfigProps<J = AwsAuthDataSourceJsonData, S = AwsAuthDataSourceSecureJsonData>\n extends DataSourcePluginOptionsEditorProps<J, S> {\n standardRegions?: string[];\n loadRegions?: () => Promise<string[]>;\n defaultEndpoint?: string;\n skipHeader?: boolean;\n skipEndpoint?: boolean;\n children?: React.ReactNode;\n labelWidth?: number;\n}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const { labelWidth = 28, options } = props;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n\n const settings = (window as any).grafanaBootData.settings;\n const awsAllowedAuthProviders = useMemo(\n () => settings.awsAllowedAuthProviders ?? [AwsAuthType.Default, AwsAuthType.Keys, AwsAuthType.Credentials],\n [settings.awsAllowedAuthProviders]\n );\n const awsAssumeRoleEnabled = settings.awsAssumeRoleEnabled ?? true;\n\n const currentProvider = awsAuthProviderOptions.find((p) => p.value === options.jsonData.authType);\n\n useEffect(() => {\n // Make sure a authType exists in the current model\n if (!currentProvider && awsAllowedAuthProviders.length) {\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange, awsAllowedAuthProviders]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={labelWidth}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className=\"width-30\"\n value={currentProvider}\n options={awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value!))}\n defaultValue={options.jsonData.authType}\n onChange={(option) => {\n onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);\n }}\n menuShouldPortal={true}\n />\n </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={labelWidth}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className=\"width-30\"\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={labelWidth}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n tooltip=\"Edit Access Key ID\"\n type=\"button\"\n onClick={onUpdateDatasourceResetOption(props as any, 'accessKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Access Key ID\"\n className=\"width-30\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={labelWidth}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n type=\"button\"\n tooltip=\"Edit Secret Access Key\"\n onClick={onUpdateDatasourceResetOption(props as any, 'secretKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Secret Access Key\"\n className=\"width-30\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={labelWidth}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className=\"width-30\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n <InlineField\n label=\"External ID\"\n labelWidth={labelWidth}\n tooltip=\"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.\"\n >\n <Input\n aria-label=\"External ID\"\n className=\"width-30\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n </>\n )}\n {!skipEndpoint && (\n <InlineField\n label=\"Endpoint\"\n labelWidth={labelWidth}\n tooltip=\"Optionally, specify a custom endpoint for the service\"\n >\n <Input\n aria-label=\"Endpoint\"\n className=\"width-30\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={labelWidth}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className=\"width-30\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n menuShouldPortal={true}\n />\n </InlineField>\n {props.children}\n </FieldSet>\n );\n};\n","import { SelectableValue } from '@grafana/data';\nimport { InlineField, Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n value: string | null;\n dependencies?: Array<string | null | undefined>;\n tooltip?: string;\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const [resource, setResource] = useState<string | null>(props.value || props.default || null);\n const [resources, setResources] = useState<Array<string | SelectableValue>>(resource ? [resource] : []);\n const [dependencies, setDependencies] = useState(props.dependencies);\n const [isLoading, setIsLoading] = useState(false);\n const [fetched, setFetched] = useState(false);\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>(props.default ? defaultOpts : []);\n useEffect(() => {\n if (props.resources !== undefined) {\n setResources(props.resources);\n }\n }, [props.resources]);\n useEffect(() => {\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n if (resources.length) {\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n setOptions(newOptions);\n } else {\n setOptions([]);\n }\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(props.dependencies, dependencies)) {\n setFetched(false);\n setResource(null);\n props.onChange(null);\n setDependencies(props.dependencies);\n }\n }, [props, dependencies]);\n\n const fetch = async () => {\n if (fetched) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = await props.fetch();\n setResources(resources);\n } finally {\n setFetched(true);\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n props.onChange(e);\n if (e.value) {\n setResource(e.value);\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <InlineField label={props.label} labelWidth={props.labelWidth} tooltip={props.tooltip} hidden={props.hidden}>\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n {...props}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n </div>\n </InlineField>\n );\n}\n","import { DataQuery } from '@grafana/data';\nimport { FillValueOptions } from './QueryEditor/FillValueSelect';\n\nexport const defaultKey = '__default';\n\nexport interface SQLQuery extends DataQuery {\n rawSQL: string;\n format?: number;\n fillMode?: { mode: FillValueOptions; value?: number };\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/ui';\n\nexport enum FillValueOptions {\n Previous,\n Null,\n Value,\n}\n\nexport const SelectableFillValueOptions: Array<SelectableValue<FillValueOptions>> = [\n {\n label: 'Previous Value',\n value: FillValueOptions.Previous,\n },\n {\n label: 'NULL',\n value: FillValueOptions.Null,\n },\n {\n label: 'Value',\n value: FillValueOptions.Value,\n },\n];\n\nexport type FillValueSelectProps<TQuery extends DataQuery> = {\n query: TQuery;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>) {\n return (\n <>\n <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </InlineField>\n )}\n </>\n );\n}\n","import { ScopedVars, VariableModel } from '@grafana/data';\nimport { SQLQuery } from '../types';\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind } from '@grafana/ui';\n\n/**\n * Do not execute queries that do not exist yet\n */\nexport function filterSQLQuery(query: SQLQuery): boolean {\n return !!query.rawSQL;\n}\n\nexport function applySQLTemplateVariables(\n query: SQLQuery,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): SQLQuery {\n const templateSrv = getTemplateSrv();\n return {\n ...query,\n rawSQL: templateSrv.replace(query.rawSQL, scopedVars, interpolateVariable),\n };\n}\n\nfunction interpolateVariable(value: string | string[]) {\n if (typeof value === 'string') {\n return value;\n }\n\n const quotedValues = value.map((v) => {\n return quoteLiteral(v);\n });\n return quotedValues.join(',');\n}\n\nfunction quoteLiteral(value: any) {\n return \"'\" + String(value).replace(/'/g, \"''\") + \"'\";\n}\n\nexport const appendTemplateVariablesAsSuggestions = (getTemplateSrv: () => any, sugs: CodeEditorSuggestionItem[]) => {\n const templateSrv = getTemplateSrv();\n const templateSugs: CodeEditorSuggestionItem[] = [];\n templateSrv.getVariables().forEach((variable: VariableModel) => {\n const label = '$' + variable.name;\n let val = templateSrv.replace(label);\n if (val === label) {\n val = '';\n }\n templateSugs.push({\n label,\n kind: CodeEditorSuggestionItemKind.Text,\n detail: `(Template Variable) ${val}`,\n });\n });\n\n return sugs.concat(templateSugs);\n};\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\n\nexport interface ConfigSelectProps\n extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n labelWidth?: number;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: props.labelWidth ?? 28,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: string[] = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n className={props.className}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n placeholder={props.placeholder}\n width={props.width}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n query: TQuery;\n options: Array<SelectableValue<FormatOptions>>;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(\n props: FormatSelectProps<TQuery, FormatOptions>\n) {\n const onChangeFormat = (e: SelectableValue<FormatOptions>) => {\n props.onChange({\n ...props.query,\n format: e.value || 0,\n });\n props.onRunQuery?.();\n };\n return (\n <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\n\nexport interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {\n value: string;\n onChange: (e: FormEvent<HTMLInputElement>) => void;\n label?: string;\n tooltip?: string;\n placeholder?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n labelWidth?: number;\n}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={props.labelWidth ?? 28}\n tooltip={props.tooltip}\n hidden={props.hidden}\n disabled={props.disabled}\n >\n <Input\n data-testid={props['data-testid']}\n className=\"width-30\"\n value={props.value}\n onChange={props.onChange}\n placeholder={props.placeholder}\n disabled={props.disabled}\n />\n </InlineField>\n );\n}\n","import { defaults } from 'lodash';\n\nimport React, { useRef, useEffect } from 'react';\nimport { CodeEditor, CodeEditorSuggestionItem, CodeEditorMonacoOptions } from '@grafana/ui';\nimport { DataQuery } from '@grafana/data';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: CodeEditorMonacoOptions;\n};\n\ntype Props<TQuery extends DataQuery> = {\n query: TQuery;\n language: string;\n editorProps?: EditorProps;\n onChange: (value: TQuery) => void;\n onRunQuery: () => void;\n getSuggestions: (query: TQuery) => CodeEditorSuggestionItem[];\n};\n\nexport function QueryCodeEditor<TQuery extends DataQuery>(props: Props<TQuery>) {\n const { getSuggestions, query } = props;\n const { rawSQL } = defaults(props.query, { rawSQL: '' });\n const onRawSqlChange = (rawSQL: string) => {\n const query = {\n ...props.query,\n rawSQL,\n };\n props.onChange(query);\n props.onRunQuery();\n };\n\n // Use a reference for suggestions because a bug in CodeEditor getSuggestions\n // https://github.com/grafana/grafana/issues/40121\n // It was been fixed in 8.3 but keeping the workaround here to support older\n // versions.\n const suggestionsRef = useRef<CodeEditorSuggestionItem[]>([]);\n useEffect(() => {\n suggestionsRef.current = getSuggestions(query);\n }, [getSuggestions, query]);\n\n return (\n <CodeEditor\n language={props.language}\n value={rawSQL}\n onBlur={onRawSqlChange}\n showMiniMap={false}\n showLineNumbers={true}\n getSuggestions={() => suggestionsRef.current}\n height=\"240px\"\n {...props.editorProps}\n />\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig, ConnectionConfigProps } from './ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData } from './types';\n\nexport const SIGV4ConnectionConfig: React.FC<DataSourcePluginOptionsEditorProps<any, any>> = (\n props: DataSourcePluginOptionsEditorProps<any, any>\n) => {\n const { onOptionsChange, options } = props;\n\n // Map HttpSettings props to ConnectionConfigProps\n const connectionConfigProps: ConnectionConfigProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> = {\n onOptionsChange: (awsDataSourceSettings) => {\n const dataSourceSettings: DataSourceSettings<any, any> = {\n ...options,\n jsonData: {\n ...options.jsonData,\n sigV4AuthType: awsDataSourceSettings.jsonData.authType,\n sigV4Profile: awsDataSourceSettings.jsonData.profile,\n sigV4AssumeRoleArn: awsDataSourceSettings.jsonData.assumeRoleArn,\n sigV4ExternalId: awsDataSourceSettings.jsonData.externalId,\n sigV4Region: awsDataSourceSettings.jsonData.defaultRegion,\n sigV4Endpoint: awsDataSourceSettings.jsonData.endpoint,\n },\n secureJsonFields: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonFields?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonFields?.secretKey,\n },\n secureJsonData: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonData?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonData?.secretKey,\n },\n };\n onOptionsChange(dataSourceSettings);\n },\n options: {\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: options.jsonData.sigV4AuthType,\n profile: options.jsonData.sigV4Profile,\n assumeRoleArn: options.jsonData.sigV4AssumeRoleArn,\n externalId: options.jsonData.sigV4ExternalId,\n defaultRegion: options.jsonData.sigV4Region,\n endpoint: options.jsonData.sigV4Endpoint,\n },\n secureJsonFields: {\n accessKey: options.secureJsonFields?.sigV4AccessKey,\n secretKey: options.secureJsonFields?.sigV4SecretKey,\n },\n secureJsonData: {\n accessKey: options.secureJsonData?.sigV4AccessKey,\n secretKey: options.secureJsonData?.sigV4SecretKey,\n },\n },\n };\n\n return (\n <>\n <div className=\"gf-form\">\n <h6>SigV4 Auth Details</h6>\n </div>\n <ConnectionConfig {...connectionConfigProps} skipHeader skipEndpoint></ConnectionConfig>\n </>\n );\n};\n"],"names":["standardRegions","AwsAuthType","awsAuthProviderOptions","label","value","EC2IAMRole","Default","Keys","Credentials","toOption","ConnectionConfig","props","regions","setRegions","useState","map","loadRegions","onOptionsChange","skipHeader","skipEndpoint","labelWidth","options","profile","jsonData","undefined","database","settings","window","grafanaBootData","awsAllowedAuthProviders","useMemo","awsAssumeRoleEnabled","currentProvider","find","p","authType","useEffect","length","then","React","FieldSet","InlineField","tooltip","Select","className","filter","opt","includes","defaultValue","onChange","option","onUpdateDatasourceJsonDataOptionSelect","menuShouldPortal","Input","placeholder","onUpdateDatasourceJsonDataOption","secureJsonFields","accessKey","ButtonGroup","disabled","ToolbarButton","icon","type","onClick","onUpdateDatasourceResetOption","secureJsonData","onUpdateDatasourceSecureJsonDataOption","secretKey","assumeRoleArn","externalId","defaultEndpoint","endpoint","region","defaultRegion","allowCustomValue","formatCreateLabel","r","children","ResourceSelector","resource","setResource","default","resources","setResources","dependencies","setDependencies","isLoading","setIsLoading","fetched","setFetched","defaultOpts","opts","description","push","setOptions","newOptions","forEach","o","isEqual","fetch","saveOptions","hidden","title","e","onOpenMenu","FillValueOptions","SelectableFillValueOptions","Previous","Null","Value","interpolateVariable","v","String","replace","quoteLiteral","join","commonProps","concat","autoFocus","backspaceRemovesValue","invalid","isClearable","isMulti","inputId","showAllSelectedWhenOpen","maxMenuHeight","minMenuHeight","maxVisibleValues","menuPlacement","menuPosition","noOptionsMessage","onBlur","onCreateOption","onInputChange","width","isOptionDisabled","query","fillMode","mode","onRunQuery","currentTarget","valueAsNumber","format","getSuggestions","rawSQL","defaults","suggestionsRef","useRef","current","CodeEditor","language","showMiniMap","showLineNumbers","height","editorProps","connectionConfigProps","awsDataSourceSettings","dataSourceSettings","sigV4AuthType","sigV4Profile","sigV4AssumeRoleArn","sigV4ExternalId","sigV4Region","sigV4Endpoint","sigV4AccessKey","sigV4SecretKey","getTemplateSrv","sugs","templateSrv","templateSugs","getVariables","variable","name","val","kind","CodeEditorSuggestionItemKind","Text","detail","scopedVars"],"mappings":"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"}
|
|
@@ -32,5 +32,6 @@ export interface ConfigSelectProps extends DataSourcePluginOptionsEditorProps<Aw
|
|
|
32
32
|
placeholder?: string;
|
|
33
33
|
width?: number;
|
|
34
34
|
isOptionDisabled?: () => boolean;
|
|
35
|
+
labelWidth?: number;
|
|
35
36
|
}
|
|
36
37
|
export declare function ConfigSelect(props: ConfigSelectProps): JSX.Element;
|