@grafana/aws-sdk 0.8.2 → 0.8.3
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useState, useMemo, useEffect } from 'react';
|
|
2
|
-
import { Field, Select, Input, ButtonGroup, ToolbarButton, Collapse } from '@grafana/ui';
|
|
2
|
+
import { Field, Select, Input, ButtonGroup, ToolbarButton, Text, TextLink, Collapse } from '@grafana/ui';
|
|
3
3
|
import { onUpdateDatasourceJsonDataOptionSelect, onUpdateDatasourceJsonDataOption, onUpdateDatasourceResetOption, onUpdateDatasourceSecureJsonDataOption } from '@grafana/data';
|
|
4
4
|
import { config } from '@grafana/runtime';
|
|
5
5
|
import { standardRegions } from '../regions.js';
|
|
@@ -131,56 +131,73 @@ const ConnectionConfig = (props) => {
|
|
|
131
131
|
value: (_g = (_f = options.secureJsonData) == null ? void 0 : _f.secretKey) != null ? _g : "",
|
|
132
132
|
onChange: onUpdateDatasourceSecureJsonDataOption(props, "secretKey")
|
|
133
133
|
}
|
|
134
|
-
)))), !hideAssumeRoleArn && /* @__PURE__ */ React.createElement(
|
|
135
|
-
|
|
134
|
+
)))), !hideAssumeRoleArn && /* @__PURE__ */ React.createElement(
|
|
135
|
+
ConfigSubSection,
|
|
136
136
|
{
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
title: "Assume Role",
|
|
138
|
+
description: options.jsonData.authType === AwsAuthType.GrafanaAssumeRole ? /* @__PURE__ */ React.createElement(Text, null, "Learn more about", " ", /* @__PURE__ */ React.createElement(
|
|
139
|
+
TextLink,
|
|
140
|
+
{
|
|
141
|
+
inline: true,
|
|
142
|
+
external: true,
|
|
143
|
+
variant: "bodySmall",
|
|
144
|
+
href: "https://grafana.com/docs/plugins/cloudwatch/latest/aws-authentication/#use-grafana-assume-role"
|
|
145
|
+
},
|
|
146
|
+
"Grafana Assume Role"
|
|
147
|
+
), ".") : null
|
|
141
148
|
},
|
|
142
|
-
|
|
143
|
-
|
|
149
|
+
options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement("div", { className: assumeRoleInstructionsStyle }, /* @__PURE__ */ React.createElement(
|
|
150
|
+
Collapse,
|
|
144
151
|
{
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
label: "How to create an IAM role for grafana to assume:",
|
|
153
|
+
collapsible: true,
|
|
154
|
+
isOpen: isARNInstructionsOpen,
|
|
155
|
+
onToggle: () => setIsARNInstructionsOpen(!isARNInstructionsOpen)
|
|
148
156
|
},
|
|
149
|
-
"
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
157
|
+
/* @__PURE__ */ React.createElement("ol", null, /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "1. Create a new IAM role in the AWS console, and select ", /* @__PURE__ */ React.createElement("code", null, "Another AWS account"), " as the", " ", /* @__PURE__ */ React.createElement("code", null, "Trusted entity"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "2. Enter the account ID of the Grafana account that has permission to assume this role:", /* @__PURE__ */ React.createElement("code", null, " 008923505280 "), " and check the ", /* @__PURE__ */ React.createElement("code", null, "Require external ID"), " box.")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "3. Enter the following external ID:", " ", /* @__PURE__ */ React.createElement("code", null, props.externalId || "External Id is currently unavailable"), " and click", " ", /* @__PURE__ */ React.createElement("code", null, "Next"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "4. Add any required permissions you would like Grafana to be able to access on your behalf. For more details on our permissions please", " ", /* @__PURE__ */ React.createElement(
|
|
158
|
+
"a",
|
|
159
|
+
{
|
|
160
|
+
href: "https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/",
|
|
161
|
+
target: "_blank",
|
|
162
|
+
rel: "noreferrer"
|
|
163
|
+
},
|
|
164
|
+
"read through our documentation"
|
|
165
|
+
), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "5. Give the role a name and description, and click ", /* @__PURE__ */ React.createElement("code", null, "Create role"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "6. Copy the ARN of the role you just created and paste it into the ", /* @__PURE__ */ React.createElement("code", null, "Assume Role ARN"), " ", "field below.")))
|
|
166
|
+
)),
|
|
167
|
+
awsAssumeRoleEnabled && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
168
|
+
Field,
|
|
160
169
|
{
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
/* @__PURE__ */ React.createElement(
|
|
175
|
-
|
|
170
|
+
htmlFor: "assumeRoleArn",
|
|
171
|
+
label: "Assume Role ARN",
|
|
172
|
+
description: "Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly."
|
|
173
|
+
},
|
|
174
|
+
/* @__PURE__ */ React.createElement(
|
|
175
|
+
Input,
|
|
176
|
+
{
|
|
177
|
+
id: "assumeRoleArn",
|
|
178
|
+
placeholder: "arn:aws:iam:*",
|
|
179
|
+
value: options.jsonData.assumeRoleArn || "",
|
|
180
|
+
onChange: onUpdateDatasourceJsonDataOption(props, "assumeRoleArn")
|
|
181
|
+
}
|
|
182
|
+
)
|
|
183
|
+
), options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement(
|
|
184
|
+
Field,
|
|
176
185
|
{
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
186
|
+
htmlFor: "externalId",
|
|
187
|
+
label: "External ID",
|
|
188
|
+
description: "If you are assuming a role in another account, that has been created with an external ID, specify the external ID here."
|
|
189
|
+
},
|
|
190
|
+
/* @__PURE__ */ React.createElement(
|
|
191
|
+
Input,
|
|
192
|
+
{
|
|
193
|
+
id: "externalId",
|
|
194
|
+
placeholder: "External ID",
|
|
195
|
+
value: options.jsonData.externalId || "",
|
|
196
|
+
onChange: onUpdateDatasourceJsonDataOption(props, "externalId")
|
|
197
|
+
}
|
|
198
|
+
)
|
|
199
|
+
))
|
|
200
|
+
), /* @__PURE__ */ React.createElement(ConfigSubSection, { title: "Additional Settings" }, !skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement(
|
|
184
201
|
Field,
|
|
185
202
|
{
|
|
186
203
|
label: "Endpoint",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionConfig.js","sources":["../../../src/components/ConnectionConfig.tsx"],"sourcesContent":["import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, ButtonGroup, ToolbarButton, Collapse, Field } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { standardRegions } from '../regions';\nimport { AwsAuthType, ConnectionConfigProps } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { assumeRoleInstructionsStyle } from './ConnectionConfig.styles';\nimport { ConfigSection, ConfigSubSection } from '@grafana/plugin-ui';\n\nexport const DEFAULT_LABEL_WIDTH = 28;\nconst DS_TYPES_THAT_SUPPORT_TEMP_CREDS = [\n 'cloudwatch',\n 'grafana-athena-datasource',\n 'grafana-amazonprometheus-datasource',\n];\nconst toOption = (value: string) => ({ value, label: value });\nconst isAwsAuthType = (value: any): value is AwsAuthType => {\n return typeof value === 'string' && awsAuthProviderOptions.some((opt) => opt.value === value);\n};\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [isARNInstructionsOpen, setIsARNInstructionsOpen] = useState(false);\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const {\n loadRegions,\n onOptionsChange,\n skipHeader = false,\n skipEndpoint = false,\n options,\n hideAssumeRoleArn = false,\n } = props;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n const tempCredsFeatureEnabled =\n config.featureToggles.awsDatasourcesTempCredentials && DS_TYPES_THAT_SUPPORT_TEMP_CREDS.includes(options.type);\n const awsAssumeRoleEnabled = config.awsAssumeRoleEnabled ?? true;\n const awsAllowedAuthProviders = useMemo(\n () =>\n config.awsAllowedAuthProviders\n .filter((provider) => (provider === AwsAuthType.GrafanaAssumeRole ? tempCredsFeatureEnabled : true))\n .filter(isAwsAuthType),\n [tempCredsFeatureEnabled]\n );\n if (tempCredsFeatureEnabled && options.jsonData.authType === AwsAuthType.GrafanaAssumeRole) {\n if (config.namespace.startsWith('stacks-')) {\n props.externalId = config.namespace.substring(config.namespace.indexOf('-') + 1);\n }\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 <div data-testid=\"connection-config\">\n <ConfigSection title={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <ConfigSubSection title=\"Authentication\">\n <Field\n label=\"Authentication Provider\"\n description=\"Specify which AWS credentials chain to use.\"\n htmlFor=\"authProvider\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n inputId=\"authProvider\"\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 </Field>\n {options.jsonData.authType === 'credentials' && (\n <Field\n label=\"Credentials Profile Name\"\n description=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n htmlFor=\"credentialsProfileName\"\n >\n <Input\n id=\"credentialsProfileName\"\n placeholder=\"default\"\n value={options.jsonData.profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </Field>\n )}\n {options.jsonData.authType === 'keys' && (\n <>\n <Field label=\"Access Key ID\" htmlFor=\"accessKeyId\">\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" id=\"accessKeyId\" />\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 id=\"accessKeyId\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </Field>\n\n <Field label=\"Secret Access Key\" htmlFor=\"secretKey\">\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n id=\"secretKey\"\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 id=\"secretKey\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </Field>\n </>\n )}\n </ConfigSubSection>\n\n {!hideAssumeRoleArn && (\n <ConfigSubSection title=\"Assume Role\">\n {options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && (\n <div className={assumeRoleInstructionsStyle}>\n <Collapse\n label={'How to create an IAM role for grafana to assume:'}\n collapsible={true}\n isOpen={isARNInstructionsOpen}\n onToggle={() => setIsARNInstructionsOpen(!isARNInstructionsOpen)}\n >\n <ol>\n <li>\n <p>\n 1. Create a new IAM role in the AWS console, and select <code>Another AWS account</code> as the{' '}\n <code>Trusted entity</code>.\n </p>\n </li>\n <li>\n <p>\n 2. Enter the account ID of the Grafana account that has permission to assume this role:\n <code> 008923505280 </code> and check the <code>Require external ID</code> box.\n </p>\n </li>\n <li>\n <p>\n 3. Enter the following external ID:{' '}\n <code>{props.externalId || 'External Id is currently unavailable'}</code> and click{' '}\n <code>Next</code>.\n </p>\n </li>\n <li>\n <p>\n 4. Add any required permissions you would like Grafana to be able to access on your behalf. For\n more details on our permissions please{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n read through our documentation\n </a>\n .\n </p>\n </li>\n <li>\n <p>\n 5. Give the role a name and description, and click <code>Create role</code>.\n </p>\n </li>\n <li>\n <p>\n 6. Copy the ARN of the role you just created and paste it into the <code>Assume Role ARN</code>{' '}\n field below.\n </p>\n </li>\n </ol>\n </Collapse>\n </div>\n )}\n {awsAssumeRoleEnabled && (\n <>\n <Field\n htmlFor=\"assumeRoleArn\"\n label=\"Assume Role ARN\"\n description=\"Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly.\"\n >\n <Input\n id=\"assumeRoleArn\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </Field>\n {options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n htmlFor=\"externalId\"\n label=\"External ID\"\n description=\"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 id=\"externalId\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </Field>\n )}\n </>\n )}\n </ConfigSubSection>\n )}\n <ConfigSubSection title=\"Additional Settings\">\n {!skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n label=\"Endpoint\"\n description=\"Optionally, specify a custom endpoint for the service\"\n htmlFor=\"endpoint\"\n >\n <Input\n id=\"endpoint\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </Field>\n )}\n\n <Field\n label=\"Default Region\"\n description=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n htmlFor=\"defaultRegion\"\n >\n <Select\n inputId=\"defaultRegion\"\n value={\n regions.find((region) => region.value === options.jsonData.defaultRegion) ??\n (options.jsonData.defaultRegion\n ? {\n label: options.jsonData.defaultRegion,\n value: options.jsonData.defaultRegion,\n }\n : undefined)\n }\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 </Field>\n </ConfigSubSection>\n {props.children}\n </ConfigSection>\n </div>\n );\n};\n"],"names":["regions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConnectionConfig.js","sources":["../../../src/components/ConnectionConfig.tsx"],"sourcesContent":["import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, ButtonGroup, ToolbarButton, Text, TextLink, Collapse, Field } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { standardRegions } from '../regions';\nimport { AwsAuthType, ConnectionConfigProps } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { assumeRoleInstructionsStyle } from './ConnectionConfig.styles';\nimport { ConfigSection, ConfigSubSection } from '@grafana/plugin-ui';\n\nexport const DEFAULT_LABEL_WIDTH = 28;\nconst DS_TYPES_THAT_SUPPORT_TEMP_CREDS = [\n 'cloudwatch',\n 'grafana-athena-datasource',\n 'grafana-amazonprometheus-datasource',\n];\nconst toOption = (value: string) => ({ value, label: value });\nconst isAwsAuthType = (value: any): value is AwsAuthType => {\n return typeof value === 'string' && awsAuthProviderOptions.some((opt) => opt.value === value);\n};\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [isARNInstructionsOpen, setIsARNInstructionsOpen] = useState(false);\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const {\n loadRegions,\n onOptionsChange,\n skipHeader = false,\n skipEndpoint = false,\n options,\n hideAssumeRoleArn = false,\n } = props;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n const tempCredsFeatureEnabled =\n config.featureToggles.awsDatasourcesTempCredentials && DS_TYPES_THAT_SUPPORT_TEMP_CREDS.includes(options.type);\n const awsAssumeRoleEnabled = config.awsAssumeRoleEnabled ?? true;\n const awsAllowedAuthProviders = useMemo(\n () =>\n config.awsAllowedAuthProviders\n .filter((provider) => (provider === AwsAuthType.GrafanaAssumeRole ? tempCredsFeatureEnabled : true))\n .filter(isAwsAuthType),\n [tempCredsFeatureEnabled]\n );\n if (tempCredsFeatureEnabled && options.jsonData.authType === AwsAuthType.GrafanaAssumeRole) {\n if (config.namespace.startsWith('stacks-')) {\n props.externalId = config.namespace.substring(config.namespace.indexOf('-') + 1);\n }\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 <div data-testid=\"connection-config\">\n <ConfigSection title={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <ConfigSubSection title=\"Authentication\">\n <Field\n label=\"Authentication Provider\"\n description=\"Specify which AWS credentials chain to use.\"\n htmlFor=\"authProvider\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n inputId=\"authProvider\"\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 </Field>\n {options.jsonData.authType === 'credentials' && (\n <Field\n label=\"Credentials Profile Name\"\n description=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n htmlFor=\"credentialsProfileName\"\n >\n <Input\n id=\"credentialsProfileName\"\n placeholder=\"default\"\n value={options.jsonData.profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </Field>\n )}\n {options.jsonData.authType === 'keys' && (\n <>\n <Field label=\"Access Key ID\" htmlFor=\"accessKeyId\">\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" id=\"accessKeyId\" />\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 id=\"accessKeyId\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </Field>\n\n <Field label=\"Secret Access Key\" htmlFor=\"secretKey\">\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n id=\"secretKey\"\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 id=\"secretKey\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </Field>\n </>\n )}\n </ConfigSubSection>\n\n {!hideAssumeRoleArn && (\n <ConfigSubSection\n title=\"Assume Role\"\n description={\n options.jsonData.authType === AwsAuthType.GrafanaAssumeRole ? (\n <Text>\n Learn more about{' '}\n <TextLink\n inline\n external\n variant=\"bodySmall\"\n href=\"https://grafana.com/docs/plugins/cloudwatch/latest/aws-authentication/#use-grafana-assume-role\"\n >\n Grafana Assume Role\n </TextLink>\n .\n </Text>\n ) : null\n }\n >\n {options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && (\n <div className={assumeRoleInstructionsStyle}>\n <Collapse\n label={'How to create an IAM role for grafana to assume:'}\n collapsible={true}\n isOpen={isARNInstructionsOpen}\n onToggle={() => setIsARNInstructionsOpen(!isARNInstructionsOpen)}\n >\n <ol>\n <li>\n <p>\n 1. Create a new IAM role in the AWS console, and select <code>Another AWS account</code> as the{' '}\n <code>Trusted entity</code>.\n </p>\n </li>\n <li>\n <p>\n 2. Enter the account ID of the Grafana account that has permission to assume this role:\n <code> 008923505280 </code> and check the <code>Require external ID</code> box.\n </p>\n </li>\n <li>\n <p>\n 3. Enter the following external ID:{' '}\n <code>{props.externalId || 'External Id is currently unavailable'}</code> and click{' '}\n <code>Next</code>.\n </p>\n </li>\n <li>\n <p>\n 4. Add any required permissions you would like Grafana to be able to access on your behalf. For\n more details on our permissions please{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n read through our documentation\n </a>\n .\n </p>\n </li>\n <li>\n <p>\n 5. Give the role a name and description, and click <code>Create role</code>.\n </p>\n </li>\n <li>\n <p>\n 6. Copy the ARN of the role you just created and paste it into the <code>Assume Role ARN</code>{' '}\n field below.\n </p>\n </li>\n </ol>\n </Collapse>\n </div>\n )}\n {awsAssumeRoleEnabled && (\n <>\n <Field\n htmlFor=\"assumeRoleArn\"\n label=\"Assume Role ARN\"\n description=\"Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly.\"\n >\n <Input\n id=\"assumeRoleArn\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </Field>\n {options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n htmlFor=\"externalId\"\n label=\"External ID\"\n description=\"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 id=\"externalId\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </Field>\n )}\n </>\n )}\n </ConfigSubSection>\n )}\n <ConfigSubSection title=\"Additional Settings\">\n {!skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n label=\"Endpoint\"\n description=\"Optionally, specify a custom endpoint for the service\"\n htmlFor=\"endpoint\"\n >\n <Input\n id=\"endpoint\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </Field>\n )}\n\n <Field\n label=\"Default Region\"\n description=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n htmlFor=\"defaultRegion\"\n >\n <Select\n inputId=\"defaultRegion\"\n value={\n regions.find((region) => region.value === options.jsonData.defaultRegion) ??\n (options.jsonData.defaultRegion\n ? {\n label: options.jsonData.defaultRegion,\n value: options.jsonData.defaultRegion,\n }\n : undefined)\n }\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 </Field>\n </ConfigSubSection>\n {props.children}\n </ConfigSection>\n </div>\n );\n};\n"],"names":["regions"],"mappings":"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"}
|
package/dist/esm/regions.js
CHANGED
|
@@ -12,6 +12,7 @@ const standardRegions = [
|
|
|
12
12
|
"ap-southeast-3",
|
|
13
13
|
"ap-southeast-4",
|
|
14
14
|
"ap-southeast-5",
|
|
15
|
+
"ap-southeast-6",
|
|
15
16
|
"ap-southeast-7",
|
|
16
17
|
"ca-central-1",
|
|
17
18
|
"ca-west-1",
|
|
@@ -19,6 +20,7 @@ const standardRegions = [
|
|
|
19
20
|
"cn-northwest-1",
|
|
20
21
|
"eu-central-1",
|
|
21
22
|
"eu-central-2",
|
|
23
|
+
"eu-isoe-west-1",
|
|
22
24
|
"eu-north-1",
|
|
23
25
|
"eu-south-1",
|
|
24
26
|
"eu-south-2",
|
|
@@ -35,7 +37,11 @@ const standardRegions = [
|
|
|
35
37
|
"us-gov-east-1",
|
|
36
38
|
"us-gov-west-1",
|
|
37
39
|
"us-iso-east-1",
|
|
40
|
+
"us-iso-west-1",
|
|
38
41
|
"us-isob-east-1",
|
|
42
|
+
"us-isob-west-1",
|
|
43
|
+
"us-isof-east-1",
|
|
44
|
+
"us-northeast-1",
|
|
39
45
|
"us-west-1",
|
|
40
46
|
"us-west-2"
|
|
41
47
|
];
|
package/dist/esm/regions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regions.js","sources":["../../src/regions.ts"],"sourcesContent":["export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-east-2',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-south-2',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ap-southeast-3',\n 'ap-southeast-4',\n 'ap-southeast-5',\n 'ap-southeast-7',\n 'ca-central-1',\n 'ca-west-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-central-2',\n 'eu-north-1',\n 'eu-south-1',\n 'eu-south-2',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'il-central-1',\n 'me-central-1',\n 'me-south-1',\n 'mx-central-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"],"names":[],"mappings":"AAAO,MAAM,eAAA,GAA4B;AAAA,EACvC,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"regions.js","sources":["../../src/regions.ts"],"sourcesContent":["export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-east-2',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-south-2',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ap-southeast-3',\n 'ap-southeast-4',\n 'ap-southeast-5',\n 'ap-southeast-6',\n 'ap-southeast-7',\n 'ca-central-1',\n 'ca-west-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-central-2',\n 'eu-isoe-west-1',\n 'eu-north-1',\n 'eu-south-1',\n 'eu-south-2',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'il-central-1',\n 'me-central-1',\n 'me-south-1',\n 'mx-central-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-iso-west-1',\n 'us-isob-east-1',\n 'us-isob-west-1',\n 'us-isof-east-1',\n 'us-northeast-1',\n 'us-west-1',\n 'us-west-2',\n];\n"],"names":[],"mappings":"AAAO,MAAM,eAAA,GAA4B;AAAA,EACvC,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ const standardRegions = [
|
|
|
29
29
|
"ap-southeast-3",
|
|
30
30
|
"ap-southeast-4",
|
|
31
31
|
"ap-southeast-5",
|
|
32
|
+
"ap-southeast-6",
|
|
32
33
|
"ap-southeast-7",
|
|
33
34
|
"ca-central-1",
|
|
34
35
|
"ca-west-1",
|
|
@@ -36,6 +37,7 @@ const standardRegions = [
|
|
|
36
37
|
"cn-northwest-1",
|
|
37
38
|
"eu-central-1",
|
|
38
39
|
"eu-central-2",
|
|
40
|
+
"eu-isoe-west-1",
|
|
39
41
|
"eu-north-1",
|
|
40
42
|
"eu-south-1",
|
|
41
43
|
"eu-south-2",
|
|
@@ -52,7 +54,11 @@ const standardRegions = [
|
|
|
52
54
|
"us-gov-east-1",
|
|
53
55
|
"us-gov-west-1",
|
|
54
56
|
"us-iso-east-1",
|
|
57
|
+
"us-iso-west-1",
|
|
55
58
|
"us-isob-east-1",
|
|
59
|
+
"us-isob-west-1",
|
|
60
|
+
"us-isof-east-1",
|
|
61
|
+
"us-northeast-1",
|
|
56
62
|
"us-west-1",
|
|
57
63
|
"us-west-2"
|
|
58
64
|
];
|
|
@@ -217,56 +223,73 @@ const ConnectionConfig = (props) => {
|
|
|
217
223
|
value: (_g = (_f = options.secureJsonData) == null ? void 0 : _f.secretKey) != null ? _g : "",
|
|
218
224
|
onChange: data.onUpdateDatasourceSecureJsonDataOption(props, "secretKey")
|
|
219
225
|
}
|
|
220
|
-
)))), !hideAssumeRoleArn && /* @__PURE__ */ React__default.default.createElement(
|
|
221
|
-
|
|
226
|
+
)))), !hideAssumeRoleArn && /* @__PURE__ */ React__default.default.createElement(
|
|
227
|
+
pluginUi.ConfigSubSection,
|
|
222
228
|
{
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
229
|
+
title: "Assume Role",
|
|
230
|
+
description: options.jsonData.authType === AwsAuthType.GrafanaAssumeRole ? /* @__PURE__ */ React__default.default.createElement(ui.Text, null, "Learn more about", " ", /* @__PURE__ */ React__default.default.createElement(
|
|
231
|
+
ui.TextLink,
|
|
232
|
+
{
|
|
233
|
+
inline: true,
|
|
234
|
+
external: true,
|
|
235
|
+
variant: "bodySmall",
|
|
236
|
+
href: "https://grafana.com/docs/plugins/cloudwatch/latest/aws-authentication/#use-grafana-assume-role"
|
|
237
|
+
},
|
|
238
|
+
"Grafana Assume Role"
|
|
239
|
+
), ".") : null
|
|
227
240
|
},
|
|
228
|
-
|
|
229
|
-
|
|
241
|
+
options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React__default.default.createElement("div", { className: assumeRoleInstructionsStyle }, /* @__PURE__ */ React__default.default.createElement(
|
|
242
|
+
ui.Collapse,
|
|
230
243
|
{
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
244
|
+
label: "How to create an IAM role for grafana to assume:",
|
|
245
|
+
collapsible: true,
|
|
246
|
+
isOpen: isARNInstructionsOpen,
|
|
247
|
+
onToggle: () => setIsARNInstructionsOpen(!isARNInstructionsOpen)
|
|
234
248
|
},
|
|
235
|
-
"
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
249
|
+
/* @__PURE__ */ React__default.default.createElement("ol", null, /* @__PURE__ */ React__default.default.createElement("li", null, /* @__PURE__ */ React__default.default.createElement("p", null, "1. Create a new IAM role in the AWS console, and select ", /* @__PURE__ */ React__default.default.createElement("code", null, "Another AWS account"), " as the", " ", /* @__PURE__ */ React__default.default.createElement("code", null, "Trusted entity"), ".")), /* @__PURE__ */ React__default.default.createElement("li", null, /* @__PURE__ */ React__default.default.createElement("p", null, "2. Enter the account ID of the Grafana account that has permission to assume this role:", /* @__PURE__ */ React__default.default.createElement("code", null, " 008923505280 "), " and check the ", /* @__PURE__ */ React__default.default.createElement("code", null, "Require external ID"), " box.")), /* @__PURE__ */ React__default.default.createElement("li", null, /* @__PURE__ */ React__default.default.createElement("p", null, "3. Enter the following external ID:", " ", /* @__PURE__ */ React__default.default.createElement("code", null, props.externalId || "External Id is currently unavailable"), " and click", " ", /* @__PURE__ */ React__default.default.createElement("code", null, "Next"), ".")), /* @__PURE__ */ React__default.default.createElement("li", null, /* @__PURE__ */ React__default.default.createElement("p", null, "4. Add any required permissions you would like Grafana to be able to access on your behalf. For more details on our permissions please", " ", /* @__PURE__ */ React__default.default.createElement(
|
|
250
|
+
"a",
|
|
251
|
+
{
|
|
252
|
+
href: "https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/",
|
|
253
|
+
target: "_blank",
|
|
254
|
+
rel: "noreferrer"
|
|
255
|
+
},
|
|
256
|
+
"read through our documentation"
|
|
257
|
+
), ".")), /* @__PURE__ */ React__default.default.createElement("li", null, /* @__PURE__ */ React__default.default.createElement("p", null, "5. Give the role a name and description, and click ", /* @__PURE__ */ React__default.default.createElement("code", null, "Create role"), ".")), /* @__PURE__ */ React__default.default.createElement("li", null, /* @__PURE__ */ React__default.default.createElement("p", null, "6. Copy the ARN of the role you just created and paste it into the ", /* @__PURE__ */ React__default.default.createElement("code", null, "Assume Role ARN"), " ", "field below.")))
|
|
258
|
+
)),
|
|
259
|
+
awsAssumeRoleEnabled && /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement(
|
|
260
|
+
ui.Field,
|
|
246
261
|
{
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
/* @__PURE__ */ React__default.default.createElement(
|
|
261
|
-
ui.
|
|
262
|
+
htmlFor: "assumeRoleArn",
|
|
263
|
+
label: "Assume Role ARN",
|
|
264
|
+
description: "Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly."
|
|
265
|
+
},
|
|
266
|
+
/* @__PURE__ */ React__default.default.createElement(
|
|
267
|
+
ui.Input,
|
|
268
|
+
{
|
|
269
|
+
id: "assumeRoleArn",
|
|
270
|
+
placeholder: "arn:aws:iam:*",
|
|
271
|
+
value: options.jsonData.assumeRoleArn || "",
|
|
272
|
+
onChange: data.onUpdateDatasourceJsonDataOption(props, "assumeRoleArn")
|
|
273
|
+
}
|
|
274
|
+
)
|
|
275
|
+
), options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React__default.default.createElement(
|
|
276
|
+
ui.Field,
|
|
262
277
|
{
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
278
|
+
htmlFor: "externalId",
|
|
279
|
+
label: "External ID",
|
|
280
|
+
description: "If you are assuming a role in another account, that has been created with an external ID, specify the external ID here."
|
|
281
|
+
},
|
|
282
|
+
/* @__PURE__ */ React__default.default.createElement(
|
|
283
|
+
ui.Input,
|
|
284
|
+
{
|
|
285
|
+
id: "externalId",
|
|
286
|
+
placeholder: "External ID",
|
|
287
|
+
value: options.jsonData.externalId || "",
|
|
288
|
+
onChange: data.onUpdateDatasourceJsonDataOption(props, "externalId")
|
|
289
|
+
}
|
|
290
|
+
)
|
|
291
|
+
))
|
|
292
|
+
), /* @__PURE__ */ React__default.default.createElement(pluginUi.ConfigSubSection, { title: "Additional Settings" }, !skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React__default.default.createElement(
|
|
270
293
|
ui.Field,
|
|
271
294
|
{
|
|
272
295
|
label: "Endpoint",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/regions.ts","../src/types.ts","../src/providers.ts","../src/components/ConnectionConfig.styles.ts","../src/components/ConnectionConfig.tsx","../src/components/utils/version.ts","../src/components/Divider.tsx","../src/components/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/QueryEditorHeader.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-east-2',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-south-2',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ap-southeast-3',\n 'ap-southeast-4',\n 'ap-southeast-5',\n 'ap-southeast-7',\n 'ca-central-1',\n 'ca-west-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-central-2',\n 'eu-north-1',\n 'eu-south-1',\n 'eu-south-2',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'il-central-1',\n 'me-central-1',\n 'me-south-1',\n 'mx-central-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 type { DataSourceJsonData, DataSourcePluginOptionsEditorProps, 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 GrafanaAssumeRole = 'grafana_assume_role',\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\nexport interface ConnectionConfigProps<\n J extends AwsAuthDataSourceJsonData = AwsAuthDataSourceJsonData,\n 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 inExperimentalAuthComponent?: boolean;\n externalId?: string;\n hideAssumeRoleArn?: boolean;\n}\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions: Array<SelectableValue<AwsAuthType>> = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\n },\n {\n label: 'Grafana Assume Role',\n value: AwsAuthType.GrafanaAssumeRole,\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];\n","import { css } from '@emotion/css';\n\nexport const assumeRoleInstructionsStyle = css({\n maxWidth: '715px',\n});\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, ButtonGroup, ToolbarButton, Collapse, Field } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { standardRegions } from '../regions';\nimport { AwsAuthType, ConnectionConfigProps } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { assumeRoleInstructionsStyle } from './ConnectionConfig.styles';\nimport { ConfigSection, ConfigSubSection } from '@grafana/plugin-ui';\n\nexport const DEFAULT_LABEL_WIDTH = 28;\nconst DS_TYPES_THAT_SUPPORT_TEMP_CREDS = [\n 'cloudwatch',\n 'grafana-athena-datasource',\n 'grafana-amazonprometheus-datasource',\n];\nconst toOption = (value: string) => ({ value, label: value });\nconst isAwsAuthType = (value: any): value is AwsAuthType => {\n return typeof value === 'string' && awsAuthProviderOptions.some((opt) => opt.value === value);\n};\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [isARNInstructionsOpen, setIsARNInstructionsOpen] = useState(false);\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const {\n loadRegions,\n onOptionsChange,\n skipHeader = false,\n skipEndpoint = false,\n options,\n hideAssumeRoleArn = false,\n } = props;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n const tempCredsFeatureEnabled =\n config.featureToggles.awsDatasourcesTempCredentials && DS_TYPES_THAT_SUPPORT_TEMP_CREDS.includes(options.type);\n const awsAssumeRoleEnabled = config.awsAssumeRoleEnabled ?? true;\n const awsAllowedAuthProviders = useMemo(\n () =>\n config.awsAllowedAuthProviders\n .filter((provider) => (provider === AwsAuthType.GrafanaAssumeRole ? tempCredsFeatureEnabled : true))\n .filter(isAwsAuthType),\n [tempCredsFeatureEnabled]\n );\n if (tempCredsFeatureEnabled && options.jsonData.authType === AwsAuthType.GrafanaAssumeRole) {\n if (config.namespace.startsWith('stacks-')) {\n props.externalId = config.namespace.substring(config.namespace.indexOf('-') + 1);\n }\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 <div data-testid=\"connection-config\">\n <ConfigSection title={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <ConfigSubSection title=\"Authentication\">\n <Field\n label=\"Authentication Provider\"\n description=\"Specify which AWS credentials chain to use.\"\n htmlFor=\"authProvider\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n inputId=\"authProvider\"\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 </Field>\n {options.jsonData.authType === 'credentials' && (\n <Field\n label=\"Credentials Profile Name\"\n description=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n htmlFor=\"credentialsProfileName\"\n >\n <Input\n id=\"credentialsProfileName\"\n placeholder=\"default\"\n value={options.jsonData.profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </Field>\n )}\n {options.jsonData.authType === 'keys' && (\n <>\n <Field label=\"Access Key ID\" htmlFor=\"accessKeyId\">\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" id=\"accessKeyId\" />\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 id=\"accessKeyId\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </Field>\n\n <Field label=\"Secret Access Key\" htmlFor=\"secretKey\">\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n id=\"secretKey\"\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 id=\"secretKey\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </Field>\n </>\n )}\n </ConfigSubSection>\n\n {!hideAssumeRoleArn && (\n <ConfigSubSection title=\"Assume Role\">\n {options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && (\n <div className={assumeRoleInstructionsStyle}>\n <Collapse\n label={'How to create an IAM role for grafana to assume:'}\n collapsible={true}\n isOpen={isARNInstructionsOpen}\n onToggle={() => setIsARNInstructionsOpen(!isARNInstructionsOpen)}\n >\n <ol>\n <li>\n <p>\n 1. Create a new IAM role in the AWS console, and select <code>Another AWS account</code> as the{' '}\n <code>Trusted entity</code>.\n </p>\n </li>\n <li>\n <p>\n 2. Enter the account ID of the Grafana account that has permission to assume this role:\n <code> 008923505280 </code> and check the <code>Require external ID</code> box.\n </p>\n </li>\n <li>\n <p>\n 3. Enter the following external ID:{' '}\n <code>{props.externalId || 'External Id is currently unavailable'}</code> and click{' '}\n <code>Next</code>.\n </p>\n </li>\n <li>\n <p>\n 4. Add any required permissions you would like Grafana to be able to access on your behalf. For\n more details on our permissions please{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n read through our documentation\n </a>\n .\n </p>\n </li>\n <li>\n <p>\n 5. Give the role a name and description, and click <code>Create role</code>.\n </p>\n </li>\n <li>\n <p>\n 6. Copy the ARN of the role you just created and paste it into the <code>Assume Role ARN</code>{' '}\n field below.\n </p>\n </li>\n </ol>\n </Collapse>\n </div>\n )}\n {awsAssumeRoleEnabled && (\n <>\n <Field\n htmlFor=\"assumeRoleArn\"\n label=\"Assume Role ARN\"\n description=\"Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly.\"\n >\n <Input\n id=\"assumeRoleArn\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </Field>\n {options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n htmlFor=\"externalId\"\n label=\"External ID\"\n description=\"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 id=\"externalId\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </Field>\n )}\n </>\n )}\n </ConfigSubSection>\n )}\n <ConfigSubSection title=\"Additional Settings\">\n {!skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n label=\"Endpoint\"\n description=\"Optionally, specify a custom endpoint for the service\"\n htmlFor=\"endpoint\"\n >\n <Input\n id=\"endpoint\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </Field>\n )}\n\n <Field\n label=\"Default Region\"\n description=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n htmlFor=\"defaultRegion\"\n >\n <Select\n inputId=\"defaultRegion\"\n value={\n regions.find((region) => region.value === options.jsonData.defaultRegion) ??\n (options.jsonData.defaultRegion\n ? {\n label: options.jsonData.defaultRegion,\n value: options.jsonData.defaultRegion,\n }\n : undefined)\n }\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 </Field>\n </ConfigSubSection>\n {props.children}\n </ConfigSection>\n </div>\n );\n};\n","// copied from Azure Data Explorer plugin\nimport { isNumber } from 'lodash';\n\nconst versionPattern = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-([0-9A-Za-z\\.]+))?/;\n\nexport class SemVersion {\n major: number;\n minor: number;\n patch: number;\n meta: string;\n\n constructor(version: string) {\n this.major = 0;\n this.minor = 0;\n this.patch = 0;\n this.meta = '';\n\n const match = versionPattern.exec(version);\n if (match) {\n this.major = Number(match[1]);\n this.minor = Number(match[2] || 0);\n this.patch = Number(match[3] || 0);\n this.meta = match[4];\n }\n }\n\n isGtOrEq(version: string): boolean {\n const compared = new SemVersion(version);\n\n for (let i = 0; i < this.comparable.length; ++i) {\n if (this.comparable[i] > compared.comparable[i]) {\n return true;\n }\n if (this.comparable[i] < compared.comparable[i]) {\n return false;\n }\n }\n return true;\n }\n\n isValid(): boolean {\n return isNumber(this.major);\n }\n\n get comparable() {\n return [this.major, this.minor, this.patch];\n }\n}\n\nexport function isVersionGtOrEq(a: string, b: string): boolean {\n const aSemver = new SemVersion(a);\n return aSemver.isGtOrEq(b);\n}\n","// copied from Azure Data Explorer plugin since there is not Divider component in G<10.1\nimport React from 'react';\nimport { Divider as GrafanaDivider, useTheme2 } from '@grafana/ui';\nimport { config } from '@grafana/runtime';\nimport { isVersionGtOrEq } from './utils/version';\n\nexport function Divider() {\n const theme = useTheme2();\n if (isVersionGtOrEq(config.buildInfo.version, '10.1.0')) {\n return <GrafanaDivider />;\n }\n return (\n <div\n style={{ borderTop: `1px solid ${theme.colors.border.weak}`, margin: theme.spacing(2, 0), width: '100%' }}\n ></div>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig } from '../components/ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData, ConnectionConfigProps } from '../types';\n\nexport interface SIGV4ConnectionConfigProps extends DataSourcePluginOptionsEditorProps<any, any> {\n inExperimentalAuthComponent?: boolean;\n}\n\nexport const SIGV4ConnectionConfig: React.FC<SIGV4ConnectionConfigProps> = (props: SIGV4ConnectionConfigProps) => {\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 inExperimentalAuthComponent: props.inExperimentalAuthComponent,\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/schema';\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 { Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, DependencyList, useRef } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n // props for old form styling\n tooltip?: string;\n hidden?: boolean;\n\n value: string | null;\n dependencies?: DependencyList;\n id: string;\n label: string;\n 'data-testid'?: string;\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 propsDependencies = props.dependencies;\n const propsOnChange = props.onChange;\n\n const dependencies = useRef(props.dependencies);\n const fetched = useRef<boolean>(false);\n const resource = useRef<string | null>(props.value || props.default || null);\n\n const [resources, setResources] = useState<Array<string | SelectableValue>>(\n resource.current ? [resource.current] : []\n );\n const [isLoading, setIsLoading] = useState(false);\n\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(propsDependencies, dependencies.current)) {\n fetched.current = false;\n resource.current = null;\n dependencies.current = propsDependencies;\n propsOnChange(null);\n }\n }, [propsDependencies, propsOnChange]);\n\n const fetch = async () => {\n if (fetched.current) {\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 fetched.current = true;\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n propsOnChange(e);\n if (e.value) {\n resource.current = 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 <Select\n {...props}\n id={props.id}\n inputId={props.id}\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 );\n}\n","import React, { DependencyList } from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\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 // input id and label necessary for accessibility attributes\n id: 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 ?? DEFAULT_LABEL_WIDTH,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: DependencyList = [\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 id={props.id}\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 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 placeholder={props.placeholder}\n width={props.width}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React, { FormEvent } from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\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 ?? DEFAULT_LABEL_WIDTH}\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/schema';\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';\n\nimport { DataQuery, DataSourceApi, DataSourceJsonData, LoadingState, QueryEditorProps } from '@grafana/data';\nimport { EditorHeader, FlexItem } from '@grafana/plugin-ui';\nimport { Button } from '@grafana/ui';\nimport { RunQueryButtons } from '@grafana/async-query-data';\n\nexport interface Props<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n> extends QueryEditorProps<Datasource, TQuery, JsonData> {\n showAsyncQueryButtons?: boolean;\n extraHeaderElementLeft?: React.JSX.Element;\n extraHeaderElementRight?: React.JSX.Element;\n enableRunButton: boolean;\n cancel?: (target: TQuery) => void;\n onRunQuery: () => void;\n}\n\nexport function QueryEditorHeader<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n>({\n query,\n showAsyncQueryButtons,\n extraHeaderElementLeft,\n extraHeaderElementRight,\n enableRunButton,\n onRunQuery,\n data,\n cancel,\n}: Props<Datasource, TQuery, JsonData>): React.JSX.Element {\n return (\n <EditorHeader>\n {extraHeaderElementLeft}\n <FlexItem grow={1} />\n {showAsyncQueryButtons ? (\n <RunQueryButtons\n onRunQuery={onRunQuery}\n enableRun={enableRunButton}\n query={query}\n onCancelQuery={(target: TQuery) => {\n cancel?.(target);\n }}\n state={data?.state}\n />\n ) : (\n <Button\n variant={enableRunButton ? 'primary' : 'secondary'}\n size=\"sm\"\n onClick={onRunQuery}\n icon={data?.state === LoadingState.Loading ? 'fa fa-spinner' : undefined}\n disabled={data?.state === LoadingState.Loading || !enableRunButton}\n >\n Run queries\n </Button>\n )}\n {extraHeaderElementRight}\n </EditorHeader>\n );\n}\n","import React from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n id?: string;\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 <Select\n aria-label=\"Format data frames as\"\n id={props.id ?? 'formatAs'}\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n menuShouldPortal={true}\n />\n );\n}\n","import React from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { Input, Select } from '@grafana/ui';\nimport { EditorField } from '@grafana/plugin-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 <EditorField label=\"Fill with\" tooltip=\"value to fill missing points\" htmlFor=\"fillWith\">\n <Select\n id=\"fillWith\"\n aria-label=\"Fill with\"\n data-testid=\"table-fill-with-select\"\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 menuShouldPortal={true}\n />\n </EditorField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <EditorField label=\"Value\" htmlFor=\"valueToFill\" width={6}>\n <Input\n id=\"valueToFill\"\n aria-label=\"Value\"\n type=\"number\"\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 </EditorField>\n )}\n </>\n );\n}\n","import { ScopedVars, TypedVariableModel } 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<T extends SQLQuery>(\n query: T,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): T {\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' || typeof value === 'number') {\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: TypedVariableModel) => {\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","css","useState","config","useMemo","useEffect","regions","React","ConfigSection","ConfigSubSection","Field","Select","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","ButtonGroup","ToolbarButton","onUpdateDatasourceResetOption","onUpdateDatasourceSecureJsonDataOption","Collapse","isNumber","useTheme2","GrafanaDivider","_a","_b","_c","_d","useRef","isEqual","resources","InlineField","defaults","rawSQL","query","CodeEditor","data","EditorHeader","FlexItem","RunQueryButtons","Button","LoadingState","FillValueOptions","EditorField","CodeEditorSuggestionItemKind"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/regions.ts","../src/types.ts","../src/providers.ts","../src/components/ConnectionConfig.styles.ts","../src/components/ConnectionConfig.tsx","../src/components/utils/version.ts","../src/components/Divider.tsx","../src/components/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/QueryEditorHeader.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-east-2',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-south-2',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ap-southeast-3',\n 'ap-southeast-4',\n 'ap-southeast-5',\n 'ap-southeast-6',\n 'ap-southeast-7',\n 'ca-central-1',\n 'ca-west-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-central-2',\n 'eu-isoe-west-1',\n 'eu-north-1',\n 'eu-south-1',\n 'eu-south-2',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'il-central-1',\n 'me-central-1',\n 'me-south-1',\n 'mx-central-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-iso-west-1',\n 'us-isob-east-1',\n 'us-isob-west-1',\n 'us-isof-east-1',\n 'us-northeast-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import type { DataSourceJsonData, DataSourcePluginOptionsEditorProps, 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 GrafanaAssumeRole = 'grafana_assume_role',\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\nexport interface ConnectionConfigProps<\n J extends AwsAuthDataSourceJsonData = AwsAuthDataSourceJsonData,\n 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 inExperimentalAuthComponent?: boolean;\n externalId?: string;\n hideAssumeRoleArn?: boolean;\n}\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions: Array<SelectableValue<AwsAuthType>> = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\n },\n {\n label: 'Grafana Assume Role',\n value: AwsAuthType.GrafanaAssumeRole,\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];\n","import { css } from '@emotion/css';\n\nexport const assumeRoleInstructionsStyle = css({\n maxWidth: '715px',\n});\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, ButtonGroup, ToolbarButton, Text, TextLink, Collapse, Field } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { standardRegions } from '../regions';\nimport { AwsAuthType, ConnectionConfigProps } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { assumeRoleInstructionsStyle } from './ConnectionConfig.styles';\nimport { ConfigSection, ConfigSubSection } from '@grafana/plugin-ui';\n\nexport const DEFAULT_LABEL_WIDTH = 28;\nconst DS_TYPES_THAT_SUPPORT_TEMP_CREDS = [\n 'cloudwatch',\n 'grafana-athena-datasource',\n 'grafana-amazonprometheus-datasource',\n];\nconst toOption = (value: string) => ({ value, label: value });\nconst isAwsAuthType = (value: any): value is AwsAuthType => {\n return typeof value === 'string' && awsAuthProviderOptions.some((opt) => opt.value === value);\n};\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [isARNInstructionsOpen, setIsARNInstructionsOpen] = useState(false);\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const {\n loadRegions,\n onOptionsChange,\n skipHeader = false,\n skipEndpoint = false,\n options,\n hideAssumeRoleArn = false,\n } = props;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n const tempCredsFeatureEnabled =\n config.featureToggles.awsDatasourcesTempCredentials && DS_TYPES_THAT_SUPPORT_TEMP_CREDS.includes(options.type);\n const awsAssumeRoleEnabled = config.awsAssumeRoleEnabled ?? true;\n const awsAllowedAuthProviders = useMemo(\n () =>\n config.awsAllowedAuthProviders\n .filter((provider) => (provider === AwsAuthType.GrafanaAssumeRole ? tempCredsFeatureEnabled : true))\n .filter(isAwsAuthType),\n [tempCredsFeatureEnabled]\n );\n if (tempCredsFeatureEnabled && options.jsonData.authType === AwsAuthType.GrafanaAssumeRole) {\n if (config.namespace.startsWith('stacks-')) {\n props.externalId = config.namespace.substring(config.namespace.indexOf('-') + 1);\n }\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 <div data-testid=\"connection-config\">\n <ConfigSection title={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <ConfigSubSection title=\"Authentication\">\n <Field\n label=\"Authentication Provider\"\n description=\"Specify which AWS credentials chain to use.\"\n htmlFor=\"authProvider\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n inputId=\"authProvider\"\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 </Field>\n {options.jsonData.authType === 'credentials' && (\n <Field\n label=\"Credentials Profile Name\"\n description=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n htmlFor=\"credentialsProfileName\"\n >\n <Input\n id=\"credentialsProfileName\"\n placeholder=\"default\"\n value={options.jsonData.profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </Field>\n )}\n {options.jsonData.authType === 'keys' && (\n <>\n <Field label=\"Access Key ID\" htmlFor=\"accessKeyId\">\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" id=\"accessKeyId\" />\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 id=\"accessKeyId\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </Field>\n\n <Field label=\"Secret Access Key\" htmlFor=\"secretKey\">\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n id=\"secretKey\"\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 id=\"secretKey\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </Field>\n </>\n )}\n </ConfigSubSection>\n\n {!hideAssumeRoleArn && (\n <ConfigSubSection\n title=\"Assume Role\"\n description={\n options.jsonData.authType === AwsAuthType.GrafanaAssumeRole ? (\n <Text>\n Learn more about{' '}\n <TextLink\n inline\n external\n variant=\"bodySmall\"\n href=\"https://grafana.com/docs/plugins/cloudwatch/latest/aws-authentication/#use-grafana-assume-role\"\n >\n Grafana Assume Role\n </TextLink>\n .\n </Text>\n ) : null\n }\n >\n {options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && (\n <div className={assumeRoleInstructionsStyle}>\n <Collapse\n label={'How to create an IAM role for grafana to assume:'}\n collapsible={true}\n isOpen={isARNInstructionsOpen}\n onToggle={() => setIsARNInstructionsOpen(!isARNInstructionsOpen)}\n >\n <ol>\n <li>\n <p>\n 1. Create a new IAM role in the AWS console, and select <code>Another AWS account</code> as the{' '}\n <code>Trusted entity</code>.\n </p>\n </li>\n <li>\n <p>\n 2. Enter the account ID of the Grafana account that has permission to assume this role:\n <code> 008923505280 </code> and check the <code>Require external ID</code> box.\n </p>\n </li>\n <li>\n <p>\n 3. Enter the following external ID:{' '}\n <code>{props.externalId || 'External Id is currently unavailable'}</code> and click{' '}\n <code>Next</code>.\n </p>\n </li>\n <li>\n <p>\n 4. Add any required permissions you would like Grafana to be able to access on your behalf. For\n more details on our permissions please{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n read through our documentation\n </a>\n .\n </p>\n </li>\n <li>\n <p>\n 5. Give the role a name and description, and click <code>Create role</code>.\n </p>\n </li>\n <li>\n <p>\n 6. Copy the ARN of the role you just created and paste it into the <code>Assume Role ARN</code>{' '}\n field below.\n </p>\n </li>\n </ol>\n </Collapse>\n </div>\n )}\n {awsAssumeRoleEnabled && (\n <>\n <Field\n htmlFor=\"assumeRoleArn\"\n label=\"Assume Role ARN\"\n description=\"Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly.\"\n >\n <Input\n id=\"assumeRoleArn\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </Field>\n {options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n htmlFor=\"externalId\"\n label=\"External ID\"\n description=\"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 id=\"externalId\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </Field>\n )}\n </>\n )}\n </ConfigSubSection>\n )}\n <ConfigSubSection title=\"Additional Settings\">\n {!skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n label=\"Endpoint\"\n description=\"Optionally, specify a custom endpoint for the service\"\n htmlFor=\"endpoint\"\n >\n <Input\n id=\"endpoint\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </Field>\n )}\n\n <Field\n label=\"Default Region\"\n description=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n htmlFor=\"defaultRegion\"\n >\n <Select\n inputId=\"defaultRegion\"\n value={\n regions.find((region) => region.value === options.jsonData.defaultRegion) ??\n (options.jsonData.defaultRegion\n ? {\n label: options.jsonData.defaultRegion,\n value: options.jsonData.defaultRegion,\n }\n : undefined)\n }\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 </Field>\n </ConfigSubSection>\n {props.children}\n </ConfigSection>\n </div>\n );\n};\n","// copied from Azure Data Explorer plugin\nimport { isNumber } from 'lodash';\n\nconst versionPattern = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-([0-9A-Za-z\\.]+))?/;\n\nexport class SemVersion {\n major: number;\n minor: number;\n patch: number;\n meta: string;\n\n constructor(version: string) {\n this.major = 0;\n this.minor = 0;\n this.patch = 0;\n this.meta = '';\n\n const match = versionPattern.exec(version);\n if (match) {\n this.major = Number(match[1]);\n this.minor = Number(match[2] || 0);\n this.patch = Number(match[3] || 0);\n this.meta = match[4];\n }\n }\n\n isGtOrEq(version: string): boolean {\n const compared = new SemVersion(version);\n\n for (let i = 0; i < this.comparable.length; ++i) {\n if (this.comparable[i] > compared.comparable[i]) {\n return true;\n }\n if (this.comparable[i] < compared.comparable[i]) {\n return false;\n }\n }\n return true;\n }\n\n isValid(): boolean {\n return isNumber(this.major);\n }\n\n get comparable() {\n return [this.major, this.minor, this.patch];\n }\n}\n\nexport function isVersionGtOrEq(a: string, b: string): boolean {\n const aSemver = new SemVersion(a);\n return aSemver.isGtOrEq(b);\n}\n","// copied from Azure Data Explorer plugin since there is not Divider component in G<10.1\nimport React from 'react';\nimport { Divider as GrafanaDivider, useTheme2 } from '@grafana/ui';\nimport { config } from '@grafana/runtime';\nimport { isVersionGtOrEq } from './utils/version';\n\nexport function Divider() {\n const theme = useTheme2();\n if (isVersionGtOrEq(config.buildInfo.version, '10.1.0')) {\n return <GrafanaDivider />;\n }\n return (\n <div\n style={{ borderTop: `1px solid ${theme.colors.border.weak}`, margin: theme.spacing(2, 0), width: '100%' }}\n ></div>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig } from '../components/ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData, ConnectionConfigProps } from '../types';\n\nexport interface SIGV4ConnectionConfigProps extends DataSourcePluginOptionsEditorProps<any, any> {\n inExperimentalAuthComponent?: boolean;\n}\n\nexport const SIGV4ConnectionConfig: React.FC<SIGV4ConnectionConfigProps> = (props: SIGV4ConnectionConfigProps) => {\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 inExperimentalAuthComponent: props.inExperimentalAuthComponent,\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/schema';\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 { Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, DependencyList, useRef } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n // props for old form styling\n tooltip?: string;\n hidden?: boolean;\n\n value: string | null;\n dependencies?: DependencyList;\n id: string;\n label: string;\n 'data-testid'?: string;\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 propsDependencies = props.dependencies;\n const propsOnChange = props.onChange;\n\n const dependencies = useRef(props.dependencies);\n const fetched = useRef<boolean>(false);\n const resource = useRef<string | null>(props.value || props.default || null);\n\n const [resources, setResources] = useState<Array<string | SelectableValue>>(\n resource.current ? [resource.current] : []\n );\n const [isLoading, setIsLoading] = useState(false);\n\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(propsDependencies, dependencies.current)) {\n fetched.current = false;\n resource.current = null;\n dependencies.current = propsDependencies;\n propsOnChange(null);\n }\n }, [propsDependencies, propsOnChange]);\n\n const fetch = async () => {\n if (fetched.current) {\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 fetched.current = true;\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n propsOnChange(e);\n if (e.value) {\n resource.current = 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 <Select\n {...props}\n id={props.id}\n inputId={props.id}\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 );\n}\n","import React, { DependencyList } from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\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 // input id and label necessary for accessibility attributes\n id: 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 ?? DEFAULT_LABEL_WIDTH,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: DependencyList = [\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 id={props.id}\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 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 placeholder={props.placeholder}\n width={props.width}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React, { FormEvent } from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\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 ?? DEFAULT_LABEL_WIDTH}\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/schema';\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';\n\nimport { DataQuery, DataSourceApi, DataSourceJsonData, LoadingState, QueryEditorProps } from '@grafana/data';\nimport { EditorHeader, FlexItem } from '@grafana/plugin-ui';\nimport { Button } from '@grafana/ui';\nimport { RunQueryButtons } from '@grafana/async-query-data';\n\nexport interface Props<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n> extends QueryEditorProps<Datasource, TQuery, JsonData> {\n showAsyncQueryButtons?: boolean;\n extraHeaderElementLeft?: React.JSX.Element;\n extraHeaderElementRight?: React.JSX.Element;\n enableRunButton: boolean;\n cancel?: (target: TQuery) => void;\n onRunQuery: () => void;\n}\n\nexport function QueryEditorHeader<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n>({\n query,\n showAsyncQueryButtons,\n extraHeaderElementLeft,\n extraHeaderElementRight,\n enableRunButton,\n onRunQuery,\n data,\n cancel,\n}: Props<Datasource, TQuery, JsonData>): React.JSX.Element {\n return (\n <EditorHeader>\n {extraHeaderElementLeft}\n <FlexItem grow={1} />\n {showAsyncQueryButtons ? (\n <RunQueryButtons\n onRunQuery={onRunQuery}\n enableRun={enableRunButton}\n query={query}\n onCancelQuery={(target: TQuery) => {\n cancel?.(target);\n }}\n state={data?.state}\n />\n ) : (\n <Button\n variant={enableRunButton ? 'primary' : 'secondary'}\n size=\"sm\"\n onClick={onRunQuery}\n icon={data?.state === LoadingState.Loading ? 'fa fa-spinner' : undefined}\n disabled={data?.state === LoadingState.Loading || !enableRunButton}\n >\n Run queries\n </Button>\n )}\n {extraHeaderElementRight}\n </EditorHeader>\n );\n}\n","import React from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n id?: string;\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 <Select\n aria-label=\"Format data frames as\"\n id={props.id ?? 'formatAs'}\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n menuShouldPortal={true}\n />\n );\n}\n","import React from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { Input, Select } from '@grafana/ui';\nimport { EditorField } from '@grafana/plugin-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 <EditorField label=\"Fill with\" tooltip=\"value to fill missing points\" htmlFor=\"fillWith\">\n <Select\n id=\"fillWith\"\n aria-label=\"Fill with\"\n data-testid=\"table-fill-with-select\"\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 menuShouldPortal={true}\n />\n </EditorField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <EditorField label=\"Value\" htmlFor=\"valueToFill\" width={6}>\n <Input\n id=\"valueToFill\"\n aria-label=\"Value\"\n type=\"number\"\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 </EditorField>\n )}\n </>\n );\n}\n","import { ScopedVars, TypedVariableModel } 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<T extends SQLQuery>(\n query: T,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): T {\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' || typeof value === 'number') {\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: TypedVariableModel) => {\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","css","useState","config","useMemo","useEffect","regions","React","ConfigSection","ConfigSubSection","Field","Select","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","ButtonGroup","ToolbarButton","onUpdateDatasourceResetOption","onUpdateDatasourceSecureJsonDataOption","Text","TextLink","Collapse","isNumber","useTheme2","GrafanaDivider","_a","_b","_c","_d","useRef","isEqual","resources","InlineField","defaults","rawSQL","query","CodeEditor","data","EditorHeader","FlexItem","RunQueryButtons","Button","LoadingState","FillValueOptions","EditorField","CodeEditorSuggestionItemKind"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grafana/aws-sdk",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3",
|
|
4
4
|
"description": "Common AWS features for grafana",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@grafana/ui": "12.2.1",
|
|
44
44
|
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
45
45
|
"@stylistic/eslint-plugin-ts": "^4.2.0",
|
|
46
|
-
"@swc/core": "^1.
|
|
46
|
+
"@swc/core": "^1.14.0",
|
|
47
47
|
"@swc/jest": "^0.2.36",
|
|
48
48
|
"@testing-library/jest-dom": "6.9.1",
|
|
49
49
|
"@testing-library/react": "16.3.0",
|
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
"@testing-library/user-event": "^14.5.2",
|
|
52
52
|
"@types/jest": "30.0.0",
|
|
53
53
|
"@types/lodash": "4.17.20",
|
|
54
|
-
"@types/node": "22.18.
|
|
54
|
+
"@types/node": "22.18.13",
|
|
55
55
|
"@types/react": "18.3.12",
|
|
56
56
|
"@types/react-dom": "18.3.1",
|
|
57
57
|
"@typescript-eslint/eslint-plugin": "^8.12.2",
|
|
58
58
|
"@typescript-eslint/parser": "^8.12.2",
|
|
59
|
-
"cspell": "9.2.
|
|
59
|
+
"cspell": "9.2.2",
|
|
60
60
|
"esbuild": "^0.25.0",
|
|
61
61
|
"eslint": "^9.13.0",
|
|
62
62
|
"eslint-config-prettier": "^10.0.1",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"react-dom": "18.3.1",
|
|
75
75
|
"react-select-event": "^5.5.1",
|
|
76
76
|
"rimraf": "^6.0.1",
|
|
77
|
-
"rollup": "4.52.
|
|
77
|
+
"rollup": "4.52.5",
|
|
78
78
|
"rollup-plugin-dts": "^6.1.1",
|
|
79
79
|
"rollup-plugin-esbuild": "^6.1.1",
|
|
80
80
|
"rollup-plugin-node-externals": "^8.0.0",
|