diff --git a/lib/modules/datasource/api.ts b/lib/modules/datasource/api.ts index 45592575d9f69b..7e5000b56a316c 100644 --- a/lib/modules/datasource/api.ts +++ b/lib/modules/datasource/api.ts @@ -1,5 +1,6 @@ import { AdoptiumJavaDatasource } from './adoptium-java'; import { ArtifactoryDatasource } from './artifactory'; +import { AwsLambdaLayerDataSource } from './aws-lambda-layer'; import { AwsMachineImageDataSource } from './aws-machine-image'; import { AwsRdsDataSource } from './aws-rds'; import { AzurePipelinesTasksDatasource } from './azure-pipelines-tasks'; @@ -59,6 +60,7 @@ api.set(AdoptiumJavaDatasource.id, new AdoptiumJavaDatasource()); api.set(ArtifactoryDatasource.id, new ArtifactoryDatasource()); api.set(AwsMachineImageDataSource.id, new AwsMachineImageDataSource()); api.set(AwsRdsDataSource.id, new AwsRdsDataSource()); +api.set(AwsLambdaLayerDataSource.id, new AwsLambdaLayerDataSource()); api.set(AzurePipelinesTasksDatasource.id, new AzurePipelinesTasksDatasource()); api.set(BitBucketTagsDatasource.id, new BitBucketTagsDatasource()); api.set(CdnJsDatasource.id, new CdnJsDatasource()); diff --git a/lib/modules/datasource/aws-lambda-layer/index.spec.ts b/lib/modules/datasource/aws-lambda-layer/index.spec.ts new file mode 100644 index 00000000000000..ba434835baf7f1 --- /dev/null +++ b/lib/modules/datasource/aws-lambda-layer/index.spec.ts @@ -0,0 +1,178 @@ +import { + LambdaClient, + LayerVersionsListItem, + ListLayerVersionsCommand, + ListLayerVersionsCommandOutput, +} from '@aws-sdk/client-lambda'; +import { mockClient } from 'aws-sdk-client-mock'; +import { getPkgReleases } from '..'; +import { AwsLambdaLayerDataSource, AwsLambdaLayerFilter } from './index'; + +const datasource = AwsLambdaLayerDataSource.id; + +/** + * Testdata for mock implementation of LambdaClient + * layer1 to layer3 from oldest to newest + */ +const layer1: LayerVersionsListItem = { + Version: 1, + CreatedDate: '2021-01-10T00:00:00.000Z', + LayerVersionArn: 'arn:aws:lambda:us-east-1:123456789012:layer:my-layer:3', +}; + +const layer2: LayerVersionsListItem = { + Version: 2, + CreatedDate: '2021-02-05T00:00:00.000Z', + LayerVersionArn: 'arn:aws:lambda:us-east-1:123456789012:layer:my-layer:2', +}; + +const layer3: LayerVersionsListItem = { + Version: 3, + CreatedDate: '2021-03-01T00:00:00.000Z', + LayerVersionArn: 'arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1', +}; + +const mock3Layers: ListLayerVersionsCommandOutput = { + LayerVersions: [layer1, layer2, layer3], + $metadata: {}, +}; + +const mock1Layer: ListLayerVersionsCommandOutput = { + LayerVersions: [layer3], + $metadata: {}, +}; + +const mockEmpty: ListLayerVersionsCommandOutput = { + LayerVersions: [], + $metadata: {}, +}; + +const lambdaFilter: AwsLambdaLayerFilter = { + name: '', + architecture: '', + runtime: '', +}; + +const lambdaClientMock = mockClient(LambdaClient); + +function mockListLayerVersionsCommandOutput( + result: ListLayerVersionsCommandOutput +): void { + lambdaClientMock.reset(); + lambdaClientMock.on(ListLayerVersionsCommand).resolves(result); +} + +describe('modules/datasource/aws-lambda-layer/index', () => { + describe('getSortedLambdaLayerVersions', () => { + it('should return empty array if no layers found', async () => { + mockListLayerVersionsCommandOutput(mockEmpty); + const lamdbaLayerDatasource = new AwsLambdaLayerDataSource(); + const res = await lamdbaLayerDatasource.getSortedLambdaLayerVersions( + lambdaFilter + ); + + expect(res).toEqual([]); + }); + + it('should return array with one layer if one layer found', async () => { + mockListLayerVersionsCommandOutput(mock1Layer); + const lamdbaLayerDatasource = new AwsLambdaLayerDataSource(); + const res = await lamdbaLayerDatasource.getSortedLambdaLayerVersions( + lambdaFilter + ); + + expect(res).toEqual([layer3]); + }); + + it('should return array with three layers if three layers found', async () => { + mockListLayerVersionsCommandOutput(mock3Layers); + const lamdbaLayerDatasource = new AwsLambdaLayerDataSource(); + const res = await lamdbaLayerDatasource.getSortedLambdaLayerVersions( + lambdaFilter + ); + + expect(res).toEqual([layer1, layer2, layer3]); + }); + + it('should have the filters for listLayerVersions set calling the AWS API', async () => { + mockListLayerVersionsCommandOutput(mock3Layers); + const lambdaLayerDatasource = new AwsLambdaLayerDataSource(); + + await lambdaLayerDatasource.getSortedLambdaLayerVersions({ + name: 'arn', + runtime: 'runtime', + architecture: 'architecture', + }); + + expect(lambdaClientMock.calls()).toHaveLength(1); + + expect(lambdaClientMock.calls()[0].args[0].input).toEqual({ + CompatibleArchitecture: 'architecture', + CompatibleRuntime: 'runtime', + LayerName: 'arn', + }); + }); + }); + + describe('integration', () => { + describe('getPkgReleases', () => { + it('should return null if no releases found', async () => { + mockListLayerVersionsCommandOutput(mockEmpty); + + const res = await getPkgReleases({ + datasource, + depName: + '{"arn": "arn:aws:lambda:us-east-1:123456789012:layer:my-layer", "runtime": "python37", "architecture": "x86_64"}', + }); + + expect(res).toBeNull(); + }); + + it('should return one image', async () => { + mockListLayerVersionsCommandOutput(mock1Layer); + + const res = await getPkgReleases({ + datasource, + depName: + '{"arn": "arn:aws:lambda:us-east-1:123456789012:layer:my-layer", "runtime": "python37", "architecture": "x86_64"}', + }); + + expect(res).toStrictEqual({ + releases: [ + { + isDeprecated: false, + version: layer1.Version, + }, + ], + }); + }); + + it('should return 3 images', async () => { + mockListLayerVersionsCommandOutput(mock3Layers); + + const res = await getPkgReleases({ + datasource, + depName: + '{"arn": "arn:aws:lambda:us-east-1:123456789012:layer:my-layer", "runtime": "python37", "architecture": "x86_64"}', + }); + + expect(res).toStrictEqual({ + releases: [ + { + isDeprecated: false, + version: layer1.Version, + }, + { + isDeprecated: false, + version: layer2.Version, + }, + { + isDeprecated: false, + version: layer3.Version, + }, + ], + }); + }); + }); + }); +}); diff --git a/lib/modules/datasource/aws-lambda-layer/index.ts b/lib/modules/datasource/aws-lambda-layer/index.ts new file mode 100644 index 00000000000000..8bad98a727771b --- /dev/null +++ b/lib/modules/datasource/aws-lambda-layer/index.ts @@ -0,0 +1,74 @@ +import { + LambdaClient, + LayerVersionsListItem, + ListLayerVersionsCommand, +} from '@aws-sdk/client-lambda'; +import { cache } from '../../../util/cache/package/decorator'; +import { Lazy } from '../../../util/lazy'; +import { Datasource } from '../datasource'; +import type { GetReleasesConfig, ReleaseResult } from '../types'; + +export interface AwsLambdaLayerFilter { + name: string; + runtime: string; + architecture: string; +} + +export class AwsLambdaLayerDataSource extends Datasource { + static readonly id = 'aws-lambda-layer'; + + override readonly caching = true; + + private readonly lambda: Lazy; + + constructor() { + super(AwsLambdaLayerDataSource.id); + this.lambda = new Lazy(() => new LambdaClient({})); + } + + @cache({ + namespace: `datasource-${AwsLambdaLayerDataSource.id}`, + key: (serializedLayerFilter: string) => + `getSortedLambdaLayerVersions:${serializedLayerFilter}`, + }) + async getSortedLambdaLayerVersions( + filter: AwsLambdaLayerFilter + ): Promise { + const cmd = new ListLayerVersionsCommand({ + LayerName: filter.name, + CompatibleArchitecture: filter.architecture, + CompatibleRuntime: filter.runtime, + }); + + const matchingLayerVersions = await this.lambda.getValue().send(cmd); + + return matchingLayerVersions.LayerVersions ?? []; + } + + @cache({ + namespace: `datasource-${AwsLambdaLayerDataSource.id}`, + key: ({ packageName }: GetReleasesConfig) => `getReleases:${packageName}`, + }) + async getReleases({ + packageName: serializedLambdaLayerFilter, + }: GetReleasesConfig): Promise { + const filter: AwsLambdaLayerFilter = JSON.parse( + serializedLambdaLayerFilter + ); + + const lambdaLayerVersions = await this.getSortedLambdaLayerVersions(filter); + + if (lambdaLayerVersions.length === 0) { + return null; + } + + return { + releases: lambdaLayerVersions.map((layer) => ({ + version: layer.Version?.toString() ?? '0', + releaseTimestamp: layer.CreatedDate, + newDigest: layer.LayerVersionArn, + isDeprecated: false, + })), + }; + } +} diff --git a/lib/modules/datasource/aws-lambda-layer/readme.md b/lib/modules/datasource/aws-lambda-layer/readme.md new file mode 100644 index 00000000000000..747172521f3208 --- /dev/null +++ b/lib/modules/datasource/aws-lambda-layer/readme.md @@ -0,0 +1,62 @@ +This datasource returns releases from a versioned AWS ARN. + +It currently supports Lambda Layer ARNs only. + +**AWS API configuration** + +Since the datasource uses the AWS SDK for JavaScript, you can configure it like other AWS Tools. +You can use common AWS configuration options, for example: + +- Set the region via the `AWS_REGION` environment variable or your `~/.aws/config` file +- Provide credentials via the `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables or your `~/.aws/credentials` file +- Select the profile to use via `AWS_PROFILE` environment variable + +Read the [AWS Developer Guide - Configuring the SDK for JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/configuring-the-jssdk.html) for more information on these configuration options. + +The minimal IAM privileges required for this datasource are: + +```json +{ + "Sid": "AllowLambdaLayerVersionLookup", + "Effect": "Allow", + "Action": ["lambda:ListLayerVersion"], + "Resource": "*" +} +``` + +Read the [AWS Lambda IAM reference](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html) for more information. + +**Usage** + +Because Renovate has no manager for the AWS Lambda Layer datasource, you need to help Renovate by configuring the regex manager to identify the layer dependencies you want updated. + +Here's an example of using the regex manager to configure this datasource: + +```json +{ + "regexManagers": [ + { + "fileMatch": ["\\.tf$"], + "matchStrings": [ + ".*renovate: datasource=(?.*) filter=(?.*)\\s+.* = \"(?.*):(?\\d+)\"" + ], + "versioningTemplate": "loose" + } + ] +} +``` + +The configuration above matches every Terraform file, and recognizes these line: + +```hcl +locals { + # renovate: datasource=aws-lambda-layer filter={"name": "my-layer", "architecture": "x86_64", "runtime": "python3.7"} + my_layer_arn = "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:21" +} + +resource "aws_lambda_function" "example" { + # ... other configuration ... + + layers = [local.my_layer_arn] +} +``` diff --git a/package.json b/package.json index 36e8b2108d13bf..e09f369d2a1f95 100644 --- a/package.json +++ b/package.json @@ -139,6 +139,7 @@ "@aws-sdk/client-ec2": "3.226.0", "@aws-sdk/client-ecr": "3.226.0", "@aws-sdk/client-iam": "3.226.0", + "@aws-sdk/client-lambda": "3.245.0", "@aws-sdk/client-rds": "3.226.0", "@aws-sdk/client-s3": "3.226.0", "@breejs/later": "4.1.0", diff --git a/yarn.lock b/yarn.lock index 0909b2f0920e6f..6b8a89c89b8715 100644 --- a/yarn.lock +++ b/yarn.lock @@ -312,6 +312,49 @@ fast-xml-parser "4.0.11" tslib "^2.3.1" +"@aws-sdk/client-lambda@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.245.0.tgz#315c79c5ff48b4c7ef686622630590b0e06f5bcc" + integrity sha512-vhC9MPWclA3/qMUzOMu6Xc3sQ1iJJFQ+h7kbnYMbQFDQWIN24O/HqmdLJ3iGcIYLd8vw3jpz6dQB/OCKSPIPVg== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/client-sts" "3.245.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/credential-provider-node" "3.245.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/hash-node" "3.226.0" + "@aws-sdk/invalid-dependency" "3.226.0" + "@aws-sdk/middleware-content-length" "3.226.0" + "@aws-sdk/middleware-endpoint" "3.226.0" + "@aws-sdk/middleware-host-header" "3.226.0" + "@aws-sdk/middleware-logger" "3.226.0" + "@aws-sdk/middleware-recursion-detection" "3.226.0" + "@aws-sdk/middleware-retry" "3.235.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/middleware-signing" "3.226.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/middleware-user-agent" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" + "@aws-sdk/util-base64" "3.208.0" + "@aws-sdk/util-body-length-browser" "3.188.0" + "@aws-sdk/util-body-length-node" "3.208.0" + "@aws-sdk/util-defaults-mode-browser" "3.234.0" + "@aws-sdk/util-defaults-mode-node" "3.234.0" + "@aws-sdk/util-endpoints" "3.245.0" + "@aws-sdk/util-retry" "3.229.0" + "@aws-sdk/util-user-agent-browser" "3.226.0" + "@aws-sdk/util-user-agent-node" "3.226.0" + "@aws-sdk/util-utf8-browser" "3.188.0" + "@aws-sdk/util-utf8-node" "3.208.0" + "@aws-sdk/util-waiter" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/client-rds@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-rds/-/client-rds-3.226.0.tgz#1e6dce4be26fadebebd2e4911c83bab8ddd56d2f" @@ -454,6 +497,45 @@ "@aws-sdk/util-utf8-node" "3.208.0" tslib "^2.3.1" +"@aws-sdk/client-sso-oidc@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz#3235c856c7bd2ceddf9ac1bda6d599465b8e3dd7" + integrity sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/hash-node" "3.226.0" + "@aws-sdk/invalid-dependency" "3.226.0" + "@aws-sdk/middleware-content-length" "3.226.0" + "@aws-sdk/middleware-endpoint" "3.226.0" + "@aws-sdk/middleware-host-header" "3.226.0" + "@aws-sdk/middleware-logger" "3.226.0" + "@aws-sdk/middleware-recursion-detection" "3.226.0" + "@aws-sdk/middleware-retry" "3.235.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/middleware-user-agent" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" + "@aws-sdk/util-base64" "3.208.0" + "@aws-sdk/util-body-length-browser" "3.188.0" + "@aws-sdk/util-body-length-node" "3.208.0" + "@aws-sdk/util-defaults-mode-browser" "3.234.0" + "@aws-sdk/util-defaults-mode-node" "3.234.0" + "@aws-sdk/util-endpoints" "3.245.0" + "@aws-sdk/util-retry" "3.229.0" + "@aws-sdk/util-user-agent-browser" "3.226.0" + "@aws-sdk/util-user-agent-node" "3.226.0" + "@aws-sdk/util-utf8-browser" "3.188.0" + "@aws-sdk/util-utf8-node" "3.208.0" + tslib "^2.3.1" + "@aws-sdk/client-sso@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.226.0.tgz#a7d5239e74ac9e050f91f261e6a8783893b4c95a" @@ -492,6 +574,45 @@ "@aws-sdk/util-utf8-node" "3.208.0" tslib "^2.3.1" +"@aws-sdk/client-sso@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz#91ee2973c9cc052cc3afcecd789cd53ffc9a1950" + integrity sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/hash-node" "3.226.0" + "@aws-sdk/invalid-dependency" "3.226.0" + "@aws-sdk/middleware-content-length" "3.226.0" + "@aws-sdk/middleware-endpoint" "3.226.0" + "@aws-sdk/middleware-host-header" "3.226.0" + "@aws-sdk/middleware-logger" "3.226.0" + "@aws-sdk/middleware-recursion-detection" "3.226.0" + "@aws-sdk/middleware-retry" "3.235.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/middleware-user-agent" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" + "@aws-sdk/util-base64" "3.208.0" + "@aws-sdk/util-body-length-browser" "3.188.0" + "@aws-sdk/util-body-length-node" "3.208.0" + "@aws-sdk/util-defaults-mode-browser" "3.234.0" + "@aws-sdk/util-defaults-mode-node" "3.234.0" + "@aws-sdk/util-endpoints" "3.245.0" + "@aws-sdk/util-retry" "3.229.0" + "@aws-sdk/util-user-agent-browser" "3.226.0" + "@aws-sdk/util-user-agent-node" "3.226.0" + "@aws-sdk/util-utf8-browser" "3.188.0" + "@aws-sdk/util-utf8-node" "3.208.0" + tslib "^2.3.1" + "@aws-sdk/client-sts@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.226.0.tgz#40b8e62152bbce2c44c607b80ccc1db280497e1f" @@ -534,6 +655,49 @@ fast-xml-parser "4.0.11" tslib "^2.3.1" +"@aws-sdk/client-sts@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz#c1c46ca94d11786cf67a5f5adb6a44cd35d73546" + integrity sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/credential-provider-node" "3.245.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/hash-node" "3.226.0" + "@aws-sdk/invalid-dependency" "3.226.0" + "@aws-sdk/middleware-content-length" "3.226.0" + "@aws-sdk/middleware-endpoint" "3.226.0" + "@aws-sdk/middleware-host-header" "3.226.0" + "@aws-sdk/middleware-logger" "3.226.0" + "@aws-sdk/middleware-recursion-detection" "3.226.0" + "@aws-sdk/middleware-retry" "3.235.0" + "@aws-sdk/middleware-sdk-sts" "3.226.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/middleware-signing" "3.226.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/middleware-user-agent" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" + "@aws-sdk/util-base64" "3.208.0" + "@aws-sdk/util-body-length-browser" "3.188.0" + "@aws-sdk/util-body-length-node" "3.208.0" + "@aws-sdk/util-defaults-mode-browser" "3.234.0" + "@aws-sdk/util-defaults-mode-node" "3.234.0" + "@aws-sdk/util-endpoints" "3.245.0" + "@aws-sdk/util-retry" "3.229.0" + "@aws-sdk/util-user-agent-browser" "3.226.0" + "@aws-sdk/util-user-agent-node" "3.226.0" + "@aws-sdk/util-utf8-browser" "3.188.0" + "@aws-sdk/util-utf8-node" "3.208.0" + fast-xml-parser "4.0.11" + tslib "^2.3.1" + "@aws-sdk/config-resolver@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.226.0.tgz#b4f19150cf08c9ed36ced3bdffdc64d89e6f3e5b" @@ -545,6 +709,17 @@ "@aws-sdk/util-middleware" "3.226.0" tslib "^2.3.1" +"@aws-sdk/config-resolver@3.234.0": + version "3.234.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz#29d8936b713b7ee59b26b335d4f6715d644fc089" + integrity sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A== + dependencies: + "@aws-sdk/signature-v4" "3.226.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/util-config-provider" "3.208.0" + "@aws-sdk/util-middleware" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/credential-provider-env@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz#0bcb89a9abc166b3a48f5c255b9fcabc4cb80daf" @@ -579,6 +754,21 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-ini@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz#6d2b35603c831366cb66f7c651a75c3afd54ad24" + integrity sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.226.0" + "@aws-sdk/credential-provider-imds" "3.226.0" + "@aws-sdk/credential-provider-process" "3.226.0" + "@aws-sdk/credential-provider-sso" "3.245.0" + "@aws-sdk/credential-provider-web-identity" "3.226.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/types" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/credential-provider-node@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.226.0.tgz#d81c4d8fbacf5ef9bbea6e0e2e15fb61039b5eb6" @@ -595,6 +785,22 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-node@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz#3df89fa2668940902b4c16c28df3d4e30b907ad2" + integrity sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g== + dependencies: + "@aws-sdk/credential-provider-env" "3.226.0" + "@aws-sdk/credential-provider-imds" "3.226.0" + "@aws-sdk/credential-provider-ini" "3.245.0" + "@aws-sdk/credential-provider-process" "3.226.0" + "@aws-sdk/credential-provider-sso" "3.245.0" + "@aws-sdk/credential-provider-web-identity" "3.226.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/types" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/credential-provider-process@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz#bcd73a6d31d1b3181917d56e54aacbee242b077f" @@ -617,6 +823,18 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-sso@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz#e5ea2db3d94e0bcc1af276c42363a9855294d812" + integrity sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ== + dependencies: + "@aws-sdk/client-sso" "3.245.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/token-providers" "3.245.0" + "@aws-sdk/types" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/credential-provider-web-identity@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz#2b7d20f93a40e2243c7e3857f54b103d19a946fb" @@ -835,6 +1053,19 @@ tslib "^2.3.1" uuid "^8.3.2" +"@aws-sdk/middleware-retry@3.235.0": + version "3.235.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz#c0d938db85a771812204ed5e981eaf5eef6b580b" + integrity sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg== + dependencies: + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/service-error-classification" "3.229.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/util-middleware" "3.226.0" + "@aws-sdk/util-retry" "3.229.0" + tslib "^2.3.1" + uuid "^8.3.2" + "@aws-sdk/middleware-sdk-ec2@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.226.0.tgz#2a409c316561575a8f7c10e49a5b921607a8333a" @@ -985,6 +1216,11 @@ resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.226.0.tgz#47cc6a6d5c7be5b0f6d054ca9375cc405c9d63f6" integrity sha512-9R01dBpE8JILe2CTft7YN2tMufT2mMWMTqxmHwPSmOpsxHTj8hEII7GTfvpb95ThHwW7XMNhg7pbHLbrTJZCVA== +"@aws-sdk/service-error-classification@3.229.0": + version "3.229.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz#768f1eb92775ca2cc99c6451a2303a0008a28fc1" + integrity sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg== + "@aws-sdk/shared-ini-file-loader@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz#d0ade86834b1803ce4b9dcab459e57e0376fd6cf" @@ -1025,6 +1261,15 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/smithy-client@3.234.0": + version "3.234.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz#8f0021e021f0e52730ed0a8f271f839eb63bc374" + integrity sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ== + dependencies: + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/types" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/token-providers@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.226.0.tgz#30bf8201bd5583ed7c61350be0c11d69f84ea332" @@ -1036,6 +1281,17 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/token-providers@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz#7c675bd88c3fc2bd32e8d760d04472a51f0202fc" + integrity sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg== + dependencies: + "@aws-sdk/client-sso-oidc" "3.245.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/types" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/types@3.226.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.110.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.226.0.tgz#3dba2ba223fbb8ac1ebc84de0e036ce69a81d469" @@ -1106,6 +1362,16 @@ bowser "^2.11.0" tslib "^2.3.1" +"@aws-sdk/util-defaults-mode-browser@3.234.0": + version "3.234.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz#1151f0beabdb46c1aaca42a1ad0714b8e686acaa" + integrity sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw== + dependencies: + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/types" "3.226.0" + bowser "^2.11.0" + tslib "^2.3.1" + "@aws-sdk/util-defaults-mode-node@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.226.0.tgz#34115b6631d0d3a7d57c1c88875e74fb5f06972f" @@ -1118,6 +1384,18 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/util-defaults-mode-node@3.234.0": + version "3.234.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz#0607f1dc7a4dc896dfcaf377522535ca9ffba7a9" + integrity sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w== + dependencies: + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/credential-provider-imds" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/types" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/util-endpoints@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.226.0.tgz#3728b2e30f6f757ae862a0b7cf3991e75f252c3f" @@ -1126,6 +1404,14 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/util-endpoints@3.245.0": + version "3.245.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz#6e161e92b4e2b89bcd98c40909f3f266851c504d" + integrity sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg== + dependencies: + "@aws-sdk/types" "3.226.0" + tslib "^2.3.1" + "@aws-sdk/util-format-url@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.226.0.tgz#cd10c25802c95017b688dd0dea2c3205a91638b5" @@ -1156,6 +1442,14 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-retry@3.229.0": + version "3.229.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz#17aad47b067e81acf644d5c2c0f2325f2d8faf4f" + integrity sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw== + dependencies: + "@aws-sdk/service-error-classification" "3.229.0" + tslib "^2.3.1" + "@aws-sdk/util-stream-browser@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-browser/-/util-stream-browser-3.226.0.tgz#a14ea5c118d448f01ed6103203404f466960e5fe"