From 8841f54dc788a59209a3ef1500f62a27c651155b Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Thu, 22 May 2025 09:42:05 -0500 Subject: [PATCH 01/37] chore: migrated view-test-artifacts to aws-sdk v3 --- scripts/package.json | 4 +- scripts/view-test-artifacts.ts | 25 +- scripts/yarn.lock | 1607 ++++++++++++++++++++++++-------- 3 files changed, 1247 insertions(+), 389 deletions(-) diff --git a/scripts/package.json b/scripts/package.json index 129cd90758..eb1176136d 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -9,7 +9,9 @@ "author": "", "license": "ISC", "dependencies": { - "aws-sdk": "2.1414.0", + "@aws-sdk/client-codebuild": "^3.812.0", + "@aws-sdk/client-s3": "^3.815.0", + "@aws-sdk/credential-provider-ini": "^3.812.0", "axios": "^1.6.0", "cli-progress": "^3.12.0", "execa": "^5.1.1", diff --git a/scripts/view-test-artifacts.ts b/scripts/view-test-artifacts.ts index acfcd2c7e5..f6a7b30d3d 100644 --- a/scripts/view-test-artifacts.ts +++ b/scripts/view-test-artifacts.ts @@ -11,15 +11,19 @@ import * as path from 'path'; import * as os from 'os'; import * as fs from 'fs-extra'; // eslint-disable-next-line import/no-extraneous-dependencies -import { CodeBuild, S3, SharedIniFileCredentials } from 'aws-sdk'; +import { CodeBuildClient, BatchGetBuildBatchesCommand } from '@aws-sdk/client-codebuild'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { S3Client, ListObjectsCommand, GetObjectCommand } from '@aws-sdk/client-s3'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { fromIni } from '@aws-sdk/credential-provider-ini'; // eslint-disable-next-line import/no-extraneous-dependencies import { SingleBar, Presets } from 'cli-progress'; import execa from 'execa'; const E2E_PROFILE_NAME = 'AmplifyAPIE2EProd'; -const credentials = new SharedIniFileCredentials({ profile: E2E_PROFILE_NAME }); -const s3 = new S3({ credentials }); -const codeBuild = new CodeBuild({ credentials, region: 'us-east-1' }); +const credentials = fromIni({ profile: E2E_PROFILE_NAME }); +const s3 = new S3Client({ credentials }); +const codeBuild = new CodeBuildClient({ credentials, region: 'us-east-1' }); const progressBar = new SingleBar({}, Presets.shades_classic); type BuildStatus = 'FAILED' | 'FAULT' | 'IN_PROGRESS' | 'STOPPED' | 'SUCCEEDED' | 'TIMED_OUT'; @@ -85,7 +89,7 @@ const generateIndexFile = (directory: string, artifacts: TestArtifact[]): void = * @param batchId the batch to look up. */ const retrieveArtifactsForBatch = async (batchId: string): Promise => { - const { buildBatches } = await codeBuild.batchGetBuildBatches({ ids: [batchId] }).promise(); + const { buildBatches } = await codeBuild.send(new BatchGetBuildBatchesCommand({ ids: [batchId] })); return (buildBatches || []) .flatMap((batch) => (batch.buildGroups || []).map( @@ -105,7 +109,7 @@ const downloadSingleTestArtifact = async (tempDir: string, artifact: Required x.Key !== undefined; @@ -114,14 +118,15 @@ const downloadSingleTestArtifact = async (tempDir: string, artifact: Required { + listObjectsResponse.Contents.filter(hasKey).map(async ({ Key }) => { const filePath = path.join(artifactDownloadPath, Key.split('/').slice(3).join('/')); fs.ensureDirSync(path.dirname(filePath)); + const getObjectResponse = await s3.send(new GetObjectCommand({ Bucket, Key })); return new Promise((resolve, reject) => { const writer = fs.createWriteStream(filePath); - s3.getObject({ Bucket, Key }).createReadStream().pipe(writer); - writer.on('finish', resolve); - writer.on('close', resolve); + (getObjectResponse.Body as NodeJS.ReadableStream).pipe(writer); + writer.on('finish', () => resolve(undefined)); + writer.on('close', () => resolve(undefined)); writer.on('error', reject); }); }), diff --git a/scripts/yarn.lock b/scripts/yarn.lock index 5319652b99..52449face3 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -2,16 +2,617 @@ # yarn lockfile v1 +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/crc32c@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz" + integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/sha1-browser@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz" + integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== + dependencies: + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-js@^5.2.0", "@aws-crypto/sha256-js@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + +"@aws-crypto/util@^5.2.0", "@aws-crypto/util@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-codebuild@^3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.812.0.tgz" + integrity sha512-hUo2/+XBR4LuPZjZh2PaB8/4H2AJ9zlK23mwbpHUXmMYjkWEMSz9ocHJT8m4wzjkFFRz9yypCSuUg8fOT+o57A== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.812.0" + "@aws-sdk/credential-provider-node" "3.812.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.812.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.812.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-s3@^3.815.0": + version "3.815.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.815.0.tgz" + integrity sha512-tpJyXuGYIPHIu8G53jXQw3mN5ZK6LdL+tcEF3kRJuQ377Vbo+BSfqaizt9Qb3JuOGcNwCp83jd2LlmcXypN5fg== + dependencies: + "@aws-crypto/sha1-browser" "5.2.0" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.812.0" + "@aws-sdk/credential-provider-node" "3.812.0" + "@aws-sdk/middleware-bucket-endpoint" "3.808.0" + "@aws-sdk/middleware-expect-continue" "3.804.0" + "@aws-sdk/middleware-flexible-checksums" "3.815.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-location-constraint" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-sdk-s3" "3.812.0" + "@aws-sdk/middleware-ssec" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.812.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/signature-v4-multi-region" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.812.0" + "@aws-sdk/xml-builder" "3.804.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/eventstream-serde-browser" "^4.0.2" + "@smithy/eventstream-serde-config-resolver" "^4.1.0" + "@smithy/eventstream-serde-node" "^4.0.2" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-blob-browser" "^4.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/hash-stream-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/md5-js" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.3" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.812.0.tgz" + integrity sha512-O//smQRj1+RXELB7xX54s5pZB0V69KHXpUZmz8V+8GAYO1FKTHfbpUgK+zyMNb+lFZxG9B69yl8pWPZ/K8bvxA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.812.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.812.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.812.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.812.0.tgz" + integrity sha512-myWA9oHMBVDObKrxG+puAkIGs8igcWInQ1PWCRTS/zN4BkhUMFjjh/JPV/4Vzvtvj5E36iujq2WtlrDLl1PpOw== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/core" "^3.3.3" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/property-provider" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/signature-v4" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/util-middleware" "^4.0.2" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.812.0.tgz" + integrity sha512-Ge7IEu06ANurGBZx39q9CNN/ncqb1K8lpKZCY969uNWO0/7YPhnplrRJGMZYIS35nD2mBm3ortEKjY/wMZZd5g== + dependencies: + "@aws-sdk/core" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.812.0.tgz" + integrity sha512-Vux2U42vPGXeE407Lp6v3yVA65J7hBO9rB67LXshyGVi7VZLAYWc4mrZxNJNqabEkjcDEmMQQakLPT6zc5SvFw== + dependencies: + "@aws-sdk/core" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/property-provider" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/util-stream" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@^3.812.0", "@aws-sdk/credential-provider-ini@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.812.0.tgz" + integrity sha512-oltqGvQ488xtPY5wrNjbD+qQYYkuCjn30IDE1qKMxJ58EM6UVTQl3XV44Xq07xfF5gKwVJQkfIyOkRAguOVybg== + dependencies: + "@aws-sdk/core" "3.812.0" + "@aws-sdk/credential-provider-env" "3.812.0" + "@aws-sdk/credential-provider-http" "3.812.0" + "@aws-sdk/credential-provider-process" "3.812.0" + "@aws-sdk/credential-provider-sso" "3.812.0" + "@aws-sdk/credential-provider-web-identity" "3.812.0" + "@aws-sdk/nested-clients" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/credential-provider-imds" "^4.0.4" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.812.0.tgz" + integrity sha512-SnvSWBP6cr9nqx784eETnL2Zl7ZnMB/oJgFVEG1aejAGbT1H9gTpMwuUsBXk4u/mEYe3f1lh1Wqo+HwDgNkfrg== + dependencies: + "@aws-sdk/credential-provider-env" "3.812.0" + "@aws-sdk/credential-provider-http" "3.812.0" + "@aws-sdk/credential-provider-ini" "3.812.0" + "@aws-sdk/credential-provider-process" "3.812.0" + "@aws-sdk/credential-provider-sso" "3.812.0" + "@aws-sdk/credential-provider-web-identity" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/credential-provider-imds" "^4.0.4" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.812.0.tgz" + integrity sha512-YI8bb153XeEOb59F9KtTZEwDAc14s2YHZz58+OFiJ2udnKsPV87mNiFhJPW6ba9nmOLXVat5XDcwtVT1b664wg== + dependencies: + "@aws-sdk/core" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.812.0.tgz" + integrity sha512-ODsPcNhgiO6GOa82TVNskM97mml9rioe9Cbhemz48lkfDQPv1u06NaCR0o3FsvprX1sEhMvJTR3sE1fyEOzvJQ== + dependencies: + "@aws-sdk/client-sso" "3.812.0" + "@aws-sdk/core" "3.812.0" + "@aws-sdk/token-providers" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.812.0.tgz" + integrity sha512-E9Bmiujvm/Hp9DM/Vc1S+D0pQbx8/x4dR/zyAEZU9EoRq0duQOQ1reWYWbebYmL1OklcVpTfKV0a/VCwuAtGSg== + dependencies: + "@aws-sdk/core" "3.812.0" + "@aws-sdk/nested-clients" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.808.0": + version "3.808.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.808.0.tgz" + integrity sha512-wEPlNcs8dir9lXbuviEGtSzYSxG/NRKQrJk5ybOc7OpPGHovsN+QhDOdY3lcjOFdwMTiMIG9foUkPz3zBpLB1A== + dependencies: + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-arn-parser" "3.804.0" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + "@smithy/util-config-provider" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.804.0.tgz" + integrity sha512-YW1hySBolALMII6C8y7Z0CRG2UX1dGJjLEBNFeefhO/xP7ZuE1dvnmfJGaEuBMnvc3wkRS63VZ3aqX6sevM1CA== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.815.0": + version "3.815.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.815.0.tgz" + integrity sha512-cv/BO7saBbHTrLMUJiClZHM/GB4xDBbJmZ70f9HwcNBP59tBB8TgF/vSyi8SdFM82TvRP+Zzi1AZ8hXcwElaCg== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-crypto/util" "5.2.0" + "@aws-sdk/core" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.804.0.tgz" + integrity sha512-bum1hLVBrn2lJCi423Z2fMUYtsbkGI2s4N+2RI2WSjvbaVyMSv/WcejIrjkqiiMR+2Y7m5exgoKeg4/TODLDPQ== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.804.0.tgz" + integrity sha512-AMtKnllIWKgoo7hiJfphLYotEwTERfjVMO2+cKAncz9w1g+bnYhHxiVhJJoR94y047c06X4PU5MsTxvdQ73Znw== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.804.0.tgz" + integrity sha512-w/qLwL3iq0KOPQNat0Kb7sKndl9BtceigINwBU7SpkYWX9L/Lem6f8NPEKrC9Tl4wDBht3Yztub4oRTy/horJA== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.804.0.tgz" + integrity sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.812.0.tgz" + integrity sha512-e8AqRRIaTsunL1hqtO1hksa9oTYdsIbfezHUyVpPGugUIB1lMqPt/DlBsanI85OzUD711UfNSEcZ1mqAxpDOoA== + dependencies: + "@aws-sdk/core" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-arn-parser" "3.804.0" + "@smithy/core" "^3.3.3" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/protocol-http" "^5.1.0" + "@smithy/signature-v4" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.804.0.tgz" + integrity sha512-Tk8jK0gOIUBvEPTz/wwSlP1V70zVQ3QYqsLPAjQRMO6zfOK9ax31dln3MgKvFDJxBydS2tS3wsn53v+brxDxTA== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.812.0.tgz" + integrity sha512-r+HFwtSvnAs6Fydp4mijylrTX0og9p/xfxOcKsqhMuk3HpZAIcf9sSjRQI6MBusYklg7pnM4sGEnPAZIrdRotA== + dependencies: + "@aws-sdk/core" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@smithy/core" "^3.3.3" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.812.0.tgz" + integrity sha512-FS/fImbEpJU3cXtBGR9fyVd+CP51eNKlvTMi3f4/6lSk3RmHjudNC9yEF/og3jtpT3O+7vsNOUW9mHco5IjdQQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.812.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.812.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.812.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.808.0": + version "3.808.0" + resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.808.0.tgz" + integrity sha512-9x2QWfphkARZY5OGkl9dJxZlSlYM2l5inFeo2bKntGuwg4A4YUe5h7d5yJ6sZbam9h43eBrkOdumx03DAkQF9A== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/types" "^4.2.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.2" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.812.0.tgz" + integrity sha512-JTpk3ZHf7TXYbicKfOKi+VrsBTqcAszg9QR9fQmT9aCxPp39gsF3WsXq7NjepwZ5So11ixGIsPE/jtMym399QQ== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/signature-v4" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.812.0.tgz" + integrity sha512-dbVBaKxrxE708ub5uH3w+cmKIeRQas+2Xf6rpckhohYY+IiflGOdK6aLrp3T6dOQgr/FJ37iQtcYNonAG+yVBQ== + dependencies: + "@aws-sdk/nested-clients" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/types@^3.222.0", "@aws-sdk/types@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.804.0.tgz" + integrity sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg== + dependencies: + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz" + integrity sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.808.0": + version "3.808.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.808.0.tgz" + integrity sha512-N6Lic98uc4ADB7fLWlzx+1uVnq04VgVjngZvwHoujcRg9YDhIg9dUDiTzD5VZv13g1BrPYmvYP1HhsildpGV6w== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/types" "^4.2.0" + "@smithy/util-endpoints" "^3.0.4" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz" + integrity sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.804.0.tgz" + integrity sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/types" "^4.2.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.812.0": + version "3.812.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.812.0.tgz" + integrity sha512-8pt+OkHhS2U0LDwnzwRnFxyKn8sjSe752OIZQCNv263odud8jQu9pYO2pKqb2kRBk9h9szynjZBDLXfnvSQ7Bg== + dependencies: + "@aws-sdk/middleware-user-agent" "3.812.0" + "@aws-sdk/types" "3.804.0" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/xml-builder@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.804.0.tgz" + integrity sha512-JbGWp36IG9dgxtvC6+YXwt5WDZYfuamWFtVfK6fQpnmL96dx+GUPOXPKRWdw67WLKf2comHY28iX2d3z35I53Q== + dependencies: + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -23,17 +624,17 @@ "@jridgewell/resolve-uri@^3.0.3": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.5.0" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -41,46 +642,537 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@smithy/abort-controller@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.3.tgz" + integrity sha512-AqXFf6DXnuRBXy4SoK/n1mfgHaKaq36bmkphmD1KO0nHq6xK/g9KHSW4HEsPQUBCGdIEfuJifGHwxFXPIFay9Q== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz" + integrity sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig== + dependencies: + "@smithy/util-base64" "^4.0.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz" + integrity sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^4.1.2", "@smithy/config-resolver@^4.1.3": + version "4.1.3" + resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.3.tgz" + integrity sha512-N5e7ofiyYDmHxnPnqF8L4KtsbSDwyxFRfDK9bp1d9OyPO4ytRLd0/XxCqi5xVaaqB65v4woW8uey6jND6zxzxQ== + dependencies: + "@smithy/node-config-provider" "^4.1.2" + "@smithy/types" "^4.3.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.3" + tslib "^2.6.2" + +"@smithy/core@^3.3.3", "@smithy/core@^3.4.0": + version "3.4.0" + resolved "https://registry.npmjs.org/@smithy/core/-/core-3.4.0.tgz" + integrity sha512-dDYISQo7k0Ml/rXlFIjkTmTcQze/LxhtIRAEmZ6HJ/EI0inVxVEVnrUXJ7jPx6ZP0GHUhFm40iQcCgS5apXIXA== + dependencies: + "@smithy/middleware-serde" "^4.0.6" + "@smithy/protocol-http" "^5.1.1" + "@smithy/types" "^4.3.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.3" + "@smithy/util-stream" "^4.2.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^4.0.4", "@smithy/credential-provider-imds@^4.0.5": + version "4.0.5" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.5.tgz" + integrity sha512-saEAGwrIlkb9XxX/m5S5hOtzjoJPEK6Qw2f9pYTbIsMPOFyGSXBBTw95WbOyru8A1vIS2jVCCU1Qhz50QWG3IA== + dependencies: + "@smithy/node-config-provider" "^4.1.2" + "@smithy/property-provider" "^4.0.3" + "@smithy/types" "^4.3.0" + "@smithy/url-parser" "^4.0.3" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.3.tgz" + integrity sha512-V22KIPXZsE2mc4zEgYGANM/7UbL9jWlOACEolyGyMuTY+jjHJ2PQ0FdopOTS1CS7u6PlAkALmypkv2oQ4aftcg== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^4.3.0" + "@smithy/util-hex-encoding" "^4.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^4.0.2": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.3.tgz" + integrity sha512-oe1d/tfCGVZBMX8O6HApaM4G+fF9JNdyLP7tWXt00epuL/kLOdp/4o9VqheLFeJaXgao+9IaBgs/q/oM48hxzg== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.3" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^4.1.0": + version "4.1.1" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.1.tgz" + integrity sha512-XXCPGjRNwpFWHKQJMKIjGLfFKYULYckFnxGcWmBC2mBf3NsrvUKgqHax4NCqc0TfbDAimPDHOc6HOKtzsXK9Gw== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^4.0.2": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.3.tgz" + integrity sha512-HOEbRmm9TrikCoFrypYu0J/gC4Lsk8gl5LtOz1G3laD2Jy44+ht2Pd2E9qjNQfhMJIzKDZ/gbuUH0s0v4kWQ0A== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.3" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.3.tgz" + integrity sha512-ShOP512CZrYI9n+h64PJ84udzoNHUQtPddyh1j175KNTKsSnMEDNscOWJWyEoLQiuhWWw51lSa+k6ea9ZGXcRg== + dependencies: + "@smithy/eventstream-codec" "^4.0.3" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^5.0.2", "@smithy/fetch-http-handler@^5.0.3": + version "5.0.3" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.3.tgz" + integrity sha512-yBZwavI31roqTndNI7ONHqesfH01JmjJK6L3uUpZAhyAmr86LN5QiPzfyZGIxQmed8VEK2NRSQT3/JX5V1njfQ== + dependencies: + "@smithy/protocol-http" "^5.1.1" + "@smithy/querystring-builder" "^4.0.3" + "@smithy/types" "^4.3.0" + "@smithy/util-base64" "^4.0.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^4.0.2": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.3.tgz" + integrity sha512-37wZYU/XI2cOF4hgNDNMzZNAuNtJTkZFWxcpagQrnf6PYU/6sJ6y5Ey9Bp4vzi9nteex/ImxAugfsF3XGLrqWA== + dependencies: + "@smithy/chunked-blob-reader" "^5.0.0" + "@smithy/chunked-blob-reader-native" "^4.0.0" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/hash-node@^4.0.2": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.3.tgz" + integrity sha512-W5Uhy6v/aYrgtjh9y0YP332gIQcwccQ+EcfWhllL0B9rPae42JngTTUpb8W6wuxaNFzqps4xq5klHckSSOy5fw== + dependencies: + "@smithy/types" "^4.3.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^4.0.2": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.3.tgz" + integrity sha512-CAwAvztwGYHHZGGcXtbinNxytaj5FNZChz8V+o7eNUAi5BgVqnF91Z3cJSmaE9O7FYUQVrIzGAB25Aok9T5KHQ== + dependencies: + "@smithy/types" "^4.3.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^4.0.2": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.3.tgz" + integrity sha512-1Bo8Ur1ZGqxvwTqBmv6DZEn0rXtwJGeqiiO2/JFcCtz3nBakOqeXbJBElXJMMzd0ghe8+eB6Dkw98nMYctgizg== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz" + integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== + dependencies: + tslib "^2.6.2" + +"@smithy/md5-js@^4.0.2": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.3.tgz" + integrity sha512-m95Z+1UJFPq4cv/R6TPMLYkoau7cNJYA5GLuuUJjfmF+Zrad4yaupIWeGGzIinf8pD1L+CIAxjh8eowPvyL7Dw== + dependencies: + "@smithy/types" "^4.3.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^4.0.2": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.3.tgz" + integrity sha512-NE/Zph4BP5u16bzYq2csq9qD0T6UBLeg4AuNrwNJ7Gv9uLYaGEgelZUOdRndGdMGcUfSGvNlXGb2aA2hPCwJ6g== + dependencies: + "@smithy/protocol-http" "^5.1.1" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^4.1.6", "@smithy/middleware-endpoint@^4.1.7": + version "4.1.7" + resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.7.tgz" + integrity sha512-KDzM7Iajo6K7eIWNNtukykRT4eWwlHjCEsULZUaSfi/SRSBK8BPRqG5FsVfp58lUxcvre8GT8AIPIqndA0ERKw== + dependencies: + "@smithy/core" "^3.4.0" + "@smithy/middleware-serde" "^4.0.6" + "@smithy/node-config-provider" "^4.1.2" + "@smithy/shared-ini-file-loader" "^4.0.3" + "@smithy/types" "^4.3.0" + "@smithy/url-parser" "^4.0.3" + "@smithy/util-middleware" "^4.0.3" + tslib "^2.6.2" + +"@smithy/middleware-retry@^4.1.7": + version "4.1.8" + resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.8.tgz" + integrity sha512-e2OtQgFzzlSG0uCjcJmi02QuFSRTrpT11Eh2EcqqDFy7DYriteHZJkkf+4AsxsrGDugAtPFcWBz1aq06sSX5fQ== + dependencies: + "@smithy/node-config-provider" "^4.1.2" + "@smithy/protocol-http" "^5.1.1" + "@smithy/service-error-classification" "^4.0.4" + "@smithy/smithy-client" "^4.3.0" + "@smithy/types" "^4.3.0" + "@smithy/util-middleware" "^4.0.3" + "@smithy/util-retry" "^4.0.4" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^4.0.5", "@smithy/middleware-serde@^4.0.6": + version "4.0.6" + resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.6.tgz" + integrity sha512-YECyl7uNII+jCr/9qEmCu8xYL79cU0fqjo0qxpcVIU18dAPHam/iYwcknAu4Jiyw1uN+sAx7/SMf/Kmef/Jjsg== + dependencies: + "@smithy/protocol-http" "^5.1.1" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^4.0.2", "@smithy/middleware-stack@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.3.tgz" + integrity sha512-baeV7t4jQfQtFxBADFmnhmqBmqR38dNU5cvEgHcMK/Kp3D3bEI0CouoX2Sr/rGuntR+Eg0IjXdxnGGTc6SbIkw== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^4.1.1", "@smithy/node-config-provider@^4.1.2": + version "4.1.2" + resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.2.tgz" + integrity sha512-SUvNup8iU1v7fmM8XPk+27m36udmGCfSz+VZP5Gb0aJ3Ne0X28K/25gnsrg3X1rWlhcnhzNUUysKW/Ied46ivQ== + dependencies: + "@smithy/property-provider" "^4.0.3" + "@smithy/shared-ini-file-loader" "^4.0.3" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^4.0.4", "@smithy/node-http-handler@^4.0.5": + version "4.0.5" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.5.tgz" + integrity sha512-T7QglZC1vS7SPT44/1qSIAQEx5bFKb3LfO6zw/o4Xzt1eC5HNoH1TkS4lMYA9cWFbacUhx4hRl/blLun4EOCkg== + dependencies: + "@smithy/abort-controller" "^4.0.3" + "@smithy/protocol-http" "^5.1.1" + "@smithy/querystring-builder" "^4.0.3" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/property-provider@^4.0.2", "@smithy/property-provider@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.3.tgz" + integrity sha512-Wcn17QNdawJZcZZPBuMuzyBENVi1AXl4TdE0jvzo4vWX2x5df/oMlmr/9M5XAAC6+yae4kWZlOYIsNsgDrMU9A== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^5.1.0", "@smithy/protocol-http@^5.1.1": + version "5.1.1" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.1.tgz" + integrity sha512-Vsay2mzq05DwNi9jK01yCFtfvu9HimmgC7a4HTs7lhX12Sx8aWsH0mfz6q/02yspSp+lOB+Q2HJwi4IV2GKz7A== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.3.tgz" + integrity sha512-UUzIWMVfPmDZcOutk2/r1vURZqavvQW0OHvgsyNV0cKupChvqg+/NKPRMaMEe+i8tP96IthMFeZOZWpV+E4RAw== + dependencies: + "@smithy/types" "^4.3.0" + "@smithy/util-uri-escape" "^4.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.3.tgz" + integrity sha512-K5M4ZJQpFCblOJ5Oyw7diICpFg1qhhR47m2/5Ef1PhGE19RaIZf50tjYFrxa6usqcuXyTiFPGo4d1geZdH4YcQ== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.4.tgz" + integrity sha512-W5ScbQ1bTzgH91kNEE2CvOzM4gXlDOqdow4m8vMFSIXCel2scbHwjflpVNnC60Y3F1m5i7w2gQg9lSnR+JsJAA== + dependencies: + "@smithy/types" "^4.3.0" + +"@smithy/shared-ini-file-loader@^4.0.2", "@smithy/shared-ini-file-loader@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.3.tgz" + integrity sha512-vHwlrqhZGIoLwaH8vvIjpHnloShqdJ7SUPNM2EQtEox+yEDFTVQ7E+DLZ+6OhnYEgFUwPByJyz6UZaOu2tny6A== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^5.1.0": + version "5.1.1" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.1.tgz" + integrity sha512-zy8Repr5zvT0ja+Tf5wjV/Ba6vRrhdiDcp/ww6cvqYbSEudIkziDe3uppNRlFoCViyJXdPnLcwyZdDLA4CHzSg== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/protocol-http" "^5.1.1" + "@smithy/types" "^4.3.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-middleware" "^4.0.3" + "@smithy/util-uri-escape" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^4.2.6", "@smithy/smithy-client@^4.3.0": + version "4.3.0" + resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.3.0.tgz" + integrity sha512-DNsRA38pN6tYHUjebmwD9e4KcgqTLldYQb2gC6K+oxXYdCTxPn6wV9+FvOa6wrU2FQEnGJoi+3GULzOTKck/tg== + dependencies: + "@smithy/core" "^3.4.0" + "@smithy/middleware-endpoint" "^4.1.7" + "@smithy/middleware-stack" "^4.0.3" + "@smithy/protocol-http" "^5.1.1" + "@smithy/types" "^4.3.0" + "@smithy/util-stream" "^4.2.1" + tslib "^2.6.2" + +"@smithy/types@^4.2.0", "@smithy/types@^4.3.0": + version "4.3.0" + resolved "https://registry.npmjs.org/@smithy/types/-/types-4.3.0.tgz" + integrity sha512-+1iaIQHthDh9yaLhRzaoQxRk+l9xlk+JjMFxGRhNLz+m9vKOkjNeU8QuB4w3xvzHyVR/BVlp/4AXDHjoRIkfgQ== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^4.0.2", "@smithy/url-parser@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.3.tgz" + integrity sha512-n5/DnosDu/tweOqUUNtUbu7eRIR4J/Wz9nL7V5kFYQQVb8VYdj7a4G5NJHCw6o21ul7CvZoJkOpdTnsQDLT0tQ== + dependencies: + "@smithy/querystring-parser" "^4.0.3" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/util-base64@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz" + integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== + dependencies: + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz" + integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz" + integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz" + integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-config-provider@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz" + integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^4.0.14": + version "4.0.15" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.15.tgz" + integrity sha512-bJJ/B8owQbHAflatSq92f9OcV8858DJBQF1Y3GRjB8psLyUjbISywszYPFw16beREHO/C3I3taW4VGH+tOuwrQ== + dependencies: + "@smithy/property-provider" "^4.0.3" + "@smithy/smithy-client" "^4.3.0" + "@smithy/types" "^4.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^4.0.14": + version "4.0.15" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.15.tgz" + integrity sha512-8CUrEW2Ni5q+NmYkj8wsgkfqoP7l4ZquptFbq92yQE66xevc4SxqP2zH6tMtN158kgBqBDsZ+qlrRwXWOjCR8A== + dependencies: + "@smithy/config-resolver" "^4.1.3" + "@smithy/credential-provider-imds" "^4.0.5" + "@smithy/node-config-provider" "^4.1.2" + "@smithy/property-provider" "^4.0.3" + "@smithy/smithy-client" "^4.3.0" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^3.0.4": + version "3.0.5" + resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.5.tgz" + integrity sha512-PjDpqLk24/vAl340tmtCA++Q01GRRNH9cwL9qh46NspAX9S+IQVcK+GOzPt0GLJ6KYGyn8uOgo2kvJhiThclJw== + dependencies: + "@smithy/node-config-provider" "^4.1.2" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz" + integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^4.0.2", "@smithy/util-middleware@^4.0.3": + version "4.0.3" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.3.tgz" + integrity sha512-iIsC6qZXxkD7V3BzTw3b1uK8RVC1M8WvwNxK1PKrH9FnxntCd30CSunXjL/8iJBE8Z0J14r2P69njwIpRG4FBQ== + dependencies: + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/util-retry@^4.0.3", "@smithy/util-retry@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.4.tgz" + integrity sha512-Aoqr9W2jDYGrI6OxljN8VmLDQIGO4VdMAUKMf9RGqLG8hn6or+K41NEy1Y5dtum9q8F7e0obYAuKl2mt/GnpZg== + dependencies: + "@smithy/service-error-classification" "^4.0.4" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + +"@smithy/util-stream@^4.2.0", "@smithy/util-stream@^4.2.1": + version "4.2.1" + resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.1.tgz" + integrity sha512-W3IR0x5DY6iVtjj5p902oNhD+Bz7vs5S+p6tppbPa509rV9BdeXZjGuRSCtVEad9FA0Mba+tNUtUmtnSI1nwUw== + dependencies: + "@smithy/fetch-http-handler" "^5.0.3" + "@smithy/node-http-handler" "^4.0.5" + "@smithy/types" "^4.3.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz" + integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.0.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz" + integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== + dependencies: + "@smithy/util-buffer-from" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-waiter@^4.0.3": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.4.tgz" + integrity sha512-73aeIvHjtSB6fd9I08iFaQIGTICKpLrI3EtlWAkStVENGo1ARMq9qdoD4QwkY0RUp6A409xlgbD9NCCfCF5ieg== + dependencies: + "@smithy/abort-controller" "^4.0.3" + "@smithy/types" "^4.3.0" + tslib "^2.6.2" + "@tsconfig/node10@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/cli-progress@3.11.0": version "3.11.0" - resolved "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.0.tgz#ec79df99b26757c3d1c7170af8422e0fc95eef7e" + resolved "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.0.tgz" integrity sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg== dependencies: "@types/node" "*" "@types/fs-extra@^9.0.13": version "9.0.13" - resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== dependencies: "@types/node" "*" "@types/glob@^7.2.0": version "7.2.0" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" @@ -88,103 +1180,73 @@ "@types/js-yaml@^4.0.4": version "4.0.9" - resolved "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" + resolved "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz" integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== "@types/minimatch@*": version "5.1.2" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== -"@types/node@*": - version "22.9.1" - resolved "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz#bdf91c36e0e7ecfb7257b2d75bf1b206b308ca71" - integrity sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg== +"@types/node@*", "@types/node@^20.0.0": + version "20.17.50" + resolved "https://registry.npmjs.org/@types/node/-/node-20.17.50.tgz" + integrity sha512-Mxiq0ULv/zo1OzOhwPqOA13I81CV/W3nvd3ChtQZRT5Cwz3cr0FKo/wMSsbTqL3EXpaBAEQhva2B8ByRkOIh9A== dependencies: - undici-types "~6.19.8" - -"@types/node@^18.0.0": - version "18.19.64" - resolved "https://registry.npmjs.org/@types/node/-/node-18.19.64.tgz#122897fb79f2a9ec9c979bded01c11461b2b1478" - integrity sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ== - dependencies: - undici-types "~5.26.4" + undici-types "~6.19.2" acorn-walk@^8.1.1: version "8.3.4" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== dependencies: acorn "^8.11.0" acorn@^8.11.0, acorn@^8.4.1: version "8.14.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^4.0.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -aws-sdk@2.1414.0: - version "2.1414.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1414.0.tgz#5888319adba0e98fc95f7b6044bb598edcbf6713" - integrity sha512-WhqTWiTZRUxWITvUG5VMPYGdCLNAm4zOTDIiotbErR9x+uDExk2CAGbXE8HH11+tD8PhZVXyukymSiG+7rJMMg== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.16.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - util "^0.12.4" - uuid "8.0.0" - xml2js "0.5.0" - axios@^1.6.0: version "1.8.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.2.tgz#fabe06e241dfe83071d4edfbcaa7b1c3a40f7979" + resolved "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz" integrity sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg== dependencies: follow-redirects "^1.15.6" @@ -193,135 +1255,89 @@ axios@^1.6.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -call-bind@^1.0.2, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - cli-progress@^3.12.0: version "3.12.0" - resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== dependencies: string-width "^4.2.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -events@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== - execa@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -334,21 +1350,21 @@ execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +fast-xml-parser@4.4.1: + version "4.4.1" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + dependencies: + strnum "^1.0.5" + follow-redirects@^1.15.6: version "1.15.9" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - foreground-child@^3.1.0: version "3.3.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz" integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== dependencies: cross-spawn "^7.0.0" @@ -356,7 +1372,7 @@ foreground-child@^3.1.0: form-data@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz" integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== dependencies: asynckit "^0.4.0" @@ -365,37 +1381,21 @@ form-data@^4.0.0: fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob@^10.3.0: version "10.4.5" - resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" @@ -405,140 +1405,50 @@ glob@^10.3.0: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -ieee754@1.1.13: - version "1.1.13" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inherits@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -isarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jmespath@0.16.0: - version "0.16.0" - resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" - integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== - js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -547,147 +1457,110 @@ jsonfile@^6.0.1: lru-cache@^10.2.0: version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^9.0.4: version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" package-json-from-dist@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - -sax@1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== - -sax@>=0.6.0: - version "1.4.1" - resolved "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" - integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -696,16 +1569,25 @@ signal-exit@^4.0.1: string-width@^4.1.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: +string-width@^5.0.1: version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -714,33 +1596,45 @@ string-width@^5.0.1, string-width@^5.1.2: "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strnum@^1.0.5: + version "1.1.2" + resolved "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz" + integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== + ts-node@^10.4.0: version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -757,76 +1651,46 @@ ts-node@^10.4.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -typescript@^4.4.4: +tslib@^2.6.2: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +typescript@^4.4.4, typescript@>=2.7: version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici-types@~6.19.8: +undici-types@~6.19.2: version "6.19.8" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== universalify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -url@0.10.3: - version "0.10.3" - resolved "https://registry.npmjs.org/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -util@^0.12.4: - version "0.12.5" - resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -which-typed-array@^1.1.14, which-typed-array@^1.1.2: - version "1.1.15" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -835,27 +1699,14 @@ which@^2.0.1: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" string-width "^5.0.1" strip-ansi "^7.0.1" -xml2js@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" - integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 7834984e02448f54dd54c993c1ed8fc518e2ef79 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Thu, 22 May 2025 17:01:59 -0500 Subject: [PATCH 02/37] chore: checkpoint update e2e test functions --- .../amplify-e2e-tests/functions/dynamodb-scan.js | 7 ++++--- .../amplify-e2e-tests/functions/get-api-appsync.js | 7 ++++--- .../amplify-e2e-tests/functions/mutation-appsync.js | 12 +++++++----- .../amplify-e2e-tests/functions/s3-list-objects.js | 13 ++++++------- packages/amplify-e2e-tests/package.json | 5 +++++ 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/packages/amplify-e2e-tests/functions/dynamodb-scan.js b/packages/amplify-e2e-tests/functions/dynamodb-scan.js index c39e6bdeae..6dd185378a 100644 --- a/packages/amplify-e2e-tests/functions/dynamodb-scan.js +++ b/packages/amplify-e2e-tests/functions/dynamodb-scan.js @@ -1,7 +1,8 @@ -const AWS = require('aws-sdk'); +const { DynamoDBClient, ScanCommand } = require('@aws-sdk/client-dynamodb'); -const DDB = new AWS.DynamoDB(); +const DDB = new DynamoDBClient(); exports.handler = async (event, context) => { - return await DDB.scan({ TableName: event.tableName }).promise(); + const command = new ScanCommand({ TableName: event.tableName }); + return await DDB.send(command); }; diff --git a/packages/amplify-e2e-tests/functions/get-api-appsync.js b/packages/amplify-e2e-tests/functions/get-api-appsync.js index e2a6122bc6..3873579bbd 100644 --- a/packages/amplify-e2e-tests/functions/get-api-appsync.js +++ b/packages/amplify-e2e-tests/functions/get-api-appsync.js @@ -1,9 +1,10 @@ // /* eslint-disable no-console */ -const AWS = require('aws-sdk'); +const { AppSyncClient, GetGraphqlApiCommand } = require('@aws-sdk/client-appsync'); const getGqlApi = async (idKey) => { - const appsync = new AWS.AppSync({ region: process.env.REGION }); - return await appsync.getGraphqlApi({ apiId: process.env[idKey] }).promise(); + const appsync = new AppSyncClient({ region: process.env.REGION }); + const command = new GetGraphqlApiCommand({ apiId: process.env[idKey] }); + return await appsync.send(command); }; exports.handler = async (event) => { diff --git a/packages/amplify-e2e-tests/functions/mutation-appsync.js b/packages/amplify-e2e-tests/functions/mutation-appsync.js index 8ef68db28f..f546f080e7 100644 --- a/packages/amplify-e2e-tests/functions/mutation-appsync.js +++ b/packages/amplify-e2e-tests/functions/mutation-appsync.js @@ -1,17 +1,19 @@ /* eslint-disable no-console */ require('isomorphic-fetch'); -const AWS = require('aws-sdk'); -const AWSAppSyncClient = require('aws-appsync').default; -const { AUTH_TYPE } = require('aws-appsync'); +const { defaultProvider } = require('@aws-sdk/credential-provider-node'); +const { AUTH_TYPE, AppSyncClient } = require('aws-appsync'); const gql = require('graphql-tag'); const runGQLMutation = async (gql_url, mutation, variables) => { - const client = new AWSAppSyncClient({ + // Use the default credential provider from aws-sdk v3 + const credentials = await defaultProvider()(); + + const client = new AppSyncClient({ url: process.env[gql_url], region: process.env.REGION, auth: { type: AUTH_TYPE.AWS_IAM, - credentials: AWS.config.credentials, + credentials, }, disableOffline: true, }); diff --git a/packages/amplify-e2e-tests/functions/s3-list-objects.js b/packages/amplify-e2e-tests/functions/s3-list-objects.js index cdac462d10..71bf6ed129 100644 --- a/packages/amplify-e2e-tests/functions/s3-list-objects.js +++ b/packages/amplify-e2e-tests/functions/s3-list-objects.js @@ -1,14 +1,13 @@ -const AWS = require('aws-sdk'); +const { S3Client, ListObjectsV2Command } = require('@aws-sdk/client-s3'); -const awsS3Client = new AWS.S3(); +const s3Client = new S3Client(); const bucketEnvVar = '{{bucketEnvVar}}'; // This value is replaced from test exports.handler = async (event, context) => { - let listObjects = await awsS3Client - .listObjectsV2({ - Bucket: process.env[bucketEnvVar], - }) - .promise(); + const command = new ListObjectsV2Command({ + Bucket: process.env[bucketEnvVar], + }); + const listObjects = await s3Client.send(command); return listObjects; }; diff --git a/packages/amplify-e2e-tests/package.json b/packages/amplify-e2e-tests/package.json index 1fe3c7b619..d32b5891ec 100644 --- a/packages/amplify-e2e-tests/package.json +++ b/packages/amplify-e2e-tests/package.json @@ -27,6 +27,11 @@ "@aws-amplify/amplify-app": "^5.0.35", "@aws-amplify/graphql-schema-generator": "0.11.11", "@aws-amplify/graphql-transformer-core": "3.4.3", + "@aws-sdk/client-appsync": "^3.812.0", + "@aws-sdk/credential-provider-node": "^3.812.0", + "@aws-sdk/client-dynamodb": "^3.812.0", + "@aws-sdk/client-ssm": "^3.812.0", + "@aws-sdk/client-s3": "^3.812.0", "amplify-category-api-e2e-core": "5.0.8", "aws-amplify": "^4.2.8", "aws-appsync": "^4.1.1", From b038939a17755d4f1c8762e02cb419d18c783371 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 23 May 2025 09:12:36 -0500 Subject: [PATCH 03/37] chore: sdk migrate retrieve-secret --- .../functions/retrieve-secret.js | 14 +- yarn.lock | 520 ++++++++++++++++++ 2 files changed, 527 insertions(+), 7 deletions(-) diff --git a/packages/amplify-e2e-tests/functions/retrieve-secret.js b/packages/amplify-e2e-tests/functions/retrieve-secret.js index c180ebf993..5299dd22d4 100644 --- a/packages/amplify-e2e-tests/functions/retrieve-secret.js +++ b/packages/amplify-e2e-tests/functions/retrieve-secret.js @@ -1,12 +1,12 @@ -const aws = require('aws-sdk'); +const { SSMClient, GetParametersCommand } = require('@aws-sdk/client-ssm'); exports.handler = async (event) => { const { secretNames } = event; - const { Parameters } = await new aws.SSM() - .getParameters({ - Names: secretNames.map((secretName) => process.env[secretName]), - WithDecryption: true, - }) - .promise(); + const client = new SSMClient(); + const command = new GetParametersCommand({ + Names: secretNames.map((secretName) => process.env[secretName]), + WithDecryption: true, + }); + const { Parameters } = await client.send(command); return Parameters; }; diff --git a/yarn.lock b/yarn.lock index e0aa109f5b..6498818ce5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -942,6 +942,52 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-appsync@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-appsync/-/client-appsync-3.816.0.tgz#90dc05f32e783bf066557deaa8d1126d40bbe610" + integrity sha512-AXLQ1ekSoAr9wAL/xKxjVPPKB8sL3jzVxg/zPa+LquOwDOXcEGeTVP/Jb3x7aeN82teJBbLvrKq6mWvtXfBS6g== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-bedrock-runtime@^3.622.0": version "3.779.0" resolved "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.779.0.tgz#3b7c12c140653d83710fe11f0ce2e2a95b1aafde" @@ -1634,6 +1680,55 @@ tslib "^2.6.2" uuid "^9.0.1" +"@aws-sdk/client-dynamodb@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-dynamodb/-/client-dynamodb-3.816.0.tgz#f8592dde54be38d144de787f57337902ac53e1fa" + integrity sha512-KuRortLPrfRPCpCg0ofwfn/AgEiAmbeFDjUXJzF2DMGLa6OHGAWrEXodh9VnW3PapFSC9eL+NRckSm/H4gu9vA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-endpoint-discovery" "3.808.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.3" + "@types/uuid" "^9.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + "@aws-sdk/client-ec2@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.624.0.tgz#316e41e3892b7d7beabe19d7b3c5b8fc161ad85a" @@ -2883,6 +2978,68 @@ "@smithy/util-waiter" "^4.0.3" tslib "^2.6.2" +"@aws-sdk/client-s3@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.816.0.tgz#f5fdc70f1b193dfc02c605d377ad5739429ef82f" + integrity sha512-WsVDoXrQ6YWyse04EJyP2vg7dGcHbb5cYtTUZTDwbldsNBu8IH67pTx61lDh07cXeav4UwdzJvSD86zTT7nHPg== + dependencies: + "@aws-crypto/sha1-browser" "5.2.0" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-bucket-endpoint" "3.808.0" + "@aws-sdk/middleware-expect-continue" "3.804.0" + "@aws-sdk/middleware-flexible-checksums" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-location-constraint" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-sdk-s3" "3.816.0" + "@aws-sdk/middleware-ssec" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/signature-v4-multi-region" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@aws-sdk/xml-builder" "3.804.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/eventstream-serde-browser" "^4.0.2" + "@smithy/eventstream-serde-config-resolver" "^4.1.0" + "@smithy/eventstream-serde-node" "^4.0.2" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-blob-browser" "^4.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/hash-stream-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/md5-js" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.3" + tslib "^2.6.2" + "@aws-sdk/client-secrets-manager@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.624.0.tgz#ee27cc934a18a9d6d2965dde09ef4a8d061fa2d3" @@ -3169,6 +3326,54 @@ tslib "^2.6.2" uuid "^9.0.1" +"@aws-sdk/client-ssm@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-ssm/-/client-ssm-3.816.0.tgz#de14fefddaa953ebd304e077e232252f4b569965" + integrity sha512-YBADeh1K2el4/3kTIIfEpsDIwBa9ywWjKlosGx6s78hZbd4D5nXqxbMIh3jZTK8p67FO+vK/0jmvwWu1Uye7EA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.3" + "@types/uuid" "^9.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + "@aws-sdk/client-sso-oidc@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.624.0.tgz#33d0927519de333387ee07cb7f6483b0bd4db2f2" @@ -3472,6 +3677,50 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-sso@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.816.0.tgz#827c3c2a249948c966ce513c41de07db3bb91b1c" + integrity sha512-2D2bc6wVDgGxwHjqSyxGYXUHa3ni0R21Isiq0OzJk6nBc8Vi6HpYoimok6UaUfPJsG6OEWfQ9vubcR30BCBmqQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sts@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.186.0.tgz#12514601b0b01f892ddb11d8a2ab4bee1b03cbf1" @@ -3810,6 +4059,23 @@ fast-xml-parser "4.4.1" tslib "^2.6.2" +"@aws-sdk/core@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.816.0.tgz#f310a2fd458534b13f42de5e10fdfd3dfc8d4982" + integrity sha512-Lx50wjtyarzKpMFV6V+gjbSZDgsA/71iyifbClGUSiNPoIQ4OCV0KVOmAAj7mQRVvGJqUMWKVM+WzK79CjbjWA== + dependencies: + "@aws-sdk/types" "3.804.0" + "@smithy/core" "^3.3.3" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/property-provider" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/signature-v4" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/util-middleware" "^4.0.2" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-cognito-identity@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.6.1.tgz#df928951612a34832c2df15fb899251d828c2df3" @@ -3892,6 +4158,17 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-env@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.816.0.tgz#a5e1dd3a23403f6c8ea4cbdcbf06d7986bcd1e81" + integrity sha512-wUJZwRLe+SxPxRV9AENYBLrJZRrNIo+fva7ZzejsC83iz7hdfq6Rv6B/aHEdPwG/nQC4+q7UUvcRPlomyrpsBA== + dependencies: + "@aws-sdk/core" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-http@3.622.0": version "3.622.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz#db481fdef859849d07dd5870894f45df2debab3d" @@ -3954,6 +4231,22 @@ "@smithy/util-stream" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-http@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.816.0.tgz#35e5188e9c0143c48d02a9c7ca08f9e6e4821ed1" + integrity sha512-gcWGzMQ7yRIF+ljTkR8Vzp7727UY6cmeaPrFQrvcFB8PhOqWpf7g0JsgOf5BSaP8CkkSQcTQHc0C5ZYAzUFwPg== + dependencies: + "@aws-sdk/core" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/property-provider" "^4.0.2" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/util-stream" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-imds@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz#73e0f62832726c7734b4f6c50a02ab0d869c00e1" @@ -4070,6 +4363,25 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-ini@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.816.0.tgz#f2122582158af3b42e8ab6adbb86e6e07adf9b3d" + integrity sha512-60FiF4PFgrnIQ7vizAMN4imrjFzlXPEvXKk05cs47W7qtA54MudRvTITN9Gji4vD5j6CDp9fOb0HS0+N83YEAA== + dependencies: + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-env" "3.816.0" + "@aws-sdk/credential-provider-http" "3.816.0" + "@aws-sdk/credential-provider-process" "3.816.0" + "@aws-sdk/credential-provider-sso" "3.816.0" + "@aws-sdk/credential-provider-web-identity" "3.816.0" + "@aws-sdk/nested-clients" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/credential-provider-imds" "^4.0.4" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz#0be58623660b41eed3a349a89b31a01d4cc773ea" @@ -4172,6 +4484,24 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-node@3.816.0", "@aws-sdk/credential-provider-node@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.816.0.tgz#6922f342da75819ca344b19e89bb883368167fd8" + integrity sha512-NsjMzCHWXpFXNdJYliY4GM2vtsmP8w9OyjrNcHq4mmdp7lAzM3BvRKavVuhBXrSHQFzLkGWaTGd+fkkTZtYHXQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.816.0" + "@aws-sdk/credential-provider-http" "3.816.0" + "@aws-sdk/credential-provider-ini" "3.816.0" + "@aws-sdk/credential-provider-process" "3.816.0" + "@aws-sdk/credential-provider-sso" "3.816.0" + "@aws-sdk/credential-provider-web-identity" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/credential-provider-imds" "^4.0.4" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz#e3be60983261a58c212f5c38b6fb76305bbb8ce7" @@ -4228,6 +4558,18 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-process@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.816.0.tgz#8fa3694b8d17d4e446de038e74d5a177d25d86f0" + integrity sha512-9Tm+AxMoV2Izvl5b9tyMQRbBwaex8JP06HN7ZeCXgC5sAsSN+o8dsThnEhf8jKN+uBpT6CLWKN1TXuUMrAmW1A== + dependencies: + "@aws-sdk/core" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-sso@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.186.0.tgz#e1aa466543b3b0877d45b885a1c11b329232df22" @@ -4293,6 +4635,20 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-sso@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.816.0.tgz#f97a0d3d46997651cec3b7a92acd63169638f427" + integrity sha512-wxNqvPrRpKwkNQ41uGE/y3Y95TsWnJnMpcTIMhGEub0Jq5ifnUEev3gJ60857uaut133mwpGfupE2fk8V68e6A== + dependencies: + "@aws-sdk/client-sso" "3.816.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/token-providers" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.186.0.tgz#db43f37f7827b553490dd865dbaa9a2c45f95494" @@ -4336,6 +4692,18 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-web-identity@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.816.0.tgz#6df23b0a8a7e62774a2f9ff595974c9c6b4b05b0" + integrity sha512-guKv76eRTMQkGOHsv9tY8XP9y1TZ0U4w6RD5kHQYNuzoBf5HOpZcib9OGmWJA2n+BC+byCOOftl6mMmYtRfcpQ== + dependencies: + "@aws-sdk/core" "3.816.0" + "@aws-sdk/nested-clients" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/credential-providers@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.624.0.tgz#d6e23e3a535ae74c6a7138e693aa002c42680d7f" @@ -4412,6 +4780,14 @@ mnemonist "0.38.3" tslib "^2.6.2" +"@aws-sdk/endpoint-cache@3.804.0": + version "3.804.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/endpoint-cache/-/endpoint-cache-3.804.0.tgz#4192196aa3e9f6cef8b0967a2c493648d38c627c" + integrity sha512-TQVDkA/lV6ua75ELZaichMzlp6x7tDa1bqdy/+0ZftmODPtKXuOOEcJxmdN7Ui/YRo1gkRz2D9txYy7IlNg1Og== + dependencies: + mnemonist "0.38.3" + tslib "^2.6.2" + "@aws-sdk/eventstream-codec@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.186.0.tgz#9da9608866b38179edf72987f2bc3b865d11db13" @@ -4732,6 +5108,18 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-endpoint-discovery@3.808.0": + version "3.808.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.808.0.tgz#5d9ebde6f410cefc5058dea3d451358ce8293368" + integrity sha512-h8LAIO6tuA0JAahrg+oSIVZpb6rhJOFVDDqYNQVp6ZdawlIzpZcc1sa+XVZvarBnThNKqvLTSGK7boSRmaLAwg== + dependencies: + "@aws-sdk/endpoint-cache" "3.804.0" + "@aws-sdk/types" "3.804.0" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/middleware-eventstream@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.186.0.tgz#64a66102ed2e182182473948f131f23dda84e729" @@ -4809,6 +5197,25 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-flexible-checksums@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.816.0.tgz#f9d761043734e0e6caa6cbcd4c63203a16633e6c" + integrity sha512-kftcwDxB/VoCBsUiRgkm5CIuKbTfCN1WLPbis9LRwX3kQhKgGVxG2gG78SHk4TBB0qviWVAd/t+i/KaUgwiAcA== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-crypto/util" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-header-default@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-header-default/-/middleware-header-default-3.6.1.tgz#a3a108d22cbdd1e1754910625fafb2f2a67fbcfc" @@ -5098,6 +5505,26 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-sdk-s3@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.816.0.tgz#29a99d6a9b3f0eb2c82a3e3b96bcea842b120077" + integrity sha512-jJ+EAXM7gnOwiCM6rrl4AUNY5urmtIsX7roTkxtb4DevJxcS+wFYRRg3/j33fQbuxQZrvk21HqxyZYx5UH70PA== + dependencies: + "@aws-sdk/core" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-arn-parser" "3.804.0" + "@smithy/core" "^3.3.3" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/protocol-http" "^5.1.0" + "@smithy/signature-v4" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-stream" "^4.2.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-sdk-sts@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.186.0.tgz#18f3d6b7b42c1345b5733ac3e3119d370a403e94" @@ -5254,6 +5681,19 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-user-agent@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.816.0.tgz#6eb00bbcb44304ff9df53dbb53dc072638831760" + integrity sha512-bHRSlWZ0xDsFR8E2FwDb//0Ff6wMkVx4O+UKsfyNlAbtqCiiHRt5ANNfKPafr95cN2CCxLxiPvFTFVblQM5TsQ== + dependencies: + "@aws-sdk/core" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@smithy/core" "^3.3.3" + "@smithy/protocol-http" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/nested-clients@3.777.0", "@aws-sdk/nested-clients@^3.777.0": version "3.777.0" resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.777.0.tgz#e3b72bdebe4b60364ff82aff6c272aa163404196" @@ -5342,6 +5782,50 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/nested-clients@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.816.0.tgz#35ac4942d5b16e663a67af86f19fab6bb04f0ef2" + integrity sha512-N1jSEa53QHLvIH37Rrm8cD9MlC6ucTEpDhbO+fN9UHBimRnpt9kqk0iiBCu5FK7GEKWYM5kiawfUtbB3PN65CQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/node-config-provider@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz#64259429d39f2ef5a76663162bf2e8db6032a322" @@ -5548,6 +6032,18 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/signature-v4-multi-region@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.816.0.tgz#76670e7adc3309e3e50bc4360805c2b5142f9399" + integrity sha512-idcr9NW86sSIXASSej3423Selu6fxlhhJJtMgpAqoCH/HJh1eQrONJwNKuI9huiruPE8+02pwxuePvLW46X2mw== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/protocol-http" "^5.1.0" + "@smithy/signature-v4" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/signature-v4@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz#bbd56e71af95548abaeec6307ea1dfe7bd26b4e4" @@ -5624,6 +6120,19 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/token-providers@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.816.0.tgz#fea7e1dedbe54f93c873fa2da77c31c0c78750ab" + integrity sha512-OFeeq7j3JsI5OrUW4vw/Lckwq8I+HNffi7IXenfqzE83vhgXQF9BfCg+TGHDfxiDt6NUaS6F0QzhfkW6/AORlA== + dependencies: + "@aws-sdk/core" "3.816.0" + "@aws-sdk/nested-clients" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/property-provider" "^4.0.2" + "@smithy/shared-ini-file-loader" "^4.0.2" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/types@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz#f6fb6997b6a364f399288bfd5cd494bc680ac922" @@ -6042,6 +6551,17 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-node@3.816.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.816.0.tgz#c752f9bc37a973f82841c84b864e362f8ad28f68" + integrity sha512-Q6dxmuj4hL7pudhrneWEQ7yVHIQRBFr0wqKLF1opwOi1cIePuoEbPyJ2jkel6PDEv1YMfvsAKaRshp6eNA8VHg== + dependencies: + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/types" "3.804.0" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/util-utf8-browser@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz#5fee6385cfc3effa2be704edc2998abfd6633082" From ece9b2395ec61ecc3ebc0e3259296bef15ea2851 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Wed, 4 Jun 2025 15:15:29 -0500 Subject: [PATCH 04/37] ... --- packages/amplify-e2e-tests/package.json | 9 +- .../src/cleanup-e2e-resources.ts | 212 ++++++----- yarn.lock | 334 ++++++++++++++++++ 3 files changed, 457 insertions(+), 98 deletions(-) diff --git a/packages/amplify-e2e-tests/package.json b/packages/amplify-e2e-tests/package.json index d32b5891ec..9ffd631f9a 100644 --- a/packages/amplify-e2e-tests/package.json +++ b/packages/amplify-e2e-tests/package.json @@ -32,6 +32,13 @@ "@aws-sdk/client-dynamodb": "^3.812.0", "@aws-sdk/client-ssm": "^3.812.0", "@aws-sdk/client-s3": "^3.812.0", + "@aws-sdk/client-cloudformation": "^3.812.0", + "@aws-sdk/client-iam": "^3.812.0", + "@aws-sdk/client-rds": "^3.812.0", + "@aws-sdk/client-codebuild": "^3.812.0", + "@aws-sdk/client-amplify": "^3.812.0", + "@aws-sdk/client-sts": "^3.812.0", + "@aws-sdk/client-organizations": "^3.812.0", "amplify-category-api-e2e-core": "5.0.8", "aws-amplify": "^4.2.8", "aws-appsync": "^4.1.1", @@ -138,4 +145,4 @@ "usePathForSuiteName": "true", "addFileAttribute": "true" } -} +} \ No newline at end of file diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 22ced7fc1d..99ff8930de 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -1,12 +1,36 @@ /* eslint-disable spellcheck/spell-checker, camelcase, jsdoc/require-jsdoc, @typescript-eslint/no-explicit-any */ import path from 'path'; -import { CodeBuild } from 'aws-sdk'; import { config } from 'dotenv'; import yargs from 'yargs'; -import * as aws from 'aws-sdk'; import _ from 'lodash'; -import fs from 'fs-extra'; +import * as fs from 'fs-extra'; import { deleteS3Bucket, sleep } from 'amplify-category-api-e2e-core'; +import { S3Client, ListBucketsCommand, GetBucketLocationCommand, GetBucketTaggingCommand, Bucket } from '@aws-sdk/client-s3'; +import { + IAMClient, + ListRolesCommand, + ListAttachedRolePoliciesCommand, + ListRolePoliciesCommand, + DeleteRoleCommand, + DetachRolePolicyCommand, + DeleteRolePolicyCommand, + Role, + AttachedPolicy, +} from '@aws-sdk/client-iam'; +import { RDSClient, DescribeDBInstancesCommand, DeleteDBInstanceCommand, DBInstance } from '@aws-sdk/client-rds'; +import { + CloudFormationClient, + DescribeStacksCommand, + ListStackResourcesCommand, + ListStacksCommand, + DeleteStackCommand, + Tag as CFNTag, + waitUntilStackDeleteComplete, +} from '@aws-sdk/client-cloudformation'; +import { AmplifyClient, DeleteAppCommand, ListAppsCommand, ListBackendEnvironmentsCommand } from '@aws-sdk/client-amplify'; +import { BatchGetBuildsCommand, Build, CodeBuildClient } from '@aws-sdk/client-codebuild'; +import { STSClient, AssumeRoleCommand, GetCallerIdentityCommand } from '@aws-sdk/client-sts'; +import { OrganizationsClient, ListAccountsCommand } from '@aws-sdk/client-organizations'; type TestRegion = { name: string; @@ -31,7 +55,7 @@ type StackInfo = { tags: Record; region: string; jobId: string; - cbInfo?: CodeBuild.Build; + cbInfo?: Build; }; type AmplifyAppInfo = { @@ -45,12 +69,12 @@ type S3BucketInfo = { name: string; jobId?: string; region: string; - cbInfo?: CodeBuild.Build; + cbInfo?: Build; }; type IamRoleInfo = { name: string; - cbInfo?: CodeBuild.Build; + cbInfo?: Build; }; type RdsInstanceInfo = { @@ -62,7 +86,7 @@ type ReportEntry = { jobId?: string; buildBatchArn?: string; buildComplete?: boolean; - cbJobDetails?: CodeBuild.Build; + cbJobDetails?: Build; buildStatus?: string; amplifyApps: Record; stacks: Record; @@ -77,7 +101,7 @@ type CBJobInfo = { buildBatchArn: string; projectName: string; buildComplete: boolean; - cbJobDetails: CodeBuild.Build; + cbJobDetails: Build; buildStatus: string; }; @@ -106,31 +130,33 @@ const handleExpiredTokenException = (): void => { /** * We define a resource as viable for deletion if it matches TEST_REGEX in the name, and if it is > STALE_DURATION_MS old. */ -const testBucketStalenessFilter = (resource: aws.S3.Bucket): boolean => { - const isTestResource = resource.Name.match(BUCKET_TEST_REGEX); - const isStaleResource = Date.now() - resource.CreationDate.getMilliseconds() > STALE_DURATION_MS; - return isTestResource && isStaleResource; +const testBucketStalenessFilter = (resource: Bucket): boolean => { + const isTestResource = resource.Name?.match(BUCKET_TEST_REGEX); + const isStaleResource = resource.CreationDate && Date.now() - new Date(resource.CreationDate).getTime() > STALE_DURATION_MS; + return !!isTestResource && !!isStaleResource; }; -const testRoleStalenessFilter = (resource: aws.IAM.Role): boolean => { - const isTestResource = resource.RoleName.match(IAM_TEST_REGEX); - const isStaleResource = Date.now() - resource.CreateDate.getMilliseconds() > STALE_DURATION_MS; - return isTestResource && isStaleResource; +const testRoleStalenessFilter = (resource: Role): boolean => { + const isTestResource = resource.RoleName?.match(IAM_TEST_REGEX); + const isStaleResource = resource.CreateDate && Date.now() - new Date(resource.CreateDate).getTime() > STALE_DURATION_MS; + return !!isTestResource && !!isStaleResource; }; -const testInstanceStalenessFilter = (resource: aws.RDS.DBInstance): boolean => { - const isTestResource = resource.DBInstanceIdentifier.match(RDS_TEST_REGEX); +const testInstanceStalenessFilter = (resource: DBInstance): boolean => { + const isTestResource = resource.DBInstanceIdentifier?.match(RDS_TEST_REGEX); const isStaleResource = - resource.DBInstanceStatus == 'available' && Date.now() - resource.InstanceCreateTime.getMilliseconds() > STALE_DURATION_MS; - return isTestResource && isStaleResource; + resource.DBInstanceStatus === 'available' && + resource.InstanceCreateTime && + Date.now() - new Date(resource.InstanceCreateTime).getTime() > STALE_DURATION_MS; + return !!isTestResource && !!isStaleResource; }; /** * Get all S3 buckets in the account, and filter down to the ones we consider stale. */ const getOrphanS3TestBuckets = async (account: AWSAccountInfo): Promise => { - const s3Client = new aws.S3(getAWSConfig(account)); - const listBucketResponse = await s3Client.listBuckets().promise(); + const s3Client = new S3Client(getAWSConfig(account)); + const listBucketResponse = await s3Client.send(new ListBucketsCommand({})); const staleBuckets = listBucketResponse.Buckets.filter(testBucketStalenessFilter); const bucketInfos = await Promise.all( @@ -149,8 +175,8 @@ const getOrphanS3TestBuckets = async (account: AWSAccountInfo): Promise => { - const iamClient = new aws.IAM(getAWSConfig(account)); - const listRoleResponse = await iamClient.listRoles({ MaxItems: 1000 }).promise(); + const iamClient = new IAMClient(getAWSConfig(account)); + const listRoleResponse = await iamClient.send(new ListRolesCommand({})); const staleRoles = listRoleResponse.Roles.filter(testRoleStalenessFilter); return staleRoles.map((it) => ({ name: it.RoleName })); }; @@ -160,8 +186,8 @@ const getOrphanTestIamRoles = async (account: AWSAccountInfo): Promise => { try { - const rdsClient = new aws.RDS(getAWSConfig(account, region)); - const listRdsInstanceResponse = await rdsClient.describeDBInstances().promise(); + const rdsClient = new RDSClient(getAWSConfig(account, region)); + const listRdsInstanceResponse = await rdsClient.send(new DescribeDBInstancesCommand({})); const staleInstances = listRdsInstanceResponse.DBInstances.filter(testInstanceStalenessFilter); return staleInstances.map((i) => ({ identifier: i.DBInstanceIdentifier, region })); } catch (e) { @@ -198,11 +224,12 @@ const getAWSConfig = ({ accessKeyId, secretAccessKey, sessionToken }: AWSAccount */ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise => { const config = getAWSConfig(account, region); - const amplifyClient = new aws.Amplify(config); + const amplifyClient = new AmplifyClient(config); const result: AmplifyAppInfo[] = []; let amplifyApps = { apps: [] }; try { - amplifyApps = await amplifyClient.listApps({ maxResults: 50 }).promise(); // keeping it to 50 as max supported is 50 + const listAppsCommand = new ListAppsCommand({ maxResults: 50 }); + amplifyApps = await amplifyClient.send(listAppsCommand); } catch (e) { if (e?.code === 'UnrecognizedClientException') { // Do not fail the cleanup and continue @@ -216,7 +243,8 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< for (const app of amplifyApps?.apps) { const backends: Record = {}; try { - const backendEnvironments = await amplifyClient.listBackendEnvironments({ appId: app.appId, maxResults: 50 }).promise(); + const listBackendEnvironments = new ListBackendEnvironmentsCommand({ appId: app.appId, maxResults: 50 }); + const backendEnvironments = await amplifyClient.send(listBackendEnvironments); for (const backendEnv of backendEnvironments.backendEnvironments) { const buildInfo = await getStackDetails(backendEnv.stackName, account, region); if (buildInfo) { @@ -241,7 +269,7 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< * @param tags Tags associated with the resource * @returns build number or undefined */ -const getJobId = (tags: aws.CloudFormation.Tags = []): string | undefined => { +const getJobId = (tags: CFNTag[] = []): string | undefined => { const jobId = tags.find((tag) => tag.Key === 'codebuild:build_id')?.Value; return jobId; }; @@ -257,14 +285,14 @@ const getJobId = (tags: aws.CloudFormation.Tags = []): string | undefined => { * @returns stack details */ const getStackDetails = async (stackName: string, account: AWSAccountInfo, region: string): Promise => { - const cfnClient = new aws.CloudFormation(getAWSConfig(account, region)); - const stack = await cfnClient.describeStacks({ StackName: stackName }).promise(); + const cfnClient = new CloudFormationClient(getAWSConfig(account, region)); + const stack = await cfnClient.send(new DescribeStacksCommand({ StackName: stackName })); const tags = stack.Stacks.length && stack.Stacks[0].Tags; const stackStatus = stack.Stacks[0].StackStatus; let resourcesFailedToDelete: string[] = []; if (stackStatus === 'DELETE_FAILED') { // TODO: We need to investigate if we should go ahead and remove the resources to prevent account getting cluttered - const resources = await cfnClient.listStackResources({ StackName: stackName }).promise(); + const resources = await cfnClient.send(new ListStackResourcesCommand({ StackName: stackName })); resourcesFailedToDelete = resources.StackResourceSummaries.filter((r) => r.ResourceStatus === 'DELETE_FAILED').map( (r) => r.LogicalResourceId, ); @@ -281,12 +309,12 @@ const getStackDetails = async (stackName: string, account: AWSAccountInfo, regio }; const getStacks = async (account: AWSAccountInfo, region: string): Promise => { - const cfnClient = new aws.CloudFormation(getAWSConfig(account, region)); + const cfnClient = new CloudFormationClient(getAWSConfig(account, region)); const results: StackInfo[] = []; let stacks; try { - stacks = await cfnClient - .listStacks({ + stacks = await cfnClient.send( + new ListStacksCommand({ StackStatusFilter: [ 'CREATE_COMPLETE', 'ROLLBACK_FAILED', @@ -298,8 +326,8 @@ const getStacks = async (account: AWSAccountInfo, region: string): Promise { - return new CodeBuild({ - apiVersion: '2016-10-06', - region: 'us-east-1', - }); +const getCodeBuildClient = (): CodeBuildClient => { + return new CodeBuildClient({ region: 'us-east-1' }); }; -const getJobCodeBuildDetails = async (jobIds: string[]): Promise => { +const getJobCodeBuildDetails = async (jobIds: string[]): Promise => { if (jobIds.length === 0) { return []; } const client = getCodeBuildClient(); try { - const { builds } = await client.batchGetBuilds({ ids: jobIds }).promise(); - return builds; + const { builds } = await client.send(new BatchGetBuildsCommand({ ids: jobIds })); + return builds || []; } catch (e) { console.log(e); + return []; } }; const getBucketRegion = async (account: AWSAccountInfo, bucketName: string): Promise => { const awsConfig = getAWSConfig(account); - const s3Client = new aws.S3(awsConfig); - const location = await s3Client.getBucketLocation({ Bucket: bucketName }).promise(); + const s3Client = new S3Client(awsConfig); + const location = await s3Client.send(new GetBucketLocationCommand({ Bucket: bucketName })); const region = location.LocationConstraint ?? 'us-east-1'; return region; }; const getS3Buckets = async (account: AWSAccountInfo): Promise => { const awsConfig = getAWSConfig(account); - const s3Client = new aws.S3(awsConfig); - const buckets = await s3Client.listBuckets().promise(); + const s3Client = new S3Client(awsConfig); + const buckets = await s3Client.send(new ListBucketsCommand({})); const result: S3BucketInfo[] = []; for (const bucket of buckets.Buckets) { let region: string | undefined; try { region = await getBucketRegion(account, bucket.Name); // Operations on buckets created in opt-in regions appear to require region-specific clients - const regionalizedClient = new aws.S3({ + const regionalizedClient = new S3Client({ region, ...(awsConfig as object), }); - const bucketDetails = await regionalizedClient.getBucketTagging({ Bucket: bucket.Name }).promise(); + const getBucketTaggingCommand = new GetBucketTaggingCommand({ Bucket: bucket.Name }); + const bucketDetails = await regionalizedClient.send(getBucketTaggingCommand); const jobId = getJobId(bucketDetails.TagSet); if (jobId) { result.push({ @@ -399,7 +426,7 @@ const getS3Buckets = async (account: AWSAccountInfo): Promise => /** * extract and moves CodeBuild job details */ -const extractCCIJobInfo = (record: S3BucketInfo | StackInfo | AmplifyAppInfo, buildInfos: Record): CBJobInfo => { +const extractCCIJobInfo = (record: S3BucketInfo | StackInfo | AmplifyAppInfo, buildInfos: Record): CBJobInfo => { const buildId = _.get(record, ['0', 'jobId']); return { buildBatchArn: _.get(buildInfos, [buildId, '0', 'buildBatchArn']), @@ -447,7 +474,7 @@ const mergeResourcesByCCIJob = async ( ...Object.keys(amplifyAppByJobId), ]).filter((jobId: string) => jobId !== UNKNOWN && jobId !== ORPHAN && jobId !== MULTI_JOB_APP); const buildInfos = await getJobCodeBuildDetails(codeBuildJobIds); - const buildInfosByJobId = _.groupBy(buildInfos, (build: CodeBuild.Build) => _.get(build, ['id'])); + const buildInfosByJobId = _.groupBy(buildInfos, (build: Build) => _.get(build, ['id'])); _.mergeWith( result, _.pickBy(amplifyAppByJobId, (__, key) => key !== MULTI_JOB_APP), @@ -518,9 +545,10 @@ const deleteAmplifyApps = async (account: AWSAccountInfo, accountIndex: number, const deleteAmplifyApp = async (account: AWSAccountInfo, accountIndex: number, app: AmplifyAppInfo): Promise => { const { name, appId, region } = app; console.log(`${generateAccountInfo(account, accountIndex)} Deleting App ${name}(${appId})`); - const amplifyClient = new aws.Amplify(getAWSConfig(account, region)); + const amplifyClient = new AmplifyClient(getAWSConfig(account, region)); try { - await amplifyClient.deleteApp({ appId }).promise(); + const deleteAppCommand = new DeleteAppCommand({ appId }); + await amplifyClient.send(deleteAppCommand); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting Amplify App ${appId} failed with the following error`, e); if (e.code === 'ExpiredTokenException') { @@ -544,10 +572,10 @@ const deleteIamRole = async (account: AWSAccountInfo, accountIndex: number, role const { name: roleName } = role; try { console.log(`${generateAccountInfo(account, accountIndex)} Deleting Iam Role ${roleName}`); - const iamClient = new aws.IAM(getAWSConfig(account)); + const iamClient = new IAMClient(getAWSConfig(account)); await deleteAttachedRolePolicies(account, accountIndex, roleName); await deleteRolePolicies(account, accountIndex, roleName); - await iamClient.deleteRole({ RoleName: roleName }).promise(); + await iamClient.send(new DeleteRoleCommand({ RoleName: roleName })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role ${roleName} failed with error ${e.message}`); if (e.code === 'ExpiredTokenException') { @@ -557,8 +585,8 @@ const deleteIamRole = async (account: AWSAccountInfo, accountIndex: number, role }; const deleteAttachedRolePolicies = async (account: AWSAccountInfo, accountIndex: number, roleName: string): Promise => { - const iamClient = new aws.IAM(getAWSConfig(account)); - const rolePolicies = await iamClient.listAttachedRolePolicies({ RoleName: roleName }).promise(); + const iamClient = new IAMClient(getAWSConfig(account)); + const rolePolicies = await iamClient.send(new ListAttachedRolePoliciesCommand({ RoleName: roleName })); await Promise.all(rolePolicies.AttachedPolicies.map((policy) => detachIamAttachedRolePolicy(account, accountIndex, roleName, policy))); }; @@ -566,12 +594,12 @@ const detachIamAttachedRolePolicy = async ( account: AWSAccountInfo, accountIndex: number, roleName: string, - policy: aws.IAM.AttachedPolicy, + policy: AttachedPolicy, ): Promise => { try { console.log(`${generateAccountInfo(account, accountIndex)} Detach Iam Attached Role Policy ${policy.PolicyName}`); - const iamClient = new aws.IAM(getAWSConfig(account)); - await iamClient.detachRolePolicy({ RoleName: roleName, PolicyArn: policy.PolicyArn }).promise(); + const iamClient = new IAMClient(getAWSConfig(account)); + await iamClient.send(new DetachRolePolicyCommand({ RoleName: roleName, PolicyArn: policy.PolicyArn })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Detach iam role policy ${policy.PolicyName} failed with error ${e.message}`); if (e.code === 'ExpiredTokenException') { @@ -581,16 +609,16 @@ const detachIamAttachedRolePolicy = async ( }; const deleteRolePolicies = async (account: AWSAccountInfo, accountIndex: number, roleName: string): Promise => { - const iamClient = new aws.IAM(getAWSConfig(account)); - const rolePolicies = await iamClient.listRolePolicies({ RoleName: roleName }).promise(); + const iamClient = new IAMClient(getAWSConfig(account)); + const rolePolicies = await iamClient.send(new ListRolePoliciesCommand({ RoleName: roleName })); await Promise.all(rolePolicies.PolicyNames.map((policy) => deleteIamRolePolicy(account, accountIndex, roleName, policy))); }; const deleteIamRolePolicy = async (account: AWSAccountInfo, accountIndex: number, roleName: string, policyName: string): Promise => { try { console.log(`${generateAccountInfo(account, accountIndex)} Deleting Iam Role Policy ${policyName}`); - const iamClient = new aws.IAM(getAWSConfig(account)); - await iamClient.deleteRolePolicy({ RoleName: roleName, PolicyName: policyName }).promise(); + const iamClient = new IAMClient(getAWSConfig(account)); + await iamClient.send(new DeleteRolePolicyCommand({ RoleName: roleName, PolicyName: policyName })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role policy ${policyName} failed with error ${e.message}`); if (e.code === 'ExpiredTokenException') { @@ -608,7 +636,7 @@ const deleteBucket = async (account: AWSAccountInfo, accountIndex: number, bucke try { console.log(`${generateAccountInfo(account, accountIndex)} Deleting S3 Bucket ${name}`); const awsConfig = getAWSConfig(account); - const regionalizedS3Client = new aws.S3({ + const regionalizedS3Client = new S3Client({ region: bucket.region, ...(awsConfig as object), }); @@ -629,8 +657,8 @@ const deleteRdsInstance = async (account: AWSAccountInfo, accountIndex: number, const { identifier, region } = instance; console.log(`${generateAccountInfo(account, accountIndex)} Deleting RDS instance ${identifier}`); try { - const rdsClient = new aws.RDS(getAWSConfig(account, region)); - await rdsClient.deleteDBInstance({ DBInstanceIdentifier: identifier, SkipFinalSnapshot: true }).promise(); + const rdsClient = new RDSClient(getAWSConfig(account, region)); + await rdsClient.send(new DeleteDBInstanceCommand({ DBInstanceIdentifier: identifier, SkipFinalSnapshot: true })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting instance ${identifier} failed with error ${e.message}`); if (e.code === 'ExpiredTokenException') { @@ -645,12 +673,12 @@ const deleteCfnStacks = async (account: AWSAccountInfo, accountIndex: number, st const deleteCfnStack = async (account: AWSAccountInfo, accountIndex: number, stack: StackInfo): Promise => { const { stackName, region, resourcesFailedToDelete } = stack; - const resourceToRetain = resourcesFailedToDelete.length ? resourcesFailedToDelete : undefined; + const resourceToRetain = resourcesFailedToDelete && resourcesFailedToDelete.length ? resourcesFailedToDelete : undefined; console.log(`${generateAccountInfo(account, accountIndex)} Deleting CloudFormation stack ${stackName}`); try { - const cfnClient = new aws.CloudFormation(getAWSConfig(account, region)); - await cfnClient.deleteStack({ StackName: stackName, RetainResources: resourceToRetain }).promise(); - await cfnClient.waitFor('stackDeleteComplete', { StackName: stackName }).promise(); + const cfnClient = new CloudFormationClient(getAWSConfig(account, region)); + await cfnClient.send(new DeleteStackCommand({ StackName: stackName, RetainResources: resourceToRetain })); + await waitUntilStackDeleteComplete({ client: cfnClient, maxWaitTime: 600 }, { StackName: stackName }); } catch (e) { console.log(`Deleting CloudFormation stack ${stackName} failed with error ${e.message}`); if (e.code === 'ExpiredTokenException') { @@ -724,36 +752,27 @@ const getFilterPredicate = (args: any): JobFilterPredicate => { * to get all accounts within the root account organization. */ const getAccountsToCleanup = async (): Promise => { - // This script runs using the codebuild project role to begin with - const stsClient = new aws.STS({ - apiVersion: '2011-06-15', - }); - const assumeRoleResForE2EParent = await stsClient - .assumeRole({ + const stsClient = new STSClient({}); + const assumeRoleResForE2EParent = await stsClient.send( + new AssumeRoleCommand({ RoleArn: process.env.TEST_ACCOUNT_ROLE, RoleSessionName: `testSession${Math.floor(Math.random() * 100000)}`, - // One hour DurationSeconds: 1 * 60 * 60, - }) - .promise(); + }), + ); const e2eParentAccountCred = { accessKeyId: assumeRoleResForE2EParent.Credentials.AccessKeyId, secretAccessKey: assumeRoleResForE2EParent.Credentials.SecretAccessKey, sessionToken: assumeRoleResForE2EParent.Credentials.SessionToken, }; - const stsClientForE2E = new aws.STS({ - apiVersion: '2011-06-15', - credentials: e2eParentAccountCred, - }); - const parentAccountIdentity = await stsClientForE2E.getCallerIdentity().promise(); - const orgApi = new aws.Organizations({ - apiVersion: '2016-11-28', - // the region where the organization exists + const stsClientForE2E = new STSClient({ credentials: e2eParentAccountCred }); + const parentAccountIdentity = await stsClientForE2E.send(new GetCallerIdentityCommand({})); + const orgApi = new OrganizationsClient({ region: 'us-east-1', credentials: e2eParentAccountCred, }); try { - const orgAccounts = await orgApi.listAccounts().promise(); + const orgAccounts = await orgApi.send(new ListAccountsCommand({})); const accountCredentialPromises = orgAccounts.Accounts.map(async (account) => { if (account.Id === parentAccountIdentity.Account) { return { @@ -762,14 +781,13 @@ const getAccountsToCleanup = async (): Promise => { }; } const randomNumber = Math.floor(Math.random() * 100000); - const assumeRoleRes = await stsClientForE2E - .assumeRole({ + const assumeRoleRes = await stsClientForE2E.send( + new AssumeRoleCommand({ RoleArn: `arn:aws:iam::${account.Id}:role/OrganizationAccountAccessRole`, RoleSessionName: `testSession${randomNumber}`, - // One hour DurationSeconds: 1 * 60 * 60, - }) - .promise(); + }), + ); return { accountId: account.Id, accessKeyId: assumeRoleRes.Credentials.AccessKeyId, diff --git a/yarn.lock b/yarn.lock index 6498818ce5..b9856e5aa4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -848,6 +848,51 @@ dependencies: tslib "^1.8.0" +"@aws-sdk/client-amplify@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-amplify/-/client-amplify-3.816.0.tgz#a2f4ae71c714afc41893218c04259779597913ac" + integrity sha512-eYejDPCYrDrq5xQk+5KXurkrtC35tT9qR59pJDpkHRiY9rnUmyBZpf6d3A9HVdk2WnyK/aQVNaVNh5GVL5Bz1w== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-appsync@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/client-appsync/-/client-appsync-3.624.0.tgz#09692296458b5572074a593d42baa30712151a39" @@ -1184,6 +1229,54 @@ tslib "^2.6.2" uuid "^9.0.1" +"@aws-sdk/client-cloudformation@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudformation/-/client-cloudformation-3.816.0.tgz#73b99b57ac57f9b5015f1a1e8efa6f9760165592" + integrity sha512-1xXyNjU9h+QozDsLba+kUqO9nusvmlwbXNyplgPixFfbGCcKji+HethuQj43Ur2Cp/INIOim32d3r6hPSNfWwQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.3" + "@types/uuid" "^9.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + "@aws-sdk/client-cloudwatch-logs@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.6.1.tgz#5e8dba495a2ba9a901b0a1a2d53edef8bd452398" @@ -1367,6 +1460,51 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-codebuild@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-codebuild/-/client-codebuild-3.816.0.tgz#9fa2253d37de993563bf0d12a1d87d95849f0622" + integrity sha512-0aqVo7VY6/oisXy1e4/rKMlI7BLRcSZLLubLgUjk6d2Wn0kn2NQJjyo48z+21hUnT1HUwTCXSPwXUgPYJu9ZUQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-cognito-identity-provider@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.624.0.tgz#2113f44296454ec1f10f3fcea6fe43a596a7828d" @@ -2099,6 +2237,52 @@ "@smithy/util-waiter" "^4.0.3" tslib "^2.6.2" +"@aws-sdk/client-iam@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.816.0.tgz#44036961cae90a2e9b253c4d5b906eed6fc5d234" + integrity sha512-sWcRbBMoJdlHi2NgP6MoFh/bbY0lyTFqcrg2DxP7E1okLR8191pcZ11wXrGTXgDgmWoyZGBydahdMpNoHeV3xg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.3" + tslib "^2.6.2" + "@aws-sdk/client-kinesis@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.6.1.tgz#48583cc854f9108bc8ff6168005d9a05b24bae31" @@ -2509,6 +2693,51 @@ "@aws-sdk/util-utf8-node" "3.186.0" tslib "^2.3.1" +"@aws-sdk/client-organizations@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-organizations/-/client-organizations-3.816.0.tgz#30adc0536594e2fc8e5f446142ba7fcb8a948141" + integrity sha512-aFkGAYWBaiTwyiuaFwtstE6NK29OYdVJMEsOVM/0ye/t6NonAxMbOt8IH85j00+KUmQRw4yDMqwScUXLLYdbfg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-personalize-events@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.6.1.tgz#86942bb64108cfc2f6c31a8b54aab6fa7f7be00f" @@ -2716,6 +2945,53 @@ "@smithy/util-waiter" "^3.1.2" tslib "^2.6.2" +"@aws-sdk/client-rds@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-rds/-/client-rds-3.816.0.tgz#b7c811c39684ef9e341e11a913b397e2e48fc92b" + integrity sha512-hzuTpdQmgT1G9WoCFxOFnvuKA8Ara5GFtVgnTVdnpM2d3zOiBQAYLJqSbKQlhlyPyTSNTjouMjnMSzbdyy8lCQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-sdk-rds" "3.810.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.3" + tslib "^2.6.2" + "@aws-sdk/client-rekognition@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-rekognition/-/client-rekognition-3.6.1.tgz#710ba6d4509a2caa417cf0702ba81b5b65aa73eb" @@ -3899,6 +4175,51 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-sts@^3.812.0": + version "3.816.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.816.0.tgz#dbe617c43e91abcf2a0edb0632c0ffa1ee4d43cc" + integrity sha512-GzzUgdvl3bHIipuvbHBKkrs7Wl7RVyz35Kp+9rLu3jBtf/y5DjiykazLnhkWwcYAG1ecJjy6tXGnq7AXwBNMwA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.816.0" + "@aws-sdk/credential-provider-node" "3.816.0" + "@aws-sdk/middleware-host-header" "3.804.0" + "@aws-sdk/middleware-logger" "3.804.0" + "@aws-sdk/middleware-recursion-detection" "3.804.0" + "@aws-sdk/middleware-user-agent" "3.816.0" + "@aws-sdk/region-config-resolver" "3.808.0" + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-endpoints" "3.808.0" + "@aws-sdk/util-user-agent-browser" "3.804.0" + "@aws-sdk/util-user-agent-node" "3.816.0" + "@smithy/config-resolver" "^4.1.2" + "@smithy/core" "^3.3.3" + "@smithy/fetch-http-handler" "^5.0.2" + "@smithy/hash-node" "^4.0.2" + "@smithy/invalid-dependency" "^4.0.2" + "@smithy/middleware-content-length" "^4.0.2" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/middleware-retry" "^4.1.7" + "@smithy/middleware-serde" "^4.0.5" + "@smithy/middleware-stack" "^4.0.2" + "@smithy/node-config-provider" "^4.1.1" + "@smithy/node-http-handler" "^4.0.4" + "@smithy/protocol-http" "^5.1.0" + "@smithy/smithy-client" "^4.2.6" + "@smithy/types" "^4.2.0" + "@smithy/url-parser" "^4.0.2" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.14" + "@smithy/util-defaults-mode-node" "^4.0.14" + "@smithy/util-endpoints" "^3.0.4" + "@smithy/util-middleware" "^4.0.2" + "@smithy/util-retry" "^4.0.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-textract@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.6.1.tgz#b8972f53f0353222b4c052adc784291e602be6aa" @@ -5446,6 +5767,19 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" +"@aws-sdk/middleware-sdk-rds@3.810.0": + version "3.810.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-rds/-/middleware-sdk-rds-3.810.0.tgz#ed745f5217cc9c39d073af8297b87016fba12719" + integrity sha512-HAg8BCtLtmXIZS2/lAuWDXxhTI7yzI2jd+4kMi7wSjhgOSQQGsZenO7cqK9SqJHvSCyk0xOV4bcGeIDn3F5N/g== + dependencies: + "@aws-sdk/types" "3.804.0" + "@aws-sdk/util-format-url" "3.804.0" + "@smithy/middleware-endpoint" "^4.1.6" + "@smithy/protocol-http" "^5.1.0" + "@smithy/signature-v4" "^5.1.0" + "@smithy/types" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/middleware-sdk-route53@3.804.0": version "3.804.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-route53/-/middleware-sdk-route53-3.804.0.tgz#6f50430387c96a34122b8be256728f209ee135c0" From c3f78be489c6d5e0680ec269537aaaabc37165ba Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Wed, 11 Jun 2025 16:27:40 -0500 Subject: [PATCH 05/37] migrated sdk-calls.ts --- packages/amplify-e2e-core/package.json | 9 +- .../amplify-e2e-core/src/utils/sdk-calls.ts | 305 +++-- yarn.lock | 1181 +++++++++++++++++ 3 files changed, 1373 insertions(+), 122 deletions(-) diff --git a/packages/amplify-e2e-core/package.json b/packages/amplify-e2e-core/package.json index 8bdf01eec5..1fd5c35aff 100644 --- a/packages/amplify-e2e-core/package.json +++ b/packages/amplify-e2e-core/package.json @@ -22,14 +22,21 @@ "clean": "rimraf ./lib" }, "dependencies": { + "@aws-sdk/client-amplifybackend": "3.828.0", + "@aws-sdk/client-appsync": "3.827.0", + "@aws-sdk/client-cloudformation": "3.828.0", + "@aws-sdk/client-cognito-identity-provider": "3.826.0", "@aws-sdk/client-ec2": "3.624.0", + "@aws-sdk/client-iam": "3.828.0", "@aws-sdk/client-kms": "3.624.0", + "@aws-sdk/client-lambda": "3.828.0", "@aws-sdk/client-rds": "3.624.0", "@aws-sdk/client-rds-data": "3.624.0", "@aws-sdk/client-secrets-manager": "3.624.0", "@aws-sdk/client-ssm": "3.624.0", "@aws-sdk/client-sts": "3.624.0", "@aws-sdk/credential-providers": "3.624.0", + "@aws-sdk/lib-dynamodb": "3.826.0", "amplify-headless-interface": "^1.17.7", "axios": "^1.6.0", "chalk": "^4.1.1", @@ -58,4 +65,4 @@ "peerDependencies": { "@aws-amplify/amplify-cli-core": "^4.4.0" } -} +} \ No newline at end of file diff --git a/packages/amplify-e2e-core/src/utils/sdk-calls.ts b/packages/amplify-e2e-core/src/utils/sdk-calls.ts index 7d4c2e8e1f..658cb9776f 100644 --- a/packages/amplify-e2e-core/src/utils/sdk-calls.ts +++ b/packages/amplify-e2e-core/src/utils/sdk-calls.ts @@ -1,32 +1,80 @@ -import { config, DynamoDB, S3, CognitoIdentityServiceProvider, Lambda, AppSync, CloudFormation, AmplifyBackend, IAM } from 'aws-sdk'; +/* eslint-disable import/no-extraneous-dependencies */ +import { + AmplifyBackendClient, + CreateBackendConfigCommand, + CreateBackendConfigCommandOutput, + GetBackendJobCommand, + GetBackendJobCommandOutput, +} from '@aws-sdk/client-amplifybackend'; +import { + AppSyncClient, + GetGraphqlApiCommand, + GetGraphqlApiCommandOutput, + ListFunctionsCommand, + ListFunctionsCommandOutput, +} from '@aws-sdk/client-appsync'; +import { CloudFormationClient, DescribeStacksCommand, DescribeStackResourcesCommand, Stack } from '@aws-sdk/client-cloudformation'; +import { + CognitoIdentityProviderClient, + DescribeUserPoolCommand, + DescribeUserPoolClientCommand, + DescribeUserPoolCommandOutput, + DescribeUserPoolClientCommandOutput, +} from '@aws-sdk/client-cognito-identity-provider'; +import { + DynamoDBClient, + DescribeTableCommand, + DescribeTableCommandOutput, + ListTagsOfResourceCommand, + ListTagsOfResourceCommandOutput, +} from '@aws-sdk/client-dynamodb'; +import { AttachedPolicy, IAMClient, ListRolePoliciesCommand, ListAttachedRolePoliciesCommand } from '@aws-sdk/client-iam'; +import { LambdaClient, GetFunctionCommand, GetFunctionCommandOutput } from '@aws-sdk/client-lambda'; +import { + S3Client, + DeleteBucketCommand, + DeleteObjectsCommand, + GetBucketCorsCommand, + HeadBucketCommand, + HeadBucketCommandOutput, + ListObjectVersionsCommand, + ObjectIdentifier, + waitUntilBucketNotExists, +} from '@aws-sdk/client-s3'; +import { DynamoDBDocumentClient, PutCommand, PutCommandOutput, ScanCommand, ScanCommandOutput } from '@aws-sdk/lib-dynamodb'; import _ from 'lodash'; -export const getDDBTable = async (tableName: string, region: string) => { - const service = new DynamoDB({ region }); +export const getDDBTable = async (tableName: string, region: string): Promise => { + const client = new DynamoDBClient({ region }); if (tableName) { - return await service.describeTable({ TableName: tableName }).promise(); + return await client.send(new DescribeTableCommand({ TableName: tableName })); } + return undefined; }; -export const getDDBTableTags = async (tableName: string, region: string) => { - const service = new DynamoDB({ region }); - return await service.listTagsOfResource({ ResourceArn: tableName }).promise(); +export const getDDBTableTags = async (tableName: string, region: string): Promise => { + const client = new DynamoDBClient({ region }); + return await client.send(new ListTagsOfResourceCommand({ ResourceArn: tableName })); }; -export const checkIfBucketExists = async (bucketName: string, region: string) => { - const service = new S3({ region }); - return await service.headBucket({ Bucket: bucketName }).promise(); +export const checkIfBucketExists = async (bucketName: string, region: string): Promise => { + const client = new S3Client({ region }); + return await client.send(new HeadBucketCommand({ Bucket: bucketName })); }; -export const bucketNotExists = async (bucket: string) => { - const s3 = new S3(); - const params = { - Bucket: bucket, - $waiter: { maxAttempts: 10, delay: 30 }, - }; +export const bucketNotExists = async (bucket: string): Promise => { + const s3 = new S3Client(); try { - await s3.waitFor('bucketNotExists', params).promise(); - return true; + const result = await waitUntilBucketNotExists( + { + client: s3, + maxWaitTime: 300, + }, + { + Bucket: bucket, + }, + ); + return result.state === 'SUCCESS'; } catch (error) { if (error.statusCode === 200) { return false; @@ -35,125 +83,144 @@ export const bucketNotExists = async (bucket: string) => { } }; -export const deleteS3Bucket = async (bucket: string, providedS3Client: S3 | undefined = undefined) => { - const s3 = providedS3Client ? providedS3Client : new S3(); - let continuationToken: Required> = undefined; - const objectKeyAndVersion = []; +export const deleteS3Bucket = async (bucket: string, providedS3Client?: S3Client): Promise => { + const s3 = providedS3Client ?? new S3Client({}); + + let continuationToken: { + KeyMarker?: string; + VersionIdMarker?: string; + } = {}; + + const objectKeyAndVersion: ObjectIdentifier[] = []; let truncated = false; + do { - const results = await s3 - .listObjectVersions({ + const results = await s3.send( + new ListObjectVersionsCommand({ Bucket: bucket, ...continuationToken, - }) - .promise(); + }), + ); results.Versions?.forEach(({ Key, VersionId }) => { - objectKeyAndVersion.push({ Key, VersionId }); + if (Key && VersionId) objectKeyAndVersion.push({ Key, VersionId }); }); results.DeleteMarkers?.forEach(({ Key, VersionId }) => { - objectKeyAndVersion.push({ Key, VersionId }); + if (Key && VersionId) objectKeyAndVersion.push({ Key, VersionId }); }); - continuationToken = { KeyMarker: results.NextKeyMarker, VersionIdMarker: results.NextVersionIdMarker }; - truncated = results.IsTruncated; + continuationToken = { + KeyMarker: results.NextKeyMarker, + VersionIdMarker: results.NextVersionIdMarker, + }; + + truncated = !!results.IsTruncated; } while (truncated); - const chunkedResult = _.chunk(objectKeyAndVersion, 1000); - const deleteReq = chunkedResult - .map((r) => { - return { - Bucket: bucket, - Delete: { - Objects: r, - Quiet: true, - }, - }; - }) - .map((delParams) => s3.deleteObjects(delParams).promise()); - await Promise.all(deleteReq); - await s3 - .deleteBucket({ - Bucket: bucket, - }) - .promise(); + + const chunkedDeletes = _.chunk(objectKeyAndVersion, 1000); + + await Promise.all( + chunkedDeletes.map((chunk) => + s3.send( + new DeleteObjectsCommand({ + Bucket: bucket, + Delete: { + Objects: chunk, + Quiet: true, + }, + }), + ), + ), + ); + + await s3.send(new DeleteBucketCommand({ Bucket: bucket })); await bucketNotExists(bucket); }; -export const getUserPool = async (userpoolId, region) => { - config.update({ region }); - let res; +export const getUserPool = async (userPoolId: string, region: string): Promise => { + const client = new CognitoIdentityProviderClient({ region }); try { - res = await new CognitoIdentityServiceProvider().describeUserPool({ UserPoolId: userpoolId }).promise(); + const res = await client.send(new DescribeUserPoolCommand({ UserPoolId: userPoolId })); + return res; } catch (e) { - console.log(e); + console.error(e); + return undefined; } - return res; }; -export const getLambdaFunction = async (functionName: string, region: string) => { - const lambda = new Lambda({ region }); +export const getLambdaFunction = async (functionName: string, region: string): Promise => { + const client = new LambdaClient({ region }); try { - return await lambda.getFunction({ FunctionName: functionName }).promise(); + return await client.send(new GetFunctionCommand({ FunctionName: functionName })); } catch (e) { console.log(e); } + return undefined; }; -export const getUserPoolClients = async (userPoolId: string, clientIds: string[], region: string) => { - const provider = new CognitoIdentityServiceProvider({ region }); - const res = []; - try { - for (let i = 0; i < clientIds.length; i++) { - const clientData = await provider - .describeUserPoolClient({ +export const getUserPoolClients = async ( + userPoolId: string, + clientIds: string[], + region: string, +): Promise => { + const client = new CognitoIdentityProviderClient({ region }); + const res = [] as DescribeUserPoolClientCommandOutput[]; + + for (const clientId of clientIds) { + try { + const result = await client.send( + new DescribeUserPoolClientCommand({ UserPoolId: userPoolId, - ClientId: clientIds[i], - }) - .promise(); - res.push(clientData); + ClientId: clientId, + }), + ); + res.push(result); + } catch (e) { + console.error(`Failed to fetch client ${clientId}:`, e); } - } catch (e) { - console.log(e); } + return res; }; -export const getTable = async (tableName: string, region: string) => { - const service = new DynamoDB({ region }); - return await service.describeTable({ TableName: tableName }).promise(); +export const getTable = async (tableName: string, region: string): Promise => { + return getDDBTable(tableName, region)!; }; -export const putItemInTable = async (tableName: string, region: string, item: unknown) => { - const ddb = new DynamoDB.DocumentClient({ region }); - return await ddb.put({ TableName: tableName, Item: item }).promise(); +export const putItemInTable = async (tableName: string, region: string, item: unknown): Promise => { + const client = new DynamoDBClient({ region }); + const ddb = DynamoDBDocumentClient.from(client); + + return await ddb.send(new PutCommand({ TableName: tableName, Item: item })); }; -export const scanTable = async (tableName: string, region: string) => { - const ddb = new DynamoDB.DocumentClient({ region }); - return await ddb.scan({ TableName: tableName }).promise(); +export const scanTable = async (tableName: string, region: string): Promise => { + const client = new DynamoDBClient({ region }); + const ddb = DynamoDBDocumentClient.from(client); + + return await ddb.send(new ScanCommand({ TableName: tableName })); }; -export const getAppSyncApi = async (appSyncApiId: string, region: string) => { - const service = new AppSync({ region }); - return await service.getGraphqlApi({ apiId: appSyncApiId }).promise(); +export const getAppSyncApi = async (appSyncApiId: string, region: string): Promise => { + const client = new AppSyncClient({ region }); + return await client.send(new GetGraphqlApiCommand({ apiId: appSyncApiId })); }; -export const listAppSyncFunctions = async (appSyncApiId: string, region: string) => { - const service = new AppSync({ region }); - return await service.listFunctions({ apiId: appSyncApiId }).promise(); +export const listAppSyncFunctions = async (appSyncApiId: string, region: string): Promise => { + const client = new AppSyncClient({ region }); + return await client.send(new ListFunctionsCommand({ apiId: appSyncApiId })); }; -export const describeCloudFormationStack = async (stackName: string, region: string, profileConfig?: any) => { - const service = profileConfig ? new CloudFormation({ ...profileConfig, region }) : new CloudFormation({ region }); - return (await service.describeStacks({ StackName: stackName }).promise()).Stacks.find( - (stack) => stack.StackName === stackName || stack.StackId === stackName, - ); +export const describeCloudFormationStack = async (stackName: string, region: string, profileConfig?: any): Promise => { + const client = profileConfig ? new CloudFormationClient({ ...profileConfig, region }) : new CloudFormationClient({ region }); + const stacksDescription = await client.send(new DescribeStacksCommand({ StackName: stackName })); + return stacksDescription.Stacks.find((stack) => stack.StackName === stackName || stack.StackId === stackName); }; export const getNestedStackID = async (stackName: string, region: string, logicalId: string): Promise => { - const cfnClient = new CloudFormation({ region }); - const resource = await cfnClient.describeStackResources({ StackName: stackName, LogicalResourceId: logicalId }).promise(); + const client = new CloudFormationClient({ region }); + const resource = await client.send(new DescribeStackResourcesCommand({ StackName: stackName, LogicalResourceId: logicalId })); return resource?.StackResources?.[0].PhysicalResourceId ?? null; }; @@ -166,15 +233,11 @@ export const getNestedStackID = async (stackName: string, region: string, logica */ export const getTableResourceId = async (region: string, table: string, StackId: string): Promise => { - const cfnClient = new CloudFormation({ region }); - const apiResources = await cfnClient - .describeStackResources({ - StackName: StackId, - }) - .promise(); + const client = new CloudFormationClient({ region }); + const apiResources = await client.send(new DescribeStackResourcesCommand({ StackName: StackId })); const resource = apiResources.StackResources.find((stackResource) => table === stackResource.LogicalResourceId); if (resource) { - const tableStack = await cfnClient.describeStacks({ StackName: resource.PhysicalResourceId }).promise(); + const tableStack = await client.send(new DescribeStacksCommand({ StackName: resource.PhysicalResourceId })); if (tableStack?.Stacks?.length > 0) { const tableName = tableStack.Stacks[0].Outputs.find((out) => out.OutputKey === `GetAtt${resource.LogicalResourceId}TableName`); return tableName.OutputValue; @@ -183,32 +246,35 @@ export const getTableResourceId = async (region: string, table: string, StackId: return null; }; -export const setupAmplifyAdminUI = async (appId: string, region: string) => { - const amplifyBackend = new AmplifyBackend({ region }); - - return await amplifyBackend.createBackendConfig({ AppId: appId }).promise(); +export const setupAmplifyAdminUI = async (appId: string, region: string): Promise => { + const client = new AmplifyBackendClient({ region }); + return await client.send(new CreateBackendConfigCommand({ AppId: appId })); }; -export const getAmplifyBackendJobStatus = async (jobId: string, appId: string, envName: string, region: string) => { - const amplifyBackend = new AmplifyBackend({ region }); - - return await amplifyBackend - .getBackendJob({ +export const getAmplifyBackendJobStatus = async ( + jobId: string, + appId: string, + envName: string, + region: string, +): Promise => { + const client = new AmplifyBackendClient({ region }); + return await client.send( + new GetBackendJobCommand({ JobId: jobId, AppId: appId, BackendEnvironmentName: envName, - }) - .promise(); + }), + ); }; -export const listRolePolicies = async (roleName: string, region: string) => { - const service = new IAM({ region }); - return (await service.listRolePolicies({ RoleName: roleName }).promise()).PolicyNames; +export const listRolePolicies = async (roleName: string, region: string): Promise => { + const client = new IAMClient({ region }); + return (await client.send(new ListRolePoliciesCommand({ RoleName: roleName }))).PolicyNames; }; -export const listAttachedRolePolicies = async (roleName: string, region: string) => { - const service = new IAM({ region }); - return (await service.listAttachedRolePolicies({ RoleName: roleName }).promise()).AttachedPolicies; +export const listAttachedRolePolicies = async (roleName: string, region: string): Promise => { + const client = new IAMClient({ region }); + return (await client.send(new ListAttachedRolePoliciesCommand({ RoleName: roleName }))).AttachedPolicies; }; export const getBucketNameFromModelSchemaS3Uri = (uri: string | null): string | null => { @@ -233,10 +299,7 @@ export const getBucketNameFromModelSchemaS3Uri = (uri: string | null): string | }; export const getBucketCorsPolicy = async (bucketName: string, region: string): Promise[]> => { - const service = new S3({ region }); - const params = { - Bucket: bucketName, - }; - const corsPolicy = await service.getBucketCors(params).promise(); + const client = new S3Client({ region }); + const corsPolicy = await client.send(new GetBucketCorsCommand({ Bucket: bucketName })); return corsPolicy.CORSRules; }; diff --git a/yarn.lock b/yarn.lock index b9856e5aa4..fdb014f8e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -893,6 +893,51 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-amplifybackend@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-amplifybackend/-/client-amplifybackend-3.828.0.tgz#6e5c1b065abaa664565e585b11a9802cb5b95918" + integrity sha512-b19UkRBoFe4Uo1SwdiX+fuaMskVdLXJt8FUDN1IPIvAKMG7vd/eBsEL+BP0wqx+QgWrC2/LOTeSzaMrMMZyxHg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.828.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-appsync@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/client-appsync/-/client-appsync-3.624.0.tgz#09692296458b5572074a593d42baa30712151a39" @@ -941,6 +986,52 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/client-appsync@3.827.0": + version "3.827.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-appsync/-/client-appsync-3.827.0.tgz#8d847b70db2e61b83648caf79095ccd3f2bfeb13" + integrity sha512-R5jMfJL2WCWQqWmeKCE+rtSHuF6Uw1rrUKGMa8DhAGrJawuLMuISiNTgNbmskov+Zpympm4guRi3tjhmlMVeDg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.826.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.821.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.826.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-appsync@^3": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/client-appsync/-/client-appsync-3.810.0.tgz#dad1bc71a65d6de7666a19eecb91b64395407c23" @@ -1181,6 +1272,54 @@ tslib "^2.6.2" uuid "^9.0.1" +"@aws-sdk/client-cloudformation@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudformation/-/client-cloudformation-3.828.0.tgz#86b97b6297578b4fbc9bcf294dfab53d226684e6" + integrity sha512-OvMLQt0/Yn6uiqIdVQR6iZu5FCXoYvAtURZM4igXpFjjfSNtAdEPt/Hh0oxZDsKJSiFOczEORDhqb5AnhWp3Ew== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.828.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.5" + "@types/uuid" "^9.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + "@aws-sdk/client-cloudformation@^3": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.810.0.tgz#c03490711ebe49ed5b221a0b0440ce37b9300a9e" @@ -1552,6 +1691,51 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/client-cognito-identity-provider@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.826.0.tgz#f5c7cf5d04d7a827a5fe3debca30ca12d6a25461" + integrity sha512-WaJw8uxm85IrNYqQUbV5NSO2M+iBDkknZe3MGXRjOaNg0YAzS8qUoApRO40x2G6da2RG0qRzIwS943ntA1sPrQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.826.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.821.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.826.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-cognito-identity@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.6.1.tgz#36992a4fef7eff1f2b1dbee30850e30ebdfc15bb" @@ -2191,6 +2375,52 @@ "@smithy/util-waiter" "^3.1.2" tslib "^2.6.2" +"@aws-sdk/client-iam@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.828.0.tgz#8cf704f1b9370fe6b7bce9750fe9668972fd9c21" + integrity sha512-fuWJ/YzlMKWNtID48Y91h/l84kGocqgSWDOuIeT/k8oJO4XqiO/PA72HHvUVOSUXRjyUyW06sYCe1tFLZ4Vhqw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.828.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.5" + tslib "^2.6.2" + "@aws-sdk/client-iam@^3": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/client-iam/-/client-iam-3.810.0.tgz#0e5101354ff05323b7ecfa22ace30804345960a5" @@ -2468,6 +2698,56 @@ "@smithy/util-waiter" "^3.1.2" tslib "^2.6.2" +"@aws-sdk/client-lambda@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.828.0.tgz#99b2522c450bd1f6e654bc14ccc88f1602fa4203" + integrity sha512-iAOTfVUWz4ZeFoADr599PLmArM0xI25mzGeCbYugSErrVnlGs86Od17sOjitypGNOoSOcOTxBHTSV0+OsOFnsg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.828.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/eventstream-serde-browser" "^4.0.4" + "@smithy/eventstream-serde-config-resolver" "^4.1.2" + "@smithy/eventstream-serde-node" "^4.0.4" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.5" + tslib "^2.6.2" + "@aws-sdk/client-lambda@^3": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.810.0.tgz#fb64bb660a89702b6f34aff7f5bd3e560baca533" @@ -3997,6 +4277,94 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-sso@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.826.0.tgz#8e0aeb3d830c2cf54ecf43d6052ae9bfd75b276b" + integrity sha512-/FEKnUC3xPkLL4RuRydwzx+y4b55HIX6qLPbGnyIs+sNmCUyc/62ijtV1Ml+b++YzEF6jWNBsJOxeyZdgrJ3Ig== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.826.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.821.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.826.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.828.0.tgz#ad37249c8424d4250b5cb4f9452a5bbdb9f3199b" + integrity sha512-qxw8JcPTaFaBwTBUr4YmLajaMh3En65SuBWAKEtjctbITRRekzR7tvr/TkwoyVOh+XoAtkwOn+BQeQbX+/wgHw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sts@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.186.0.tgz#12514601b0b01f892ddb11d8a2ab4bee1b03cbf1" @@ -4397,6 +4765,27 @@ fast-xml-parser "4.4.1" tslib "^2.6.2" +"@aws-sdk/core@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.826.0.tgz#da55a524e09775b2a97e4b5d12a3137dd68547fa" + integrity sha512-BGbQYzWj3ps+dblq33FY5tz/SsgJCcXX0zjQlSC07tYvU1jHTUvsefphyig+fY38xZ4wdKjbTop+KUmXUYrOXw== + dependencies: + "@aws-sdk/types" "3.821.0" + "@aws-sdk/xml-builder" "3.821.0" + "@smithy/core" "^3.5.3" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/property-provider" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-utf8" "^4.0.0" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-cognito-identity@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.6.1.tgz#df928951612a34832c2df15fb899251d828c2df3" @@ -4490,6 +4879,17 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-env@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.826.0.tgz#213d08a1324a2970a2785151bcb6975b2f88716c" + integrity sha512-DK3pQY8+iKK3MGDdC3uOZQ2psU01obaKlTYhEwNu4VWzgwQL4Vi3sWj4xSWGEK41vqZxiRLq6fOq7ysRI+qEZA== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-http@3.622.0": version "3.622.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz#db481fdef859849d07dd5870894f45df2debab3d" @@ -4568,6 +4968,22 @@ "@smithy/util-stream" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-http@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.826.0.tgz#507591b684b3ed8d24cfa179995c1f93efc914cc" + integrity sha512-N+IVZBh+yx/9GbMZTKO/gErBi/FYZQtcFRItoLbY+6WU+0cSWyZYfkoeOxHmQV3iX9k65oljERIWUmL9x6OSQg== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/util-stream" "^4.2.2" + tslib "^2.6.2" + "@aws-sdk/credential-provider-imds@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz#73e0f62832726c7734b4f6c50a02ab0d869c00e1" @@ -4703,6 +5119,44 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-ini@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.826.0.tgz#806bb1287d88e75b1c1679308f555dfaf313fee3" + integrity sha512-g7n+qSklq/Lzjxe2Ke5QFNCgYn26a3ydZnbFIk8QqYin4pzG+qiunaqJjpV3c/EeHMlfK8bBc7MXAylKzGRccQ== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-env" "3.826.0" + "@aws-sdk/credential-provider-http" "3.826.0" + "@aws-sdk/credential-provider-process" "3.826.0" + "@aws-sdk/credential-provider-sso" "3.826.0" + "@aws-sdk/credential-provider-web-identity" "3.826.0" + "@aws-sdk/nested-clients" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.828.0.tgz#1947ecd69161fe0f174ceacfd682aa6493478b55" + integrity sha512-T3DJMo2/j7gCPpFg2+xEHWgua05t8WP89ye7PaZxA2Fc6CgScHkZsJZTri1QQIU2h+eOZ75EZWkeFLIPgN0kRQ== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-env" "3.826.0" + "@aws-sdk/credential-provider-http" "3.826.0" + "@aws-sdk/credential-provider-process" "3.826.0" + "@aws-sdk/credential-provider-sso" "3.828.0" + "@aws-sdk/credential-provider-web-identity" "3.828.0" + "@aws-sdk/nested-clients" "3.828.0" + "@aws-sdk/types" "3.821.0" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz#0be58623660b41eed3a349a89b31a01d4cc773ea" @@ -4823,6 +5277,42 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-node@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.826.0.tgz#eab3b67bb0b99ee47b87174dd84b1cc7ceaffb3d" + integrity sha512-UfIJXxHjmSxH6bea00HBPLkjNI2D04enQA/xNLZvB+4xtzt1/gYdCis1P4/73f5aGVVVB4/zQMobBbnjkrmbQw== + dependencies: + "@aws-sdk/credential-provider-env" "3.826.0" + "@aws-sdk/credential-provider-http" "3.826.0" + "@aws-sdk/credential-provider-ini" "3.826.0" + "@aws-sdk/credential-provider-process" "3.826.0" + "@aws-sdk/credential-provider-sso" "3.826.0" + "@aws-sdk/credential-provider-web-identity" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.828.0.tgz#aa5757f00481534617b83115a2be582b08887ff0" + integrity sha512-9z3iPwVYOQYNzVZj8qycZaS/BOSKRXWA+QVNQlfEnQ4sA4sOcKR4kmV2h+rJcuBsSFfmOF62ZDxyIBGvvM4t/w== + dependencies: + "@aws-sdk/credential-provider-env" "3.826.0" + "@aws-sdk/credential-provider-http" "3.826.0" + "@aws-sdk/credential-provider-ini" "3.828.0" + "@aws-sdk/credential-provider-process" "3.826.0" + "@aws-sdk/credential-provider-sso" "3.828.0" + "@aws-sdk/credential-provider-web-identity" "3.828.0" + "@aws-sdk/types" "3.821.0" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz#e3be60983261a58c212f5c38b6fb76305bbb8ce7" @@ -4891,6 +5381,18 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-process@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.826.0.tgz#3b7e54994cf04c8ba20a90caf4f79af9f1335ea4" + integrity sha512-kURrc4amu3NLtw1yZw7EoLNEVhmOMRUTs+chaNcmS+ERm3yK0nKjaJzmKahmwlTQTSl3wJ8jjK7x962VPo+zWw== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-sso@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.186.0.tgz#e1aa466543b3b0877d45b885a1c11b329232df22" @@ -4970,6 +5472,34 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-sso@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.826.0.tgz#1daab189052eff0b7bfed934a0be19a89912d894" + integrity sha512-F19J3zcfoom6OnQ0MyAtvduVKQXPgkz9i5ExSO01J2CzjbyMhCDA99qAjHYe+LwhW+W7P/jzBPd0+uOQ2Nhh9Q== + dependencies: + "@aws-sdk/client-sso" "3.826.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/token-providers" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.828.0.tgz#32105dd1fb67423c691fa7c24ba317dd7271e73f" + integrity sha512-9CEAXzUDSzOjOCb3XfM15TZhTaM+l07kumZyx2z8NC6T2U4qbCJqn4h8mFlRvYrs6cBj2SN40sD3r5Wp0Cq2Kw== + dependencies: + "@aws-sdk/client-sso" "3.828.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/token-providers" "3.828.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.186.0.tgz#db43f37f7827b553490dd865dbaa9a2c45f95494" @@ -5025,6 +5555,30 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-web-identity@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.826.0.tgz#0c02845b2af3eb22bc3ef795b2edf17892021cb2" + integrity sha512-o27GZ6Hy7qhuvMFVUL2eFEpBzf33Jaa/x3u3SHwU0nL7ko7jmbpeF0x4+wmagpI9X2IvVlUxIs0VaQ3YayPLEA== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/nested-clients" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.828.0.tgz#b14085bd47284be79c05149f44b8151111d2ec0f" + integrity sha512-MguDhGHlQBeK9CQ/P4NOY0whAJ4HJU4x+f1dphg3I1sGlccFqfB8Moor2vXNKu0Th2kvAwkn9pr7gGb/+NGR9g== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/nested-clients" "3.828.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-providers@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.624.0.tgz#d6e23e3a535ae74c6a7138e693aa002c42680d7f" @@ -5306,6 +5860,18 @@ dependencies: tslib "^1.8.0" +"@aws-sdk/lib-dynamodb@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.826.0.tgz#73f1dc01c85af63f87fdd9c7e1e04fffe8dded6d" + integrity sha512-KFHccreS1XY8geyz4plsH+DR5SXEh2jVe3+bguHPjE1XIyz6k02IUXjlpWlaL14kkAVmQ27XNrGHnnpshrbIag== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/util-dynamodb" "3.826.0" + "@smithy/core" "^3.5.3" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/lib-storage@^3": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.810.0.tgz#bb0bba03e5121a206ffc60230a3fd5643d2e1cbf" @@ -5594,6 +6160,16 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-host-header@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.821.0.tgz#1dfda8da4e0f9499648dab9a989d10706e289cc7" + integrity sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/middleware-location-constraint@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.6.1.tgz#6fc2dd6a42968f011eb060ca564e9f749649eb01" @@ -5663,6 +6239,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-logger@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.821.0.tgz#87067907a25cdc6c155d3a35fe32e399c1ef87e6" + integrity sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/middleware-recursion-detection@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.186.0.tgz#9d9d3212e9a954b557840bb80415987f4484487e" @@ -5702,6 +6287,16 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-recursion-detection@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.821.0.tgz#bc34b08efc1e1af7b14a58023a79bfb75a0b64fa" + integrity sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/middleware-retry@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz#0ff9af58d73855863683991a809b40b93c753ad1" @@ -6028,6 +6623,32 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-user-agent@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.826.0.tgz#715ef8f7207eeb0c66b5dd31f72e8a1bdc18c994" + integrity sha512-j404+EcfBbtTlAhyObjXbdKwwDXO1pCxHvR5Fw8FXNvp/H330j6YnXgs3SJ6d3bZUwUJ/ztPx2S5AlBbLVLDFw== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.821.0" + "@smithy/core" "^3.5.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.828.0.tgz#195ed26c87727fb5f78f9bce5d6ab947f1273dcd" + integrity sha512-nixvI/SETXRdmrVab4D9LvXT3lrXkwAWGWk2GVvQvzlqN1/M/RfClj+o37Sn4FqRkGH9o9g7Fqb1YqZ4mqDAtA== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@smithy/core" "^3.5.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/nested-clients@3.777.0", "@aws-sdk/nested-clients@^3.777.0": version "3.777.0" resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.777.0.tgz#e3b72bdebe4b60364ff82aff6c272aa163404196" @@ -6160,6 +6781,94 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/nested-clients@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.826.0.tgz#ef7eaf6546dc7f04187f74a297f6f6d57eb9d8cc" + integrity sha512-p7olPq0uTtHqGuXI1GSc/gzKDvV55PMbLtnmupEDfnY9SoRu+QatbWQ6da9sI1lhOcNmRMgiNQBXFzaUFrG+SQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.826.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.821.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.826.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.828.0.tgz#2af1c0e8c3f108472d544f0fb174c92b308e8eca" + integrity sha512-xmeOILiR9LvfC8MctgeRXXN8nQTwbOvO4wHvgE8tDRsjnBpyyO0j50R4+viHXdMUGtgGkHEXRv8fFNBq54RgnA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/node-config-provider@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz#64259429d39f2ef5a76663162bf2e8db6032a322" @@ -6304,6 +7013,18 @@ "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" +"@aws-sdk/region-config-resolver@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.821.0.tgz#2f1cd54ca140cbdc821a604d8b20444f9b0b77cf" + integrity sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + tslib "^2.6.2" + "@aws-sdk/s3-request-presigner@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.6.1.tgz#ec83c70171692862a7f7ebbd151242a5af443695" @@ -6467,6 +7188,32 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/token-providers@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.826.0.tgz#c6901e2d92e11b6c9cdc395b7dab3eb68200cbec" + integrity sha512-iCOcVAqGPSHtQL8ZBXifZMEcHyUl9wJ8HvLZ5l1ohA/3ZNP+dqEPGi7jfhR5jZKs+xyp2jxByFqfil9PjI9c5A== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/nested-clients" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.828.0.tgz#423f00ffc68a7f96ade2792acec4eddaa52a5f53" + integrity sha512-JdOjI/TxkfQpY/bWbdGMdCiePESXTbtl6MfnJxz35zZ3tfHvBnxAWCoYJirdmjzY/j/dFo5oEyS6mQuXAG9w2w== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/nested-clients" "3.828.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/types@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz#f6fb6997b6a364f399288bfd5cd494bc680ac922" @@ -6501,6 +7248,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/types@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.821.0.tgz#edfd4595208e4e9f24f397fbc8cb82e3ec336649" + integrity sha512-Znroqdai1a90TlxGaJ+FK1lwC0fHpo97Xjsp5UKGR5JODYm7f9+/fF17ebO1KdoBr/Rm0UIFiF5VmI8ts9F1eA== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/types@^1.0.0-alpha.0": version "1.0.0-rc.10" resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-1.0.0-rc.10.tgz#729127fbfac5da1a3368ffe6ec2e90acc9ad69c3" @@ -6668,6 +7423,13 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/util-dynamodb@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-dynamodb/-/util-dynamodb-3.826.0.tgz#4fd82cf8dbe17c98be8d9fd8b31b3182d61b8b40" + integrity sha512-4zsbpJ9wEnDDvCTrhPCc/iLkn8Bf0+ux4iK39b4cX11sSPVtwTUnpnGHyilApKWaxBKwNIJHicwskwORxqR2mw== + dependencies: + tslib "^2.6.2" + "@aws-sdk/util-endpoints@3.614.0": version "3.614.0" resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" @@ -6708,6 +7470,26 @@ "@smithy/util-endpoints" "^3.0.4" tslib "^2.6.2" +"@aws-sdk/util-endpoints@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.821.0.tgz#8883370bc3218e532fb9b7358e23369dc0a77201" + integrity sha512-Uknt/zUZnLE76zaAAPEayOeF5/4IZ2puTFXvcSCWHsi9m3tqbb9UozlnlVqvCZLCRWfQryZQoG2W4XSS3qgk5A== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/types" "^4.3.1" + "@smithy/util-endpoints" "^3.0.6" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.828.0.tgz#a02f9c99d9749123fabad38d3b6cd51f4c8489db" + integrity sha512-RvKch111SblqdkPzg3oCIdlGxlQs+k+P7Etory9FmxPHyPDvsP1j1c74PmgYqtzzMWmoXTjd+c9naUHh9xG8xg== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/types" "^4.3.1" + "@smithy/util-endpoints" "^3.0.6" + tslib "^2.6.2" + "@aws-sdk/util-format-url@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.6.1.tgz#a011444aed0c47698d65095bcce95d7b4716324b" @@ -6835,6 +7617,16 @@ bowser "^2.11.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-browser@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.821.0.tgz#32962fd3ae20986da128944b88a231508e017f5b" + integrity sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/types" "^4.3.1" + bowser "^2.11.0" + tslib "^2.6.2" + "@aws-sdk/util-user-agent-node@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz#1ef74973442c8650c7b64ff2fd15cf3c09d8c004" @@ -6896,6 +7688,28 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-node@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.826.0.tgz#dab7b0865545db4a0f60e3b89a51ce2e8ce8b12b" + integrity sha512-wHw6bZQWIMcFF/8r03aY9Itp6JLBYY4absGGhCDK1dc3tPEfi8NVSdb05a/Oz+g4TVaDdxLo0OQ/OKMS1DFRHQ== + dependencies: + "@aws-sdk/middleware-user-agent" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.828.0.tgz#f47192429a9407a43c94d7e980c32f330bba4cad" + integrity sha512-LdN6fTBzTlQmc8O8f1wiZN0qF3yBWVGis7NwpWK7FUEzP9bEZRxYfIkV9oV9zpt6iNRze1SedK3JQVB/udxBoA== + dependencies: + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/types" "3.821.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/util-utf8-browser@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz#5fee6385cfc3effa2be704edc2998abfd6633082" @@ -6972,6 +7786,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/xml-builder@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz#ff89bf1276fca41276ed508b9c8ae21978d91177" + integrity sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@babel/cli@^7.10.5": version "7.27.0" resolved "https://registry.npmjs.org/@babel/cli/-/cli-7.27.0.tgz#076603b25fc7dd88298ea94ab249c8237c7e71cc" @@ -9444,6 +10266,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/abort-controller@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.0.4.tgz#ab991d521fc78b5c7f24907fcd6803c0f2da51d9" + integrity sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/chunked-blob-reader-native@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz#33cbba6deb8a3c516f98444f65061784f7cd7f8c" @@ -9492,6 +10322,17 @@ "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" +"@smithy/config-resolver@^4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.1.4.tgz#05d8eab8bb8eb73bec90c222fc19ac5608b1384e" + integrity sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w== + dependencies: + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + tslib "^2.6.2" + "@smithy/core@^2.3.2", "@smithy/core@^2.4.0", "@smithy/core@^2.5.7": version "2.5.7" resolved "https://registry.npmjs.org/@smithy/core/-/core-2.5.7.tgz#b545649071905f064cb0407102f3b9159246f8d9" @@ -9534,6 +10375,21 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@smithy/core@^3.5.3": + version "3.5.3" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.5.3.tgz#39969839e7cfd656be38fed09951d1691525f8d5" + integrity sha512-xa5byV9fEguZNofCclv6v9ra0FYh5FATQW/da7FQUVTic94DfrN/NvmKZjrMyzbpqfot9ZjBaO8U1UeTbmSLuA== + dependencies: + "@smithy/middleware-serde" "^4.0.8" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/credential-provider-imds@^3.2.0", "@smithy/credential-provider-imds@^3.2.8": version "3.2.8" resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de" @@ -9567,6 +10423,17 @@ "@smithy/url-parser" "^4.0.2" tslib "^2.6.2" +"@smithy/credential-provider-imds@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz#4cfd79a619cdbc9a75fcdc51a1193685f6a8944e" + integrity sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw== + dependencies: + "@smithy/node-config-provider" "^4.1.3" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + tslib "^2.6.2" + "@smithy/eventstream-codec@^3.1.10", "@smithy/eventstream-codec@^3.1.2": version "3.1.10" resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz#0c1a3457e7a23b71cd71525ceb668f8569a84dad" @@ -9587,6 +10454,16 @@ "@smithy/util-hex-encoding" "^4.0.0" tslib "^2.6.2" +"@smithy/eventstream-codec@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz#35abc26d6829cc61a0d14950857ccc5320bf92d2" + integrity sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^4.3.1" + "@smithy/util-hex-encoding" "^4.0.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-browser@^3.0.5", "@smithy/eventstream-serde-browser@^3.0.6": version "3.0.14" resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz#0c3584c7cde2e210aacdfbbd2b57c1d7e2ca3b95" @@ -9605,6 +10482,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/eventstream-serde-browser@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz#0c57cf0b66862106100a796751003733ce3f5273" + integrity sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/eventstream-serde-config-resolver@^3.0.3": version "3.0.11" resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz#5edceba836debea165ea93145231036f6286d67c" @@ -9621,6 +10507,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/eventstream-serde-config-resolver@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz#4d41c1ecad1a9b1c694f32865a2f0d4b5bc0162d" + integrity sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/eventstream-serde-node@^3.0.4", "@smithy/eventstream-serde-node@^3.0.5": version "3.0.13" resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz#5aebd7b553becee277e411a2b69f6af8c9d7b3a6" @@ -9639,6 +10533,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/eventstream-serde-node@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz#0fbd0ac288f02bf485eb307a14254ea8d8767746" + integrity sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/eventstream-serde-universal@^3.0.13", "@smithy/eventstream-serde-universal@^3.0.5": version "3.0.13" resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz#609c922ea14a0a3eed23a28ac110344c935704eb" @@ -9657,6 +10560,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/eventstream-serde-universal@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz#48b2b416dc0f576917c36373efaa4012f7310ab0" + integrity sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA== + dependencies: + "@smithy/eventstream-codec" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/fetch-http-handler@^3.2.4": version "3.2.9" resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz#8d5199c162a37caa37a8b6848eefa9ca58221a0b" @@ -9690,6 +10602,17 @@ "@smithy/util-base64" "^4.0.0" tslib "^2.6.2" +"@smithy/fetch-http-handler@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.4.tgz#c68601b4676787e049b5d464d5f4b825dbb44013" + integrity sha512-AMtBR5pHppYMVD7z7G+OlHHAcgAN7v0kVKEpHuTO4Gb199Gowh0taYi9oDStFeUhetkeP55JLSVlTW1n9rFtUw== + dependencies: + "@smithy/protocol-http" "^5.1.2" + "@smithy/querystring-builder" "^4.0.4" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + tslib "^2.6.2" + "@smithy/hash-blob-browser@^4.0.2": version "4.0.2" resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.2.tgz#c51abe21684803f6eb5e43c4870e2af9e232a5cd" @@ -9730,6 +10653,16 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@smithy/hash-node@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.0.4.tgz#f867cfe6b702ed8893aacd3e097f8ca8ecba579e" + integrity sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ== + dependencies: + "@smithy/types" "^4.3.1" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/hash-stream-node@^4.0.2": version "4.0.2" resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.2.tgz#c9ee7d85710121268b7b487a7259375c949a3289" @@ -9755,6 +10688,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/invalid-dependency@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz#8c2c539b2f22e857b4652bd2427a3d7a8befd610" + integrity sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/is-array-buffer@^1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz#29948072da2b57575aa9898cda863932e842ab11" @@ -9810,6 +10751,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/middleware-content-length@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz#fad1f125779daf8d5f261dae6dbebba0f60c234b" + integrity sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w== + dependencies: + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/middleware-endpoint@^3.1.0", "@smithy/middleware-endpoint@^3.2.8": version "3.2.8" resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.8.tgz#6ca5de80543ba0f0d40e15dc3f9d0f14d192e06e" @@ -9838,6 +10788,20 @@ "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" +"@smithy/middleware-endpoint@^4.1.11": + version "4.1.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.11.tgz#bf23781c55cc3768c5d0f8866d2428bbce786bb4" + integrity sha512-zDogwtRLzKl58lVS8wPcARevFZNBOOqnmzWWxVe9XiaXU2CADFjvJ9XfNibgkOWs08sxLuSr81NrpY4mgp9OwQ== + dependencies: + "@smithy/core" "^3.5.3" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-middleware" "^4.0.4" + tslib "^2.6.2" + "@smithy/middleware-endpoint@^4.1.6": version "4.1.6" resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.6.tgz#faf26365fd570f7545a261f7cc256113dd3c740c" @@ -9882,6 +10846,21 @@ tslib "^2.6.2" uuid "^9.0.1" +"@smithy/middleware-retry@^4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.1.12.tgz#4d0b60bba95201539c99911c0a36f9275d973802" + integrity sha512-wvIH70c4e91NtRxdaLZF+mbLZ/HcC6yg7ySKUiufL6ESp6zJUSnJucZ309AvG9nqCFHSRB5I6T3Ez1Q9wCh0Ww== + dependencies: + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/service-error-classification" "^4.0.5" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + tslib "^2.6.2" + uuid "^9.0.1" + "@smithy/middleware-retry@^4.1.7": version "4.1.7" resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.7.tgz#7be9dd7f6737ef8d2f475c4d7b154bca2d4babf4" @@ -9922,6 +10901,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/middleware-serde@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz#3704c8cc46acd0a7f910a78ee1d2f23ce928701f" + integrity sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw== + dependencies: + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/middleware-stack@^3.0.11", "@smithy/middleware-stack@^3.0.3": version "3.0.11" resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc" @@ -9938,6 +10926,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/middleware-stack@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz#58e0c6a0d7678c6ad4d6af8dd9a00f749ffac7c5" + integrity sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/node-config-provider@^3.1.12", "@smithy/node-config-provider@^3.1.4": version "3.1.12" resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c" @@ -9968,6 +10964,16 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/node-config-provider@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz#6626fe26c6fe7b0df34f71cb72764ccba414a815" + integrity sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw== + dependencies: + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/node-http-handler@^3.1.4", "@smithy/node-http-handler@^3.3.3": version "3.3.3" resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz#94dbb3f15342b656ceba2b26e14aa741cace8919" @@ -9990,6 +10996,17 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/node-http-handler@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz#a022da499ba3af4b6b4c815104fde973c0eccc40" + integrity sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA== + dependencies: + "@smithy/abort-controller" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/querystring-builder" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/property-provider@^3.1.11", "@smithy/property-provider@^3.1.3": version "3.1.11" resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad" @@ -10006,6 +11023,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/property-provider@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.0.4.tgz#303a8fd99665fff61eeb6ec3922eee53838962c5" + integrity sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/protocol-http@^4.1.0", "@smithy/protocol-http@^4.1.4", "@smithy/protocol-http@^4.1.8": version "4.1.8" resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" @@ -10022,6 +11047,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/protocol-http@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.1.2.tgz#8094860c2407f250b80c95899e0385112d6eb98b" + integrity sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/querystring-builder@^3.0.11", "@smithy/querystring-builder@^3.0.3", "@smithy/querystring-builder@^3.0.7": version "3.0.11" resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909" @@ -10040,6 +11073,15 @@ "@smithy/util-uri-escape" "^4.0.0" tslib "^2.6.2" +"@smithy/querystring-builder@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz#f7546efd59d457b3d2525a330c6137e5f907864c" + integrity sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w== + dependencies: + "@smithy/types" "^4.3.1" + "@smithy/util-uri-escape" "^4.0.0" + tslib "^2.6.2" + "@smithy/querystring-parser@^3.0.11", "@smithy/querystring-parser@^3.0.3": version "3.0.11" resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969" @@ -10056,6 +11098,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/querystring-parser@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz#307ab95ee5f1a142ab46c2eddebeae68cb2f703d" + integrity sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/service-error-classification@^3.0.11", "@smithy/service-error-classification@^3.0.3": version "3.0.11" resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a" @@ -10077,6 +11127,13 @@ dependencies: "@smithy/types" "^4.2.0" +"@smithy/service-error-classification@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.5.tgz#cd912cdd0510de9369db6a4d34dc36f36de54a59" + integrity sha512-LvcfhrnCBvCmTee81pRlh1F39yTS/+kYleVeLCwNtkY8wtGg8V/ca9rbZZvYIl8OjlMtL6KIjaiL/lgVqHD2nA== + dependencies: + "@smithy/types" "^4.3.1" + "@smithy/shared-ini-file-loader@^3.1.12", "@smithy/shared-ini-file-loader@^3.1.4": version "3.1.12" resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a" @@ -10093,6 +11150,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/shared-ini-file-loader@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz#33c63468b95cfd5e7d642c8131d7acc034025e00" + integrity sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/signature-v4@^4.1.0": version "4.2.4" resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d" @@ -10135,6 +11200,20 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@smithy/signature-v4@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.1.2.tgz#5afd9d428bd26bb660bee8075b6e89fe93600c22" + integrity sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-uri-escape" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/smithy-client@^3.1.12", "@smithy/smithy-client@^3.2.0", "@smithy/smithy-client@^3.7.0": version "3.7.0" resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.7.0.tgz#8cfaa7b68b7af15e588b96aa14e5dce393f85839" @@ -10174,6 +11253,19 @@ "@smithy/util-stream" "^4.2.0" tslib "^2.6.2" +"@smithy/smithy-client@^4.4.3": + version "4.4.3" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.4.3.tgz#37499b5bdec39d9a738f3ac1566a49bcb5cad255" + integrity sha512-xxzNYgA0HD6ETCe5QJubsxP0hQH3QK3kbpJz3QrosBCuIWyEXLR/CO5hFb2OeawEKUxMNhz3a1nuJNN2np2RMA== + dependencies: + "@smithy/core" "^3.5.3" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-stream" "^4.2.2" + tslib "^2.6.2" + "@smithy/types@^1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz#9dc65767b0ee3d6681704fcc67665d6fc9b6a34e" @@ -10195,6 +11287,13 @@ dependencies: tslib "^2.6.2" +"@smithy/types@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.3.1.tgz#c11276ea16235d798f47a68aef9f44d3dbb70dd4" + integrity sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA== + dependencies: + tslib "^2.6.2" + "@smithy/url-parser@^3.0.11", "@smithy/url-parser@^3.0.3": version "3.0.11" resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d" @@ -10213,6 +11312,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/url-parser@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.0.4.tgz#049143f4c156356e177bd69242675db26fe4f4db" + integrity sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ== + dependencies: + "@smithy/querystring-parser" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/util-base64@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" @@ -10327,6 +11435,17 @@ bowser "^2.11.0" tslib "^2.6.2" +"@smithy/util-defaults-mode-browser@^4.0.19": + version "4.0.19" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.19.tgz#4deaa41201458d353166ab05ffa465b30898d671" + integrity sha512-mvLMh87xSmQrV5XqnUYEPoiFFeEGYeAKIDDKdhE2ahqitm8OHM3aSvhqL6rrK6wm1brIk90JhxDf5lf2hbrLbQ== + dependencies: + "@smithy/property-provider" "^4.0.4" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + bowser "^2.11.0" + tslib "^2.6.2" + "@smithy/util-defaults-mode-browser@^4.0.8": version "4.0.8" resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz#77bc4590cdc928901b80f3482e79607a2cbcb150" @@ -10364,6 +11483,19 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/util-defaults-mode-node@^4.0.19": + version "4.0.19" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.19.tgz#4150b5c807ca90cac7e40a5d29f2e30e3cdb1f34" + integrity sha512-8tYnx+LUfj6m+zkUUIrIQJxPM1xVxfRBvoGHua7R/i6qAxOMjqR6CpEpDwKoIs1o0+hOjGvkKE23CafKL0vJ9w== + dependencies: + "@smithy/config-resolver" "^4.1.4" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/property-provider" "^4.0.4" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/util-defaults-mode-node@^4.0.8": version "4.0.8" resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz#123b517efe6434977139b341d1f64b5f1e743aac" @@ -10404,6 +11536,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/util-endpoints@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz#a24b0801a1b94c0de26ad83da206b9add68117f2" + integrity sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA== + dependencies: + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/util-hex-encoding@^1.0.1": version "1.1.0" resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz#b5ba919aa076a3fd5e93e368e34ae2b732fa2090" @@ -10441,6 +11582,14 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/util-middleware@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.0.4.tgz#8f639de049082c687841ea5e69c6c36e12e31a3c" + integrity sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/util-retry@^3.0.11", "@smithy/util-retry@^3.0.3": version "3.0.11" resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425" @@ -10468,6 +11617,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/util-retry@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.5.tgz#58eea5bb1869745dac28a3f81a5904f225ec1207" + integrity sha512-V7MSjVDTlEt/plmOFBn1762Dyu5uqMrV2Pl2X0dYk4XvWfdWJNe9Bs5Bzb56wkCuiWjSfClVMGcsuKrGj7S/yg== + dependencies: + "@smithy/service-error-classification" "^4.0.5" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/util-stream@^3.1.3", "@smithy/util-stream@^3.3.4": version "3.3.4" resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.4.tgz#c506ac41310ebcceb0c3f0ba20755e4fe0a90b8d" @@ -10496,6 +11654,20 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@smithy/util-stream@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.2.2.tgz#beeb1edf690db9b7d7983f46ca4fb66e22253608" + integrity sha512-aI+GLi7MJoVxg24/3J1ipwLoYzgkB4kUfogZfnslcYlynj3xsQ0e7vk4TnTro9hhsS5PvX1mwmkRqqHQjwcU7w== + dependencies: + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/util-uri-escape@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" @@ -10560,6 +11732,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/util-waiter@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.0.5.tgz#cc7c65c86f5f8330445e27f9cc47d42c53c69bb7" + integrity sha512-4QvC49HTteI1gfemu0I1syWovJgPvGn7CVUoN9ZFkdvr/cCFkrEL7qNCdx/2eICqDWEGnnr68oMdSIPCLAriSQ== + dependencies: + "@smithy/abort-controller" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" From 18e32680c8eda02624ea127726693971b10a880d Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 13 Jun 2025 16:31:26 -0500 Subject: [PATCH 06/37] more sdk migrations --- packages/amplify-e2e-tests/package.json | 3 +- .../src/aws-matchers/iamMatcher.ts | 38 ++++-- .../src/aws-matchers/s3matcher.ts | 13 +- .../src/import-helpers/utilities.ts | 62 ++++++--- .../tests/predictions-usage.ts | 32 +++-- yarn.lock | 126 ++++++++++++++++++ 6 files changed, 225 insertions(+), 49 deletions(-) diff --git a/packages/amplify-e2e-tests/package.json b/packages/amplify-e2e-tests/package.json index 9ffd631f9a..e399e0164f 100644 --- a/packages/amplify-e2e-tests/package.json +++ b/packages/amplify-e2e-tests/package.json @@ -29,6 +29,8 @@ "@aws-amplify/graphql-transformer-core": "3.4.3", "@aws-sdk/client-appsync": "^3.812.0", "@aws-sdk/credential-provider-node": "^3.812.0", + "@aws-sdk/credential-providers": "3.828.0", + "@aws-sdk/client-cognito-identity-provider": "^3.812.0", "@aws-sdk/client-dynamodb": "^3.812.0", "@aws-sdk/client-ssm": "^3.812.0", "@aws-sdk/client-s3": "^3.812.0", @@ -42,7 +44,6 @@ "amplify-category-api-e2e-core": "5.0.8", "aws-amplify": "^4.2.8", "aws-appsync": "^4.1.1", - "aws-sdk": "^2.1113.0", "axios": "^1.6.0", "circleci-api": "^4.1.4", "dotenv": "^8.2.0", diff --git a/packages/amplify-e2e-tests/src/aws-matchers/iamMatcher.ts b/packages/amplify-e2e-tests/src/aws-matchers/iamMatcher.ts index 7ef72730a6..9cb678f6d7 100644 --- a/packages/amplify-e2e-tests/src/aws-matchers/iamMatcher.ts +++ b/packages/amplify-e2e-tests/src/aws-matchers/iamMatcher.ts @@ -1,11 +1,17 @@ -import { IAM } from 'aws-sdk'; +import { IAMClient, GetRoleCommand } from '@aws-sdk/client-iam'; -export const toBeIAMRoleWithArn = async (roleName: string, arn?: string) => { - const iam = new IAM(); +export const toBeIAMRoleWithArn = async ( + roleName: string, + arn?: string, +): Promise<{ + message: () => string; + pass: boolean; +}> => { + const iam = new IAMClient(); let pass: boolean; let message: string; try { - const { Role: role } = await iam.getRole({ RoleName: roleName }).promise(); + const { Role: role } = await iam.send(new GetRoleCommand({ RoleName: roleName })); if (arn) { pass = role.Arn === arn; if (pass) { @@ -28,18 +34,26 @@ export const toBeIAMRoleWithArn = async (roleName: string, arn?: string) => { return result; }; -export const toHaveValidPolicyConditionMatchingIdpId = async (roleName: string, idpId: string) => { - let pass: boolean = false; - let message: string = ''; +export const toHaveValidPolicyConditionMatchingIdpId = async ( + roleName: string, + idpId: string, +): Promise<{ + message: () => string; + pass: boolean; +}> => { + let pass = false; + let message = ''; try { - const iam = new IAM({ - accessKeyId: process.env.AWS_ACCESS_KEY_ID, - secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, - sessionToken: process.env.AWS_SESSION_TOKEN, + const iam = new IAMClient({ + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + sessionToken: process.env.AWS_SESSION_TOKEN, + }, }); - const { Role: role } = await iam.getRole({ RoleName: roleName }).promise(); + const { Role: role } = await iam.send(new GetRoleCommand({ RoleName: roleName })); const assumeRolePolicyDocument = JSON.parse(decodeURIComponent(role.AssumeRolePolicyDocument)); pass = assumeRolePolicyDocument.Statement.some((statement) => { diff --git a/packages/amplify-e2e-tests/src/aws-matchers/s3matcher.ts b/packages/amplify-e2e-tests/src/aws-matchers/s3matcher.ts index b007f43c47..f0b8ad0d7e 100644 --- a/packages/amplify-e2e-tests/src/aws-matchers/s3matcher.ts +++ b/packages/amplify-e2e-tests/src/aws-matchers/s3matcher.ts @@ -1,10 +1,15 @@ -import { S3 } from 'aws-sdk'; +import { S3Client, HeadBucketCommand } from '@aws-sdk/client-s3'; -export const toBeAS3Bucket = async (bucketName: string) => { - const s3 = new S3(); +export const toBeAS3Bucket = async ( + bucketName: string, +): Promise<{ + message: () => string; + pass: boolean; +}> => { + const s3 = new S3Client(); let pass: boolean; try { - await s3.headBucket({ Bucket: bucketName }).promise(); + await s3.send(new HeadBucketCommand({ Bucket: bucketName })); pass = true; } catch (e) { pass = false; diff --git a/packages/amplify-e2e-tests/src/import-helpers/utilities.ts b/packages/amplify-e2e-tests/src/import-helpers/utilities.ts index af359bd7c9..6a4c298448 100644 --- a/packages/amplify-e2e-tests/src/import-helpers/utilities.ts +++ b/packages/amplify-e2e-tests/src/import-helpers/utilities.ts @@ -1,5 +1,13 @@ import * as path from 'path'; import { JSONUtilities } from '@aws-amplify/amplify-cli-core'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { + CognitoIdentityProviderClient, + CreateUserPoolClientCommand, + DeleteUserPoolClientCommand, +} from '@aws-sdk/client-cognito-identity-provider'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { fromIni } from '@aws-sdk/credential-providers'; import { addAuthIdentityPoolAndUserPoolWithOAuth, addAuthUserPoolOnlyWithOAuth, @@ -8,11 +16,12 @@ import { getProjectMeta, getTeamProviderInfo, } from 'amplify-category-api-e2e-core'; -import * as aws from 'aws-sdk'; import * as fs from 'fs-extra'; import _ from 'lodash'; import { v4 as uuid } from 'uuid'; import { AppClientSettings, DynamoDBProjectDetails } from './types'; + +// eslint-disable-next-line import/no-cycle import { AuthProjectDetails, createIDPAndUserPoolWithOAuthSettings, createUserPoolOnlyWithOAuthSettings, StorageProjectDetails } from '.'; export const getShortId = (): string => { @@ -286,30 +295,44 @@ const addAppClient = async ( clientName: string, generateSecret: boolean, settings: AppClientSettings, -) => { +): Promise<{ + appClientId: string; + appclientSecret: string; +}> => { const projectDetails = getProjectMeta(projectRoot); const authDetails = getAuthProjectDetails(projectRoot); - const creds = new aws.SharedIniFileCredentials({ profile: profileName }); - aws.config.credentials = creds; - const cognitoClient = new aws.CognitoIdentityServiceProvider({ region: projectDetails.providers.awscloudformation.Region }); - const response = await cognitoClient - .createUserPoolClient({ + const region = projectDetails.providers.awscloudformation.Region; + const client = new CognitoIdentityProviderClient({ + region, + credentials: fromIni({ profile: profileName }), + }); + + const response = await client.send( + new CreateUserPoolClientCommand({ ClientName: clientName, UserPoolId: authDetails.meta.UserPoolId, GenerateSecret: generateSecret, - AllowedOAuthFlows: settings.allowedOAuthFlows, + AllowedOAuthFlows: settings.allowedOAuthFlows as any, CallbackURLs: settings.callbackURLs, LogoutURLs: settings.logoutURLs, AllowedOAuthScopes: settings.allowedScopes, SupportedIdentityProviders: settings.supportedIdentityProviders, AllowedOAuthFlowsUserPoolClient: settings.allowedOAuthFlowsUserPoolClient, - }) - .promise(); + }), + ); return { appClientId: response.UserPoolClient.ClientId, appclientSecret: response.UserPoolClient.ClientSecret }; }; -export const addAppClientWithSecret = async (profileName: string, projectRoot: string, clientName: string, settings: AppClientSettings) => { +export const addAppClientWithSecret = async ( + profileName: string, + projectRoot: string, + clientName: string, + settings: AppClientSettings, +): Promise<{ + appClientId: string; + appclientSecret: string; +}> => { return addAppClient(profileName, projectRoot, clientName, true, settings); }; @@ -318,18 +341,21 @@ export const addAppClientWithoutSecret = async ( projectRoot: string, clientName: string, settings: AppClientSettings, -) => { +): Promise<{ + appClientId: string; + appclientSecret: string; +}> => { return addAppClient(profileName, projectRoot, clientName, false, settings); }; -export const deleteAppClient = async (profileName: string, projectRoot: string, clientId: string) => { +export const deleteAppClient = async (profileName: string, projectRoot: string, clientId: string): Promise => { const authDetails = getAuthProjectDetails(projectRoot); const projectDetails = getProjectMeta(projectRoot); - const creds = new aws.SharedIniFileCredentials({ profile: profileName }); - aws.config.credentials = creds; - - const cognitoClient = new aws.CognitoIdentityServiceProvider({ region: projectDetails.providers.awscloudformation.Region }); - await cognitoClient.deleteUserPoolClient({ ClientId: clientId, UserPoolId: authDetails.meta.UserPoolId }).promise(); + const client = new CognitoIdentityProviderClient({ + region: projectDetails.providers.awscloudformation.Region, + credentials: fromIni({ profile: profileName }), + }); + await client.send(new DeleteUserPoolClientCommand({ ClientId: clientId, UserPoolId: authDetails.meta.UserPoolId })); }; /** diff --git a/packages/amplify-e2e-tests/src/schema-api-directives/tests/predictions-usage.ts b/packages/amplify-e2e-tests/src/schema-api-directives/tests/predictions-usage.ts index 0e65d51b63..3dfdf5ca68 100644 --- a/packages/amplify-e2e-tests/src/schema-api-directives/tests/predictions-usage.ts +++ b/packages/amplify-e2e-tests/src/schema-api-directives/tests/predictions-usage.ts @@ -1,8 +1,9 @@ +/* eslint-disable */ // special handling needed to test prediction // This test will faile due to a possible AppSync bug, see details below the test code import path from 'path'; import fs from 'fs-extra'; -import aws from 'aws-sdk'; +import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'; import gql from 'graphql-tag'; import { addAuthWithDefault, addS3Storage, getBackendAmplifyMeta, addApi, amplifyPush } from 'amplify-category-api-e2e-core'; @@ -11,7 +12,7 @@ import { updateSchemaInTestProject } from '../common'; const imageKey = 'public/myimage.jpg'; -export async function runTest(projectDir: string, testModule: any) { +export async function runTest(projectDir: string, testModule: any): Promise { await addAuthWithDefault(projectDir); await addS3Storage(projectDir); await addApi(projectDir, { transformerVersion: 1 }); @@ -42,10 +43,12 @@ export async function runTest(projectDir: string, testModule: any) { async function uploadImageFile(projectDir: string) { const imageFilePath = path.join(__dirname, 'predictions-usage-image.jpg'); - const s3Client = new aws.S3({ - accessKeyId: process.env.AWS_ACCESS_KEY_ID, - secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, - sessionToken: process.env.AWS_SESSION_TOKEN, + const s3Client = new S3Client({ + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + sessionToken: process.env.AWS_SESSION_TOKEN, + }, region: process.env.AWS_DEFAULT_REGION, }); @@ -57,14 +60,15 @@ async function uploadImageFile(projectDir: string) { const bucketName = amplifyMeta.storage[storageResourceName].output.BucketName; try { const fileStream = fs.createReadStream(imageFilePath); - const uploadParams = { - Bucket: bucketName, - Key: imageKey, - Body: fileStream, - ContentType: 'image/jpeg', - ACL: 'public-read', - }; - await s3Client.upload(uploadParams).promise(); + await s3Client.send( + new PutObjectCommand({ + Bucket: bucketName, + Key: imageKey, + Body: fileStream, + ContentType: 'image/jpeg', + ACL: 'public-read', + }), + ); } catch (err) { if (err.code !== 'AccessControlListNotSupported') { throw err; diff --git a/yarn.lock b/yarn.lock index fdb014f8e6..c2205ccb42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1736,6 +1736,51 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-cognito-identity-provider@^3.812.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.828.0.tgz#0355aca8b64122319f2e2ce8e05189cc53ee2ad1" + integrity sha512-b//kuA4doatBnzmbs/xVc9/S8Lw8AYZq+yUxGJq9D3HOlzBos8KrmvinqvofIAeNRBS4/RL1IjKf96h0S3HkeQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.828.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-cognito-identity@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.6.1.tgz#36992a4fef7eff1f2b1dbee30850e30ebdfc15bb" @@ -1865,6 +1910,51 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-cognito-identity@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.828.0.tgz#782bdc15aa8a701493c36cb7e982d47c085e7f0f" + integrity sha512-If4vBVbOxFfTW6JP92lWQGhis5fIt4PIS071DoSBf931ss/mISDnslpGGz1rXp6vyS8l7fODb3LDMAzSPyooNg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.828.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-comprehend@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-comprehend/-/client-comprehend-3.6.1.tgz#d640d510b49feafa94ac252cdd7942cbe5537249" @@ -4818,6 +4908,17 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-cognito-identity@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.828.0.tgz#e4fe748281e07dd2926ce5e90c50456625ca2649" + integrity sha512-JmQivvkif6KLVeIKCSybl80aZgbVXREAAa0VwhJg3z2E3r8dm9qnH3XeDAzzoZrJAQmK3czuowWpwlI/PHVX8w== + dependencies: + "@aws-sdk/client-cognito-identity" "3.828.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-env@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz#55dec9c4c29ebbdff4f3bce72de9e98f7a1f92e1" @@ -5601,6 +5702,31 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" +"@aws-sdk/credential-providers@3.828.0": + version "3.828.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.828.0.tgz#954e3c0351a8b456a9a18aeaeef83a4c36cbcd5f" + integrity sha512-PuLp94Brs3lpZ+H8Ata0nolqUEdmV1geiggEzRdLt93cggs7UXPJG9TG87py6W4qPmRvkE34QSwO/1NXpm4eGw== + dependencies: + "@aws-sdk/client-cognito-identity" "3.828.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-cognito-identity" "3.828.0" + "@aws-sdk/credential-provider-env" "3.826.0" + "@aws-sdk/credential-provider-http" "3.826.0" + "@aws-sdk/credential-provider-ini" "3.828.0" + "@aws-sdk/credential-provider-node" "3.828.0" + "@aws-sdk/credential-provider-process" "3.826.0" + "@aws-sdk/credential-provider-sso" "3.828.0" + "@aws-sdk/credential-provider-web-identity" "3.828.0" + "@aws-sdk/nested-clients" "3.828.0" + "@aws-sdk/types" "3.821.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-providers@^3": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.810.0.tgz#5bcf0845c4b4bf6b9fb286caaf8c9c55fa266cc5" From 29b9e850854d1d588c3b13d24e538a9f8e6c3553 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 13 Jun 2025 16:55:52 -0500 Subject: [PATCH 07/37] update yarn lock --- yarn.lock | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index c2205ccb42..d2e8040faa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13065,7 +13065,22 @@ aws-cdk-lib@2.189.1, aws-cdk-lib@^2.187.0, aws-cdk-lib@~2.129.0, aws-cdk-lib@~2. table "^6.9.0" yaml "1.10.2" -aws-sdk@2.518.0, aws-sdk@^2.1113.0, aws-sdk@^2.1141.0, aws-sdk@^2.1464.0: +aws-sdk@2.518.0: + version "2.518.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.518.0.tgz#a0412cfcb41fd02e18d9e8b20c1dce356160fcc2" + integrity sha512-hwtKKf93TFyd3qugDW54ElpkUXhPe+ArPIHadre6IAFjCJiv08L8DaZKLRyclDnKfTavKe+f/PhdSEYo1QUHiA== + dependencies: + buffer "4.9.1" + events "1.1.1" + ieee754 "1.1.8" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + +aws-sdk@^2.1113.0, aws-sdk@^2.1464.0: version "2.1692.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1692.0.tgz#9dac5f7bfcc5ab45825cc8591b12753aa7d2902c" integrity sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw== @@ -13391,6 +13406,15 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@4.9.1: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha512-DNK4ruAqtyHaN8Zne7PkBTO+dD1Lr0YfTduMqlIyjvQIoztBkUxrvL+hKeLW8NXFKHOq/2upkxuoS9znQ9bW9A== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@4.9.2: version "4.9.2" resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" @@ -16395,6 +16419,11 @@ ieee754@1.1.13: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ieee754@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + integrity sha512-/aoyv2Nt7mGLnCAWzE0C1WH9Xd8ZsqR0f4Pjwxputi1JNm01+InyAYQotF4N+ulEIjbEsJo22NOHr+U/XEZ1Pw== + ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -17505,6 +17534,11 @@ jju@^1.1.0, jju@~1.4.0: resolved "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w== + jmespath@0.16.0: version "0.16.0" resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" @@ -22466,6 +22500,14 @@ xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + xml2js@0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" @@ -22489,6 +22531,11 @@ xmlbuilder@~11.0.0: resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From d0bbef56d23b6b5911351b2ddbd03fb1a9b475a7 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Tue, 17 Jun 2025 16:54:35 -0500 Subject: [PATCH 08/37] ... --- .../package.json | 6 +- .../src/S3Client.ts | 132 +++--- .../__tests__/AuthV2Transformer.e2e.test.ts | 38 +- .../__tests__/AuthV2TransformerIAM.test.ts | 10 +- .../src/cognitoUtils.ts | 184 ++++---- .../src/deployNestedStacks.ts | 8 +- yarn.lock | 442 ++++++++++++++++-- 7 files changed, 583 insertions(+), 237 deletions(-) diff --git a/packages/graphql-transformers-e2e-tests/package.json b/packages/graphql-transformers-e2e-tests/package.json index dced464069..1eb30dfd16 100644 --- a/packages/graphql-transformers-e2e-tests/package.json +++ b/packages/graphql-transformers-e2e-tests/package.json @@ -41,6 +41,10 @@ "@aws-amplify/graphql-transformer-core": "3.4.3", "@aws-amplify/graphql-transformer-interfaces": "4.2.6", "@aws-amplify/graphql-transformer-test-utils": "1.0.17", + "@aws-sdk/client-cloudformation": "3.828.0", + "@aws-sdk/client-cognito-identity": "3.830.0", + "@aws-sdk/client-cognito-identity-provider": "3.828.0", + "@aws-sdk/client-s3": "3.830.0", "@types/node": "^20.0.0", "aws-amplify": "^4.2.8", "aws-appsync": "^4.1.1", @@ -117,4 +121,4 @@ "usePathForSuiteName": "true", "addFileAttribute": "true" } -} +} \ No newline at end of file diff --git a/packages/graphql-transformers-e2e-tests/src/S3Client.ts b/packages/graphql-transformers-e2e-tests/src/S3Client.ts index 9c8652cc54..97d78a2c97 100644 --- a/packages/graphql-transformers-e2e-tests/src/S3Client.ts +++ b/packages/graphql-transformers-e2e-tests/src/S3Client.ts @@ -1,127 +1,107 @@ +/* eslint-disable */ import fs = require('fs'); -import { S3 } from 'aws-sdk'; - -async function promisify(fun: (arg: I, cb: (e: Error, d: O) => void) => void, args: I, that: any): Promise { - return await new Promise((resolve, reject) => { - fun.apply(that, [ - args, - (err: Error, data: O) => { - if (err) { - return reject(err); - } - resolve(data); - }, - ]); - }); -} +import { + S3Client as S3ClientSDK, + CreateBucketCommand, + CreateBucketCommandOutput, + PutBucketVersioningCommand, + PutBucketVersioningCommandOutput, + PutObjectCommand, + PutObjectOutput, + GetObjectCommand, + GetObjectCommandOutput, + ListObjectVersionsCommand, + ListObjectVersionsCommandOutput, + DeleteObjectCommand, + DeleteObjectCommandOutput, + DeleteBucketCommand, + DeleteBucketCommandOutput, +} from '@aws-sdk/client-s3'; export class S3Client { - client: S3; + client: S3ClientSDK; constructor(public region: string) { - this.client = new S3({ region: this.region }); + this.client = new S3ClientSDK({ region: this.region }); } - async createBucket(bucketName: string) { - return await promisify( - this.client.createBucket, - { - Bucket: bucketName, - }, - this.client, - ); + async createBucket(bucketName: string): Promise { + return this.client.send(new CreateBucketCommand({ Bucket: bucketName })); } - async putBucketVersioning(bucketName: string) { - return await promisify( - this.client.putBucketVersioning, - { - Bucket: bucketName, - VersioningConfiguration: { - Status: 'Enabled', - }, - }, - this.client, - ); + async putBucketVersioning(bucketName: string): Promise { + return this.client.send(new PutBucketVersioningCommand({ Bucket: bucketName, VersioningConfiguration: { Status: 'Enabled' } })); } - async uploadZIPFile(bucketName: string, filePath: string, s3key: string, contentType: string = 'application/zip') { + async uploadZIPFile( + bucketName: string, + filePath: string, + s3key: string, + contentType: string = 'application/zip', + ): Promise { const fileContent = this.readZIPFile(filePath); - - return await promisify( - this.client.putObject, - { + return this.client.send( + new PutObjectCommand({ Bucket: bucketName, Key: s3key, Body: fileContent, ContentType: contentType, - }, - this.client, + }), ); } - async uploadFile(bucketName: string, filePath: string, s3key: string) { + async uploadFile(bucketName: string, filePath: string, s3key: string): Promise { const fileContent = this.readFile(filePath); - - return await promisify( - this.client.putObject, - { + return this.client.send( + new PutObjectCommand({ Bucket: bucketName, Key: s3key, Body: fileContent, - }, - this.client, + }), ); } - async getFileVersion(bucketName: string, s3key: string) { - return await promisify( - this.client.getObject, - { + async getFileVersion(bucketName: string, s3key: string): Promise { + return this.client.send( + new GetObjectCommand({ Bucket: bucketName, Key: s3key, - }, - this.client, + }), ); } - async getAllObjectVersions(bucketName: string) { - return await promisify( - this.client.listObjectVersions, - { + async getAllObjectVersions(bucketName: string): Promise { + return this.client.send( + new ListObjectVersionsCommand({ Bucket: bucketName, - }, - this.client, + }), ); } - async deleteObjectVersion(bucketName: string, versionId: string, s3key: string) { - return await promisify( - this.client.deleteObject, - { + async deleteObjectVersion(bucketName: string, versionId: string, s3key: string): Promise { + return this.client.send( + new DeleteObjectCommand({ Bucket: bucketName, Key: s3key, VersionId: versionId, - }, - this.client, + }), ); } - async deleteFile(bucketName: string, s3key: string) { + async deleteFile(bucketName: string, s3key: string): Promise { const response = await this.getAllObjectVersions(bucketName); - const versions = response.Versions; + const versions = response.Versions || []; for (const version of versions) { + if (!version.VersionId) continue; await this.deleteObjectVersion(bucketName, version.VersionId, s3key); } } - async deleteBucket(bucketName: string) { - return await promisify( - this.client.deleteBucket, - { + async deleteBucket(bucketName: string): Promise { + return this.client.send( + new DeleteBucketCommand({ Bucket: bucketName, - }, - this.client, + }), ); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2Transformer.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2Transformer.e2e.test.ts index 41a5ca7672..2d936c120a 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2Transformer.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2Transformer.e2e.test.ts @@ -1,16 +1,24 @@ +/* eslint-disable jest/no-standalone-expect */ import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { HasOneTransformer } from '@aws-amplify/graphql-relational-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { AppSyncAuthConfiguration } from '@aws-amplify/graphql-transformer-interfaces'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as CognitoClient } from 'aws-sdk/clients/cognitoidentityserviceprovider'; -import { default as S3 } from 'aws-sdk/clients/s3'; + +// eslint-disable-next-line import/no-extraneous-dependencies +import { Output } from '@aws-sdk/client-cloudformation'; + +// eslint-disable-next-line import/no-extraneous-dependencies +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; + import moment from 'moment'; import { ResourceConstants } from 'graphql-transformer-common'; + +// also v2, but maybe "adapted" enough not to matter. import { CloudFormationClient } from '../CloudFormationClient'; import { S3Client } from '../S3Client'; + import { cleanupStackAfterTest, deploy } from '../deployNestedStacks'; import { createUserPool, @@ -31,9 +39,8 @@ jest.setTimeout(2000000); describe('@model with @auth', () => { // setup clients const cf = new CloudFormationClient(region); - const customS3Client = new S3Client(region); - const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); - const awsS3Client = new S3({ region: region }); + const s3Client = new S3Client(region); + const cognitoClient = new CognitoIdentityProviderClient({ region: region }); // stack info const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -77,12 +84,13 @@ describe('@model with @auth', () => { const WATCHER_GROUP_NAME = 'Watcher'; const SUBSCRIBER_GROUP_NAME = 'Subscriber'; - function outputValueSelector(key: string) { + const outputValueSelector = (key: string): ((outputs: Output[]) => string | null | undefined) => { return (outputs: Output[]) => { const output = outputs.find((o: Output) => o.OutputKey === key); return output ? output.OutputValue : null; }; - } + }; + beforeAll(async () => { const validSchema = ` type Post @model @auth(rules: [{ allow: owner }]) { @@ -281,7 +289,7 @@ describe('@model with @auth', () => { } `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await s3Client.createBucket(BUCKET_NAME); } catch (e) { throw Error(`Could not create bucket: ${e}`); } @@ -292,9 +300,9 @@ describe('@model with @auth', () => { additionalAuthenticationProviders: [], }; const userPoolResponse = await createUserPool(cognitoClient, `UserPool${STACK_NAME}`); - USER_POOL_ID = userPoolResponse.UserPool.Id; + USER_POOL_ID = userPoolResponse.UserPool!.Id!; const userPoolClientResponse = await createUserPoolClient(cognitoClient, USER_POOL_ID, `UserPool${STACK_NAME}`); - const userPoolClientId = userPoolClientResponse.UserPoolClient.ClientId; + const userPoolClientId = userPoolClientResponse.UserPoolClient?.ClientId; try { const out = testTransform({ schema: validSchema, @@ -312,7 +320,7 @@ describe('@model with @auth', () => { }, }); const finishedStack = await deploy( - customS3Client, + s3Client, cf, STACK_NAME, out, @@ -329,9 +337,9 @@ describe('@model with @auth', () => { expect(finishedStack).toBeDefined(); const getApiEndpoint = outputValueSelector(ResourceConstants.OUTPUTS.GraphQLAPIEndpointOutput); const getApiKey = outputValueSelector(ResourceConstants.OUTPUTS.GraphQLAPIApiKeyOutput); - GRAPHQL_ENDPOINT = getApiEndpoint(finishedStack.Outputs); + GRAPHQL_ENDPOINT = getApiEndpoint(finishedStack.Outputs!); - const apiKey = getApiKey(finishedStack.Outputs); + const apiKey = getApiKey(finishedStack.Outputs!); expect(apiKey).not.toBeTruthy(); // Verify we have all the details @@ -340,7 +348,7 @@ describe('@model with @auth', () => { expect(userPoolClientId).toBeTruthy(); // Configure Amplify, create users, and sign in - configureAmplify(USER_POOL_ID, userPoolClientId); + configureAmplify(USER_POOL_ID, userPoolClientId!); await signupUser(USER_POOL_ID, USERNAME1, TMP_PASSWORD); await signupUser(USER_POOL_ID, USERNAME2, TMP_PASSWORD); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerIAM.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerIAM.test.ts index 86e16e13a3..94cc3eb9e4 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerIAM.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerIAM.test.ts @@ -3,9 +3,16 @@ import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { AppSyncAuthConfiguration } from '@aws-amplify/graphql-transformer-interfaces'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; + +// v2 import { Output } from 'aws-sdk/clients/cloudformation'; import { default as CognitoClient } from 'aws-sdk/clients/cognitoidentityserviceprovider'; import { default as S3 } from 'aws-sdk/clients/s3'; +import { CognitoIdentity } from 'aws-sdk'; +import { default as STS } from 'aws-sdk/clients/sts'; + +// v3 + import moment from 'moment'; import { ResourceConstants } from 'graphql-transformer-common'; import { CloudFormationClient } from '../CloudFormationClient'; @@ -21,12 +28,11 @@ import { setIdentityPoolRoles, } from '../cognitoUtils'; import { resolveTestRegion } from '../testSetup'; -import { CognitoIdentity } from 'aws-sdk'; + import { IAMHelper } from '../IAMHelper'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; import gql from 'graphql-tag'; import { Auth } from 'aws-amplify'; -import { default as STS } from 'aws-sdk/clients/sts'; const region = resolveTestRegion(); diff --git a/packages/graphql-transformers-e2e-tests/src/cognitoUtils.ts b/packages/graphql-transformers-e2e-tests/src/cognitoUtils.ts index 23bdbda45c..0ef74bea54 100644 --- a/packages/graphql-transformers-e2e-tests/src/cognitoUtils.ts +++ b/packages/graphql-transformers-e2e-tests/src/cognitoUtils.ts @@ -1,18 +1,31 @@ +/* eslint-disable */ import Amplify, { Auth } from 'aws-amplify'; -import { - CreateGroupRequest, - CreateGroupResponse, - AdminAddUserToGroupRequest, - CreateUserPoolResponse, - CreateUserPoolRequest, - CreateUserPoolClientRequest, - CreateUserPoolClientResponse, - DeleteUserPoolRequest, - DeleteUserRequest, -} from 'aws-sdk/clients/cognitoidentityserviceprovider'; import { ResourceConstants } from 'graphql-transformer-common'; import { IAM as cfnIAM, Cognito as cfnCognito } from 'cloudform-types'; -import { CognitoIdentityServiceProvider as CognitoClient, CognitoIdentity } from 'aws-sdk'; +import { + CognitoIdentityClient, + CreateIdentityPoolCommand, + DeleteIdentityPoolCommand, + DeleteIdentityPoolCommandOutput, + SetIdentityPoolRolesCommand, +} from '@aws-sdk/client-cognito-identity'; +import { + CognitoIdentityProviderClient, + AdminAddUserToGroupCommand, + AdminAddUserToGroupCommandOutput, + AdminCreateUserCommand, + AdminCreateUserCommandOutput, + CreateGroupCommand, + CreateGroupCommandOutput, + CreateUserPoolClientCommand, + CreateUserPoolClientCommandOutput, + CreateUserPoolCommand, + CreateUserPoolCommandOutput, + DeleteUserCommand, + DeleteUserCommandOutput, + DeleteUserPoolCommand, + DeleteUserPoolCommandOutput, +} from '@aws-sdk/client-cognito-identity-provider'; import TestStorage from './TestStorage'; import { resolveTestRegion } from './testSetup'; import { DeploymentResources } from 'graphql-transformer-core'; @@ -29,7 +42,8 @@ interface E2Econfiguration { USER_POOL_ID?: string; } -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); +// const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); +const client = new CognitoIdentityProviderClient({ region: region }); export function configureAmplify(userPoolId: string, userPoolClientId: string, identityPoolId?: string) { Amplify.configure({ @@ -44,21 +58,17 @@ export function configureAmplify(userPoolId: string, userPoolClientId: string, i }); } -export async function signupUser(userPoolId: string, name: string, pw: string) { - return new Promise((res, rej) => { - const createUser = cognitoClient.adminCreateUser.bind(cognitoClient) as any; - createUser( - { - UserPoolId: userPoolId, - UserAttributes: [{ Name: 'email', Value: name }], - Username: name, - TemporaryPassword: pw, - DesiredDeliveryMediums: [], - MessageAction: 'SUPPRESS', - }, - (err, data) => (err ? rej(err) : res(data)), - ); - }); +export async function signupUser(userPoolId: string, name: string, pw: string): Promise { + return await client.send( + new AdminCreateUserCommand({ + UserPoolId: userPoolId, + UserAttributes: [{ Name: 'email', Value: name }], + Username: name, + TemporaryPassword: pw, + DesiredDeliveryMediums: [], + MessageAction: 'SUPPRESS', + }), + ); } export async function authenticateUser(username: string, tempPassword: string, password: string) { @@ -73,44 +83,41 @@ export async function authenticateUser(username: string, tempPassword: string, p return signinResult.getSignInUserSession(); } -export async function deleteUser(accessToken: string): Promise<{}> { - return new Promise((res, rej) => { - const params: DeleteUserRequest = { +export async function deleteUser(accessToken: string): Promise { + return await client.send( + new DeleteUserCommand({ AccessToken: accessToken, - }; - cognitoClient.deleteUser(params, (err, data) => (err ? rej(err) : res(data))); - }); + }), + ); } -export async function createGroup(userPoolId: string, name: string, roleArn?: string): Promise { - return new Promise((res, rej) => { - const params: CreateGroupRequest = { +export async function createGroup(userPoolId: string, name: string, roleArn?: string): Promise { + return await client.send( + new CreateGroupCommand({ GroupName: name, UserPoolId: userPoolId, ...(roleArn ? { RoleArn: roleArn } : {}), - }; - cognitoClient.createGroup(params, (err, data) => (err ? rej(err) : res(data))); - }); + }), + ); } -export async function addUserToGroup(groupName: string, username: string, userPoolId: string) { - return new Promise((res, rej) => { - const params: AdminAddUserToGroupRequest = { +export async function addUserToGroup(groupName: string, username: string, userPoolId: string): Promise { + return await client.send( + new AdminAddUserToGroupCommand({ GroupName: groupName, Username: username, UserPoolId: userPoolId, - }; - cognitoClient.adminAddUserToGroup(params, (err, data) => (err ? rej(err) : res(data))); - }); + }), + ); } export const createIdentityPool = async ( - client: CognitoIdentity, + client: CognitoIdentityClient, identityPoolName: string, params: { providerName: string; clientId: string }, ): Promise => { - const idPool = await client - .createIdentityPool({ + const idPool = await client.send( + new CreateIdentityPoolCommand({ IdentityPoolName: identityPoolName, AllowUnauthenticatedIdentities: true, CognitoIdentityProviders: [ @@ -119,42 +126,40 @@ export const createIdentityPool = async ( ClientId: params.clientId, }, ], - }) - .promise(); + }), + ); - return idPool.IdentityPoolId; + return idPool.IdentityPoolId!; }; export const setIdentityPoolRoles = async ( - client: CognitoIdentity, + client: CognitoIdentityClient, identityPoolId: string, params: { authRoleArn: string; unauthRoleArn: string; providerName: string; clientId: string; useTokenAuth?: boolean }, ): Promise => { const useTokenAuth = params?.useTokenAuth ?? false; - await client - .setIdentityPoolRoles({ + await client.send( + new SetIdentityPoolRolesCommand({ IdentityPoolId: identityPoolId, Roles: { authenticated: params.authRoleArn, unauthenticated: params.unauthRoleArn, }, - ...(useTokenAuth - ? { - RoleMappings: { - [`${params.providerName}:${params.clientId}`]: { - Type: 'Token', - AmbiguousRoleResolution: 'AuthenticatedRole', - }, - }, - } - : {}), - }) - .promise(); + ...(useTokenAuth && { + RoleMappings: { + [`${params.providerName}:${params.clientId}`]: { + Type: 'Token', + AmbiguousRoleResolution: 'AuthenticatedRole', + }, + }, + }), + }), + ); }; -export async function createUserPool(client: CognitoClient, userPoolName: string): Promise { - return new Promise((res, rej) => { - const params: CreateUserPoolRequest = { +export async function createUserPool(client: CognitoIdentityProviderClient, userPoolName: string): Promise { + return await client.send( + new CreateUserPoolCommand({ PoolName: userPoolName, Policies: { PasswordPolicy: { @@ -173,42 +178,39 @@ export async function createUserPool(client: CognitoClient, userPoolName: string }, ], AutoVerifiedAttributes: ['email'], - }; - client.createUserPool(params, (err, data) => (err ? rej(err) : res(data))); - }); + }), + ); } -export async function deleteUserPool(client: CognitoClient, userPoolId: string): Promise<{}> { - return new Promise((res, rej) => { - const params: DeleteUserPoolRequest = { +export async function deleteUserPool(client: CognitoIdentityProviderClient, userPoolId: string): Promise { + return await client.send( + new DeleteUserPoolCommand({ UserPoolId: userPoolId, - }; - client.deleteUserPool(params, (err, data) => (err ? rej(err) : res(data))); - }); + }), + ); } -export async function deleteIdentityPool(client: CognitoIdentity, identityPoolId: string) { - await client - .deleteIdentityPool({ +export async function deleteIdentityPool(client: CognitoIdentityClient, identityPoolId: string): Promise { + return client.send( + new DeleteIdentityPoolCommand({ IdentityPoolId: identityPoolId, - }) - .promise(); + }), + ); } export async function createUserPoolClient( - client: CognitoClient, + client: CognitoIdentityProviderClient, userPoolId: string, clientName: string, -): Promise { - return new Promise((res, rej) => { - const params: CreateUserPoolClientRequest = { +): Promise { + return await client.send( + new CreateUserPoolClientCommand({ ClientName: clientName, UserPoolId: userPoolId, GenerateSecret: false, RefreshTokenValidity: 30, - }; - client.createUserPoolClient(params, (err, data) => (err ? rej(err) : res(data))); - }); + }), + ); } export function addIAMRolesToCFNStack(out: DeploymentResources, e2eConfig: E2Econfiguration) { diff --git a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts index 2ad09bda73..4a0c753453 100644 --- a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts +++ b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts @@ -1,7 +1,9 @@ +/* eslint-disable */ import * as fs from 'fs'; import * as path from 'path'; import { DeploymentResources } from 'graphql-transformer-core'; -import { CognitoIdentityServiceProvider, CognitoIdentity } from 'aws-sdk'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { deleteUserPool, deleteIdentityPool } from './cognitoUtils'; import { CloudFormationClient } from './CloudFormationClient'; import { S3Client } from './S3Client'; @@ -204,8 +206,8 @@ export const cleanupStackAfterTest = async ( bucketName: string, stackName: string | undefined, cf: CloudFormationClient, - cognitoParams?: { cognitoClient: CognitoIdentityServiceProvider; userPoolId: string }, - identityParams?: { identityClient: CognitoIdentity; identityPoolId: string }, + cognitoParams?: { cognitoClient: CognitoIdentityProviderClient; userPoolId: string }, + identityParams?: { identityClient: CognitoIdentityClient; identityPoolId: string }, ) => { try { if (stackName) { diff --git a/yarn.lock b/yarn.lock index d2e8040faa..f188d762d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1736,7 +1736,7 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/client-cognito-identity-provider@^3.812.0": +"@aws-sdk/client-cognito-identity-provider@3.828.0", "@aws-sdk/client-cognito-identity-provider@^3.812.0": version "3.828.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.828.0.tgz#0355aca8b64122319f2e2ce8e05189cc53ee2ad1" integrity sha512-b//kuA4doatBnzmbs/xVc9/S8Lw8AYZq+yUxGJq9D3HOlzBos8KrmvinqvofIAeNRBS4/RL1IjKf96h0S3HkeQ== @@ -1955,6 +1955,51 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-cognito-identity@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.830.0.tgz#edcb2d8a16a8f94bf211655baf77a7474fa74397" + integrity sha512-YhhQNVmHykPC6h6Xj60BMG7ELxxlynwNW2wK+8HJRiT62nYhbDyHypY9W2zNshqh/SE+5gLvwt1sXAu7KHGWmQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.830.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-comprehend@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-comprehend/-/client-comprehend-3.6.1.tgz#d640d510b49feafa94ac252cdd7942cbe5537249" @@ -3500,6 +3545,68 @@ fast-xml-parser "^3.16.0" tslib "^2.0.0" +"@aws-sdk/client-s3@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.830.0.tgz#487c5afbc98912ac6bea1b0c0a2065a426cd3c30" + integrity sha512-Cti+zj1lqvQIScXFQv8/t1xo3pvcvk/ObmGIbyLzfgcYpKMHaIWhzhi6aN+z4dYEv1EwrukC9tNoqScyShc5tw== + dependencies: + "@aws-crypto/sha1-browser" "5.2.0" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.830.0" + "@aws-sdk/middleware-bucket-endpoint" "3.830.0" + "@aws-sdk/middleware-expect-continue" "3.821.0" + "@aws-sdk/middleware-flexible-checksums" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-location-constraint" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-sdk-s3" "3.826.0" + "@aws-sdk/middleware-ssec" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/signature-v4-multi-region" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@aws-sdk/xml-builder" "3.821.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/eventstream-serde-browser" "^4.0.4" + "@smithy/eventstream-serde-config-resolver" "^4.1.2" + "@smithy/eventstream-serde-node" "^4.0.4" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-blob-browser" "^4.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/hash-stream-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/md5-js" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.5" + tslib "^2.6.2" + "@aws-sdk/client-s3@^3": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.810.0.tgz#26af93096483bcc5694a334c6ee7c4a9ea8b47f0" @@ -4455,6 +4562,50 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-sso@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.830.0.tgz#8cf110602e2bc986e2b3c08163971e467d6c970e" + integrity sha512-5zCEpfI+zwX2SIa258L+TItNbBoAvQQ6w74qdFM6YJufQ1F9tvwjTX8T+eSTT9nsFIvfYnUaGalWwJVfmJUgVQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sts@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.186.0.tgz#12514601b0b01f892ddb11d8a2ab4bee1b03cbf1" @@ -5258,6 +5409,25 @@ "@smithy/types" "^4.3.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-ini@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.830.0.tgz#06b75bdd6417f72bd3729f091ea5efdd01f9556d" + integrity sha512-zeQenzvh8JRY5nULd8izdjVGoCM1tgsVVsrLSwDkHxZTTW0hW/bmOmXfvdaE0wDdomXW7m2CkQDSmP7XdvNXZg== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-env" "3.826.0" + "@aws-sdk/credential-provider-http" "3.826.0" + "@aws-sdk/credential-provider-process" "3.826.0" + "@aws-sdk/credential-provider-sso" "3.830.0" + "@aws-sdk/credential-provider-web-identity" "3.830.0" + "@aws-sdk/nested-clients" "3.830.0" + "@aws-sdk/types" "3.821.0" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz#0be58623660b41eed3a349a89b31a01d4cc773ea" @@ -5414,6 +5584,24 @@ "@smithy/types" "^4.3.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-node@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.830.0.tgz#caeab67c0d7c65e14d923ed3f0dd6c7b8f334dba" + integrity sha512-X/2LrTgwtK1pkWrvofxQBI8VTi6QVLtSMpsKKPPnJQ0vgqC0e4czSIs3ZxiEsOkCBaQ2usXSiKyh0ccsQ6k2OA== + dependencies: + "@aws-sdk/credential-provider-env" "3.826.0" + "@aws-sdk/credential-provider-http" "3.826.0" + "@aws-sdk/credential-provider-ini" "3.830.0" + "@aws-sdk/credential-provider-process" "3.826.0" + "@aws-sdk/credential-provider-sso" "3.830.0" + "@aws-sdk/credential-provider-web-identity" "3.830.0" + "@aws-sdk/types" "3.821.0" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz#e3be60983261a58c212f5c38b6fb76305bbb8ce7" @@ -5601,6 +5789,20 @@ "@smithy/types" "^4.3.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-sso@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.830.0.tgz#6fbaf338f109bfa6d04c7f62f06469787b6bb3b6" + integrity sha512-+VdRpZmfekzpySqZikAKx6l5ndnLGluioIgUG4ZznrButgFD/iogzFtGmBDFB3ZLViX1l4pMXru0zFwJEZT21Q== + dependencies: + "@aws-sdk/client-sso" "3.830.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/token-providers" "3.830.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.186.0.tgz#db43f37f7827b553490dd865dbaa9a2c45f95494" @@ -5680,6 +5882,18 @@ "@smithy/types" "^4.3.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-web-identity@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.830.0.tgz#c2e9a8c997d3d381688c85591b5d136982639510" + integrity sha512-hPYrKsZeeOdLROJ59T6Y8yZ0iwC/60L3qhZXjapBFjbqBtMaQiMTI645K6xVXBioA6vxXq7B4aLOhYqk6Fy/Ww== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/nested-clients" "3.830.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/credential-providers@3.624.0": version "3.624.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.624.0.tgz#d6e23e3a535ae74c6a7138e693aa002c42680d7f" @@ -6079,6 +6293,19 @@ "@smithy/util-config-provider" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-bucket-endpoint@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.830.0.tgz#4ab8ebf3ab38b94021981e9cd069c73c9c2ae354" + integrity sha512-ElVeCReZSH5Ds+/pkL5ebneJjuo8f49e9JXV1cYizuH0OAOQfYaBU9+M+7+rn61pTttOFE8W//qKzrXBBJhfMg== + dependencies: + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-arn-parser" "3.804.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-content-length@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz#8cc7aeec527738c46fdaf4a48b17c5cbfdc7ce58" @@ -6172,6 +6399,16 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-expect-continue@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.821.0.tgz#de4e8f5ca3727dd2dd802685aa3342ceb4e662e3" + integrity sha512-zAOoSZKe1njOrtynvK6ZORU57YGv5I7KP4+rwOvUN3ZhJbQ7QPf8gKtFUCYAPRMegaXCKF/ADPtDZBAmM+zZ9g== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/middleware-flexible-checksums@3.775.0": version "3.775.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.775.0.tgz#d76a5eabb13ddc3d29b834335387ebe321e0291e" @@ -6229,6 +6466,25 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-flexible-checksums@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.826.0.tgz#e6764d9bdf9408b4a3e20148a83d83e0f65b370e" + integrity sha512-Fz9w8CFYPfSlHEB6feSsi06hdS+s+FB8k5pO4L7IV0tUa78mlhxF/VNlAJaVWYyOkZXl4HPH2K48aapACSQOXw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-crypto/util" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-header-default@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-header-default/-/middleware-header-default-3.6.1.tgz#a3a108d22cbdd1e1754910625fafb2f2a67fbcfc" @@ -6322,6 +6578,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-location-constraint@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.821.0.tgz#9a5b52f8874f48274e89329aa3d45a55340d267e" + integrity sha512-sKrm80k0t3R0on8aA/WhWFoMaAl4yvdk+riotmMElLUpcMcRXAd1+600uFVrxJqZdbrKQ0mjX0PjT68DlkYXLg== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/middleware-logger@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz#8a027fbbb1b8098ccc888bce51f34b000c0a0550" @@ -6580,6 +6845,26 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/middleware-sdk-s3@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.826.0.tgz#98392d5729f8df62af21d3144bacdc9ec65065d1" + integrity sha512-8F0qWaYKfvD/de1AKccXuigM+gb/IZSncCqxdnFWqd+TFzo9qI9Hh+TpUhWOMYSgxsMsYQ8ipmLzlD/lDhjrmA== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-arn-parser" "3.804.0" + "@smithy/core" "^3.5.3" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-sdk-sts@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.186.0.tgz#18f3d6b7b42c1345b5733ac3e3119d370a403e94" @@ -6656,6 +6941,15 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-ssec@3.821.0": + version "3.821.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.821.0.tgz#4d4c2ba22e5bbf5ac618a1f679cbe256eaaf3d35" + integrity sha512-YYi1Hhr2AYiU/24cQc8HIB+SWbQo6FBkMYojVuz/zgrtkFmALxENGF/21OPg7f/QWd+eadZJRxCjmRwh5F2Cxg== + dependencies: + "@aws-sdk/types" "3.821.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/middleware-stack@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz#da3445fe74b867ee6d7eec4f0dde28aaca1125d6" @@ -6995,6 +7289,50 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/nested-clients@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.830.0.tgz#980a555a7bf60cc214802e03f1310cfdfd2fe9c3" + integrity sha512-5N5YTlBr1vtxf7+t+UaIQ625KEAmm7fY9o1e3MgGOi/paBoI0+axr3ud24qLIy0NSzFlAHEaxUSWxcERNjIoZw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/node-config-provider@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz#64259429d39f2ef5a76663162bf2e8db6032a322" @@ -7225,6 +7563,18 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/signature-v4-multi-region@3.826.0": + version "3.826.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.826.0.tgz#14a786feee118abc7b1c1b655f46dc54cff497cc" + integrity sha512-3fEi/zy6tpMzomYosksGtu7jZqGFcdBXoL7YRsG7OEeQzBbOW9B+fVaQZ4jnsViSjzA/yKydLahMrfPnt+iaxg== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.826.0" + "@aws-sdk/types" "3.821.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/signature-v4@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz#bbd56e71af95548abaeec6307ea1dfe7bd26b4e4" @@ -7340,6 +7690,19 @@ "@smithy/types" "^4.3.1" tslib "^2.6.2" +"@aws-sdk/token-providers@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.830.0.tgz#e2717bef393bf450ba9958cea8243aa7e4a27e09" + integrity sha512-aJ4guFwj92nV9D+EgJPaCFKK0I3y2uMchiDfh69Zqnmwfxxxfxat6F79VA7PS0BdbjRfhLbn+Ghjftnomu2c1g== + dependencies: + "@aws-sdk/core" "3.826.0" + "@aws-sdk/nested-clients" "3.830.0" + "@aws-sdk/types" "3.821.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@aws-sdk/types@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz#f6fb6997b6a364f399288bfd5cd494bc680ac922" @@ -10749,6 +11112,16 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" +"@smithy/hash-blob-browser@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz#34adda037d324123d77032b3ad59c16e6d4949bb" + integrity sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ== + dependencies: + "@smithy/chunked-blob-reader" "^5.0.0" + "@smithy/chunked-blob-reader-native" "^4.0.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + "@smithy/hash-node@^1.0.1": version "1.1.0" resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-1.1.0.tgz#a8da64fa4b2e2c64185df92897165c8113b499b2" @@ -10798,6 +11171,15 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@smithy/hash-stream-node@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz#02c023590e09529e940e0a0243d32c02c4e6c645" + integrity sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg== + dependencies: + "@smithy/types" "^4.3.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/invalid-dependency@^3.0.3": version "3.0.11" resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae" @@ -10859,6 +11241,15 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@smithy/md5-js@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.0.4.tgz#d7cb70b08c2a4d809d5cb905feab74fc9726a2f2" + integrity sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg== + dependencies: + "@smithy/types" "^4.3.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/middleware-content-length@^3.0.5": version "3.0.13" resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f" @@ -13065,22 +13456,7 @@ aws-cdk-lib@2.189.1, aws-cdk-lib@^2.187.0, aws-cdk-lib@~2.129.0, aws-cdk-lib@~2. table "^6.9.0" yaml "1.10.2" -aws-sdk@2.518.0: - version "2.518.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.518.0.tgz#a0412cfcb41fd02e18d9e8b20c1dce356160fcc2" - integrity sha512-hwtKKf93TFyd3qugDW54ElpkUXhPe+ArPIHadre6IAFjCJiv08L8DaZKLRyclDnKfTavKe+f/PhdSEYo1QUHiA== - dependencies: - buffer "4.9.1" - events "1.1.1" - ieee754 "1.1.8" - jmespath "0.15.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - uuid "3.3.2" - xml2js "0.4.19" - -aws-sdk@^2.1113.0, aws-sdk@^2.1464.0: +aws-sdk@2.518.0, aws-sdk@^2.1113.0, aws-sdk@^2.1141.0, aws-sdk@^2.1464.0: version "2.1692.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1692.0.tgz#9dac5f7bfcc5ab45825cc8591b12753aa7d2902c" integrity sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw== @@ -13406,15 +13782,6 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@4.9.1: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha512-DNK4ruAqtyHaN8Zne7PkBTO+dD1Lr0YfTduMqlIyjvQIoztBkUxrvL+hKeLW8NXFKHOq/2upkxuoS9znQ9bW9A== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - buffer@4.9.2: version "4.9.2" resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" @@ -16419,11 +16786,6 @@ ieee754@1.1.13: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ieee754@1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" - integrity sha512-/aoyv2Nt7mGLnCAWzE0C1WH9Xd8ZsqR0f4Pjwxputi1JNm01+InyAYQotF4N+ulEIjbEsJo22NOHr+U/XEZ1Pw== - ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -17534,11 +17896,6 @@ jju@^1.1.0, jju@~1.4.0: resolved "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== -jmespath@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" - integrity sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w== - jmespath@0.16.0: version "0.16.0" resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" @@ -22500,14 +22857,6 @@ xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== -xml2js@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - xml2js@0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" @@ -22531,11 +22880,6 @@ xmlbuilder@~11.0.0: resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== - xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From eb6ebfd1aa432f574cfeff7dfb0b3a106567fa87 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Wed, 18 Jun 2025 15:40:51 -0500 Subject: [PATCH 09/37] ... --- .../package.json | 5 + .../src/IAMHelper.ts | 137 +++++++++-------- .../src/LambdaHelper.ts | 42 ++++-- .../__tests__/AuthV2TransformerIAM.test.ts | 40 +++-- .../AuthV2TransformerWithFF.e2e.test.ts | 22 +-- .../DefaultValueTransformer.e2e.test.ts | 7 +- .../FunctionTransformerTestsV2.e2e.test.ts | 57 +++---- yarn.lock | 140 ++++++++++++++++++ 8 files changed, 306 insertions(+), 144 deletions(-) diff --git a/packages/graphql-transformers-e2e-tests/package.json b/packages/graphql-transformers-e2e-tests/package.json index 1eb30dfd16..d332e08a10 100644 --- a/packages/graphql-transformers-e2e-tests/package.json +++ b/packages/graphql-transformers-e2e-tests/package.json @@ -44,7 +44,12 @@ "@aws-sdk/client-cloudformation": "3.828.0", "@aws-sdk/client-cognito-identity": "3.830.0", "@aws-sdk/client-cognito-identity-provider": "3.828.0", + "@aws-sdk/client-iam": "3.830.0", + "@aws-sdk/client-lambda": "3.830.0", + "@aws-sdk/client-organizations": "3.831.0", "@aws-sdk/client-s3": "3.830.0", + "@aws-sdk/client-sts": "3.830.0", + "@aws-sdk/types": "3.821.0", "@types/node": "^20.0.0", "aws-amplify": "^4.2.8", "aws-appsync": "^4.1.1", diff --git a/packages/graphql-transformers-e2e-tests/src/IAMHelper.ts b/packages/graphql-transformers-e2e-tests/src/IAMHelper.ts index c07dd24c86..fadd981d06 100644 --- a/packages/graphql-transformers-e2e-tests/src/IAMHelper.ts +++ b/packages/graphql-transformers-e2e-tests/src/IAMHelper.ts @@ -1,15 +1,32 @@ -import { IAM, Credentials } from 'aws-sdk'; +/* eslint-disable import/no-extraneous-dependencies */ +import { AwsCredentialIdentity } from '@aws-sdk/types'; +import { + IAMClient, + AttachRolePolicyCommand, + AttachRolePolicyCommandOutput, + CreatePolicyCommand, + CreatePolicyCommandOutput, + CreateRoleCommand, + CreateRoleCommandOutput, + DeletePolicyCommand, + DeletePolicyCommandOutput, + DeleteRoleCommand, + DeleteRoleCommandOutput, + DetachRolePolicyCommand, + DetachRolePolicyCommandOutput, + Role, +} from '@aws-sdk/client-iam'; +import { STSClient, GetCallerIdentityCommand } from '@aws-sdk/client-sts'; import { resolveTestRegion } from './testSetup'; -import { default as STS } from 'aws-sdk/clients/sts'; const REGION = resolveTestRegion(); export class IAMHelper { - client: IAM; - sts = new STS(); + client: IAMClient; + sts = new STSClient(); - constructor(region: string = REGION, credentials?: Credentials) { - this.client = new IAM({ + constructor(region: string = REGION, credentials?: AwsCredentialIdentity) { + this.client = new IAMClient({ region, credentials, }); @@ -18,13 +35,9 @@ export class IAMHelper { /** * Creates auth and unauth roles */ - async createRoles( - authRoleName: string, - unauthRoleName: string, - identityPoolId: string, - ): Promise<{ authRole: IAM.Role; unauthRole: IAM.Role }> { - const authRole = await this.client - .createRole({ + async createRoles(authRoleName: string, unauthRoleName: string, identityPoolId: string): Promise<{ authRole: Role; unauthRole: Role }> { + const authRole = await this.client.send( + new CreateRoleCommand({ RoleName: authRoleName, AssumeRolePolicyDocument: `{ "Version": "2012-10-17", @@ -46,10 +59,10 @@ export class IAMHelper { } ] }`, - }) - .promise(); - const unauthRole = await this.client - .createRole({ + }), + ); + const unauthRole = await this.client.send( + new CreateRoleCommand({ RoleName: unauthRoleName, AssumeRolePolicyDocument: `{ "Version": "2012-10-17", @@ -71,15 +84,15 @@ export class IAMHelper { } ] }`, - }) - .promise(); + }), + ); - return { authRole: authRole.Role, unauthRole: unauthRole.Role }; + return { authRole: authRole.Role!, unauthRole: unauthRole.Role! }; } - async createRoleForCognitoGroup(name: string, identityPoolId: string): Promise { - const role = await this.client - .createRole({ + async createRoleForCognitoGroup(name: string, identityPoolId: string): Promise { + const role = await this.client.send( + new CreateRoleCommand({ RoleName: name, AssumeRolePolicyDocument: `{ "Version": "2012-10-17", @@ -101,14 +114,14 @@ export class IAMHelper { } ] }`, - }) - .promise(); + }), + ); return role.Role; } - async createLambdaExecutionRole(name: string) { - return await this.client - .createRole({ + async createLambdaExecutionRole(name: string): Promise { + return await this.client.send( + new CreateRoleCommand({ AssumeRolePolicyDocument: `{ "Version": "2012-10-17", "Statement": [ @@ -122,13 +135,13 @@ export class IAMHelper { ] }`, RoleName: name, - }) - .promise(); + }), + ); } - async createLambdaExecutionPolicy(name: string) { - return await this.client - .createPolicy({ + async createLambdaExecutionPolicy(name: string): Promise { + return await this.client.send( + new CreatePolicyCommand({ PolicyDocument: `{ "Version": "2012-10-17", "Statement": [ @@ -144,41 +157,41 @@ export class IAMHelper { ] }`, PolicyName: name, - }) - .promise(); + }), + ); } - async attachPolicy(policyArn: string, roleName: string) { - return await this.client - .attachRolePolicy({ + async attachPolicy(policyArn: string, roleName: string): Promise { + return await this.client.send( + new AttachRolePolicyCommand({ PolicyArn: policyArn, RoleName: roleName, - }) - .promise(); + }), + ); } - async deletePolicy(policyArn: string) { - return await this.client.deletePolicy({ PolicyArn: policyArn }).promise(); + async deletePolicy(policyArn: string): Promise { + return await this.client.send(new DeletePolicyCommand({ PolicyArn: policyArn })); } - async deleteRole(roleName: string) { - return await this.client.deleteRole({ RoleName: roleName }).promise(); + async deleteRole(roleName: string): Promise { + return await this.client.send(new DeleteRoleCommand({ RoleName: roleName })); } - async detachPolicy(policyArn: string, roleName: string) { - return await this.client - .detachRolePolicy({ + async detachPolicy(policyArn: string, roleName: string): Promise { + return await this.client.send( + new DetachRolePolicyCommand({ PolicyArn: policyArn, RoleName: roleName, - }) - .promise(); + }), + ); } - async createRole(name: string): Promise { - const accountDetails = await this.sts.getCallerIdentity({}).promise(); + async createRole(name: string): Promise { + const accountDetails = await this.sts.send(new GetCallerIdentityCommand()); const currentAccountId = accountDetails.Account; - const role = await this.client - .createRole({ + const role = await this.client.send( + new CreateRoleCommand({ RoleName: name, AssumeRolePolicyDocument: `{ "Version": "2012-10-17", @@ -193,13 +206,13 @@ export class IAMHelper { } ] }`, - }) - .promise(); - return role.Role; + }), + ); + return role.Role!; } - async createAppSyncDataPolicy(policyName: string, region: string, appsyncApiIds: Array) { - const accountDetails = await this.sts.getCallerIdentity({}).promise(); + async createAppSyncDataPolicy(policyName: string, region: string, appsyncApiIds: Array): Promise { + const accountDetails = await this.sts.send(new GetCallerIdentityCommand()); const currentAccountId = accountDetails.Account; const policyStatement = { Version: '2012-10-17', @@ -211,11 +224,11 @@ export class IAMHelper { }, ], }; - return await this.client - .createPolicy({ + return await this.client.send( + new CreatePolicyCommand({ PolicyDocument: JSON.stringify(policyStatement), PolicyName: policyName, - }) - .promise(); + }), + ); } } diff --git a/packages/graphql-transformers-e2e-tests/src/LambdaHelper.ts b/packages/graphql-transformers-e2e-tests/src/LambdaHelper.ts index 75058e43d9..a8da75c914 100644 --- a/packages/graphql-transformers-e2e-tests/src/LambdaHelper.ts +++ b/packages/graphql-transformers-e2e-tests/src/LambdaHelper.ts @@ -1,25 +1,35 @@ +/* eslint-disable import/no-extraneous-dependencies */ import * as fs from 'fs'; import * as path from 'path'; -import { Credentials, Lambda } from 'aws-sdk'; +import { AwsCredentialIdentity } from '@aws-sdk/types'; +import { + LambdaClient, + AddPermissionCommand, + AddPermissionCommandOutput, + CreateFunctionCommand, + CreateFunctionCommandOutput, + DeleteFunctionCommand, + DeleteAliasCommandOutput, +} from '@aws-sdk/client-lambda'; import { resolveTestRegion } from './testSetup'; const REGION = resolveTestRegion(); export class LambdaHelper { - client: Lambda; + client: LambdaClient; - constructor(region: string = REGION, credentials?: Credentials) { - this.client = new Lambda({ + constructor(region: string = REGION, credentials?: AwsCredentialIdentity) { + this.client = new LambdaClient({ region, credentials, }); } - async createFunction(name: string, roleArn: string, filePrefix: string) { + async createFunction(name: string, roleArn: string, filePrefix: string): Promise { const filePath = path.join(__dirname, 'testfunctions', `${filePrefix}.zip`); const zipContents = fs.readFileSync(filePath); - return await this.client - .createFunction({ + return await this.client.send( + new CreateFunctionCommand({ FunctionName: name, Code: { ZipFile: zipContents, @@ -27,22 +37,22 @@ export class LambdaHelper { Runtime: 'nodejs20.x', Handler: `${filePrefix}.handler`, Role: roleArn, - }) - .promise(); + }), + ); } - async deleteFunction(name: string) { - return await this.client.deleteFunction({ FunctionName: name }).promise(); + async deleteFunction(name: string): Promise { + return await this.client.send(new DeleteFunctionCommand({ FunctionName: name })); } - async addAppSyncCrossAccountAccess(accountId: string, name: string) { - await this.client - .addPermission({ + async addAppSyncCrossAccountAccess(accountId: string, name: string): Promise { + return await this.client.send( + new AddPermissionCommand({ Action: 'lambda:InvokeFunction', FunctionName: name, Principal: `arn:aws:iam::${accountId}:root`, StatementId: 'cross-account-appsync-lambda-access', - }) - .promise(); + }), + ); } } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerIAM.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerIAM.test.ts index 94cc3eb9e4..facd2101b6 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerIAM.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerIAM.test.ts @@ -1,20 +1,18 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { AppSyncAuthConfiguration } from '@aws-amplify/graphql-transformer-interfaces'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; - -// v2 -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as CognitoClient } from 'aws-sdk/clients/cognitoidentityserviceprovider'; -import { default as S3 } from 'aws-sdk/clients/s3'; -import { CognitoIdentity } from 'aws-sdk'; -import { default as STS } from 'aws-sdk/clients/sts'; - -// v3 - +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; +import { STSClient, AssumeRoleCommand } from '@aws-sdk/client-sts'; import moment from 'moment'; import { ResourceConstants } from 'graphql-transformer-common'; +import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; +import gql from 'graphql-tag'; +import { Auth } from 'aws-amplify'; import { CloudFormationClient } from '../CloudFormationClient'; import { S3Client } from '../S3Client'; import { cleanupStackAfterTest, deploy } from '../deployNestedStacks'; @@ -30,9 +28,6 @@ import { import { resolveTestRegion } from '../testSetup'; import { IAMHelper } from '../IAMHelper'; -import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; -import gql from 'graphql-tag'; -import { Auth } from 'aws-amplify'; const region = resolveTestRegion(); @@ -42,11 +37,10 @@ describe('@model with @auth - iam access', () => { // setup clients const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); - const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); - const cognitoIdentityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: region }); - const awsS3Client = new S3({ region: region }); + const cognitoClient = new CognitoIdentityProviderClient({ region: region }); + const cognitoIdentityClient = new CognitoIdentityClient({ region: region }); const iamHelper = new IAMHelper(region); - const sts = new STS(); + const sts = new STSClient(); // stack info const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -119,8 +113,8 @@ describe('@model with @auth - iam access', () => { } `; - await awsS3Client.createBucket({ Bucket: BUCKET_NAME_WITH_IAM_ACCESS }).promise(); - await awsS3Client.createBucket({ Bucket: BUCKET_NAME_WITHOUT_IAM_ACCESS }).promise(); + await customS3Client.createBucket(BUCKET_NAME_WITH_IAM_ACCESS); + await customS3Client.createBucket(BUCKET_NAME_WITHOUT_IAM_ACCESS); const userPoolResource = await createUserPool(cognitoClient, `${NAME_PREFIX}UserPool`); const userPoolId = userPoolResource.UserPool!.Id!; @@ -230,13 +224,13 @@ describe('@model with @auth - iam access', () => { await Auth.signOut(); const unauthCreds = await Auth.currentCredentials(); const basicRoleCreds = ( - await sts - .assumeRole({ + await sts.send( + new AssumeRoleCommand({ RoleArn: basicRole.Arn, RoleSessionName: BUILD_TIMESTAMP, DurationSeconds: 3600, - }) - .promise() + }), + ) ).Credentials; GRAPHQL_CLIENT_API_KEY_WITH_IAM_ACCESS = new AWSAppSyncClient({ diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerWithFF.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerWithFF.e2e.test.ts index c4c464c3d9..896a03520b 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerWithFF.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/AuthV2TransformerWithFF.e2e.test.ts @@ -1,12 +1,13 @@ +/* eslint-disable jest/no-standalone-expect */ +/* eslint-disable import/no-extraneous-dependencies */ import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { HasOneTransformer } from '@aws-amplify/graphql-relational-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { AppSyncAuthConfiguration } from '@aws-amplify/graphql-transformer-interfaces'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as CognitoClient } from 'aws-sdk/clients/cognitoidentityserviceprovider'; -import { default as S3 } from 'aws-sdk/clients/s3'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import moment from 'moment'; import { ResourceConstants } from 'graphql-transformer-common'; import { CloudFormationClient } from '../CloudFormationClient'; @@ -32,8 +33,7 @@ describe('@model with @auth', () => { // setup clients const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); - const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); - const awsS3Client = new S3({ region: region }); + const cognitoClient = new CognitoIdentityProviderClient({ region: region }); // stack info const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -335,7 +335,7 @@ describe('@model with @auth', () => { } `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { throw Error(`Could not create bucket: ${e}`); } @@ -346,9 +346,9 @@ describe('@model with @auth', () => { additionalAuthenticationProviders: [], }; const userPoolResponse = await createUserPool(cognitoClient, `UserPool${STACK_NAME}`); - USER_POOL_ID = userPoolResponse.UserPool.Id; + USER_POOL_ID = userPoolResponse.UserPool!.Id!; const userPoolClientResponse = await createUserPoolClient(cognitoClient, USER_POOL_ID, `UserPool${STACK_NAME}`); - const userPoolClientId = userPoolClientResponse.UserPoolClient.ClientId; + const userPoolClientId = userPoolClientResponse.UserPoolClient?.ClientId; try { const out = testTransform({ schema: validSchema, @@ -379,9 +379,9 @@ describe('@model with @auth', () => { expect(finishedStack).toBeDefined(); const getApiEndpoint = outputValueSelector(ResourceConstants.OUTPUTS.GraphQLAPIEndpointOutput); const getApiKey = outputValueSelector(ResourceConstants.OUTPUTS.GraphQLAPIApiKeyOutput); - GRAPHQL_ENDPOINT = getApiEndpoint(finishedStack.Outputs); + GRAPHQL_ENDPOINT = getApiEndpoint(finishedStack.Outputs!); - const apiKey = getApiKey(finishedStack.Outputs); + const apiKey = getApiKey(finishedStack.Outputs!); expect(apiKey).not.toBeTruthy(); // Verify we have all the details @@ -390,7 +390,7 @@ describe('@model with @auth', () => { expect(userPoolClientId).toBeTruthy(); // Configure Amplify, create users, and sign in - configureAmplify(USER_POOL_ID, userPoolClientId); + configureAmplify(USER_POOL_ID, userPoolClientId!); await signupUser(USER_POOL_ID, USERNAME1, TMP_PASSWORD); await signupUser(USER_POOL_ID, USERNAME2, TMP_PASSWORD); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/DefaultValueTransformer.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/DefaultValueTransformer.e2e.test.ts index 28ad9f1b4d..ac0e85d741 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/DefaultValueTransformer.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/DefaultValueTransformer.e2e.test.ts @@ -1,8 +1,8 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { DefaultValueTransformer } from '@aws-amplify/graphql-default-value-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as S3 } from 'aws-sdk/clients/s3'; +import { Output } from '@aws-sdk/client-cloudformation'; import { ResourceConstants } from 'graphql-transformer-common'; import { default as moment } from 'moment'; import { CloudFormationClient } from '../CloudFormationClient'; @@ -17,7 +17,6 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `DefaultValueTransformerTests-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-default-value-transformer-test-bucket-${BUILD_TIMESTAMP}`; @@ -61,7 +60,7 @@ beforeAll(async () => { `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.warn(`Could not create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/FunctionTransformerTestsV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/FunctionTransformerTestsV2.e2e.test.ts index afb2a4d486..545b818e44 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/FunctionTransformerTestsV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/FunctionTransformerTestsV2.e2e.test.ts @@ -1,14 +1,15 @@ +/* eslint-disable jest/no-standalone-expect */ +/* eslint-disable import/no-extraneous-dependencies */ import { ResourceConstants } from 'graphql-transformer-common'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { FunctionTransformer } from '@aws-amplify/graphql-function-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; -import { Output } from 'aws-sdk/clients/cloudformation'; import { default as moment } from 'moment'; -import { default as S3 } from 'aws-sdk/clients/s3'; -import { default as STS } from 'aws-sdk/clients/sts'; -import { default as Organizations } from 'aws-sdk/clients/organizations'; -import AWS from 'aws-sdk'; +import { AwsCredentialIdentity } from '@aws-sdk/types'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { STSClient, AssumeRoleCommand, GetCallerIdentityCommand } from '@aws-sdk/client-sts'; +import { OrganizationsClient, ListAccountsCommand } from '@aws-sdk/client-organizations'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; import { cleanupStackAfterTest, deploy } from '../deployNestedStacks'; @@ -23,9 +24,8 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); -const sts = new STS(); -const organizations = new Organizations({ region: 'us-east-1' }); +const sts = new STSClient(); +const organizations = new OrganizationsClient({ region: 'us-east-1' }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `FunctionTransformerTestsV2-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-function-transformer-test-bucket-v2-${BUILD_TIMESTAMP}`; @@ -57,7 +57,7 @@ const createEchoFunctionInOtherAccount = async (currentAccountId?: string) => { return; } try { - const childAccounts = (await organizations.listAccounts({}).promise())?.Accounts; + const childAccounts = (await organizations.send(new ListAccountsCommand()))?.Accounts; if (!childAccounts || childAccounts?.length < 1) { console.warn('Could not find any child accounts attached to current account'); expect(true).toEqual(false); @@ -71,27 +71,26 @@ const createEchoFunctionInOtherAccount = async (currentAccountId?: string) => { } const childAccountRoleARN = `arn:aws:iam::${otherAccountId}:role/OrganizationAccountAccessRole`; const accountCredentials = ( - await sts - .assumeRole({ + await sts.send( + new AssumeRoleCommand({ RoleArn: childAccountRoleARN, RoleSessionName: `testCrossAccountFunction${BUILD_TIMESTAMP}`, DurationSeconds: 900, - }) - .promise() + }), + ) )?.Credentials; if (!accountCredentials?.AccessKeyId || !accountCredentials?.SecretAccessKey || !accountCredentials?.SessionToken) { console.warn('Could not assume role to access child account'); expect(true).toEqual(false); return; } - const crossAccountLambdaHelper = new LambdaHelper( - region, - new AWS.Credentials(accountCredentials.AccessKeyId, accountCredentials.SecretAccessKey, accountCredentials.SessionToken), - ); - const crossAccountIAMHelper = new IAMHelper( - region, - new AWS.Credentials(accountCredentials.AccessKeyId, accountCredentials.SecretAccessKey, accountCredentials.SessionToken), - ); + const credentials: AwsCredentialIdentity = { + accessKeyId: accountCredentials.AccessKeyId, + secretAccessKey: accountCredentials.SecretAccessKey, + sessionToken: accountCredentials.SessionToken, + }; + const crossAccountLambdaHelper = new LambdaHelper(region, credentials); + const crossAccountIAMHelper = new IAMHelper(region, credentials); const role = await crossAccountIAMHelper.createLambdaExecutionRole(LAMBDA_EXECUTION_ROLE_NAME); await wait(shortWaitForResource); const policy = await crossAccountIAMHelper.createLambdaExecutionPolicy(LAMBDA_EXECUTION_POLICY_NAME); @@ -113,13 +112,13 @@ const deleteEchoFunctionInOtherAccount = async (accountId: string) => { try { const childAccountRoleARN = `arn:aws:iam::${accountId}:role/OrganizationAccountAccessRole`; const accountCredentials = ( - await sts - .assumeRole({ + await sts.send( + new AssumeRoleCommand({ RoleArn: childAccountRoleARN, RoleSessionName: `testCrossAccountFunction${BUILD_TIMESTAMP}`, DurationSeconds: 900, - }) - .promise() + }), + ) )?.Credentials; if (!accountCredentials?.AccessKeyId || !accountCredentials?.SecretAccessKey || !accountCredentials?.SessionToken) { console.warn('Could not assume role to access child account'); @@ -146,9 +145,11 @@ const deleteEchoFunctionInOtherAccount = async (accountId: string) => { } }; -const getCurrentAccountId = async () => { +// eslint doesn't see `exect` as a throw. +// eslint-disable-next-line consistent-return +const getCurrentAccountId = async (): Promise => { try { - const accountDetails = await sts.getCallerIdentity({}).promise(); + const accountDetails = await sts.send(new GetCallerIdentityCommand()); return accountDetails?.Account; } catch (e) { console.warn(`Could not get current AWS account ID: ${e}`); @@ -205,7 +206,7 @@ beforeAll(async () => { } `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.warn(`Could not create bucket: ${e}`); expect(true).toEqual(false); diff --git a/yarn.lock b/yarn.lock index f188d762d1..c26090214a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2883,6 +2883,56 @@ "@smithy/util-waiter" "^4.0.5" tslib "^2.6.2" +"@aws-sdk/client-lambda@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.830.0.tgz#4dbd23dbe2ae980060f52bc7173dab2a390c9dce" + integrity sha512-rdZPFteEN4Tw8vNVKh5rwPhf2zJz3cazx2gf1NSB8+GtleefY6bsAqyOQueSMSkE6fGZw7kmaPJBvWDxzMX4nQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.830.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/eventstream-serde-browser" "^4.0.4" + "@smithy/eventstream-serde-config-resolver" "^4.1.2" + "@smithy/eventstream-serde-node" "^4.0.4" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.5" + tslib "^2.6.2" + "@aws-sdk/client-lambda@^3": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.810.0.tgz#fb64bb660a89702b6f34aff7f5bd3e560baca533" @@ -3108,6 +3158,51 @@ "@aws-sdk/util-utf8-node" "3.186.0" tslib "^2.3.1" +"@aws-sdk/client-organizations@3.831.0": + version "3.831.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-organizations/-/client-organizations-3.831.0.tgz#c041ce66f441b36db3fffc13973d0a538c357c97" + integrity sha512-VQ8gRimemQDbIjLD559P3uamOqCfrbvhS7jvvdViWO7iuGStNUNugxH950Deon2AuuVhm09n5uLRRgLbNT6tMQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.830.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-organizations@^3.812.0": version "3.816.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-organizations/-/client-organizations-3.816.0.tgz#30adc0536594e2fc8e5f446142ba7fcb8a948141" @@ -4694,6 +4789,51 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/client-sts@3.830.0": + version "3.830.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.830.0.tgz#abaa8a73c0c16cb19bbc5ec68cad3783ed666f04" + integrity sha512-tzVgR1tKK+QTHWzEHvMsGUbAf6n3kNfieTdvMSGhXhkK8TfOQ/k6vwMieISlX2ftMafI1RsPaUEv+9ae+VoGRw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.826.0" + "@aws-sdk/credential-provider-node" "3.830.0" + "@aws-sdk/middleware-host-header" "3.821.0" + "@aws-sdk/middleware-logger" "3.821.0" + "@aws-sdk/middleware-recursion-detection" "3.821.0" + "@aws-sdk/middleware-user-agent" "3.828.0" + "@aws-sdk/region-config-resolver" "3.821.0" + "@aws-sdk/types" "3.821.0" + "@aws-sdk/util-endpoints" "3.828.0" + "@aws-sdk/util-user-agent-browser" "3.821.0" + "@aws-sdk/util-user-agent-node" "3.828.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.5.3" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.11" + "@smithy/middleware-retry" "^4.1.12" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.3" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.19" + "@smithy/util-defaults-mode-node" "^4.0.19" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.5" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sts@^3", "@aws-sdk/client-sts@^3.750.0": version "3.810.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.810.0.tgz#2d2da4226f39ce9e2977d6eec0428a5761031313" From 8f9fc4f84b8f15a3cae99df5d71f7c12d3d875db Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Wed, 18 Jun 2025 16:56:52 -0500 Subject: [PATCH 10/37] ... --- .../__tests__/HttpTransformerV2.e2e.test.ts | 4 ++- .../src/__tests__/IndexWithAuthV2.e2e.test.ts | 10 ++++---- .../IndexWithAuthV2WithFF.e2e.test.ts | 10 ++++---- .../__tests__/ModelTransformer.e2e.test.ts | 11 +++----- .../MultiAuthV2Transformer.e2e.test.ts | 25 +++++++------------ 5 files changed, 25 insertions(+), 35 deletions(-) diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/HttpTransformerV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/HttpTransformerV2.e2e.test.ts index fc597229e9..1ba19c1fb1 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/HttpTransformerV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/HttpTransformerV2.e2e.test.ts @@ -1,8 +1,10 @@ +/* eslint-disable jest/no-standalone-expect */ +/* eslint-disable import/no-extraneous-dependencies */ import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { ResourceConstants } from 'graphql-transformer-common'; import { HttpTransformer } from '@aws-amplify/graphql-http-transformer'; -import { Output } from 'aws-sdk/clients/cloudformation'; +import { Output } from '@aws-sdk/client-cloudformation'; import { default as moment } from 'moment'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/IndexWithAuthV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/IndexWithAuthV2.e2e.test.ts index b12c6fed56..18942d258a 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/IndexWithAuthV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/IndexWithAuthV2.e2e.test.ts @@ -1,11 +1,12 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; import { default as moment } from 'moment'; -import { S3, CognitoIdentityServiceProvider as CognitoClient } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; import { cleanupStackAfterTest, deploy } from '../deployNestedStacks'; @@ -27,8 +28,7 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `IndexAuthTransformerTests-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-auth-index-transformer-test-bucket-${BUILD_TIMESTAMP}`; @@ -94,7 +94,7 @@ beforeAll(async () => { `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.warn(`Could not create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/IndexWithAuthV2WithFF.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/IndexWithAuthV2WithFF.e2e.test.ts index c1603daf0e..05df06f4a8 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/IndexWithAuthV2WithFF.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/IndexWithAuthV2WithFF.e2e.test.ts @@ -1,11 +1,12 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; import { default as moment } from 'moment'; -import { S3, CognitoIdentityServiceProvider as CognitoClient } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; import { cleanupStackAfterTest, deploy } from '../deployNestedStacks'; @@ -27,8 +28,7 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `IndexAuthTransformerFFTests-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-auth-index-transformer-ff-test-bucket-${BUILD_TIMESTAMP}`; @@ -91,7 +91,7 @@ beforeAll(async () => { `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.warn(`Could not create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/ModelTransformer.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/ModelTransformer.e2e.test.ts index 8168d488a5..b02656e5d4 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/ModelTransformer.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/ModelTransformer.e2e.test.ts @@ -1,7 +1,7 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as S3 } from 'aws-sdk/clients/s3'; +import { Output } from '@aws-sdk/client-cloudformation'; import { ResourceConstants } from 'graphql-transformer-common'; import { default as moment } from 'moment'; import { CloudFormationClient } from '../CloudFormationClient'; @@ -16,7 +16,6 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `ModelTransformerTest-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-model-transformer-test-bucket-${BUILD_TIMESTAMP}`; @@ -95,11 +94,7 @@ beforeAll(async () => { }); try { - await awsS3Client - .createBucket({ - Bucket: BUCKET_NAME, - }) - .promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create S3 bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2Transformer.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2Transformer.e2e.test.ts index 6ececc8120..58adc41cfc 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2Transformer.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2Transformer.e2e.test.ts @@ -1,16 +1,17 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { Auth } from 'aws-amplify'; import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { HasOneTransformer, HasManyTransformer } from '@aws-amplify/graphql-relational-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { CognitoIdentityServiceProvider as CognitoClient, S3, CognitoIdentity, IAM } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import moment from 'moment'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; import { ResourceConstants } from 'graphql-transformer-common'; import gql from 'graphql-tag'; -import AWS = require('aws-sdk'); import { IAMHelper } from '../IAMHelper'; import { createUserPool, @@ -34,13 +35,6 @@ import 'isomorphic-fetch'; import { resolveTestRegion } from '../testSetup'; const AWS_REGION = resolveTestRegion(); - -// To overcome of the way of how AmplifyJS picks up currentUserCredentials -const anyAWS = AWS as any; -if (anyAWS && anyAWS.config && anyAWS.config.credentials) { - delete anyAWS.config.credentials; -} - jest.setTimeout(2000000); function outputValueSelector(key: string) { @@ -52,10 +46,9 @@ function outputValueSelector(key: string) { const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); -const identityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ apiVersion: '2016-04-19', region: AWS_REGION }); +const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); // stack info const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -398,7 +391,7 @@ beforeAll(async () => { `; // create deployment bucket try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await awsS3Client.createBucket(BUCKET_NAME); } catch (e) { // fail early if we can't create the bucket expect(e).not.toBeDefined(); @@ -421,8 +414,8 @@ beforeAll(async () => { // set roles on identity pool await setIdentityPoolRoles(identityClient, IDENTITY_POOL_ID, { - authRoleArn: roles.authRole.Arn, - unauthRoleArn: roles.unauthRole.Arn, + authRoleArn: roles.authRole.Arn!, + unauthRoleArn: roles.unauthRole.Arn!, providerName: `cognito-idp.${AWS_REGION}.amazonaws.com/${USER_POOL_ID}`, clientId: userPoolClientId, useTokenAuth: true, From 9b68760250b9a518b5e9939b760dd3681874d443 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Thu, 19 Jun 2025 16:43:38 -0500 Subject: [PATCH 11/37] ... --- .../MultiAuthV2TransformerWithFF.e2e.test.ts | 20 +++++++------------ .../NonModelAuthV2Function.e2e.test.ts | 15 +++++++------- .../PerFieldAuthV2Transformer.e2e.test.ts | 10 +++++----- ...erFieldAuthV2TransformerWithFF.e2e.test.ts | 10 +++++----- .../PredictionsTransformerV2Tests.e2e.test.ts | 6 +++--- .../RelationalWithAuthV2.e2e.test.ts | 16 +++++++-------- ...elationalWithAuthV2NonRedacted.e2e.test.ts | 16 +++++++-------- .../RelationalWithAuthV2Redacted.e2e.test.ts | 14 +++++-------- .../RelationalWithAuthV2WithFF.e2e.test.ts | 14 +++++-------- .../SearchableModelTransformerV2.e2e.test.ts | 7 +++---- .../SearchableWithAuthV2.e2e.test.ts | 13 ++++++------ .../SearchableWithAuthV2WithFF.e2e.test.ts | 13 ++++++------ .../SubscriptionsRuntimeFiltering.e2e.test.ts | 13 ++++++------ .../SubscriptionsWithAuthV2.e2e.test.ts | 12 ++++++----- .../SubscriptionsWithAuthV2WithFF.e2e.test.ts | 12 ++++++----- .../TransformerOptionsV2.e2e.test.ts | 11 +++++----- 16 files changed, 94 insertions(+), 108 deletions(-) diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2TransformerWithFF.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2TransformerWithFF.e2e.test.ts index 75fc9cd9bb..3ea49bd02b 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2TransformerWithFF.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2TransformerWithFF.e2e.test.ts @@ -1,16 +1,17 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { Auth } from 'aws-amplify'; import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { HasOneTransformer, HasManyTransformer } from '@aws-amplify/graphql-relational-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { CognitoIdentityServiceProvider as CognitoClient, S3, CognitoIdentity, IAM } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; import moment from 'moment'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; import { ResourceConstants } from 'graphql-transformer-common'; import gql from 'graphql-tag'; -import AWS = require('aws-sdk'); import { IAMHelper } from '../IAMHelper'; import { createUserPool, @@ -35,12 +36,6 @@ import { resolveTestRegion } from '../testSetup'; const AWS_REGION = resolveTestRegion(); -// To overcome of the way of how AmplifyJS picks up currentUserCredentials -const anyAWS = AWS as any; -if (anyAWS && anyAWS.config && anyAWS.config.credentials) { - delete anyAWS.config.credentials; -} - jest.setTimeout(2000000); function outputValueSelector(key: string) { @@ -52,10 +47,9 @@ function outputValueSelector(key: string) { const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); -const identityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); +const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); // stack info const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -398,7 +392,7 @@ beforeAll(async () => { `; // create deployment bucket try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { // fail early if we can't create the bucket expect(e).not.toBeDefined(); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/NonModelAuthV2Function.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/NonModelAuthV2Function.e2e.test.ts index 62628512e7..3a630c5e9c 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/NonModelAuthV2Function.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/NonModelAuthV2Function.e2e.test.ts @@ -1,12 +1,12 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { FunctionTransformer } from '@aws-amplify/graphql-function-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { Auth } from 'aws-amplify'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; -import { CognitoIdentity } from 'aws-sdk'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as CognitoClient } from 'aws-sdk/clients/cognitoidentityserviceprovider'; -import { default as S3 } from 'aws-sdk/clients/s3'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentity } from '@aws-sdk/client-cognito-identity'; import { ResourceConstants } from 'graphql-transformer-common'; import gql from 'graphql-tag'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; @@ -37,10 +37,9 @@ const REGION = resolveTestRegion(); jest.setTimeout(2000000); const cf = new CloudFormationClient(REGION); -const identityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: REGION }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: REGION }); +const identityClient = new CognitoIdentity({ region: REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: REGION }); const customS3Client = new S3Client(REGION); -const awsS3Client = new S3({ region: REGION }); const iamHelper = new IAMHelper(REGION); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -95,7 +94,7 @@ beforeAll(async () => { `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.warn(`Could not create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/PerFieldAuthV2Transformer.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/PerFieldAuthV2Transformer.e2e.test.ts index aac1bb4061..17e6bc36ec 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/PerFieldAuthV2Transformer.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/PerFieldAuthV2Transformer.e2e.test.ts @@ -1,10 +1,11 @@ +/* eslint-disable import/no-extraneous-dependencies */ import * as fs from 'fs'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { CognitoIdentityServiceProvider as CognitoClient, S3 } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { default as moment } from 'moment'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; @@ -68,9 +69,8 @@ const PARTICIPANT_GROUP_NAME = 'Participant'; const WATCHER_GROUP_NAME = 'Watcher'; const INSTRUCTOR_GROUP_NAME = 'Instructor'; -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); +const cognitoClient = new CognitoIdentityProviderClient({ region: region }); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); function outputValueSelector(key: string) { return (outputs: Output[]) => { @@ -85,7 +85,7 @@ beforeAll(async () => { fs.mkdirSync(LOCAL_BUILD_ROOT); } try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.warn(`Could not create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/PerFieldAuthV2TransformerWithFF.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/PerFieldAuthV2TransformerWithFF.e2e.test.ts index 8420b3841c..71f0fe915a 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/PerFieldAuthV2TransformerWithFF.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/PerFieldAuthV2TransformerWithFF.e2e.test.ts @@ -1,10 +1,11 @@ +/* eslint-disable import/no-extraneous-dependencies */ import * as fs from 'fs'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { CognitoIdentityServiceProvider as CognitoClient, S3 } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { default as moment } from 'moment'; import { GraphQLClient } from '../GraphQLClient'; import { S3Client } from '../S3Client'; @@ -67,9 +68,8 @@ const PARTICIPANT_GROUP_NAME = 'Participant'; const WATCHER_GROUP_NAME = 'Watcher'; const INSTRUCTOR_GROUP_NAME = 'Instructor'; -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); +const cognitoClient = new CognitoIdentityProviderClient({ region: region }); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); function outputValueSelector(key: string) { return (outputs: Output[]) => { @@ -84,7 +84,7 @@ beforeAll(async () => { fs.mkdirSync(LOCAL_BUILD_ROOT); } try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.warn(`Could not create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/PredictionsTransformerV2Tests.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/PredictionsTransformerV2Tests.e2e.test.ts index 0025e2a610..78983821c3 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/PredictionsTransformerV2Tests.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/PredictionsTransformerV2Tests.e2e.test.ts @@ -1,9 +1,9 @@ +/* eslint-disable import/no-extraneous-dependencies */ import path from 'path'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { PredictionsTransformer } from '@aws-amplify/graphql-predictions-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as S3 } from 'aws-sdk/clients/s3'; +import { Output } from '@aws-sdk/client-cloudformation'; import * as fs from 'fs-extra'; import { ResourceConstants } from 'graphql-transformer-common'; import { default as moment } from 'moment'; @@ -46,7 +46,7 @@ beforeAll(async () => { } `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.warn(`Could not create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2.e2e.test.ts index 2d324eef3b..bd030bfbc1 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2.e2e.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { @@ -9,8 +10,10 @@ import { import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { S3, CognitoIdentityServiceProvider as CognitoClient } from 'aws-sdk'; + +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; + import { default as moment } from 'moment'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; @@ -36,8 +39,7 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); +const cognitoClient = new CognitoIdentityProviderClient({ region: region }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `RelationalAuthV2TransformersTest-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-relational-auth-transformer-test-${BUILD_TIMESTAMP}`; @@ -148,11 +150,7 @@ beforeAll(async () => { expect(true).toEqual(false); } try { - await awsS3Client - .createBucket({ - Bucket: BUCKET_NAME, - }) - .promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create S3 bucket: ${e}`); expect(true).toEqual(false); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2NonRedacted.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2NonRedacted.e2e.test.ts index 1c62ae0b8e..47dea72ccd 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2NonRedacted.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2NonRedacted.e2e.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { @@ -9,8 +10,10 @@ import { import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { S3, CognitoIdentityServiceProvider as CognitoClient } from 'aws-sdk'; + +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; + import { default as moment } from 'moment'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; @@ -36,8 +39,7 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); +const cognitoClient = new CognitoIdentityProviderClient({ apiVersion: '2016-04-19', region: region }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `RelationalWithAuthV2NonRedacted-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-relational-auth-v2-nonredacted-test-${BUILD_TIMESTAMP}`; @@ -164,11 +166,7 @@ beforeAll(async () => { expect(true).toEqual(false); } try { - await awsS3Client - .createBucket({ - Bucket: BUCKET_NAME, - }) - .promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create S3 bucket: ${e}`); expect(true).toEqual(false); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2Redacted.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2Redacted.e2e.test.ts index f1b35a3f66..b3aaa3d22b 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2Redacted.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2Redacted.e2e.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { @@ -9,8 +10,8 @@ import { import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { S3, CognitoIdentityServiceProvider as CognitoClient } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { default as moment } from 'moment'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; @@ -36,8 +37,7 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); +const cognitoClient = new CognitoIdentityProviderClient({ region: region }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `RelationalWithAuthV2Redacted-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-relational-auth-v2-redacted-test-${BUILD_TIMESTAMP}`; @@ -166,11 +166,7 @@ beforeAll(async () => { expect(true).toEqual(false); } try { - await awsS3Client - .createBucket({ - Bucket: BUCKET_NAME, - }) - .promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create S3 bucket: ${e}`); expect(true).toEqual(false); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2WithFF.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2WithFF.e2e.test.ts index 2a3c818016..98ec117637 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2WithFF.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/RelationalWithAuthV2WithFF.e2e.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { IndexTransformer, PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { @@ -9,8 +10,8 @@ import { import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { S3, CognitoIdentityServiceProvider as CognitoClient } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { default as moment } from 'moment'; import { CloudFormationClient } from '../CloudFormationClient'; import { GraphQLClient } from '../GraphQLClient'; @@ -36,8 +37,7 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: region }); +const cognitoClient = new CognitoIdentityProviderClient({ region: region }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `RelationalAuthV2TransformersFFTest-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-relational-auth-transformer-ff-test-${BUILD_TIMESTAMP}`; @@ -145,11 +145,7 @@ beforeAll(async () => { expect(true).toEqual(false); } try { - await awsS3Client - .createBucket({ - Bucket: BUCKET_NAME, - }) - .promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create S3 bucket: ${e}`); expect(true).toEqual(false); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableModelTransformerV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableModelTransformerV2.e2e.test.ts index 1fdd6e9aec..4b5284e2cd 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableModelTransformerV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableModelTransformerV2.e2e.test.ts @@ -1,10 +1,10 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { ResourceConstants } from 'graphql-transformer-common'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { SearchableModelTransformer } from '@aws-amplify/graphql-searchable-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; -import { Output } from 'aws-sdk/clients/cloudformation'; import { default as moment } from 'moment'; -import { default as S3 } from 'aws-sdk/clients/s3'; +import { Output } from '@aws-sdk/client-cloudformation'; import { CloudFormationClient } from '../CloudFormationClient'; import { S3Client } from '../S3Client'; import { GraphQLClient } from '../GraphQLClient'; @@ -18,7 +18,6 @@ jest.setTimeout(60000 * 60); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); let GRAPHQL_CLIENT: GraphQLClient = undefined; const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -83,7 +82,7 @@ beforeAll(async () => { } `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableWithAuthV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableWithAuthV2.e2e.test.ts index f8d3e0e4b3..5cc7becd1b 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableWithAuthV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableWithAuthV2.e2e.test.ts @@ -1,12 +1,14 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { SearchableModelTransformer } from '@aws-amplify/graphql-searchable-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { ResourceConstants } from 'graphql-transformer-common'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; -import { Output } from 'aws-sdk/clients/cloudformation'; import moment from 'moment'; -import { S3, CognitoIdentityServiceProvider as CognitoClient, CognitoIdentity } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; import { AWS } from '@aws-amplify/core'; import { Auth } from 'aws-amplify'; import gql from 'graphql-tag'; @@ -43,9 +45,8 @@ jest.setTimeout(60000 * 60); const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); -const identityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); +const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -177,7 +178,7 @@ beforeAll(async () => { }); try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableWithAuthV2WithFF.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableWithAuthV2WithFF.e2e.test.ts index 8b20bf36f7..de2c190036 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableWithAuthV2WithFF.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/SearchableWithAuthV2WithFF.e2e.test.ts @@ -1,12 +1,14 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { SearchableModelTransformer } from '@aws-amplify/graphql-searchable-transformer'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { ResourceConstants } from 'graphql-transformer-common'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; -import { Output } from 'aws-sdk/clients/cloudformation'; import moment from 'moment'; -import { S3, CognitoIdentityServiceProvider as CognitoClient, CognitoIdentity } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; import { AWS } from '@aws-amplify/core'; import { Auth } from 'aws-amplify'; import gql from 'graphql-tag'; @@ -43,9 +45,8 @@ jest.setTimeout(60000 * 60); const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); -const identityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); +const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -177,7 +178,7 @@ beforeAll(async () => { }); try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsRuntimeFiltering.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsRuntimeFiltering.e2e.test.ts index 1318678db8..2e9f0f153d 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsRuntimeFiltering.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsRuntimeFiltering.e2e.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { GRAPHQL_AUTH_MODE } from '@aws-amplify/api'; import { AWS } from '@aws-amplify/core'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; @@ -5,8 +6,9 @@ import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { API, Auth } from 'aws-amplify'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; -import { CognitoIdentity, CognitoIdentityServiceProvider as CognitoClient, S3 } from 'aws-sdk'; -import { Output } from 'aws-sdk/clients/cloudformation'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; import gql from 'graphql-tag'; import { ResourceConstants } from 'graphql-transformer-common'; import 'isomorphic-fetch'; @@ -61,10 +63,9 @@ function outputValueSelector(key: string) { const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); -const identityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); +const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); // stack info const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); @@ -259,7 +260,7 @@ beforeAll(async () => { COMPLETED }`; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2.e2e.test.ts index 70ef63eb24..4162cfcb87 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2.e2e.test.ts @@ -1,9 +1,11 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { CognitoIdentityServiceProvider as CognitoClient, S3, CognitoIdentity } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; import { AWS } from '@aws-amplify/core'; import { Auth, API } from 'aws-amplify'; @@ -63,8 +65,8 @@ function outputValueSelector(key: string) { const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); -const identityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); +const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); const awsS3Client = new S3({ region: AWS_REGION }); @@ -254,7 +256,7 @@ beforeAll(async () => { } `; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2WithFF.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2WithFF.e2e.test.ts index 81a7ced1a1..ee1454af26 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2WithFF.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2WithFF.e2e.test.ts @@ -1,9 +1,11 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { ResourceConstants } from 'graphql-transformer-common'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { CognitoIdentityServiceProvider as CognitoClient, S3, CognitoIdentity } from 'aws-sdk'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; import { AWS } from '@aws-amplify/core'; import { Auth, API } from 'aws-amplify'; @@ -62,8 +64,8 @@ function outputValueSelector(key: string) { const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); -const identityClient = new CognitoIdentity({ apiVersion: '2014-06-30', region: AWS_REGION }); +const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); +const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); const awsS3Client = new S3({ region: AWS_REGION }); @@ -208,7 +210,7 @@ beforeAll(async () => { description: String }`; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { console.error(`Failed to create bucket: ${e}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/TransformerOptionsV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/TransformerOptionsV2.e2e.test.ts index 014af28deb..25f31dfa21 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/TransformerOptionsV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/TransformerOptionsV2.e2e.test.ts @@ -1,9 +1,9 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { AppSyncAuthConfiguration } from '@aws-amplify/graphql-transformer-interfaces'; import { AuthTransformer } from '@aws-amplify/graphql-auth-transformer'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as CognitoClient } from 'aws-sdk/clients/cognitoidentityserviceprovider'; -import { default as S3 } from 'aws-sdk/clients/s3'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; import moment from 'moment'; import { ResourceConstants } from 'graphql-transformer-common'; @@ -22,8 +22,7 @@ jest.setTimeout(2000000); describe('V2 transformer options', () => { const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); - const cognitoClient = new CognitoClient({ apiVersion: '2016-04-19', region: AWS_REGION }); - const awsS3Client = new S3({ region: AWS_REGION }); + const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `TransformerOptionsV2Tests-${BUILD_TIMESTAMP}`; @@ -58,7 +57,7 @@ describe('V2 transformer options', () => { }`; try { - await awsS3Client.createBucket({ Bucket: BUCKET_NAME }).promise(); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { throw Error(`Could not create bucket: ${e}`); } From d0b53b7f45b64f740f9d366bcbc3086e2f94a005 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 20 Jun 2025 11:06:35 -0500 Subject: [PATCH 12/37] ... --- .../package.json | 1 - .../src/CloudFormationClient.ts | 95 +++++++++---------- .../src/S3Client.ts | 40 ++++++-- .../src/authExhaustiveTestUtils.ts | 20 ++-- .../src/deploySchema.ts | 9 +- .../src/emptyBucket.ts | 58 ++--------- 6 files changed, 98 insertions(+), 125 deletions(-) diff --git a/packages/graphql-transformers-e2e-tests/package.json b/packages/graphql-transformers-e2e-tests/package.json index d332e08a10..ebacf03e4e 100644 --- a/packages/graphql-transformers-e2e-tests/package.json +++ b/packages/graphql-transformers-e2e-tests/package.json @@ -53,7 +53,6 @@ "@types/node": "^20.0.0", "aws-amplify": "^4.2.8", "aws-appsync": "^4.1.1", - "aws-sdk": "^2.1113.0", "execa": "^5.1.1", "fs-extra": "^8.1.0", "graphql-tag": "^2.10.1", diff --git a/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts b/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts index 7c11ba01da..fa215ab3c4 100644 --- a/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts +++ b/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts @@ -1,33 +1,34 @@ -import { CloudFormation } from 'aws-sdk'; -import { DescribeStacksOutput, StackStatus } from 'aws-sdk/clients/cloudformation'; +/* eslint-disable import/no-extraneous-dependencies */ +import { + CloudFormationClient as BaseCloudFormationClient, + CreateStackCommand, + CreateStackCommandOutput, + DeleteStackCommand, + DeleteStackCommandOutput, + DescribeStacksCommand, + StackStatus, + Stack, +} from '@aws-sdk/client-cloudformation'; import { ResourceConstants } from 'graphql-transformer-common'; -async function promisify(fun: (arg: I, cb: (e: Error, d: O) => void) => void, args: I, that: any): Promise { - return new Promise((resolve, reject) => { - fun.apply(that, [ - args, - (err: Error, data: O) => { - if (err) { - return reject(err); - } - resolve(data); - }, - ]); - }); -} - export class CloudFormationClient { - client: CloudFormation; + client: BaseCloudFormationClient; constructor(public region: string) { - this.client = new CloudFormation({ apiVersion: '2010-05-15', region: this.region }); + this.client = new BaseCloudFormationClient({ region: this.region }); } - async updateStack(template: any, name: string, defParams: any = {}, addAppSyncApiName = true) { + async updateStack(template: any, name: string, defParams: any = {}, addAppSyncApiName = true): Promise { return this.createStack(template, name, defParams, addAppSyncApiName, true); } - async createStack(template: any, name: string, defParams: any = {}, addAppSyncApiName = true, isUpdate = false) { + async createStack( + _template: any, + name: string, + defParams: any = {}, + addAppSyncApiName = true, + _isUpdate = false, + ): Promise { const params = []; if (addAppSyncApiName === true) { @@ -46,39 +47,32 @@ export class CloudFormationClient { const templateURL = `https://s3.amazonaws.com/${defParams.S3DeploymentBucket}/${defParams.S3DeploymentRootKey}/rootStack.json`; - return promisify( - isUpdate ? this.client.updateStack : this.client.createStack, - { + return this.client.send( + new CreateStackCommand({ StackName: name, Capabilities: ['CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND'], Parameters: params, TemplateURL: templateURL, - }, - this.client, + }), ); } - async deleteStack(name: string) { - return promisify(this.client.deleteStack, { StackName: name }, this.client); + async deleteStack(name: string): Promise { + return this.client.send( + new DeleteStackCommand({ + StackName: name, + }), + ); } - async describeStack(name: string): Promise { - return new Promise((resolve, reject) => { - this.client.describeStacks( - { + async describeStack(name: string): Promise { + return ( + await this.client.send( + new DescribeStacksCommand({ StackName: name, - }, - (err: Error, data: DescribeStacksOutput) => { - if (err) { - return reject(err); - } - if (data.Stacks.length !== 1) { - return reject(new Error(`No stack named: ${name}`)); - } - resolve(data.Stacks[0]); - }, - ); - }); + }), + ) + ).Stacks?.[0]; } /** @@ -107,21 +101,24 @@ export class CloudFormationClient { ], maxPolls = 1000, pollInterval = 20, - ): Promise { + ): Promise { const stack = await this.describeStack(name); + if (!stack?.StackStatus) { + throw new Error(`Stack ${name} does not exist`); + } if (success.includes(stack.StackStatus)) { - return Promise.resolve(stack); + return stack; } if (failure.includes(stack.StackStatus)) { - return Promise.reject(new Error(`Stack ${stack.StackName} failed with status "${stack.StackStatus}"`)); + throw new Error(`Stack ${stack.StackName} failed with status "${stack.StackStatus}"`); } if (poll.includes(stack.StackStatus)) { if (maxPolls === 0) { - return Promise.reject(new Error('Stack did not finish before hitting the max poll count.')); + throw new Error('Stack did not finish before hitting the max poll count.'); } - return this.wait(pollInterval, this.waitForStack, name, success, failure, poll, maxPolls - 1, pollInterval); + return this.wait(pollInterval, this.waitForStack, name, success, failure, poll, maxPolls - 1, pollInterval); } - return Promise.reject(new Error(`Invalid stack status: ${stack.StackStatus}`)); + throw new Error(`Invalid stack status: ${stack.StackStatus}`); } /** diff --git a/packages/graphql-transformers-e2e-tests/src/S3Client.ts b/packages/graphql-transformers-e2e-tests/src/S3Client.ts index 97d78a2c97..a5090bccd8 100644 --- a/packages/graphql-transformers-e2e-tests/src/S3Client.ts +++ b/packages/graphql-transformers-e2e-tests/src/S3Client.ts @@ -1,5 +1,5 @@ /* eslint-disable */ -import fs = require('fs'); +import fs from 'fs'; import { S3Client as S3ClientSDK, CreateBucketCommand, @@ -11,11 +11,11 @@ import { GetObjectCommand, GetObjectCommandOutput, ListObjectVersionsCommand, - ListObjectVersionsCommandOutput, DeleteObjectCommand, DeleteObjectCommandOutput, DeleteBucketCommand, DeleteBucketCommandOutput, + ObjectVersion, } from '@aws-sdk/client-s3'; export class S3Client { @@ -70,12 +70,25 @@ export class S3Client { ); } - async getAllObjectVersions(bucketName: string): Promise { - return this.client.send( - new ListObjectVersionsCommand({ - Bucket: bucketName, - }), - ); + async getAllObjectVersions(bucketName: string): Promise { + let objectVersions: ObjectVersion[] = []; + let isTruncated: boolean = false; + let NextKeyMarker: string | undefined; + let NextVersionIdMarker: string | undefined; + do { + const page = await this.client.send( + new ListObjectVersionsCommand({ + Bucket: bucketName, + KeyMarker: NextKeyMarker, + VersionIdMarker: NextVersionIdMarker, + }), + ); + objectVersions.push(...(page.Versions || [])); + NextKeyMarker = page.NextKeyMarker; + NextVersionIdMarker = page.NextVersionIdMarker; + isTruncated = page.IsTruncated || false; + } while (isTruncated); + return objectVersions; } async deleteObjectVersion(bucketName: string, versionId: string, s3key: string): Promise { @@ -89,8 +102,7 @@ export class S3Client { } async deleteFile(bucketName: string, s3key: string): Promise { - const response = await this.getAllObjectVersions(bucketName); - const versions = response.Versions || []; + const versions = await this.getAllObjectVersions(bucketName); for (const version of versions) { if (!version.VersionId) continue; await this.deleteObjectVersion(bucketName, version.VersionId, s3key); @@ -105,6 +117,14 @@ export class S3Client { ); } + async emptyBucket(bucketName: string): Promise { + const versions = await this.getAllObjectVersions(bucketName); + for (const version of versions) { + if (!version.VersionId) continue; + await this.deleteObjectVersion(bucketName, version.VersionId, version.Key!); + } + } + async setUpS3Resources(bucketName: string, filePath: string, s3key: string, zip?: boolean) { await this.createBucket(bucketName); await this.putBucketVersioning(bucketName); diff --git a/packages/graphql-transformers-e2e-tests/src/authExhaustiveTestUtils.ts b/packages/graphql-transformers-e2e-tests/src/authExhaustiveTestUtils.ts index 4e1da54875..98bf21d13b 100644 --- a/packages/graphql-transformers-e2e-tests/src/authExhaustiveTestUtils.ts +++ b/packages/graphql-transformers-e2e-tests/src/authExhaustiveTestUtils.ts @@ -1,18 +1,19 @@ +/* eslint-disable import/no-extraneous-dependencies */ import * as crypto from 'crypto'; import { AuthProvider, AuthStrategy, AuthTransformer, ModelOperation } from '@aws-amplify/graphql-auth-transformer'; import { JWTToken } from '@aws-amplify/amplify-appsync-simulator'; import { Auth } from 'aws-amplify'; import AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync'; -import { CognitoIdentity, S3 } from 'aws-sdk'; -import { Output } from 'aws-sdk/clients/cloudformation'; -import { default as CognitoClient } from 'aws-sdk/clients/cognitoidentityserviceprovider'; +import { Output } from '@aws-sdk/client-cloudformation'; +import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { AppSyncAuthConfiguration, SynthParameters } from '@aws-amplify/graphql-transformer-interfaces'; import gql from 'graphql-tag'; import { plurality, ResourceConstants } from 'graphql-transformer-common'; import { v4 } from 'uuid'; -import { GraphQLTransform } from '@aws-amplify/graphql-transformer-core'; import { ModelTransformer } from '@aws-amplify/graphql-model-transformer'; import { PrimaryKeyTransformer } from '@aws-amplify/graphql-index-transformer'; +import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; import { CloudFormationClient } from './CloudFormationClient'; import { addUserToGroup, @@ -29,13 +30,12 @@ import { cleanupStackAfterTest, deploy } from './deployNestedStacks'; import { IAMHelper } from './IAMHelper'; import { S3Client } from './S3Client'; import { resolveTestRegion } from './testSetup'; -import { testTransform } from '@aws-amplify/graphql-transformer-test-utils'; const REGION = resolveTestRegion(); const IAM_HELPER = new IAMHelper(REGION); const CF = new CloudFormationClient(REGION); -const COGNITO_CLIENT = new CognitoClient({ apiVersion: '2016-04-19', region: REGION }); -const IDENTITY_CLIENT = new CognitoIdentity({ apiVersion: '2014-06-30', region: REGION }); +const COGNITO_CLIENT = new CognitoIdentityProviderClient({ region: REGION }); +const IDENTITY_CLIENT = new CognitoIdentityClient({ region: REGION }); const USERNAME1 = 'user1@test.com'; const TMP_PASSWORD = 'Password123!'; @@ -456,9 +456,9 @@ export const deploySchema = async ( buildTimestamp: string, synthParameters?: Partial, ) => { + const customS3Client = new S3Client(REGION); try { - const awsS3Client = new S3({ region: REGION }); - await awsS3Client.createBucket({ Bucket: bucketName }).promise(); + await customS3Client.createBucket(bucketName); } catch (e) { // fail early if we can't create the bucket expect(e).not.toBeDefined(); @@ -492,8 +492,6 @@ export const deploySchema = async ( synthParameters, }); - const customS3Client = new S3Client(REGION); - const finishedStack = await deploy( customS3Client, CF, diff --git a/packages/graphql-transformers-e2e-tests/src/deploySchema.ts b/packages/graphql-transformers-e2e-tests/src/deploySchema.ts index 1acd7c3f11..87e477f599 100644 --- a/packages/graphql-transformers-e2e-tests/src/deploySchema.ts +++ b/packages/graphql-transformers-e2e-tests/src/deploySchema.ts @@ -1,21 +1,20 @@ +/* eslint-disable import/no-extraneous-dependencies */ import * as path from 'path'; import * as os from 'os'; -import { default as S3 } from 'aws-sdk/clients/s3'; import moment from 'moment'; -import { Output } from 'aws-sdk/clients/cloudformation'; +import { Output } from '@aws-sdk/client-cloudformation'; import { ResourceConstants } from 'graphql-transformer-common'; import * as fs from 'fs-extra'; +import { DeploymentResources } from '@aws-amplify/graphql-transformer-test-utils'; import { CloudFormationClient } from './CloudFormationClient'; import { GraphQLClient } from './GraphQLClient'; import { S3Client } from './S3Client'; import { cleanupStackAfterTest, deploy } from './deployNestedStacks'; import { resolveTestRegion } from './testSetup'; -import { DeploymentResources } from '@aws-amplify/graphql-transformer-test-utils'; const region = resolveTestRegion(); const cf = new CloudFormationClient(region); const customS3Client = new S3Client(region); -const awsS3Client = new S3({ region: region }); /** * Interface for object that can manage graphql api deployments and cleanup for e2e tests @@ -54,7 +53,7 @@ export const getSchemaDeployer = async (testId: string, transform: (schema: stri // create deployment bucket try { - await awsS3Client.createBucket({ Bucket: testBucketName }).promise(); + await customS3Client.createBucket(testBucketName); } catch (err) { console.error(`Failed to create bucket ${testBucketName}: ${err}`); } diff --git a/packages/graphql-transformers-e2e-tests/src/emptyBucket.ts b/packages/graphql-transformers-e2e-tests/src/emptyBucket.ts index 98fba2de9f..3e16558bd2 100644 --- a/packages/graphql-transformers-e2e-tests/src/emptyBucket.ts +++ b/packages/graphql-transformers-e2e-tests/src/emptyBucket.ts @@ -1,55 +1,15 @@ -import { default as S3 } from 'aws-sdk/clients/s3'; +import { S3Client } from './S3Client'; import { resolveTestRegion } from './testSetup'; const region = resolveTestRegion(); -const awsS3Client = new S3({ region: region }); +const customS3Client = new S3Client(region); -const emptyBucket = async (bucket: string) => { - let listObjects = await awsS3Client - .listObjectsV2({ - Bucket: bucket, - }) - .promise(); - while (true) { - try { - const objectIds = listObjects.Contents.map((content) => ({ - Key: content.Key, - })); - const response = await awsS3Client - .deleteObjects({ - Bucket: bucket, - Delete: { - Objects: objectIds, - }, - }) - .promise(); - } catch (e) { - console.error(`Error deleting objects: ${e}`); - } - if (listObjects.NextContinuationToken) { - listObjects = await awsS3Client - .listObjectsV2({ - Bucket: bucket, - ContinuationToken: listObjects.NextContinuationToken, - }) - .promise(); - } else { - break; - } - } - try { - await awsS3Client - .deleteBucket({ - Bucket: bucket, - }) - .promise(); - const params = { - Bucket: bucket, - $waiter: { maxAttempts: 10 }, - }; - await awsS3Client.waitFor('bucketNotExists', params).promise(); - } catch (e) { - console.error(`Error deleting bucket: ${e}`); - } +/** + * Empties *and **deletes*** a bucket. + */ +const emptyBucket = async (bucket: string): Promise => { + await customS3Client.emptyBucket(bucket); + await customS3Client.deleteBucket(bucket); }; + export default emptyBucket; From a081cf466e7631f1e2de1ad5d08d8ea8eefaefb6 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 20 Jun 2025 12:07:22 -0500 Subject: [PATCH 13/37] fixes --- .../src/S3Client.ts | 10 ++++++++++ .../FunctionTransformerTestsV2.e2e.test.ts | 15 +++++++-------- .../MultiAuthV2Transformer.e2e.test.ts | 2 +- .../PredictionsTransformerV2Tests.e2e.test.ts | 17 ++--------------- .../SubscriptionsWithAuthV2.e2e.test.ts | 1 - .../SubscriptionsWithAuthV2WithFF.e2e.test.ts | 1 - .../src/deployNestedStacks.ts | 8 +------- 7 files changed, 21 insertions(+), 33 deletions(-) diff --git a/packages/graphql-transformers-e2e-tests/src/S3Client.ts b/packages/graphql-transformers-e2e-tests/src/S3Client.ts index a5090bccd8..51e004fdd6 100644 --- a/packages/graphql-transformers-e2e-tests/src/S3Client.ts +++ b/packages/graphql-transformers-e2e-tests/src/S3Client.ts @@ -61,6 +61,16 @@ export class S3Client { ); } + async putObject(bucketName: string, s3key: string, body: string | Buffer): Promise { + return this.client.send( + new PutObjectCommand({ + Bucket: bucketName, + Key: s3key, + Body: body, + }), + ); + } + async getFileVersion(bucketName: string, s3key: string): Promise { return this.client.send( new GetObjectCommand({ diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/FunctionTransformerTestsV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/FunctionTransformerTestsV2.e2e.test.ts index 545b818e44..2f2a00f113 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/FunctionTransformerTestsV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/FunctionTransformerTestsV2.e2e.test.ts @@ -125,14 +125,13 @@ const deleteEchoFunctionInOtherAccount = async (accountId: string) => { expect(true).toEqual(false); return; } - const crossAccountLambdaHelper = new LambdaHelper( - region, - new AWS.Credentials(accountCredentials.AccessKeyId, accountCredentials.SecretAccessKey, accountCredentials.SessionToken), - ); - const crossAccountIAMHelper = new IAMHelper( - region, - new AWS.Credentials(accountCredentials.AccessKeyId, accountCredentials.SecretAccessKey, accountCredentials.SessionToken), - ); + const credentials: AwsCredentialIdentity = { + accessKeyId: accountCredentials.AccessKeyId, + secretAccessKey: accountCredentials.SecretAccessKey, + sessionToken: accountCredentials.SessionToken, + }; + const crossAccountLambdaHelper = new LambdaHelper(region, credentials); + const crossAccountIAMHelper = new IAMHelper(region, credentials); await crossAccountLambdaHelper.deleteFunction(ECHO_FUNCTION_NAME); await crossAccountIAMHelper.detachPolicy(CROSS_ACCOUNT_LAMBDA_EXECUTION_POLICY_ARN, LAMBDA_EXECUTION_ROLE_NAME); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2Transformer.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2Transformer.e2e.test.ts index 58adc41cfc..462c322f8c 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2Transformer.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/MultiAuthV2Transformer.e2e.test.ts @@ -391,7 +391,7 @@ beforeAll(async () => { `; // create deployment bucket try { - await awsS3Client.createBucket(BUCKET_NAME); + await customS3Client.createBucket(BUCKET_NAME); } catch (e) { // fail early if we can't create the bucket expect(e).not.toBeDefined(); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/PredictionsTransformerV2Tests.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/PredictionsTransformerV2Tests.e2e.test.ts index 78983821c3..176a280b80 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/PredictionsTransformerV2Tests.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/PredictionsTransformerV2Tests.e2e.test.ts @@ -20,7 +20,6 @@ jest.setTimeout(2000000); const cf = new CloudFormationClient(AWS_REGION); const customS3Client = new S3Client(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); const STACK_NAME = `PredictionsTransformerV2Tests-${BUILD_TIMESTAMP}`; const BUCKET_NAME = `appsync-predictions-transformer-v2-test-bucket-${BUILD_TIMESTAMP}`; @@ -135,13 +134,7 @@ test('identify image text', async () => { const file = path.join(__dirname, 'test-data', 'amazon.png'); const buffer = fs.readFileSync(file); - const params = { - Key: 'public/amazon-logo.png', - Body: buffer, - Bucket: BUCKET_NAME, - }; - - await awsS3Client.upload(params).promise(); + await customS3Client.putObject(BUCKET_NAME, 'public/amazon-logo.png', buffer); const response = await GRAPHQL_CLIENT.query( `query TranslateImageText($input: TranslateImageTextInput!) { translateImageText(input: $input) @@ -163,13 +156,7 @@ test('identify labels', async () => { const file = path.join(__dirname, 'test-data', 'dogs.png'); const buffer = fs.readFileSync(file); - const params = { - Key: 'public/dogs.png', - Body: buffer, - Bucket: BUCKET_NAME, - }; - - await awsS3Client.upload(params).promise(); + await customS3Client.putObject(BUCKET_NAME, 'public/dogs.png', buffer); const response = await GRAPHQL_CLIENT.query( `query TranslateLabels($input: TranslateLabelsInput!) { translateLabels(input: $input) diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2.e2e.test.ts index 4162cfcb87..2b608eef1e 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2.e2e.test.ts @@ -68,7 +68,6 @@ const customS3Client = new S3Client(AWS_REGION); const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); // stack info const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); diff --git a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2WithFF.e2e.test.ts b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2WithFF.e2e.test.ts index ee1454af26..ffd1b8bb08 100644 --- a/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2WithFF.e2e.test.ts +++ b/packages/graphql-transformers-e2e-tests/src/__tests__/SubscriptionsWithAuthV2WithFF.e2e.test.ts @@ -67,7 +67,6 @@ const customS3Client = new S3Client(AWS_REGION); const cognitoClient = new CognitoIdentityProviderClient({ region: AWS_REGION }); const identityClient = new CognitoIdentityClient({ region: AWS_REGION }); const iamHelper = new IAMHelper(AWS_REGION); -const awsS3Client = new S3({ region: AWS_REGION }); // stack info const BUILD_TIMESTAMP = moment().format('YYYYMMDDHHmmss'); diff --git a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts index 4a0c753453..4db764040f 100644 --- a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts +++ b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts @@ -49,13 +49,7 @@ async function uploadDirectory(client: S3Client, directory: string, bucket: stri const fileKey = s3Location; await client.wait(0.25, () => Promise.resolve()); const fileContents = await fs.readFileSync(contentPath); - await client.client - .putObject({ - Bucket: bucket, - Key: fileKey, - Body: fileContents, - }) - .promise(); + await client.putObject(bucket, fileKey, fileContents); const formattedName = file .split('.') .map((s, i) => (i > 0 ? `${s[0].toUpperCase()}${s.slice(1, s.length)}` : s)) From 0e0a5264ec9fedc3935776ef529f30b5e846ee2b Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 20 Jun 2025 12:31:25 -0500 Subject: [PATCH 14/37] fix Buffer arg type??? --- packages/graphql-transformers-e2e-tests/src/S3Client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphql-transformers-e2e-tests/src/S3Client.ts b/packages/graphql-transformers-e2e-tests/src/S3Client.ts index 51e004fdd6..75d6821f50 100644 --- a/packages/graphql-transformers-e2e-tests/src/S3Client.ts +++ b/packages/graphql-transformers-e2e-tests/src/S3Client.ts @@ -61,7 +61,7 @@ export class S3Client { ); } - async putObject(bucketName: string, s3key: string, body: string | Buffer): Promise { + async putObject(bucketName: string, s3key: string, body: string | Buffer): Promise { return this.client.send( new PutObjectCommand({ Bucket: bucketName, From 62fb6083e0f4fdf8c7efa54208a5d2dd21408f67 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 20 Jun 2025 14:00:31 -0500 Subject: [PATCH 15/37] fix missed cleanup script in e2e-tests --- .../src/cleanup-stale-test-buckets.ts | 60 ++++++++----------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts b/packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts index d291c9a800..d7e0a870b6 100644 --- a/packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts +++ b/packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts @@ -1,4 +1,8 @@ -import { S3, STS, Organizations } from 'aws-sdk'; +/* eslint-disable import/no-extraneous-dependencies */ +import { S3Client, Bucket, ListBucketsCommand } from '@aws-sdk/client-s3'; +import { STSClient, AssumeRoleCommand, GetCallerIdentityCommand } from '@aws-sdk/client-sts'; +import { Organizations, ListAccountsCommand } from '@aws-sdk/client-organizations'; +import { AwsCredentialIdentity } from '@aws-sdk/types'; import { deleteS3Bucket } from 'amplify-category-api-e2e-core'; const TEST_BUCKET_REGEX = /test/; @@ -13,37 +17,20 @@ const testBucketStalenessFilter = (bucket: S3.Bucket): boolean => { return isTestBucket && isStaleBucket; }; -type AWSAccountInfo = { - accessKeyId: string; - secretAccessKey: string; - sessionToken: string; -}; - -/** - * Get the relevant AWS config object for a given account and region. - */ -const getAWSConfig = ({ accessKeyId, secretAccessKey, sessionToken }: AWSAccountInfo): S3.ClientConfiguration => ({ - credentials: { - accessKeyId, - secretAccessKey, - sessionToken, - }, -}); - /** * Get all S3 buckets in the account, and filter down to the ones we consider stale. */ -const getStaleS3TestBuckets = async (account: AWSAccountInfo): Promise => { - const s3Client = new S3(getAWSConfig(account)); - const listBucketResponse = await s3Client.listBuckets().promise(); +const getStaleS3TestBuckets = async (account: AwsCredentialIdentity): Promise => { + const s3Client = new S3Client({ credentials: account }); + const listBucketResponse = await s3Client.send(new ListBucketsCommand()); return listBucketResponse.Buckets.filter(testBucketStalenessFilter); }; -const deleteBucket = async (account: AWSAccountInfo, accountIndex: number, bucket: S3.Bucket): Promise => { +const deleteBucket = async (account: AwsCredentialIdentity, accountIndex: number, bucket: Bucket): Promise => { const { Name, CreationDate } = bucket; try { console.log(`[ACCOUNT ${accountIndex}] Deleting S3 Bucket ${Name} created on ${CreationDate}`); - const s3 = new S3(getAWSConfig(account)); + const s3 = new S3Client({ credentials: account }); await deleteS3Bucket(Name, s3); } catch (e) { console.log(`[ACCOUNT ${accountIndex}] Deleting S3 Bucket ${Name} failed with error ${e.message}`); @@ -54,21 +41,23 @@ const deleteBucket = async (account: AWSAccountInfo, accountIndex: number, bucke * Retrieve the accounts to process for potential cleanup. By default we will attempt * to get all accounts within the root account organization. */ -const getAccountsToCleanup = async (): Promise => { - const sts = new STS({ +const getAccountsToCleanup = async (): Promise => { + const sts = new STSClient({ apiVersion: '2011-06-15', - accessKeyId: process.env.AWS_ACCESS_KEY_ID, - secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, - sessionToken: process.env.AWS_SESSION_TOKEN, + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + sessionToken: process.env.AWS_SESSION_TOKEN, + }, }); - const parentAccountIdentity = await sts.getCallerIdentity().promise(); + const parentAccountIdentity = await sts.send(new GetCallerIdentityCommand()); const orgApi = new Organizations({ apiVersion: '2016-11-28', // the region where the organization exists region: 'us-east-1', }); try { - const orgAccounts = await orgApi.listAccounts().promise(); + const orgAccounts = await orgApi.send(new ListAccountsCommand({})); const accountCredentialPromises = orgAccounts.Accounts.map(async (account) => { if (account.Id === parentAccountIdentity.Account) { return { @@ -79,14 +68,14 @@ const getAccountsToCleanup = async (): Promise => { } const randomNumber = Math.floor(Math.random() * 100000); - const assumeRoleRes = await sts - .assumeRole({ + const assumeRoleRes = await sts.send( + new AssumeRoleCommand({ RoleArn: `arn:aws:iam::${account.Id}:role/OrganizationAccountAccessRole`, RoleSessionName: `testSession${randomNumber}`, // One hour DurationSeconds: 1 * 60 * 60, - }) - .promise(); + }), + ); return { accessKeyId: assumeRoleRes.Credentials.AccessKeyId, secretAccessKey: assumeRoleRes.Credentials.SecretAccessKey, @@ -109,7 +98,7 @@ const getAccountsToCleanup = async (): Promise => { } }; -const deleteBucketsForAccount = async (account: AWSAccountInfo, accountIndex: number): Promise => { +const deleteBucketsForAccount = async (account: AwsCredentialIdentity, accountIndex: number): Promise => { const buckets = await getStaleS3TestBuckets(account); await Promise.all(buckets.map((bucket) => deleteBucket(account, accountIndex, bucket))); console.log(`[ACCOUNT ${accountIndex}] Cleanup done!`); @@ -124,4 +113,5 @@ const cleanup = async (): Promise => { console.log('Done cleaning all stale s3 buckets!'); }; +// eslint-disable-next-line @typescript-eslint/no-floating-promises cleanup(); From 0928829dea5b1f1f26a4be1117294b08677f1b23 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 20 Jun 2025 14:22:14 -0500 Subject: [PATCH 16/37] fixing missed S3 type ref cleanup --- packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts b/packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts index d7e0a870b6..9cbce21a2c 100644 --- a/packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts +++ b/packages/amplify-e2e-tests/src/cleanup-stale-test-buckets.ts @@ -11,7 +11,7 @@ const BUCKET_STALE_DURATION_MS = 6 * 60 * 60 * 1000; // 6 hours in milliseconds /** * We define a bucket as viable for deletion if it has 'test' in the name, and if it is >6 hours old. */ -const testBucketStalenessFilter = (bucket: S3.Bucket): boolean => { +const testBucketStalenessFilter = (bucket: Bucket): boolean => { const isTestBucket = bucket.Name.match(TEST_BUCKET_REGEX); const isStaleBucket = Date.now() - bucket.CreationDate.getMilliseconds() > BUCKET_STALE_DURATION_MS; return isTestBucket && isStaleBucket; From 615a76fa02f603a57a55276b7088f6cc515e0d63 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 20 Jun 2025 15:13:14 -0500 Subject: [PATCH 17/37] chore: update dep licenses --- dependency_licenses.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependency_licenses.txt b/dependency_licenses.txt index 3207cca43c..b9d78013ab 100644 --- a/dependency_licenses.txt +++ b/dependency_licenses.txt @@ -2586,7 +2586,7 @@ Apache License ----- -The following software may be included in this product: @aws-sdk/abort-controller, @aws-sdk/chunked-blob-reader, @aws-sdk/chunked-blob-reader-native, @aws-sdk/config-resolver, @aws-sdk/credential-provider-env, @aws-sdk/credential-provider-imds, @aws-sdk/credential-provider-ini, @aws-sdk/credential-provider-node, @aws-sdk/credential-providers, @aws-sdk/fetch-http-handler, @aws-sdk/hash-blob-browser, @aws-sdk/hash-node, @aws-sdk/hash-stream-node, @aws-sdk/is-array-buffer, @aws-sdk/lib-storage, @aws-sdk/md5-js, @aws-sdk/middleware-content-length, @aws-sdk/middleware-sdk-ec2, @aws-sdk/middleware-signing, @aws-sdk/middleware-stack, @aws-sdk/node-http-handler, @aws-sdk/property-provider, @aws-sdk/region-config-resolver, @aws-sdk/shared-ini-file-loader, @aws-sdk/signature-v4, @aws-sdk/token-providers, @aws-sdk/types, @aws-sdk/util-arn-parser, @aws-sdk/util-base64-browser, @aws-sdk/util-base64-node, @aws-sdk/util-body-length-browser, @aws-sdk/util-body-length-node, @aws-sdk/util-buffer-from, @aws-sdk/util-endpoints, @aws-sdk/util-format-url, @aws-sdk/util-hex-encoding, @aws-sdk/util-locate-window, @aws-sdk/util-uri-escape, @aws-sdk/util-utf8-browser, @aws-sdk/util-utf8-node, @aws-sdk/util-waiter, @aws-sdk/xml-builder, @smithy/abort-controller, @smithy/chunked-blob-reader, @smithy/chunked-blob-reader-native, @smithy/config-resolver, @smithy/credential-provider-imds, @smithy/fetch-http-handler, @smithy/hash-blob-browser, @smithy/hash-node, @smithy/hash-stream-node, @smithy/is-array-buffer, @smithy/md5-js, @smithy/middleware-content-length, @smithy/middleware-endpoint, @smithy/middleware-stack, @smithy/node-http-handler, @smithy/property-provider, @smithy/shared-ini-file-loader, @smithy/signature-v4, @smithy/util-base64, @smithy/util-body-length-browser, @smithy/util-body-length-node, @smithy/util-buffer-from, @smithy/util-hex-encoding, @smithy/util-stream, @smithy/util-uri-escape, @smithy/util-utf8, @smithy/util-waiter. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/abort-controller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/chunked-blob-reader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/chunked-blob-reader-native), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-env), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-imds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-ini), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/fetch-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-blob-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-stream-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/is-array-buffer), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/lib-storage), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/md5-js), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-content-length), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-ec2), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-signing), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-stack), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/node-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/property-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/region-config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/shared-ini-file-loader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/signature-v4), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/token-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/types), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-arn-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-buffer-from), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-endpoints), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-format-url), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-hex-encoding), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-locate-window), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-uri-escape), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-waiter), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/xml-builder), https://github.com/smithy-lang/smithy-typescript.git (@smithy/abort-controller), https://github.com/awslabs/smithy-typescript.git (@smithy/chunked-blob-reader), https://github.com/awslabs/smithy-typescript.git (@smithy/chunked-blob-reader-native), https://github.com/smithy-lang/smithy-typescript.git (@smithy/config-resolver), https://github.com/smithy-lang/smithy-typescript.git (@smithy/credential-provider-imds), https://github.com/awslabs/smithy-typescript.git (@smithy/fetch-http-handler), https://github.com/smithy-lang/smithy-typescript.git (@smithy/hash-blob-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/hash-node), https://github.com/smithy-lang/smithy-typescript.git (@smithy/hash-stream-node), https://github.com/awslabs/smithy-typescript.git (@smithy/is-array-buffer), https://github.com/smithy-lang/smithy-typescript.git (@smithy/md5-js), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-content-length), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-endpoint), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-stack), https://github.com/smithy-lang/smithy-typescript.git (@smithy/node-http-handler), https://github.com/smithy-lang/smithy-typescript.git (@smithy/property-provider), https://github.com/smithy-lang/smithy-typescript.git (@smithy/shared-ini-file-loader), https://github.com/smithy-lang/smithy-typescript.git (@smithy/signature-v4), https://github.com/awslabs/smithy-typescript.git (@smithy/util-base64), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-node), https://github.com/awslabs/smithy-typescript.git (@smithy/util-buffer-from), https://github.com/awslabs/smithy-typescript.git (@smithy/util-hex-encoding), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-stream), https://github.com/awslabs/smithy-typescript.git (@smithy/util-uri-escape), https://github.com/awslabs/smithy-typescript.git (@smithy/util-utf8), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-waiter). This software contains the following license and notice below: +The following software may be included in this product: @aws-sdk/abort-controller, @aws-sdk/chunked-blob-reader, @aws-sdk/chunked-blob-reader-native, @aws-sdk/config-resolver, @aws-sdk/credential-provider-env, @aws-sdk/credential-provider-imds, @aws-sdk/credential-provider-ini, @aws-sdk/credential-provider-node, @aws-sdk/credential-providers, @aws-sdk/fetch-http-handler, @aws-sdk/hash-blob-browser, @aws-sdk/hash-node, @aws-sdk/hash-stream-node, @aws-sdk/is-array-buffer, @aws-sdk/lib-dynamodb, @aws-sdk/lib-storage, @aws-sdk/md5-js, @aws-sdk/middleware-content-length, @aws-sdk/middleware-sdk-ec2, @aws-sdk/middleware-signing, @aws-sdk/middleware-stack, @aws-sdk/node-http-handler, @aws-sdk/property-provider, @aws-sdk/region-config-resolver, @aws-sdk/shared-ini-file-loader, @aws-sdk/signature-v4, @aws-sdk/token-providers, @aws-sdk/types, @aws-sdk/util-arn-parser, @aws-sdk/util-base64-browser, @aws-sdk/util-base64-node, @aws-sdk/util-body-length-browser, @aws-sdk/util-body-length-node, @aws-sdk/util-buffer-from, @aws-sdk/util-dynamodb, @aws-sdk/util-endpoints, @aws-sdk/util-format-url, @aws-sdk/util-hex-encoding, @aws-sdk/util-locate-window, @aws-sdk/util-uri-escape, @aws-sdk/util-utf8-browser, @aws-sdk/util-utf8-node, @aws-sdk/util-waiter, @aws-sdk/xml-builder, @smithy/abort-controller, @smithy/chunked-blob-reader, @smithy/chunked-blob-reader-native, @smithy/config-resolver, @smithy/credential-provider-imds, @smithy/fetch-http-handler, @smithy/hash-blob-browser, @smithy/hash-node, @smithy/hash-stream-node, @smithy/is-array-buffer, @smithy/md5-js, @smithy/middleware-content-length, @smithy/middleware-endpoint, @smithy/middleware-stack, @smithy/node-http-handler, @smithy/property-provider, @smithy/shared-ini-file-loader, @smithy/signature-v4, @smithy/util-base64, @smithy/util-body-length-browser, @smithy/util-body-length-node, @smithy/util-buffer-from, @smithy/util-hex-encoding, @smithy/util-stream, @smithy/util-uri-escape, @smithy/util-utf8, @smithy/util-waiter. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/abort-controller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/chunked-blob-reader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/chunked-blob-reader-native), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-env), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-imds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-ini), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/fetch-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-blob-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-stream-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/is-array-buffer), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/lib-dynamodb), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/lib-storage), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/md5-js), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-content-length), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-ec2), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-signing), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-stack), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/node-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/property-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/region-config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/shared-ini-file-loader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/signature-v4), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/token-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/types), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-arn-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-buffer-from), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-dynamodb), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-endpoints), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-format-url), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-hex-encoding), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-locate-window), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-uri-escape), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-waiter), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/xml-builder), https://github.com/smithy-lang/smithy-typescript.git (@smithy/abort-controller), https://github.com/awslabs/smithy-typescript.git (@smithy/chunked-blob-reader), https://github.com/awslabs/smithy-typescript.git (@smithy/chunked-blob-reader-native), https://github.com/smithy-lang/smithy-typescript.git (@smithy/config-resolver), https://github.com/smithy-lang/smithy-typescript.git (@smithy/credential-provider-imds), https://github.com/smithy-lang/smithy-typescript.git (@smithy/fetch-http-handler), https://github.com/smithy-lang/smithy-typescript.git (@smithy/hash-blob-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/hash-node), https://github.com/smithy-lang/smithy-typescript.git (@smithy/hash-stream-node), https://github.com/awslabs/smithy-typescript.git (@smithy/is-array-buffer), https://github.com/smithy-lang/smithy-typescript.git (@smithy/md5-js), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-content-length), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-endpoint), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-stack), https://github.com/smithy-lang/smithy-typescript.git (@smithy/node-http-handler), https://github.com/smithy-lang/smithy-typescript.git (@smithy/property-provider), https://github.com/smithy-lang/smithy-typescript.git (@smithy/shared-ini-file-loader), https://github.com/smithy-lang/smithy-typescript.git (@smithy/signature-v4), https://github.com/awslabs/smithy-typescript.git (@smithy/util-base64), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-node), https://github.com/awslabs/smithy-typescript.git (@smithy/util-buffer-from), https://github.com/awslabs/smithy-typescript.git (@smithy/util-hex-encoding), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-stream), https://github.com/awslabs/smithy-typescript.git (@smithy/util-uri-escape), https://github.com/awslabs/smithy-typescript.git (@smithy/util-utf8), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-waiter). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -2792,7 +2792,7 @@ Apache License ----- -The following software may be included in this product: @aws-sdk/client-appsync, @aws-sdk/client-cloudformation, @aws-sdk/client-cloudwatch-logs, @aws-sdk/client-codebuild, @aws-sdk/client-cognito-identity, @aws-sdk/client-cognito-identity-provider, @aws-sdk/client-comprehend, @aws-sdk/client-dynamodb, @aws-sdk/client-ec2, @aws-sdk/client-ecr, @aws-sdk/client-ecs, @aws-sdk/client-elastic-load-balancing-v2, @aws-sdk/client-firehose, @aws-sdk/client-iam, @aws-sdk/client-kinesis, @aws-sdk/client-kms, @aws-sdk/client-lambda, @aws-sdk/client-lex-runtime-service, @aws-sdk/client-personalize-events, @aws-sdk/client-pinpoint, @aws-sdk/client-polly, @aws-sdk/client-rds, @aws-sdk/client-rds-data, @aws-sdk/client-rekognition, @aws-sdk/client-route-53, @aws-sdk/client-s3, @aws-sdk/client-secrets-manager, @aws-sdk/client-sfn, @aws-sdk/client-ssm, @aws-sdk/client-sso, @aws-sdk/client-sso-oidc, @aws-sdk/client-sts, @aws-sdk/client-textract, @aws-sdk/client-translate, @aws-sdk/credential-provider-cognito-identity, @aws-sdk/eventstream-codec, @aws-sdk/eventstream-marshaller, @aws-sdk/middleware-apply-body-checksum, @aws-sdk/middleware-bucket-endpoint, @aws-sdk/middleware-endpoint-discovery, @aws-sdk/middleware-eventstream, @aws-sdk/middleware-expect-continue, @aws-sdk/middleware-header-default, @aws-sdk/middleware-location-constraint, @aws-sdk/middleware-retry, @aws-sdk/middleware-sdk-rds, @aws-sdk/middleware-sdk-route53, @aws-sdk/middleware-sdk-sts, @aws-sdk/middleware-ssec, @aws-sdk/querystring-builder, @aws-sdk/querystring-parser, @aws-sdk/service-error-classification, @aws-sdk/url-parser, @aws-sdk/url-parser-native, @aws-sdk/util-defaults-mode-browser, @aws-sdk/util-defaults-mode-node, @aws-sdk/util-user-agent-browser, @aws-sdk/util-user-agent-node, @smithy/eventstream-codec, @smithy/middleware-retry, @smithy/querystring-builder, @smithy/querystring-parser, @smithy/service-error-classification, @smithy/url-parser, @smithy/util-defaults-mode-browser, @smithy/util-defaults-mode-node. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-appsync), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cloudformation), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cloudwatch-logs), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-codebuild), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cognito-identity), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cognito-identity-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-comprehend), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-dynamodb), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-ec2), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-ecr), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-ecs), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-elastic-load-balancing-v2), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-firehose), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-iam), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-kinesis), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-kms), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-lambda), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-lex-runtime-service), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-personalize-events), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-pinpoint), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-polly), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-rds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-rds-data), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-rekognition), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-route-53), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-s3), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-secrets-manager), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sfn), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-ssm), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sso), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sso-oidc), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sts), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-textract), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-translate), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-cognito-identity), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-codec), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-marshaller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-apply-body-checksum), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-bucket-endpoint), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-endpoint-discovery), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-eventstream), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-expect-continue), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-header-default), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-location-constraint), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-retry), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-rds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-route53), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-sts), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-ssec), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/querystring-builder), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/querystring-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/service-error-classification), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/url-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/url-parser-native), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-defaults-mode-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-defaults-mode-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-user-agent-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-user-agent-node), https://github.com/smithy-lang/smithy-typescript.git (@smithy/eventstream-codec), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-retry), https://github.com/smithy-lang/smithy-typescript.git (@smithy/querystring-builder), https://github.com/smithy-lang/smithy-typescript.git (@smithy/querystring-parser), https://github.com/smithy-lang/smithy-typescript.git (@smithy/service-error-classification), https://github.com/smithy-lang/smithy-typescript.git (@smithy/url-parser), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-defaults-mode-browser), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-defaults-mode-node). This software contains the following license and notice below: +The following software may be included in this product: @aws-sdk/client-amplify, @aws-sdk/client-amplifybackend, @aws-sdk/client-appsync, @aws-sdk/client-cloudformation, @aws-sdk/client-cloudwatch-logs, @aws-sdk/client-codebuild, @aws-sdk/client-cognito-identity, @aws-sdk/client-cognito-identity-provider, @aws-sdk/client-comprehend, @aws-sdk/client-dynamodb, @aws-sdk/client-ec2, @aws-sdk/client-ecr, @aws-sdk/client-ecs, @aws-sdk/client-elastic-load-balancing-v2, @aws-sdk/client-firehose, @aws-sdk/client-iam, @aws-sdk/client-kinesis, @aws-sdk/client-kms, @aws-sdk/client-lambda, @aws-sdk/client-lex-runtime-service, @aws-sdk/client-organizations, @aws-sdk/client-personalize-events, @aws-sdk/client-pinpoint, @aws-sdk/client-polly, @aws-sdk/client-rds, @aws-sdk/client-rds-data, @aws-sdk/client-rekognition, @aws-sdk/client-route-53, @aws-sdk/client-s3, @aws-sdk/client-secrets-manager, @aws-sdk/client-sfn, @aws-sdk/client-ssm, @aws-sdk/client-sso, @aws-sdk/client-sso-oidc, @aws-sdk/client-sts, @aws-sdk/client-textract, @aws-sdk/client-translate, @aws-sdk/credential-provider-cognito-identity, @aws-sdk/eventstream-codec, @aws-sdk/eventstream-marshaller, @aws-sdk/middleware-apply-body-checksum, @aws-sdk/middleware-bucket-endpoint, @aws-sdk/middleware-endpoint-discovery, @aws-sdk/middleware-eventstream, @aws-sdk/middleware-expect-continue, @aws-sdk/middleware-header-default, @aws-sdk/middleware-location-constraint, @aws-sdk/middleware-retry, @aws-sdk/middleware-sdk-rds, @aws-sdk/middleware-sdk-route53, @aws-sdk/middleware-sdk-sts, @aws-sdk/middleware-ssec, @aws-sdk/querystring-builder, @aws-sdk/querystring-parser, @aws-sdk/service-error-classification, @aws-sdk/url-parser, @aws-sdk/url-parser-native, @aws-sdk/util-defaults-mode-browser, @aws-sdk/util-defaults-mode-node, @aws-sdk/util-user-agent-browser, @aws-sdk/util-user-agent-node, @smithy/eventstream-codec, @smithy/middleware-retry, @smithy/querystring-builder, @smithy/querystring-parser, @smithy/service-error-classification, @smithy/url-parser, @smithy/util-defaults-mode-browser, @smithy/util-defaults-mode-node. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-amplify), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-amplifybackend), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-appsync), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cloudformation), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cloudwatch-logs), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-codebuild), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cognito-identity), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cognito-identity-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-comprehend), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-dynamodb), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-ec2), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-ecr), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-ecs), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-elastic-load-balancing-v2), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-firehose), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-iam), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-kinesis), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-kms), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-lambda), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-lex-runtime-service), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-organizations), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-personalize-events), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-pinpoint), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-polly), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-rds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-rds-data), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-rekognition), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-route-53), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-s3), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-secrets-manager), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sfn), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-ssm), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sso), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sso-oidc), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sts), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-textract), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-translate), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-cognito-identity), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-codec), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-marshaller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-apply-body-checksum), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-bucket-endpoint), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-endpoint-discovery), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-eventstream), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-expect-continue), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-header-default), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-location-constraint), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-retry), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-rds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-route53), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-sts), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-ssec), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/querystring-builder), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/querystring-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/service-error-classification), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/url-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/url-parser-native), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-defaults-mode-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-defaults-mode-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-user-agent-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-user-agent-node), https://github.com/smithy-lang/smithy-typescript.git (@smithy/eventstream-codec), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-retry), https://github.com/smithy-lang/smithy-typescript.git (@smithy/querystring-builder), https://github.com/smithy-lang/smithy-typescript.git (@smithy/querystring-parser), https://github.com/smithy-lang/smithy-typescript.git (@smithy/service-error-classification), https://github.com/smithy-lang/smithy-typescript.git (@smithy/url-parser), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-defaults-mode-browser), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-defaults-mode-node). This software contains the following license and notice below: Apache License Version 2.0, January 2004 From 411919007bd3c0b872e5d6a031e7d8fe298a5433 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 20 Jun 2025 15:31:43 -0500 Subject: [PATCH 18/37] chore: bump lint memory --- codebuild_specs/scripts/lint_pr.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codebuild_specs/scripts/lint_pr.sh b/codebuild_specs/scripts/lint_pr.sh index bb6bb611b7..4191a8f022 100755 --- a/codebuild_specs/scripts/lint_pr.sh +++ b/codebuild_specs/scripts/lint_pr.sh @@ -9,7 +9,7 @@ if [ -z "$PR_NUM" ]; then exit fi -export NODE_OPTIONS=--max-old-space-size=4096 +export NODE_OPTIONS=--max-old-space-size=8192 # get PR file list, filter out removed files, filter only JS/TS files, then pass to the linter # The linter will print the errors but the build will still pass. From 779c6d02dd23bf8db6caf29325ac69fe90ded0bc Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Mon, 23 Jun 2025 14:06:40 -0500 Subject: [PATCH 19/37] chore: prettier --- packages/amplify-e2e-core/package.json | 2 +- packages/amplify-e2e-tests/package.json | 2 +- packages/graphql-transformers-e2e-tests/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/amplify-e2e-core/package.json b/packages/amplify-e2e-core/package.json index 1fd5c35aff..54567c37d9 100644 --- a/packages/amplify-e2e-core/package.json +++ b/packages/amplify-e2e-core/package.json @@ -65,4 +65,4 @@ "peerDependencies": { "@aws-amplify/amplify-cli-core": "^4.4.0" } -} \ No newline at end of file +} diff --git a/packages/amplify-e2e-tests/package.json b/packages/amplify-e2e-tests/package.json index e399e0164f..d4e2fadf47 100644 --- a/packages/amplify-e2e-tests/package.json +++ b/packages/amplify-e2e-tests/package.json @@ -146,4 +146,4 @@ "usePathForSuiteName": "true", "addFileAttribute": "true" } -} \ No newline at end of file +} diff --git a/packages/graphql-transformers-e2e-tests/package.json b/packages/graphql-transformers-e2e-tests/package.json index ebacf03e4e..132cfefb7a 100644 --- a/packages/graphql-transformers-e2e-tests/package.json +++ b/packages/graphql-transformers-e2e-tests/package.json @@ -125,4 +125,4 @@ "usePathForSuiteName": "true", "addFileAttribute": "true" } -} \ No newline at end of file +} From 1ad0de3a4ffa7a5a3b5b287355b1229e5ea91b2d Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Tue, 24 Jun 2025 10:16:37 -0500 Subject: [PATCH 20/37] chore: dep license update --- dependency_licenses.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependency_licenses.txt b/dependency_licenses.txt index b9d78013ab..716a1245ce 100644 --- a/dependency_licenses.txt +++ b/dependency_licenses.txt @@ -2586,7 +2586,7 @@ Apache License ----- -The following software may be included in this product: @aws-sdk/abort-controller, @aws-sdk/chunked-blob-reader, @aws-sdk/chunked-blob-reader-native, @aws-sdk/config-resolver, @aws-sdk/credential-provider-env, @aws-sdk/credential-provider-imds, @aws-sdk/credential-provider-ini, @aws-sdk/credential-provider-node, @aws-sdk/credential-providers, @aws-sdk/fetch-http-handler, @aws-sdk/hash-blob-browser, @aws-sdk/hash-node, @aws-sdk/hash-stream-node, @aws-sdk/is-array-buffer, @aws-sdk/lib-dynamodb, @aws-sdk/lib-storage, @aws-sdk/md5-js, @aws-sdk/middleware-content-length, @aws-sdk/middleware-sdk-ec2, @aws-sdk/middleware-signing, @aws-sdk/middleware-stack, @aws-sdk/node-http-handler, @aws-sdk/property-provider, @aws-sdk/region-config-resolver, @aws-sdk/shared-ini-file-loader, @aws-sdk/signature-v4, @aws-sdk/token-providers, @aws-sdk/types, @aws-sdk/util-arn-parser, @aws-sdk/util-base64-browser, @aws-sdk/util-base64-node, @aws-sdk/util-body-length-browser, @aws-sdk/util-body-length-node, @aws-sdk/util-buffer-from, @aws-sdk/util-dynamodb, @aws-sdk/util-endpoints, @aws-sdk/util-format-url, @aws-sdk/util-hex-encoding, @aws-sdk/util-locate-window, @aws-sdk/util-uri-escape, @aws-sdk/util-utf8-browser, @aws-sdk/util-utf8-node, @aws-sdk/util-waiter, @aws-sdk/xml-builder, @smithy/abort-controller, @smithy/chunked-blob-reader, @smithy/chunked-blob-reader-native, @smithy/config-resolver, @smithy/credential-provider-imds, @smithy/fetch-http-handler, @smithy/hash-blob-browser, @smithy/hash-node, @smithy/hash-stream-node, @smithy/is-array-buffer, @smithy/md5-js, @smithy/middleware-content-length, @smithy/middleware-endpoint, @smithy/middleware-stack, @smithy/node-http-handler, @smithy/property-provider, @smithy/shared-ini-file-loader, @smithy/signature-v4, @smithy/util-base64, @smithy/util-body-length-browser, @smithy/util-body-length-node, @smithy/util-buffer-from, @smithy/util-hex-encoding, @smithy/util-stream, @smithy/util-uri-escape, @smithy/util-utf8, @smithy/util-waiter. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/abort-controller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/chunked-blob-reader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/chunked-blob-reader-native), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-env), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-imds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-ini), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/fetch-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-blob-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-stream-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/is-array-buffer), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/lib-dynamodb), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/lib-storage), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/md5-js), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-content-length), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-ec2), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-signing), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-stack), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/node-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/property-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/region-config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/shared-ini-file-loader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/signature-v4), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/token-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/types), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-arn-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-buffer-from), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-dynamodb), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-endpoints), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-format-url), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-hex-encoding), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-locate-window), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-uri-escape), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-waiter), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/xml-builder), https://github.com/smithy-lang/smithy-typescript.git (@smithy/abort-controller), https://github.com/awslabs/smithy-typescript.git (@smithy/chunked-blob-reader), https://github.com/awslabs/smithy-typescript.git (@smithy/chunked-blob-reader-native), https://github.com/smithy-lang/smithy-typescript.git (@smithy/config-resolver), https://github.com/smithy-lang/smithy-typescript.git (@smithy/credential-provider-imds), https://github.com/smithy-lang/smithy-typescript.git (@smithy/fetch-http-handler), https://github.com/smithy-lang/smithy-typescript.git (@smithy/hash-blob-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/hash-node), https://github.com/smithy-lang/smithy-typescript.git (@smithy/hash-stream-node), https://github.com/awslabs/smithy-typescript.git (@smithy/is-array-buffer), https://github.com/smithy-lang/smithy-typescript.git (@smithy/md5-js), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-content-length), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-endpoint), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-stack), https://github.com/smithy-lang/smithy-typescript.git (@smithy/node-http-handler), https://github.com/smithy-lang/smithy-typescript.git (@smithy/property-provider), https://github.com/smithy-lang/smithy-typescript.git (@smithy/shared-ini-file-loader), https://github.com/smithy-lang/smithy-typescript.git (@smithy/signature-v4), https://github.com/awslabs/smithy-typescript.git (@smithy/util-base64), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-node), https://github.com/awslabs/smithy-typescript.git (@smithy/util-buffer-from), https://github.com/awslabs/smithy-typescript.git (@smithy/util-hex-encoding), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-stream), https://github.com/awslabs/smithy-typescript.git (@smithy/util-uri-escape), https://github.com/awslabs/smithy-typescript.git (@smithy/util-utf8), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-waiter). This software contains the following license and notice below: +The following software may be included in this product: @aws-sdk/abort-controller, @aws-sdk/chunked-blob-reader, @aws-sdk/chunked-blob-reader-native, @aws-sdk/config-resolver, @aws-sdk/credential-provider-env, @aws-sdk/credential-provider-imds, @aws-sdk/credential-provider-ini, @aws-sdk/credential-provider-node, @aws-sdk/credential-providers, @aws-sdk/fetch-http-handler, @aws-sdk/hash-blob-browser, @aws-sdk/hash-node, @aws-sdk/hash-stream-node, @aws-sdk/is-array-buffer, @aws-sdk/lib-dynamodb, @aws-sdk/lib-storage, @aws-sdk/md5-js, @aws-sdk/middleware-content-length, @aws-sdk/middleware-sdk-ec2, @aws-sdk/middleware-signing, @aws-sdk/middleware-stack, @aws-sdk/node-http-handler, @aws-sdk/property-provider, @aws-sdk/region-config-resolver, @aws-sdk/shared-ini-file-loader, @aws-sdk/signature-v4, @aws-sdk/token-providers, @aws-sdk/types, @aws-sdk/util-arn-parser, @aws-sdk/util-base64-browser, @aws-sdk/util-base64-node, @aws-sdk/util-body-length-browser, @aws-sdk/util-body-length-node, @aws-sdk/util-buffer-from, @aws-sdk/util-dynamodb, @aws-sdk/util-endpoints, @aws-sdk/util-format-url, @aws-sdk/util-hex-encoding, @aws-sdk/util-locate-window, @aws-sdk/util-uri-escape, @aws-sdk/util-utf8-browser, @aws-sdk/util-utf8-node, @aws-sdk/util-waiter, @aws-sdk/xml-builder, @smithy/abort-controller, @smithy/chunked-blob-reader, @smithy/chunked-blob-reader-native, @smithy/config-resolver, @smithy/credential-provider-imds, @smithy/fetch-http-handler, @smithy/hash-blob-browser, @smithy/hash-node, @smithy/hash-stream-node, @smithy/is-array-buffer, @smithy/md5-js, @smithy/middleware-content-length, @smithy/middleware-endpoint, @smithy/middleware-stack, @smithy/node-http-handler, @smithy/property-provider, @smithy/shared-ini-file-loader, @smithy/signature-v4, @smithy/util-base64, @smithy/util-body-length-browser, @smithy/util-body-length-node, @smithy/util-buffer-from, @smithy/util-hex-encoding, @smithy/util-stream, @smithy/util-uri-escape, @smithy/util-utf8, @smithy/util-waiter. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/abort-controller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/chunked-blob-reader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/chunked-blob-reader-native), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-env), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-imds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-ini), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/fetch-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-blob-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-stream-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/is-array-buffer), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/lib-dynamodb), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/lib-storage), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/md5-js), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-content-length), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-ec2), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-signing), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-stack), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/node-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/property-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/region-config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/shared-ini-file-loader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/signature-v4), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/token-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/types), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-arn-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-buffer-from), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-dynamodb), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-endpoints), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-format-url), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-hex-encoding), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-locate-window), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-uri-escape), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-waiter), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/xml-builder), https://github.com/smithy-lang/smithy-typescript.git (@smithy/abort-controller), https://github.com/awslabs/smithy-typescript.git (@smithy/chunked-blob-reader), https://github.com/awslabs/smithy-typescript.git (@smithy/chunked-blob-reader-native), https://github.com/smithy-lang/smithy-typescript.git (@smithy/config-resolver), https://github.com/smithy-lang/smithy-typescript.git (@smithy/credential-provider-imds), https://github.com/awslabs/smithy-typescript.git (@smithy/fetch-http-handler), https://github.com/smithy-lang/smithy-typescript.git (@smithy/hash-blob-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/hash-node), https://github.com/smithy-lang/smithy-typescript.git (@smithy/hash-stream-node), https://github.com/awslabs/smithy-typescript.git (@smithy/is-array-buffer), https://github.com/smithy-lang/smithy-typescript.git (@smithy/md5-js), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-content-length), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-endpoint), https://github.com/smithy-lang/smithy-typescript.git (@smithy/middleware-stack), https://github.com/smithy-lang/smithy-typescript.git (@smithy/node-http-handler), https://github.com/smithy-lang/smithy-typescript.git (@smithy/property-provider), https://github.com/smithy-lang/smithy-typescript.git (@smithy/shared-ini-file-loader), https://github.com/smithy-lang/smithy-typescript.git (@smithy/signature-v4), https://github.com/awslabs/smithy-typescript.git (@smithy/util-base64), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-node), https://github.com/awslabs/smithy-typescript.git (@smithy/util-buffer-from), https://github.com/awslabs/smithy-typescript.git (@smithy/util-hex-encoding), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-stream), https://github.com/awslabs/smithy-typescript.git (@smithy/util-uri-escape), https://github.com/awslabs/smithy-typescript.git (@smithy/util-utf8), https://github.com/smithy-lang/smithy-typescript.git (@smithy/util-waiter). This software contains the following license and notice below: Apache License Version 2.0, January 2004 From d7644028e632c078c470e4ac194b41661147484d Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Tue, 24 Jun 2025 14:52:50 -0500 Subject: [PATCH 21/37] chore: fix lingering sdk migration in helper --- .../src/schema-api-directives/authHelper.ts | 67 ++++++++++--------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/packages/amplify-e2e-tests/src/schema-api-directives/authHelper.ts b/packages/amplify-e2e-tests/src/schema-api-directives/authHelper.ts index c715383706..c5e05529bd 100644 --- a/packages/amplify-e2e-tests/src/schema-api-directives/authHelper.ts +++ b/packages/amplify-e2e-tests/src/schema-api-directives/authHelper.ts @@ -1,5 +1,12 @@ +/* eslint-disable import/no-extraneous-dependencies */ +/* eslint-disable prefer-arrow/prefer-arrow-functions */ +/* eslint-disable func-style */ import path from 'path'; -import { CognitoIdentityServiceProvider } from 'aws-sdk'; +import { + CognitoIdentityProviderClient, + AdminCreateUserCommand, + AdminAddUserToGroupCommand, +} from '@aws-sdk/client-cognito-identity-provider'; import { getProjectMeta, getBackendAmplifyMeta } from 'amplify-category-api-e2e-core'; import Amplify, { Auth } from 'aws-amplify'; import fs from 'fs-extra'; @@ -9,71 +16,69 @@ const tempPassword = 'tempPassword'; // setupUser will add user to a cognito group and make its status to be "CONFIRMED", // if groupName is specified, add the user to the group. -export async function setupUser(userPoolId: string, username: string, password: string, groupName?: string | string[]) { +export async function setupUser(userPoolId: string, username: string, password: string, groupName?: string | string[]): Promise { const region = userPoolId.split('_')[0]; // UserPoolId is in format `region_randomid` const cognitoClient = getConfiguredCognitoClient(region); - await cognitoClient - .adminCreateUser({ + await cognitoClient.send( + new AdminCreateUserCommand({ UserPoolId: userPoolId, UserAttributes: [{ Name: 'email', Value: 'username@amazon.com' }], Username: username, MessageAction: 'SUPPRESS', TemporaryPassword: tempPassword, - }) - .promise(); + }), + ); await authenticateUser(username, tempPassword, password); if (groupName) { if (Array.isArray(groupName)) { + // eslint-disable-next-line @typescript-eslint/no-misused-promises groupName.forEach(async (group) => { - await cognitoClient - .adminAddUserToGroup({ + await cognitoClient.send( + new AdminAddUserToGroupCommand({ UserPoolId: userPoolId, Username: username, GroupName: group, - }) - .promise(); + }), + ); }); } else { - await cognitoClient - .adminAddUserToGroup({ + await cognitoClient.send( + new AdminAddUserToGroupCommand({ UserPoolId: userPoolId, Username: username, GroupName: groupName, - }) - .promise(); + }), + ); } } } export async function addUserToGroup( - cognitoClient: CognitoIdentityServiceProvider, + cognitoClient: CognitoIdentityProviderClient, userPoolId: string, username: string, groupName?: string, -) { - await cognitoClient - .adminAddUserToGroup({ +): Promise { + await cognitoClient.send( + new AdminAddUserToGroupCommand({ UserPoolId: userPoolId, Username: username, GroupName: groupName, - }) - .promise(); + }), + ); } -export function getConfiguredCognitoClient(region: string = process.env.CLI_REGION): CognitoIdentityServiceProvider { - const cognitoClient = new CognitoIdentityServiceProvider({ apiVersion: '2016-04-19', region }); - - const awsconfig = { - accessKeyId: process.env.AWS_ACCESS_KEY_ID, - secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, - sessionToken: process.env.AWS_SESSION_TOKEN, +export function getConfiguredCognitoClient(region: string = process.env.CLI_REGION): CognitoIdentityProviderClient { + const cognitoClient = new CognitoIdentityProviderClient({ region, - }; - - cognitoClient.config.update(awsconfig); - + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + sessionToken: process.env.AWS_SESSION_TOKEN, + }, + }); return cognitoClient; } From ec48339ef639fcf37ac21748ba65800234f2aac3 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Wed, 25 Jun 2025 13:15:37 -0500 Subject: [PATCH 22/37] chore: fix broken api_7.test.ts --- packages/amplify-e2e-tests/src/__tests__/api_7.test.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/amplify-e2e-tests/src/__tests__/api_7.test.ts b/packages/amplify-e2e-tests/src/__tests__/api_7.test.ts index 029d4f9984..e015f4807f 100644 --- a/packages/amplify-e2e-tests/src/__tests__/api_7.test.ts +++ b/packages/amplify-e2e-tests/src/__tests__/api_7.test.ts @@ -56,15 +56,7 @@ describe('amplify add api (GraphQL)', () => { expect(graphqlApi).toBeDefined(); expect(graphqlApi.apiId).toEqual(GraphQLAPIIdOutput); const tableName = `AmplifyDataStore-${graphqlApi.apiId}-${envName}`; - const error = { message: null }; - try { - const table = await getDDBTable(tableName, region); - expect(table).toBeUndefined(); - } catch (ex) { - Object.assign(error, ex); - } - expect(error).toBeDefined(); - expect(error.message).toContain(`${tableName} not found`); + await expect(getDDBTable(tableName, region)).rejects.toThrow(`${tableName} not found`); await amplifyOverrideApi(projRoot, {}); From 9f3919f07e0a6e9f72e9d92d2cdeb5f61a0a7f79 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Thu, 26 Jun 2025 10:29:18 -0500 Subject: [PATCH 23/37] fix: predictions e2e test --- .../tests/predictions-usage.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/packages/amplify-e2e-tests/src/schema-api-directives/tests/predictions-usage.ts b/packages/amplify-e2e-tests/src/schema-api-directives/tests/predictions-usage.ts index 3dfdf5ca68..c74a085d36 100644 --- a/packages/amplify-e2e-tests/src/schema-api-directives/tests/predictions-usage.ts +++ b/packages/amplify-e2e-tests/src/schema-api-directives/tests/predictions-usage.ts @@ -19,7 +19,6 @@ export async function runTest(projectDir: string, testModule: any): Promise { @@ -58,7 +49,11 @@ async function uploadImageFile(projectDir: string) { }) as any; const bucketName = amplifyMeta.storage[storageResourceName].output.BucketName; + try { + const s3Client = new S3Client({ + region: amplifyMeta.providers.awscloudformation.Region, + }); const fileStream = fs.createReadStream(imageFilePath); await s3Client.send( new PutObjectCommand({ @@ -70,7 +65,7 @@ async function uploadImageFile(projectDir: string) { }), ); } catch (err) { - if (err.code !== 'AccessControlListNotSupported') { + if (err.Code !== 'AccessControlListNotSupported') { throw err; } } From 9f24f207da94c2b255f97b42a1e948551bb2d8fb Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Mon, 30 Jun 2025 14:03:03 -0500 Subject: [PATCH 24/37] fix: misc --- packages/amplify-e2e-tests/src/schema-api-directives/index.ts | 2 ++ .../graphql-transformers-e2e-tests/src/deployNestedStacks.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/amplify-e2e-tests/src/schema-api-directives/index.ts b/packages/amplify-e2e-tests/src/schema-api-directives/index.ts index c3e6d0272f..0906866093 100644 --- a/packages/amplify-e2e-tests/src/schema-api-directives/index.ts +++ b/packages/amplify-e2e-tests/src/schema-api-directives/index.ts @@ -1,3 +1,5 @@ +/* eslint-disable */ + import * as path from 'path'; import * as fs from 'fs-extra'; import { runTest, runAuthTest } from './common'; diff --git a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts index 4db764040f..ec849db608 100644 --- a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts +++ b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts @@ -220,7 +220,7 @@ export const cleanupStackAfterTest = async ( await cf.waitForStack(stackName); } } catch (e) { - if (!(e.code === 'ValidationError' && e.message === `Stack with id ${stackName} does not exist`)) { + if (!(e.Code === 'ValidationError' && e.message === `Stack with id ${stackName} does not exist`)) { throw e; } } From 7010f0ebc7b9b2dbf1b87b76692d31cd8a68aac2 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Thu, 21 Aug 2025 10:46:19 -0500 Subject: [PATCH 25/37] fix: e2e test cfn client update --- .../src/CloudFormationClient.ts | 49 +++++++++++-------- .../src/deployNestedStacks.ts | 2 +- .../src/deploySchema.ts | 1 + 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts b/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts index fa215ab3c4..ef8c134587 100644 --- a/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts +++ b/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts @@ -2,10 +2,15 @@ import { CloudFormationClient as BaseCloudFormationClient, CreateStackCommand, + CreateStackCommandInput, CreateStackCommandOutput, + Parameter, DeleteStackCommand, DeleteStackCommandOutput, DescribeStacksCommand, + UpdateStackCommand, + UpdateStackCommandInput, + UpdateStackCommandOutput, StackStatus, Stack, } from '@aws-sdk/client-cloudformation'; @@ -18,18 +23,8 @@ export class CloudFormationClient { this.client = new BaseCloudFormationClient({ region: this.region }); } - async updateStack(template: any, name: string, defParams: any = {}, addAppSyncApiName = true): Promise { - return this.createStack(template, name, defParams, addAppSyncApiName, true); - } - - async createStack( - _template: any, - name: string, - defParams: any = {}, - addAppSyncApiName = true, - _isUpdate = false, - ): Promise { - const params = []; + buildParams(name: string, defParams: Record, addAppSyncApiName: boolean): Parameter[] { + const params: Parameter[] = []; if (addAppSyncApiName === true) { params.push({ @@ -45,16 +40,30 @@ export class CloudFormationClient { }); } + return params; + } + + buildDeployInputs( + name: string, + defParams: Record, + addAppSyncApiName: boolean, + ): CreateStackCommandInput & UpdateStackCommandInput { + const params = this.buildParams(name, defParams, addAppSyncApiName); const templateURL = `https://s3.amazonaws.com/${defParams.S3DeploymentBucket}/${defParams.S3DeploymentRootKey}/rootStack.json`; + return { + StackName: name, + Capabilities: ['CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND'], + Parameters: params, + TemplateURL: templateURL, + }; + } - return this.client.send( - new CreateStackCommand({ - StackName: name, - Capabilities: ['CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND'], - Parameters: params, - TemplateURL: templateURL, - }), - ); + async updateStack(name: string, defParams: any = {}, addAppSyncApiName = true): Promise { + return this.client.send(new UpdateStackCommand(this.buildDeployInputs(name, defParams, addAppSyncApiName))); + } + + async createStack(name: string, defParams: any = {}, addAppSyncApiName = true): Promise { + return this.client.send(new CreateStackCommand(this.buildDeployInputs(name, defParams, addAppSyncApiName))); } async deleteStack(name: string): Promise { diff --git a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts index ec849db608..ebb22928a0 100644 --- a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts +++ b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts @@ -160,7 +160,7 @@ export async function deploy( try { const operation = initialDeployment ? 'createStack' : 'updateStack'; - await cf[operation](deploymentResources.rootStack, stackName, { + await cf[operation](stackName, { ...params, S3DeploymentBucket: bucketName, S3DeploymentRootKey: s3RootKey, diff --git a/packages/graphql-transformers-e2e-tests/src/deploySchema.ts b/packages/graphql-transformers-e2e-tests/src/deploySchema.ts index 87e477f599..58a43a1a2c 100644 --- a/packages/graphql-transformers-e2e-tests/src/deploySchema.ts +++ b/packages/graphql-transformers-e2e-tests/src/deploySchema.ts @@ -62,6 +62,7 @@ export const getSchemaDeployer = async (testId: string, transform: (schema: stri deploy: async (schema: string) => { const deployTimestamp = moment().format('YYYYMMDDHHmmss'); const out = transform(schema); + const finishedStack = await deploy( customS3Client, cf, From b9670421994e3cbf2377e1bf4983dff50b2c1402 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Thu, 21 Aug 2025 13:05:51 -0500 Subject: [PATCH 26/37] fix: re-add unused template param to CloudFormationClient --- .../src/CloudFormationClient.ts | 4 ++-- .../graphql-transformers-e2e-tests/src/deployNestedStacks.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts b/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts index ef8c134587..73ea4b1721 100644 --- a/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts +++ b/packages/graphql-transformers-e2e-tests/src/CloudFormationClient.ts @@ -58,11 +58,11 @@ export class CloudFormationClient { }; } - async updateStack(name: string, defParams: any = {}, addAppSyncApiName = true): Promise { + async updateStack(_template: any, name: string, defParams: any = {}, addAppSyncApiName = true): Promise { return this.client.send(new UpdateStackCommand(this.buildDeployInputs(name, defParams, addAppSyncApiName))); } - async createStack(name: string, defParams: any = {}, addAppSyncApiName = true): Promise { + async createStack(_template: any, name: string, defParams: any = {}, addAppSyncApiName = true): Promise { return this.client.send(new CreateStackCommand(this.buildDeployInputs(name, defParams, addAppSyncApiName))); } diff --git a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts index ebb22928a0..a89b534300 100644 --- a/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts +++ b/packages/graphql-transformers-e2e-tests/src/deployNestedStacks.ts @@ -160,7 +160,7 @@ export async function deploy( try { const operation = initialDeployment ? 'createStack' : 'updateStack'; - await cf[operation](stackName, { + await cf[operation]({}, stackName, { ...params, S3DeploymentBucket: bucketName, S3DeploymentRootKey: s3RootKey, From f9d1e4ef116605fc77670966fba6912c569144c5 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Thu, 21 Aug 2025 16:27:50 -0500 Subject: [PATCH 27/37] chore: bump --- yarn.lock | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/yarn.lock b/yarn.lock index e9228b3327..1759415a80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21972,16 +21972,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -22103,7 +22094,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6, strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -22124,13 +22115,6 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6, strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -23159,7 +23143,7 @@ workerpool@^6.5.1: resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7, wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -23177,15 +23161,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7, wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 75c9d4f1572b642287b40820b5b03b63ba3f1976 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Fri, 22 Aug 2025 16:03:05 -0500 Subject: [PATCH 28/37] fix: use fromTemporaryCredentials --- .../src/cleanup-e2e-resources.ts | 105 +++++++----------- 1 file changed, 40 insertions(+), 65 deletions(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 99ff8930de..2cc7c07bb8 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -29,8 +29,9 @@ import { } from '@aws-sdk/client-cloudformation'; import { AmplifyClient, DeleteAppCommand, ListAppsCommand, ListBackendEnvironmentsCommand } from '@aws-sdk/client-amplify'; import { BatchGetBuildsCommand, Build, CodeBuildClient } from '@aws-sdk/client-codebuild'; -import { STSClient, AssumeRoleCommand, GetCallerIdentityCommand } from '@aws-sdk/client-sts'; +import { STSClient, GetCallerIdentityCommand } from '@aws-sdk/client-sts'; import { OrganizationsClient, ListAccountsCommand } from '@aws-sdk/client-organizations'; +import { fromTemporaryCredentials } from '@aws-sdk/credential-providers'; type TestRegion = { name: string; @@ -107,9 +108,7 @@ type CBJobInfo = { type AWSAccountInfo = { accountId: string; - accessKeyId: string; - secretAccessKey: string; - sessionToken: string; + credentials: ReturnType; }; const BUCKET_TEST_REGEX = /test/; @@ -118,7 +117,6 @@ const IAM_TEST_REGEX = const RDS_TEST_REGEX = /integtest/; const STALE_DURATION_MS = 2 * 60 * 60 * 1000; // 2 hours in milliseconds -const isCI = (): boolean => !!(process.env.CI && process.env.CODEBUILD); /* * Exit on expired token as all future requests will fail. */ @@ -155,7 +153,7 @@ const testInstanceStalenessFilter = (resource: DBInstance): boolean => { * Get all S3 buckets in the account, and filter down to the ones we consider stale. */ const getOrphanS3TestBuckets = async (account: AWSAccountInfo): Promise => { - const s3Client = new S3Client(getAWSConfig(account)); + const s3Client = new S3Client({ credentials: account.credentials }); const listBucketResponse = await s3Client.send(new ListBucketsCommand({})); const staleBuckets = listBucketResponse.Buckets.filter(testBucketStalenessFilter); @@ -175,7 +173,7 @@ const getOrphanS3TestBuckets = async (account: AWSAccountInfo): Promise => { - const iamClient = new IAMClient(getAWSConfig(account)); + const iamClient = new IAMClient({ credentials: account.credentials }); const listRoleResponse = await iamClient.send(new ListRolesCommand({})); const staleRoles = listRoleResponse.Roles.filter(testRoleStalenessFilter); return staleRoles.map((it) => ({ name: it.RoleName })); @@ -186,7 +184,7 @@ const getOrphanTestIamRoles = async (account: AWSAccountInfo): Promise => { try { - const rdsClient = new RDSClient(getAWSConfig(account, region)); + const rdsClient = new RDSClient({ credentials: account.credentials, region }); const listRdsInstanceResponse = await rdsClient.send(new DescribeDBInstancesCommand({})); const staleInstances = listRdsInstanceResponse.DBInstances.filter(testInstanceStalenessFilter); return staleInstances.map((i) => ({ identifier: i.DBInstanceIdentifier, region })); @@ -202,19 +200,6 @@ const getOrphanRdsInstances = async (account: AWSAccountInfo, region: string): P } }; -/** - * Get the relevant AWS config object for a given account and region. - */ -const getAWSConfig = ({ accessKeyId, secretAccessKey, sessionToken }: AWSAccountInfo, region?: string): unknown => ({ - credentials: { - accessKeyId, - secretAccessKey, - sessionToken, - }, - ...(region ? { region } : {}), - maxRetries: 10, -}); - /** * Returns a list of Amplify Apps in the region. The apps includes information about the CodeBuild that created the app * This is determined by looking at tags of the backend environments that are associated with the Apps @@ -223,8 +208,10 @@ const getAWSConfig = ({ accessKeyId, secretAccessKey, sessionToken }: AWSAccount * @returns Promise a list of Amplify Apps in the region with build info */ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise => { - const config = getAWSConfig(account, region); - const amplifyClient = new AmplifyClient(config); + const amplifyClient = new AmplifyClient({ + credentials: account.credentials, + region, + }); const result: AmplifyAppInfo[] = []; let amplifyApps = { apps: [] }; try { @@ -285,7 +272,7 @@ const getJobId = (tags: CFNTag[] = []): string | undefined => { * @returns stack details */ const getStackDetails = async (stackName: string, account: AWSAccountInfo, region: string): Promise => { - const cfnClient = new CloudFormationClient(getAWSConfig(account, region)); + const cfnClient = new CloudFormationClient({ credentials: account.credentials, region }); const stack = await cfnClient.send(new DescribeStacksCommand({ StackName: stackName })); const tags = stack.Stacks.length && stack.Stacks[0].Tags; const stackStatus = stack.Stacks[0].StackStatus; @@ -309,7 +296,7 @@ const getStackDetails = async (stackName: string, account: AWSAccountInfo, regio }; const getStacks = async (account: AWSAccountInfo, region: string): Promise => { - const cfnClient = new CloudFormationClient(getAWSConfig(account, region)); + const cfnClient = new CloudFormationClient({ credentials: account.credentials, region }); const results: StackInfo[] = []; let stacks; try { @@ -372,16 +359,14 @@ const getJobCodeBuildDetails = async (jobIds: string[]): Promise => { }; const getBucketRegion = async (account: AWSAccountInfo, bucketName: string): Promise => { - const awsConfig = getAWSConfig(account); - const s3Client = new S3Client(awsConfig); + const s3Client = new S3Client({ credentials: account.credentials }); const location = await s3Client.send(new GetBucketLocationCommand({ Bucket: bucketName })); const region = location.LocationConstraint ?? 'us-east-1'; return region; }; const getS3Buckets = async (account: AWSAccountInfo): Promise => { - const awsConfig = getAWSConfig(account); - const s3Client = new S3Client(awsConfig); + const s3Client = new S3Client({ credentials: account.credentials }); const buckets = await s3Client.send(new ListBucketsCommand({})); const result: S3BucketInfo[] = []; for (const bucket of buckets.Buckets) { @@ -391,7 +376,7 @@ const getS3Buckets = async (account: AWSAccountInfo): Promise => // Operations on buckets created in opt-in regions appear to require region-specific clients const regionalizedClient = new S3Client({ region, - ...(awsConfig as object), + credentials: account.credentials, }); const getBucketTaggingCommand = new GetBucketTaggingCommand({ Bucket: bucket.Name }); const bucketDetails = await regionalizedClient.send(getBucketTaggingCommand); @@ -545,7 +530,7 @@ const deleteAmplifyApps = async (account: AWSAccountInfo, accountIndex: number, const deleteAmplifyApp = async (account: AWSAccountInfo, accountIndex: number, app: AmplifyAppInfo): Promise => { const { name, appId, region } = app; console.log(`${generateAccountInfo(account, accountIndex)} Deleting App ${name}(${appId})`); - const amplifyClient = new AmplifyClient(getAWSConfig(account, region)); + const amplifyClient = new AmplifyClient({ credentials: account.credentials, region }); try { const deleteAppCommand = new DeleteAppCommand({ appId }); await amplifyClient.send(deleteAppCommand); @@ -572,7 +557,7 @@ const deleteIamRole = async (account: AWSAccountInfo, accountIndex: number, role const { name: roleName } = role; try { console.log(`${generateAccountInfo(account, accountIndex)} Deleting Iam Role ${roleName}`); - const iamClient = new IAMClient(getAWSConfig(account)); + const iamClient = new IAMClient({ credentials: account.credentials }); await deleteAttachedRolePolicies(account, accountIndex, roleName); await deleteRolePolicies(account, accountIndex, roleName); await iamClient.send(new DeleteRoleCommand({ RoleName: roleName })); @@ -585,7 +570,7 @@ const deleteIamRole = async (account: AWSAccountInfo, accountIndex: number, role }; const deleteAttachedRolePolicies = async (account: AWSAccountInfo, accountIndex: number, roleName: string): Promise => { - const iamClient = new IAMClient(getAWSConfig(account)); + const iamClient = new IAMClient({ credentials: account.credentials }); const rolePolicies = await iamClient.send(new ListAttachedRolePoliciesCommand({ RoleName: roleName })); await Promise.all(rolePolicies.AttachedPolicies.map((policy) => detachIamAttachedRolePolicy(account, accountIndex, roleName, policy))); }; @@ -598,7 +583,7 @@ const detachIamAttachedRolePolicy = async ( ): Promise => { try { console.log(`${generateAccountInfo(account, accountIndex)} Detach Iam Attached Role Policy ${policy.PolicyName}`); - const iamClient = new IAMClient(getAWSConfig(account)); + const iamClient = new IAMClient({ credentials: account.credentials }); await iamClient.send(new DetachRolePolicyCommand({ RoleName: roleName, PolicyArn: policy.PolicyArn })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Detach iam role policy ${policy.PolicyName} failed with error ${e.message}`); @@ -609,7 +594,7 @@ const detachIamAttachedRolePolicy = async ( }; const deleteRolePolicies = async (account: AWSAccountInfo, accountIndex: number, roleName: string): Promise => { - const iamClient = new IAMClient(getAWSConfig(account)); + const iamClient = new IAMClient({ credentials: account.credentials }); const rolePolicies = await iamClient.send(new ListRolePoliciesCommand({ RoleName: roleName })); await Promise.all(rolePolicies.PolicyNames.map((policy) => deleteIamRolePolicy(account, accountIndex, roleName, policy))); }; @@ -617,7 +602,7 @@ const deleteRolePolicies = async (account: AWSAccountInfo, accountIndex: number, const deleteIamRolePolicy = async (account: AWSAccountInfo, accountIndex: number, roleName: string, policyName: string): Promise => { try { console.log(`${generateAccountInfo(account, accountIndex)} Deleting Iam Role Policy ${policyName}`); - const iamClient = new IAMClient(getAWSConfig(account)); + const iamClient = new IAMClient({ credentials: account.credentials }); await iamClient.send(new DeleteRolePolicyCommand({ RoleName: roleName, PolicyName: policyName })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role policy ${policyName} failed with error ${e.message}`); @@ -635,10 +620,9 @@ const deleteBucket = async (account: AWSAccountInfo, accountIndex: number, bucke const { name } = bucket; try { console.log(`${generateAccountInfo(account, accountIndex)} Deleting S3 Bucket ${name}`); - const awsConfig = getAWSConfig(account); const regionalizedS3Client = new S3Client({ region: bucket.region, - ...(awsConfig as object), + credentials: account.credentials, }); await deleteS3Bucket(name, regionalizedS3Client); } catch (e) { @@ -657,7 +641,7 @@ const deleteRdsInstance = async (account: AWSAccountInfo, accountIndex: number, const { identifier, region } = instance; console.log(`${generateAccountInfo(account, accountIndex)} Deleting RDS instance ${identifier}`); try { - const rdsClient = new RDSClient(getAWSConfig(account, region)); + const rdsClient = new RDSClient({ credentials: account.credentials, region }); await rdsClient.send(new DeleteDBInstanceCommand({ DBInstanceIdentifier: identifier, SkipFinalSnapshot: true })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting instance ${identifier} failed with error ${e.message}`); @@ -676,7 +660,7 @@ const deleteCfnStack = async (account: AWSAccountInfo, accountIndex: number, sta const resourceToRetain = resourcesFailedToDelete && resourcesFailedToDelete.length ? resourcesFailedToDelete : undefined; console.log(`${generateAccountInfo(account, accountIndex)} Deleting CloudFormation stack ${stackName}`); try { - const cfnClient = new CloudFormationClient(getAWSConfig(account, region)); + const cfnClient = new CloudFormationClient({ credentials: account.credentials, region }); await cfnClient.send(new DeleteStackCommand({ StackName: stackName, RetainResources: resourceToRetain })); await waitUntilStackDeleteComplete({ client: cfnClient, maxWaitTime: 600 }, { StackName: stackName }); } catch (e) { @@ -752,47 +736,38 @@ const getFilterPredicate = (args: any): JobFilterPredicate => { * to get all accounts within the root account organization. */ const getAccountsToCleanup = async (): Promise => { - const stsClient = new STSClient({}); - const assumeRoleResForE2EParent = await stsClient.send( - new AssumeRoleCommand({ + const credentials = fromTemporaryCredentials({ + params: { RoleArn: process.env.TEST_ACCOUNT_ROLE, RoleSessionName: `testSession${Math.floor(Math.random() * 100000)}`, - DurationSeconds: 1 * 60 * 60, - }), - ); - const e2eParentAccountCred = { - accessKeyId: assumeRoleResForE2EParent.Credentials.AccessKeyId, - secretAccessKey: assumeRoleResForE2EParent.Credentials.SecretAccessKey, - sessionToken: assumeRoleResForE2EParent.Credentials.SessionToken, - }; - const stsClientForE2E = new STSClient({ credentials: e2eParentAccountCred }); + }, + }); + + const stsClientForE2E = new STSClient({ credentials }); const parentAccountIdentity = await stsClientForE2E.send(new GetCallerIdentityCommand({})); const orgApi = new OrganizationsClient({ region: 'us-east-1', - credentials: e2eParentAccountCred, + credentials, }); + try { const orgAccounts = await orgApi.send(new ListAccountsCommand({})); const accountCredentialPromises = orgAccounts.Accounts.map(async (account) => { if (account.Id === parentAccountIdentity.Account) { return { accountId: account.Id, - ...e2eParentAccountCred, + credentials, }; } const randomNumber = Math.floor(Math.random() * 100000); - const assumeRoleRes = await stsClientForE2E.send( - new AssumeRoleCommand({ - RoleArn: `arn:aws:iam::${account.Id}:role/OrganizationAccountAccessRole`, - RoleSessionName: `testSession${randomNumber}`, - DurationSeconds: 1 * 60 * 60, - }), - ); return { accountId: account.Id, - accessKeyId: assumeRoleRes.Credentials.AccessKeyId, - secretAccessKey: assumeRoleRes.Credentials.SecretAccessKey, - sessionToken: assumeRoleRes.Credentials.SessionToken, + credentials: fromTemporaryCredentials({ + params: { + RoleArn: `arn:aws:iam::${account.Id}:role/OrganizationAccountAccessRole`, + RoleSessionName: `testSession${randomNumber}`, + }, + }), }; }); return await Promise.all(accountCredentialPromises); @@ -804,7 +779,7 @@ const getAccountsToCleanup = async (): Promise => { return [ { accountId: parentAccountIdentity.Account, - ...e2eParentAccountCred, + credentials, }, ]; } From a285387050b8e380acd25ad8e4ed7da41d096bb1 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Mon, 25 Aug 2025 11:32:54 -0500 Subject: [PATCH 29/37] fix: hopefully fixed chain of fromTemporaryCredentials --- .../src/cleanup-e2e-resources.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 2cc7c07bb8..f8c2151a03 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -731,23 +731,32 @@ const getFilterPredicate = (args: any): JobFilterPredicate => { throw Error('Invalid args config'); }; +/** + * + * Need to go from ... + * + * 1. service role = arn:aws:iam::594813022831:role/amplify-api-codebuild-tesie2eworkflowrolee3c1ea2adea7c0ff60ae + * 2. "e2e parent account" = arn:aws:iam::182702232950:role/TestAccountRole-amplify-category-api + * 3. "e2e account" = arn:aws:iam::${account.Id}:role/OrganizationAccountAccessRole + */ + /** * Retrieve the accounts to process for potential cleanup. By default we will attempt * to get all accounts within the root account organization. */ const getAccountsToCleanup = async (): Promise => { - const credentials = fromTemporaryCredentials({ + const parentAccountCreds = fromTemporaryCredentials({ params: { RoleArn: process.env.TEST_ACCOUNT_ROLE, RoleSessionName: `testSession${Math.floor(Math.random() * 100000)}`, }, }); - const stsClientForE2E = new STSClient({ credentials }); + const stsClientForE2E = new STSClient({ credentials: parentAccountCreds }); const parentAccountIdentity = await stsClientForE2E.send(new GetCallerIdentityCommand({})); const orgApi = new OrganizationsClient({ region: 'us-east-1', - credentials, + credentials: parentAccountCreds, }); try { @@ -756,7 +765,7 @@ const getAccountsToCleanup = async (): Promise => { if (account.Id === parentAccountIdentity.Account) { return { accountId: account.Id, - credentials, + credentials: parentAccountCreds, }; } const randomNumber = Math.floor(Math.random() * 100000); @@ -767,6 +776,7 @@ const getAccountsToCleanup = async (): Promise => { RoleArn: `arn:aws:iam::${account.Id}:role/OrganizationAccountAccessRole`, RoleSessionName: `testSession${randomNumber}`, }, + masterCredentials: parentAccountCreds, }), }; }); @@ -779,7 +789,7 @@ const getAccountsToCleanup = async (): Promise => { return [ { accountId: parentAccountIdentity.Account, - credentials, + credentials: parentAccountCreds, }, ]; } From a0d63f9f07eda9bb3418bf63c202ba5b4510bd82 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Mon, 25 Aug 2025 14:15:04 -0500 Subject: [PATCH 30/37] fix: .code to .Code on errors --- .../src/cleanup-e2e-resources.ts | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index f8c2151a03..3474fcc7c0 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -189,10 +189,10 @@ const getOrphanRdsInstances = async (account: AWSAccountInfo, region: string): P const staleInstances = listRdsInstanceResponse.DBInstances.filter(testInstanceStalenessFilter); return staleInstances.map((i) => ({ identifier: i.DBInstanceIdentifier, region })); } catch (e) { - if (e?.code === 'InvalidClientTokenId') { + if (e?.Code === 'InvalidClientTokenId') { // Do not fail the cleanup and continue // This is due to either child account or parent account not available in that region - console.log(`Listing RDS instances for account ${account.accountId}-${region} failed with error with code ${e?.code}. Skipping.`); + console.log(`Listing RDS instances for account ${account.accountId}-${region} failed with error with code ${e?.Code}. Skipping.`); return []; } else { throw e; @@ -218,9 +218,9 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< const listAppsCommand = new ListAppsCommand({ maxResults: 50 }); amplifyApps = await amplifyClient.send(listAppsCommand); } catch (e) { - if (e?.code === 'UnrecognizedClientException') { + if (e?.Code === 'UnrecognizedClientException') { // Do not fail the cleanup and continue - console.log(`Listing apps for account ${account.accountId}-${region} failed with error with code ${e?.code}. Skipping.`); + console.log(`Listing apps for account ${account.accountId}-${region} failed with error with code ${e?.Code}. Skipping.`); return result; } else { throw e; @@ -316,9 +316,9 @@ const getStacks = async (account: AWSAccountInfo, region: string): Promise => } } catch (e) { // TODO: Why do we process the bucket even with these particular errors? - if (e.code === 'NoSuchTagSet' || e.code === 'NoSuchBucket') { + if (e.Code === 'NoSuchTagSet' || e.Code === 'NoSuchBucket') { result.push({ name: bucket.Name, region: region ?? 'us-east-1', }); - } else if (e.code === 'InvalidToken') { + } else if (e.Code === 'InvalidToken') { // We see some buckets in some accounts that were somehow created in an opt-in region different from the one to which the account is // actually opted in. We don't quite know how this happened, but for now, we'll make a note of the inconsistency and continue // processing the rest of the buckets. @@ -536,7 +536,7 @@ const deleteAmplifyApp = async (account: AWSAccountInfo, accountIndex: number, a await amplifyClient.send(deleteAppCommand); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting Amplify App ${appId} failed with the following error`, e); - if (e.code === 'ExpiredTokenException') { + if (e.Code === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -563,7 +563,7 @@ const deleteIamRole = async (account: AWSAccountInfo, accountIndex: number, role await iamClient.send(new DeleteRoleCommand({ RoleName: roleName })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role ${roleName} failed with error ${e.message}`); - if (e.code === 'ExpiredTokenException') { + if (e.Code === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -587,7 +587,7 @@ const detachIamAttachedRolePolicy = async ( await iamClient.send(new DetachRolePolicyCommand({ RoleName: roleName, PolicyArn: policy.PolicyArn })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Detach iam role policy ${policy.PolicyName} failed with error ${e.message}`); - if (e.code === 'ExpiredTokenException') { + if (e.Code === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -606,7 +606,7 @@ const deleteIamRolePolicy = async (account: AWSAccountInfo, accountIndex: number await iamClient.send(new DeleteRolePolicyCommand({ RoleName: roleName, PolicyName: policyName })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role policy ${policyName} failed with error ${e.message}`); - if (e.code === 'ExpiredTokenException') { + if (e.Code === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -627,7 +627,7 @@ const deleteBucket = async (account: AWSAccountInfo, accountIndex: number, bucke await deleteS3Bucket(name, regionalizedS3Client); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting bucket ${name} failed with error ${e.message}`); - if (e.code === 'ExpiredTokenException') { + if (e.Code === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -645,7 +645,7 @@ const deleteRdsInstance = async (account: AWSAccountInfo, accountIndex: number, await rdsClient.send(new DeleteDBInstanceCommand({ DBInstanceIdentifier: identifier, SkipFinalSnapshot: true })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting instance ${identifier} failed with error ${e.message}`); - if (e.code === 'ExpiredTokenException') { + if (e.Code === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -665,7 +665,7 @@ const deleteCfnStack = async (account: AWSAccountInfo, accountIndex: number, sta await waitUntilStackDeleteComplete({ client: cfnClient, maxWaitTime: 600 }, { StackName: stackName }); } catch (e) { console.log(`Deleting CloudFormation stack ${stackName} failed with error ${e.message}`); - if (e.code === 'ExpiredTokenException') { + if (e.Code === 'ExpiredTokenException') { handleExpiredTokenException(); } } From 0389b09142c569b08dc6fc153613074b24cd2c03 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Mon, 25 Aug 2025 15:15:07 -0500 Subject: [PATCH 31/37] chore: a little additional logging to help troubleshoot --- packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 3474fcc7c0..87f0ea12c1 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -215,9 +215,11 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< const result: AmplifyAppInfo[] = []; let amplifyApps = { apps: [] }; try { + console.log(`Listing apps for ${account.accountId} in ${region}.`); const listAppsCommand = new ListAppsCommand({ maxResults: 50 }); amplifyApps = await amplifyClient.send(listAppsCommand); } catch (e) { + console.log('Error keys', Object.keys(e)); if (e?.Code === 'UnrecognizedClientException') { // Do not fail the cleanup and continue console.log(`Listing apps for account ${account.accountId}-${region} failed with error with code ${e?.Code}. Skipping.`); From e3ec4a3ec85ed3eea9336e72ec7193e71de9b8b5 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Mon, 25 Aug 2025 16:51:24 -0500 Subject: [PATCH 32/37] fix: change .Code to .name in error catches --- .../src/cleanup-e2e-resources.ts | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 87f0ea12c1..524a570d2b 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -189,10 +189,10 @@ const getOrphanRdsInstances = async (account: AWSAccountInfo, region: string): P const staleInstances = listRdsInstanceResponse.DBInstances.filter(testInstanceStalenessFilter); return staleInstances.map((i) => ({ identifier: i.DBInstanceIdentifier, region })); } catch (e) { - if (e?.Code === 'InvalidClientTokenId') { + if (e?.name === 'InvalidClientTokenId') { // Do not fail the cleanup and continue // This is due to either child account or parent account not available in that region - console.log(`Listing RDS instances for account ${account.accountId}-${region} failed with error with code ${e?.Code}. Skipping.`); + console.log(`Listing RDS instances for account ${account.accountId}-${region} failed with error with code ${e?.name}. Skipping.`); return []; } else { throw e; @@ -220,9 +220,9 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< amplifyApps = await amplifyClient.send(listAppsCommand); } catch (e) { console.log('Error keys', Object.keys(e)); - if (e?.Code === 'UnrecognizedClientException') { + if (e?.name === 'UnrecognizedClientException') { // Do not fail the cleanup and continue - console.log(`Listing apps for account ${account.accountId}-${region} failed with error with code ${e?.Code}. Skipping.`); + console.log(`Listing apps for account ${account.accountId}-${region} failed with error with code ${e?.name}. Skipping.`); return result; } else { throw e; @@ -318,9 +318,9 @@ const getStacks = async (account: AWSAccountInfo, region: string): Promise => } } catch (e) { // TODO: Why do we process the bucket even with these particular errors? - if (e.Code === 'NoSuchTagSet' || e.Code === 'NoSuchBucket') { + if (e.name === 'NoSuchTagSet' || e.name === 'NoSuchBucket') { result.push({ name: bucket.Name, region: region ?? 'us-east-1', }); - } else if (e.Code === 'InvalidToken') { + } else if (e.name === 'InvalidToken') { // We see some buckets in some accounts that were somehow created in an opt-in region different from the one to which the account is // actually opted in. We don't quite know how this happened, but for now, we'll make a note of the inconsistency and continue // processing the rest of the buckets. @@ -538,7 +538,7 @@ const deleteAmplifyApp = async (account: AWSAccountInfo, accountIndex: number, a await amplifyClient.send(deleteAppCommand); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting Amplify App ${appId} failed with the following error`, e); - if (e.Code === 'ExpiredTokenException') { + if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -565,7 +565,7 @@ const deleteIamRole = async (account: AWSAccountInfo, accountIndex: number, role await iamClient.send(new DeleteRoleCommand({ RoleName: roleName })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role ${roleName} failed with error ${e.message}`); - if (e.Code === 'ExpiredTokenException') { + if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -589,7 +589,7 @@ const detachIamAttachedRolePolicy = async ( await iamClient.send(new DetachRolePolicyCommand({ RoleName: roleName, PolicyArn: policy.PolicyArn })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Detach iam role policy ${policy.PolicyName} failed with error ${e.message}`); - if (e.Code === 'ExpiredTokenException') { + if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -608,7 +608,7 @@ const deleteIamRolePolicy = async (account: AWSAccountInfo, accountIndex: number await iamClient.send(new DeleteRolePolicyCommand({ RoleName: roleName, PolicyName: policyName })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role policy ${policyName} failed with error ${e.message}`); - if (e.Code === 'ExpiredTokenException') { + if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -629,7 +629,7 @@ const deleteBucket = async (account: AWSAccountInfo, accountIndex: number, bucke await deleteS3Bucket(name, regionalizedS3Client); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting bucket ${name} failed with error ${e.message}`); - if (e.Code === 'ExpiredTokenException') { + if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -647,7 +647,7 @@ const deleteRdsInstance = async (account: AWSAccountInfo, accountIndex: number, await rdsClient.send(new DeleteDBInstanceCommand({ DBInstanceIdentifier: identifier, SkipFinalSnapshot: true })); } catch (e) { console.log(`${generateAccountInfo(account, accountIndex)} Deleting instance ${identifier} failed with error ${e.message}`); - if (e.Code === 'ExpiredTokenException') { + if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); } } @@ -667,7 +667,7 @@ const deleteCfnStack = async (account: AWSAccountInfo, accountIndex: number, sta await waitUntilStackDeleteComplete({ client: cfnClient, maxWaitTime: 600 }, { StackName: stackName }); } catch (e) { console.log(`Deleting CloudFormation stack ${stackName} failed with error ${e.message}`); - if (e.Code === 'ExpiredTokenException') { + if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); } } From 6f3f850598815ef197c9930eb5a9c6b3fce75bfc Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Tue, 26 Aug 2025 10:49:04 -0500 Subject: [PATCH 33/37] chore: more logging --- .../amplify-e2e-tests/src/cleanup-e2e-resources.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 524a570d2b..d946c0a6ad 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -189,6 +189,7 @@ const getOrphanRdsInstances = async (account: AWSAccountInfo, region: string): P const staleInstances = listRdsInstanceResponse.DBInstances.filter(testInstanceStalenessFilter); return staleInstances.map((i) => ({ identifier: i.DBInstanceIdentifier, region })); } catch (e) { + console.log('Error', JSON.stringify(e)); if (e?.name === 'InvalidClientTokenId') { // Do not fail the cleanup and continue // This is due to either child account or parent account not available in that region @@ -219,7 +220,7 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< const listAppsCommand = new ListAppsCommand({ maxResults: 50 }); amplifyApps = await amplifyClient.send(listAppsCommand); } catch (e) { - console.log('Error keys', Object.keys(e)); + console.log('Error', JSON.stringify(e)); if (e?.name === 'UnrecognizedClientException') { // Do not fail the cleanup and continue console.log(`Listing apps for account ${account.accountId}-${region} failed with error with code ${e?.name}. Skipping.`); @@ -241,6 +242,7 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< } } } catch (e) { + console.log('Error', JSON.stringify(e)); console.log(e); } result.push({ @@ -318,6 +320,7 @@ const getStacks = async (account: AWSAccountInfo, region: string): Promise => { const { builds } = await client.send(new BatchGetBuildsCommand({ ids: jobIds })); return builds || []; } catch (e) { + console.log('Error', JSON.stringify(e)); console.log(e); return []; } @@ -391,6 +395,7 @@ const getS3Buckets = async (account: AWSAccountInfo): Promise => }); } } catch (e) { + console.log('Error', JSON.stringify(e)); // TODO: Why do we process the bucket even with these particular errors? if (e.name === 'NoSuchTagSet' || e.name === 'NoSuchBucket') { result.push({ @@ -537,6 +542,7 @@ const deleteAmplifyApp = async (account: AWSAccountInfo, accountIndex: number, a const deleteAppCommand = new DeleteAppCommand({ appId }); await amplifyClient.send(deleteAppCommand); } catch (e) { + console.log('Error', JSON.stringify(e)); console.log(`${generateAccountInfo(account, accountIndex)} Deleting Amplify App ${appId} failed with the following error`, e); if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); @@ -564,6 +570,7 @@ const deleteIamRole = async (account: AWSAccountInfo, accountIndex: number, role await deleteRolePolicies(account, accountIndex, roleName); await iamClient.send(new DeleteRoleCommand({ RoleName: roleName })); } catch (e) { + console.log('Error', JSON.stringify(e)); console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role ${roleName} failed with error ${e.message}`); if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); @@ -607,6 +614,7 @@ const deleteIamRolePolicy = async (account: AWSAccountInfo, accountIndex: number const iamClient = new IAMClient({ credentials: account.credentials }); await iamClient.send(new DeleteRolePolicyCommand({ RoleName: roleName, PolicyName: policyName })); } catch (e) { + console.log('Error', JSON.stringify(e)); console.log(`${generateAccountInfo(account, accountIndex)} Deleting iam role policy ${policyName} failed with error ${e.message}`); if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); @@ -646,6 +654,7 @@ const deleteRdsInstance = async (account: AWSAccountInfo, accountIndex: number, const rdsClient = new RDSClient({ credentials: account.credentials, region }); await rdsClient.send(new DeleteDBInstanceCommand({ DBInstanceIdentifier: identifier, SkipFinalSnapshot: true })); } catch (e) { + console.log('Error', JSON.stringify(e)); console.log(`${generateAccountInfo(account, accountIndex)} Deleting instance ${identifier} failed with error ${e.message}`); if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); @@ -666,6 +675,7 @@ const deleteCfnStack = async (account: AWSAccountInfo, accountIndex: number, sta await cfnClient.send(new DeleteStackCommand({ StackName: stackName, RetainResources: resourceToRetain })); await waitUntilStackDeleteComplete({ client: cfnClient, maxWaitTime: 600 }, { StackName: stackName }); } catch (e) { + console.log('Error', JSON.stringify(e)); console.log(`Deleting CloudFormation stack ${stackName} failed with error ${e.message}`); if (e.name === 'ExpiredTokenException') { handleExpiredTokenException(); @@ -784,6 +794,7 @@ const getAccountsToCleanup = async (): Promise => { }); return await Promise.all(accountCredentialPromises); } catch (e) { + console.log('Error', JSON.stringify(e)); console.error(e); console.log( 'Error assuming child account role. This could be because the script is already running from within a child account. Running on current AWS account only.', From 3dc02e8ce14d38a13dde8ce2900d2d8c69d00b7a Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Tue, 26 Aug 2025 12:16:08 -0500 Subject: [PATCH 34/37] chore: updated logging to better help pinpoint the failing calls --- .../amplify-e2e-tests/src/cleanup-e2e-resources.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index d946c0a6ad..98c025def9 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -189,13 +189,13 @@ const getOrphanRdsInstances = async (account: AWSAccountInfo, region: string): P const staleInstances = listRdsInstanceResponse.DBInstances.filter(testInstanceStalenessFilter); return staleInstances.map((i) => ({ identifier: i.DBInstanceIdentifier, region })); } catch (e) { - console.log('Error', JSON.stringify(e)); if (e?.name === 'InvalidClientTokenId') { // Do not fail the cleanup and continue // This is due to either child account or parent account not available in that region console.log(`Listing RDS instances for account ${account.accountId}-${region} failed with error with code ${e?.name}. Skipping.`); return []; } else { + console.log('Irrecoverable error in getOrphanedRdsInstances', JSON.stringify(e)); throw e; } } @@ -220,12 +220,12 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< const listAppsCommand = new ListAppsCommand({ maxResults: 50 }); amplifyApps = await amplifyClient.send(listAppsCommand); } catch (e) { - console.log('Error', JSON.stringify(e)); if (e?.name === 'UnrecognizedClientException') { // Do not fail the cleanup and continue console.log(`Listing apps for account ${account.accountId}-${region} failed with error with code ${e?.name}. Skipping.`); return result; } else { + console.log('Irrecoverable error in getAmplifyApps', JSON.stringify(e)); throw e; } } @@ -242,7 +242,6 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< } } } catch (e) { - console.log('Error', JSON.stringify(e)); console.log(e); } result.push({ @@ -320,12 +319,12 @@ const getStacks = async (account: AWSAccountInfo, region: string): Promise => { const { builds } = await client.send(new BatchGetBuildsCommand({ ids: jobIds })); return builds || []; } catch (e) { - console.log('Error', JSON.stringify(e)); console.log(e); return []; } @@ -395,7 +393,6 @@ const getS3Buckets = async (account: AWSAccountInfo): Promise => }); } } catch (e) { - console.log('Error', JSON.stringify(e)); // TODO: Why do we process the bucket even with these particular errors? if (e.name === 'NoSuchTagSet' || e.name === 'NoSuchBucket') { result.push({ @@ -408,6 +405,7 @@ const getS3Buckets = async (account: AWSAccountInfo): Promise => // processing the rest of the buckets. console.error(`Skipping processing ${account.accountId}, bucket ${bucket.Name}`, e); } else { + console.log('Irrecoverable error in getS3Buckets', JSON.stringify(e)); throw e; } } From bfd2532b04e6b17deb16b319734768b724532278 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Tue, 26 Aug 2025 14:01:20 -0500 Subject: [PATCH 35/37] fix: add InvalidClientToken to allowed errors getting apps --- packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 98c025def9..67b0698716 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -220,7 +220,7 @@ const getAmplifyApps = async (account: AWSAccountInfo, region: string): Promise< const listAppsCommand = new ListAppsCommand({ maxResults: 50 }); amplifyApps = await amplifyClient.send(listAppsCommand); } catch (e) { - if (e?.name === 'UnrecognizedClientException') { + if (e?.name === 'UnrecognizedClientException' || e?.name === 'InvalidClientTokenId') { // Do not fail the cleanup and continue console.log(`Listing apps for account ${account.accountId}-${region} failed with error with code ${e?.name}. Skipping.`); return result; From 2c035b2255dcbe17b3337c37f2cea2fa7237c6ab Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Wed, 27 Aug 2025 09:17:28 -0500 Subject: [PATCH 36/37] chore: add region to STS ... taking a shot in the dark --- packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 67b0698716..09a4072aaa 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -760,9 +760,12 @@ const getAccountsToCleanup = async (): Promise => { RoleArn: process.env.TEST_ACCOUNT_ROLE, RoleSessionName: `testSession${Math.floor(Math.random() * 100000)}`, }, + clientConfig: { + region: 'us-east-1', + }, }); - const stsClientForE2E = new STSClient({ credentials: parentAccountCreds }); + const stsClientForE2E = new STSClient({ credentials: parentAccountCreds, region: 'us-east-1' }); const parentAccountIdentity = await stsClientForE2E.send(new GetCallerIdentityCommand({})); const orgApi = new OrganizationsClient({ region: 'us-east-1', @@ -787,6 +790,9 @@ const getAccountsToCleanup = async (): Promise => { RoleSessionName: `testSession${randomNumber}`, }, masterCredentials: parentAccountCreds, + clientConfig: { + region: 'us-east-1', + }, }), }; }); From b3345577f04a819b53dea7d6e45293a638fa64b1 Mon Sep 17 00:00:00 2001 From: Jon Wire Date: Thu, 28 Aug 2025 11:27:39 -0500 Subject: [PATCH 37/37] chore: remove ARNs from comments --- packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts index 09a4072aaa..15967dec87 100644 --- a/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts +++ b/packages/amplify-e2e-tests/src/cleanup-e2e-resources.ts @@ -741,15 +741,6 @@ const getFilterPredicate = (args: any): JobFilterPredicate => { throw Error('Invalid args config'); }; -/** - * - * Need to go from ... - * - * 1. service role = arn:aws:iam::594813022831:role/amplify-api-codebuild-tesie2eworkflowrolee3c1ea2adea7c0ff60ae - * 2. "e2e parent account" = arn:aws:iam::182702232950:role/TestAccountRole-amplify-category-api - * 3. "e2e account" = arn:aws:iam::${account.Id}:role/OrganizationAccountAccessRole - */ - /** * Retrieve the accounts to process for potential cleanup. By default we will attempt * to get all accounts within the root account organization.