From 783aeb9b0e37b34725e48dbb592a9de4a3aac30b Mon Sep 17 00:00:00 2001 From: Jesse Turner Date: Mon, 16 Feb 2026 15:44:25 -0500 Subject: [PATCH 1/5] add end to end tests --- .github/pull_request_template.md | 2 +- .github/workflows/etoe-tests.yml | 42 ++ etoe-tests/create-deploy-invoke.test.ts | 111 +++++ integ-tests/deploy.test.ts | 121 ------ integ-tests/invoke-agent.test.ts | 84 ---- package-lock.json | 538 ++++++++++++++++-------- package.json | 1 + tsconfig.json | 1 + vitest.config.ts | 9 + 9 files changed, 516 insertions(+), 393 deletions(-) create mode 100644 .github/workflows/etoe-tests.yml create mode 100644 etoe-tests/create-deploy-invoke.test.ts delete mode 100644 integ-tests/deploy.test.ts delete mode 100644 integ-tests/invoke-agent.test.ts diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 539f89f3..75a657e1 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -26,7 +26,7 @@ Closes # How have you tested the change? -- [ ] I ran `npm run test:all` +- [ ] I ran `npm run test:unit` and `npm run test:integ` - [ ] I ran `npm run typecheck` - [ ] I ran `npm run lint` - [ ] If I modified `src/assets/`, I ran `npm run test:update-snapshots` and committed the updated snapshots diff --git a/.github/workflows/etoe-tests.yml b/.github/workflows/etoe-tests.yml new file mode 100644 index 00000000..e4d0e48f --- /dev/null +++ b/.github/workflows/etoe-tests.yml @@ -0,0 +1,42 @@ +name: E2E Tests +on: + workflow_dispatch: + inputs: + aws_region: + description: 'AWS region for deployment' + default: 'us-east-1' + +permissions: + id-token: write # OIDC — lets GitHub assume an AWS IAM role via short-lived token (no stored keys) + contents: read + +jobs: + etoe: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: '20.x' + cache: 'npm' + - name: Configure git + run: | + git config --global user.email "ci@amazon.com" + git config --global user.name "CI" + - uses: astral-sh/setup-uv@v5 + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.ETOE_AWS_ROLE_ARN }} + aws-region: ${{ inputs.aws_region }} + - name: Get AWS Account ID + id: aws + run: echo "account_id=$(aws sts get-caller-identity --query Account --output text)" >> "$GITHUB_OUTPUT" + - run: npm ci + - run: npm run build + - name: Run E2E tests + env: + AWS_ACCOUNT_ID: ${{ steps.aws.outputs.account_id }} + AWS_REGION: ${{ inputs.aws_region }} + run: npm run test:etoe diff --git a/etoe-tests/create-deploy-invoke.test.ts b/etoe-tests/create-deploy-invoke.test.ts new file mode 100644 index 00000000..59344808 --- /dev/null +++ b/etoe-tests/create-deploy-invoke.test.ts @@ -0,0 +1,111 @@ +import { hasAwsCredentials, prereqs, runCLI } from '../src/test-utils/index.js'; +import { execSync } from 'node:child_process'; +import { randomUUID } from 'node:crypto'; +import { mkdir, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; + +const hasAws = hasAwsCredentials(); +const canRun = prereqs.npm && prereqs.git && prereqs.uv && hasAws; + +describe('e2e: create → deploy → invoke', () => { + let testDir: string; + let projectPath: string; + let agentName: string; + + beforeAll(async () => { + if (!canRun) return; + + testDir = join(tmpdir(), `agentcore-etoe-${randomUUID()}`); + await mkdir(testDir, { recursive: true }); + + agentName = `Etoe${Date.now()}`; + const result = await runCLI( + [ + 'create', + '--name', + agentName, + '--language', + 'Python', + '--framework', + 'Strands', + '--model-provider', + 'Bedrock', + '--memory', + 'none', + '--json', + ], + testDir, + false + ); + + expect(result.exitCode, `Create failed: ${result.stderr}`).toBe(0); + const json = JSON.parse(result.stdout); + projectPath = json.projectPath; + + const account = + process.env.AWS_ACCOUNT_ID || + execSync('aws sts get-caller-identity --query Account --output text').toString().trim(); + const region = process.env.AWS_REGION || 'us-east-1'; + const awsTargetsPath = join(projectPath, 'agentcore', 'aws-targets.json'); + await writeFile(awsTargetsPath, JSON.stringify([{ name: 'default', account, region }])); + }, 120000); + + afterAll(async () => { + if (projectPath && hasAws) { + await runCLI(['remove', 'all', '--json'], projectPath, false); + const result = await runCLI(['deploy', '--yes', '--json'], projectPath, false); + + if (result.exitCode !== 0) { + console.log('Teardown stdout:', result.stdout); + console.log('Teardown stderr:', result.stderr); + } + } + if (testDir) await rm(testDir, { recursive: true, force: true }); + }, 600000); + + it.skipIf(!canRun)( + 'deploys to AWS successfully', + async () => { + expect(projectPath, 'Project should have been created').toBeTruthy(); + + const result = await runCLI(['deploy', '--yes', '--json'], projectPath, false); + + if (result.exitCode !== 0) { + console.log('Deploy stdout:', result.stdout); + console.log('Deploy stderr:', result.stderr); + } + + expect(result.exitCode, `Deploy failed: ${result.stderr}`).toBe(0); + + const json = JSON.parse(result.stdout); + expect(json.success, 'Deploy should report success').toBe(true); + }, + 300000 + ); + + it.skipIf(!canRun)( + 'invokes the deployed agent', + async () => { + expect(projectPath, 'Project should have been created').toBeTruthy(); + + const result = await runCLI( + ['invoke', '--prompt', 'Say hello', '--agent', agentName, '--json'], + projectPath, + false + ); + + if (result.exitCode !== 0) { + console.log('Invoke stdout:', result.stdout); + console.log('Invoke stderr:', result.stderr); + } + + expect(result.exitCode, `Invoke failed: ${result.stderr}`).toBe(0); + + const json = JSON.parse(result.stdout); + expect(json.success, 'Invoke should report success').toBe(true); + }, + 120000 + ); +}); diff --git a/integ-tests/deploy.test.ts b/integ-tests/deploy.test.ts deleted file mode 100644 index ee7e70c4..00000000 --- a/integ-tests/deploy.test.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { runCLI } from '../src/test-utils/index.js'; -import { execSync } from 'node:child_process'; -import { randomUUID } from 'node:crypto'; -import { mkdir, rm } from 'node:fs/promises'; -import { tmpdir } from 'node:os'; -import { join } from 'node:path'; -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; - -function hasCommand(cmd: string): boolean { - try { - execSync(`which ${cmd}`, { stdio: 'ignore' }); - return true; - } catch { - return false; - } -} - -function hasAwsCredentials(): boolean { - try { - execSync('aws sts get-caller-identity', { stdio: 'ignore' }); - return true; - } catch { - return false; - } -} - -const hasNpm = hasCommand('npm'); -const hasGit = hasCommand('git'); -const hasUv = hasCommand('uv'); -const hasAws = hasAwsCredentials(); - -const canRun = hasNpm && hasGit && hasUv && hasAws; - -describe('integration: deploy', () => { - let testDir: string; - let projectPath: string; - const targetName = `integ-${Date.now()}`; - - beforeAll(async () => { - if (!canRun) return; - - testDir = join(tmpdir(), `agentcore-integ-deploy-${randomUUID()}`); - await mkdir(testDir, { recursive: true }); - - // Create a project with agent - const name = `Deploy${Date.now()}`; - const result = await runCLI( - [ - 'create', - '--name', - name, - '--language', - 'Python', - '--framework', - 'Strands', - '--model-provider', - 'Bedrock', - '--memory', - 'none', - '--json', - ], - testDir, - false - ); - - if (result.exitCode === 0) { - const json = JSON.parse(result.stdout); - projectPath = json.projectPath; - - // Add a deployment target - await runCLI( - [ - 'add', - 'target', - '--name', - targetName, - '--account', - process.env.AWS_ACCOUNT_ID || '603141041947', - '--region', - process.env.AWS_REGION || 'us-east-1', - '--json', - ], - projectPath, - false - ); - } - }, 120000); - - afterAll(async () => { - // Tear down deployed resources: remove all agents, then deploy --yes to destroy the stack - if (projectPath && hasAws) { - await runCLI(['remove', 'all', '--json'], projectPath, false); - const result = await runCLI(['deploy', '--target', targetName, '--yes', '--json'], projectPath, false); - - expect(result.exitCode, `Teardown failed: ${result.stderr}`).toBe(0); - const json = JSON.parse(result.stdout); - expect(json.success, 'Teardown should report success').toBe(true); - } - if (testDir) await rm(testDir, { recursive: true, force: true }); - }, 300000); - - it.skipIf(!canRun)( - 'deploys to AWS successfully', - async () => { - expect(projectPath, 'Project should have been created').toBeTruthy(); - - const result = await runCLI(['deploy', '--target', targetName, '--yes', '--json'], projectPath, false); - - if (result.exitCode !== 0) { - console.log('Deploy stdout:', result.stdout); - console.log('Deploy stderr:', result.stderr); - } - - expect(result.exitCode, `Deploy failed: ${result.stderr}`).toBe(0); - - const json = JSON.parse(result.stdout); - expect(json.success, 'Deploy should report success').toBe(true); - }, - 180000 - ); -}); diff --git a/integ-tests/invoke-agent.test.ts b/integ-tests/invoke-agent.test.ts deleted file mode 100644 index 9cba9083..00000000 --- a/integ-tests/invoke-agent.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { runCLI } from '../src/test-utils/index.js'; -import { execSync } from 'node:child_process'; -import { randomUUID } from 'node:crypto'; -import { mkdir, rm } from 'node:fs/promises'; -import { tmpdir } from 'node:os'; -import { join } from 'node:path'; -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; - -function hasCommand(cmd: string): boolean { - try { - execSync(`which ${cmd}`, { stdio: 'ignore' }); - return true; - } catch { - return false; - } -} - -const hasNpm = hasCommand('npm'); -const hasGit = hasCommand('git'); -const hasUv = hasCommand('uv'); - -const canRun = hasNpm && hasGit && hasUv; - -describe('integration: invoke agent', () => { - let testDir: string; - let projectPath: string; - let agentName: string; - - beforeAll(async () => { - if (!canRun) return; - - testDir = join(tmpdir(), `agentcore-integ-invoke-${randomUUID()}`); - await mkdir(testDir, { recursive: true }); - - // Create a project with agent - const name = `InvokeTest${Date.now()}`; - const result = await runCLI( - [ - 'create', - '--name', - name, - '--language', - 'Python', - '--framework', - 'Strands', - '--model-provider', - 'Bedrock', - '--memory', - 'none', - '--json', - ], - testDir, - false - ); - - if (result.exitCode === 0) { - const json = JSON.parse(result.stdout); - projectPath = json.projectPath; - agentName = json.agentName || name; - } - }, 60000); - - afterAll(async () => { - if (testDir) await rm(testDir, { recursive: true, force: true }); - }); - - it.skipIf(!canRun)( - 'invokes agent and receives response', - async () => { - expect(projectPath, 'Project should have been created').toBeTruthy(); - - const result = await runCLI( - ['invoke', '--agent', agentName, '--prompt', 'Say hello', '--json'], - projectPath, - false - ); - - // Invoke may fail if no AWS credentials, but should at least attempt - // For now, just verify the command runs and produces output - expect(result.stdout.length > 0 || result.stderr.length > 0, 'Should produce some output').toBeTruthy(); - }, - 60000 - ); -}); diff --git a/package-lock.json b/package-lock.json index 0de3a7fa..2dcfe47b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -602,9 +602,9 @@ } }, "node_modules/@aws-sdk/client-appsync": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appsync/-/client-appsync-3.990.0.tgz", - "integrity": "sha512-TatQ0DZsmaeuy1Mg3DWY7Xpr/PBUJJ/HslUbgEZx6DH8idb1fvXkVa5QdmHi5rGlWZN+RgSSBUuqBaKF2X/fAA==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appsync/-/client-appsync-3.991.0.tgz", + "integrity": "sha512-0qytaydFBx0o94F7nNxzW7Nvi6UgZ4RTw/rlib8vgmYq7Y8WVDBZzchIn7g5JIy/jxtxMctTae1YaUCkKy8opw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -617,7 +617,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -653,9 +653,9 @@ } }, "node_modules/@aws-sdk/client-bedrock-agentcore": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-agentcore/-/client-bedrock-agentcore-3.990.0.tgz", - "integrity": "sha512-l1qsxHlImHoUICHf9+w9TJ87+Xn4GOUZu96i9qBbl/2J9t5DXFzKoDl+cdSbjVx4pGbuyNU7PslhfEaC0d5o1g==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-agentcore/-/client-bedrock-agentcore-3.991.0.tgz", + "integrity": "sha512-Kici48NlAn5FWd/vCK08Cspkw6kwga7HwY5nN/sMHRXYqFlxeMmlSDMNo8Jfg1di/eBTtcdHyn5iMwpuNJWf0A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -668,7 +668,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -707,9 +707,9 @@ } }, "node_modules/@aws-sdk/client-bedrock-agentcore-control": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-agentcore-control/-/client-bedrock-agentcore-control-3.990.0.tgz", - "integrity": "sha512-h9QSwQT1tXCp2eZfS9UmsMK+kHg9pCDG6rVpRBOqW/cxx+PFKwtQYrs7KKgCaocf99T72jxXhbtOuiVqKPsUkQ==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-agentcore-control/-/client-bedrock-agentcore-control-3.991.0.tgz", + "integrity": "sha512-p2V2KE2oYIp44lqdGrpnEQ7Pu91EHp67/ncUDtYN/8qQpBq8dyWvS765hXXn4fnKxUul7NAMtnaUMBAF5yu2/w==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -722,7 +722,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -758,9 +758,9 @@ } }, "node_modules/@aws-sdk/client-bedrock-runtime": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.990.0.tgz", - "integrity": "sha512-8TtV9c0DWGxwYvlcED/NlhTM0aDHM9yb0Y3Q0b0NQwiyrahX+qlck/Wo8fJQ7GHAkFn8MtczvAQzbLszyo+w0Q==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.991.0.tgz", + "integrity": "sha512-eKdkfIj2R/lfA6XGjTCQdFSVRKAjPd1Epndf1DvnzYInEzh/WOoaMMWuQn6HP9VPzHDb4xAiYmJX9FHmTJGFtg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -775,9 +775,9 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/middleware-websocket": "^3.972.6", "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/token-providers": "3.990.0", + "@aws-sdk/token-providers": "3.991.0", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -816,9 +816,9 @@ } }, "node_modules/@aws-sdk/client-cloudcontrol": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudcontrol/-/client-cloudcontrol-3.990.0.tgz", - "integrity": "sha512-5FUPYEzv0TfVrgTD0Ybh7prjLpIYYzzBPsNjbcISXdC3GzIIFzAyuv3LVvqVMUMh6zzXiig4tqsososzt3Po3Q==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudcontrol/-/client-cloudcontrol-3.991.0.tgz", + "integrity": "sha512-JzFOtVGoM9s3yaTHQvwXnzD96PGGqryN9SaDZ3q2XWvsw77YIOWf7+Sdv3QYwXD8qAsqjxQnyBLdjemtPvO9eQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -831,7 +831,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -867,9 +867,9 @@ } }, "node_modules/@aws-sdk/client-cloudformation": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.990.0.tgz", - "integrity": "sha512-XsofhyUiSygmLDBSKZ+jhskUY2ZpKkqvj8j2Na2a+vSpe5dDVK0ErNNN2uU2U7ntoHD70Ne0stvaQXtKDpqhsQ==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.991.0.tgz", + "integrity": "sha512-6sFj/VahZrj94EZJjxOwMccbhZUwt5Kzhw+U9Vw7FHzOUv6Pqe/dUq2v4/9tFJvD0qWp6Bk9s0RZhuUe8lcxag==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -882,7 +882,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -918,9 +918,9 @@ } }, "node_modules/@aws-sdk/client-cloudwatch-logs": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.990.0.tgz", - "integrity": "sha512-9iCLVYB6AlBVBIe+35mclDJ84EUH526xhbQ8yU/1O7HMgWSzgK3uwgZBj77wKzi6NHcn9XVe97T1Hta9Vqzf5Q==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.991.0.tgz", + "integrity": "sha512-6r4aQSRiEDD2DLX5dfilTDVgMrGYW3sxr7ZgOV1t+nmHueHpEX4zgNAQyEkH0fstYcEfVMDA2O/uEbscgXgtIw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -933,7 +933,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -971,9 +971,9 @@ } }, "node_modules/@aws-sdk/client-codebuild": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.990.0.tgz", - "integrity": "sha512-fkz0wLpsuwMViWZPWjqNBvzpdas4HLiIAyr2Jbc8qt/OinbKL/iXp5jNDW9h4ePXQKI2bLOucK6pXaLfxF+CSA==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.991.0.tgz", + "integrity": "sha512-vL/hxZBNsTXYBZjNdZPAPV5Vs0mg7hjzytEpKaNDZLDePnWtDn4Fb4nJd60E+KKh7sAXq9no0pa2mF36tEYoqQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -986,7 +986,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1021,9 +1021,9 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.990.0.tgz", - "integrity": "sha512-7VF6Gm7erGLdCBk7oR4pMNgbWZWkUxiomjUmgKikiMmNVpRjUY+2PODUjIINuPZug0WbNIIvbHnfapaXho0x/A==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.991.0.tgz", + "integrity": "sha512-U3Qh+SPWQQiK+ON6fCOC+SctNlsigATTnz1TkD28l35j6fs7+QAEjbtP07LpfZ926mx3ibBN3jMRDFsOKSXwRQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1036,7 +1036,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1071,9 +1071,9 @@ } }, "node_modules/@aws-sdk/client-ec2": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.990.0.tgz", - "integrity": "sha512-Z3+CdsUsvc8KYNxuR1O34o10VEuTaZrmfiP6jgzwJR7bH1yZD8wMB+9bfaIM0bSLJzXK9+KBK86U2D4kq/ILUg==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.991.0.tgz", + "integrity": "sha512-F5+tNammHCXPw/SJlXYBvSJTlEPLx0pytCdrP9T3u/MulObehQokUiHlDPoaZUE6fmzJDBCc1z6P6HJ58jNwyA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1087,7 +1087,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1123,9 +1123,9 @@ } }, "node_modules/@aws-sdk/client-ecr": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecr/-/client-ecr-3.990.0.tgz", - "integrity": "sha512-vZls9dXhp3d4lhLC9f6UNh3TZHpqzfp7rxMOZhmGzRcuWRUzdXUo6q3tE1qzl6CPX6uy3HWq+iLDIVtDWtxYPA==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecr/-/client-ecr-3.991.0.tgz", + "integrity": "sha512-vYLJmJaKgSr3HbcvKZPcUjJ2WvOzGF1zCIja7ZWsjhxdrOSgvWjyhbMf1PasOQHb3/T4T4ZVqhtVgA09SBy/sA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1138,7 +1138,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1174,9 +1174,9 @@ } }, "node_modules/@aws-sdk/client-ecs": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.990.0.tgz", - "integrity": "sha512-AlMwuASWd9ASqhI7WP05H6UqxBd36H9Y9ZdsalnsotvIqYArH5t6aEuWSRKwvK01u1GNkbFxZGpJcJ04DT8kPQ==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.991.0.tgz", + "integrity": "sha512-6mdblsmX6Gpge1FVmBN4lP9F7iuwpsNzkFPMv9XXewkbhAeyZascCWR2PXqlp6xe4fugT+J98LShavAxOjTJLA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1189,7 +1189,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1225,9 +1225,9 @@ } }, "node_modules/@aws-sdk/client-elastic-load-balancing-v2": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-elastic-load-balancing-v2/-/client-elastic-load-balancing-v2-3.990.0.tgz", - "integrity": "sha512-JX/jg7ae9nNdSp82SJSLgiWDn7h07sSz6I7Gb0NC5VkHUk4+X2ERYfFYUfR5dOfSCkPbiqWHhMp+sAnAg3/+Kw==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-elastic-load-balancing-v2/-/client-elastic-load-balancing-v2-3.991.0.tgz", + "integrity": "sha512-7qXw0cnvAVJ9krrInPZdzIWagDNeVqWy2/+wH2rQXYWKwz3sGdmx5VuKzP6rdWFMcMaXl40uqypNGpXY2mBWKA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1240,7 +1240,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1276,9 +1276,9 @@ } }, "node_modules/@aws-sdk/client-iam": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-iam/-/client-iam-3.990.0.tgz", - "integrity": "sha512-Agx4+Xzclky6kOjmIbOolwHP/VfRHOCHU5ezWBwpudyg71xsIQw/xUyaXj62gz8wb06lMjqNUZdUmd7YfsR8iA==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-iam/-/client-iam-3.991.0.tgz", + "integrity": "sha512-lG72wuuJf7yED5tdxDBLIoGXgk5G8NiGf+QzCcIG2ktoX2kaSujwMz/xJYB1wNcOLMrrZmdexdaxi/fOiHTNXw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1291,7 +1291,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1327,9 +1327,9 @@ } }, "node_modules/@aws-sdk/client-kms": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.990.0.tgz", - "integrity": "sha512-k8qui9WMJE7ySN2H1t7zILWDmjsbdqhqL6VYXbv6bopRhucb5gudGJzYvjUtbrlX5QfrLIR3DzxNj7VFAoO04Q==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.991.0.tgz", + "integrity": "sha512-1FWqtpi3woX3ZsN/dLOVX7jLXWPTkksEesZgkC2xVNy4n+/gtaj/CrsFW+qL25XZH7n7goGemo5q9Z3BLESczg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1342,7 +1342,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1377,9 +1377,9 @@ } }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.990.0.tgz", - "integrity": "sha512-C7+AEzUxHVDvznYBFR9+PtRx8XexcUF5shY01lpoR8LdoEYinRKZt7IdKtqyWopmD5DzYUik7WQ6qI8UNRXevw==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.991.0.tgz", + "integrity": "sha512-fiJbkZZExQwdtH2WEd+up02/En7ASd9PcKpS7aceysp+nyU2LZaf3dAUBaM+EsbtuhsUny2AHdDPtbfwqJnhCw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1392,7 +1392,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1432,9 +1432,9 @@ } }, "node_modules/@aws-sdk/client-resource-groups-tagging-api": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-resource-groups-tagging-api/-/client-resource-groups-tagging-api-3.990.0.tgz", - "integrity": "sha512-I47IAgbIiP2OJW++S2Hnue4Rr1jCz+dtiu3cOGmjeipo2NOYBpo7cbj8zqEN6NdpLzGBaLH32CruuXc9XuyzfQ==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-resource-groups-tagging-api/-/client-resource-groups-tagging-api-3.991.0.tgz", + "integrity": "sha512-4Vx9vVcgoLH+/Z/2e7iGhlC9dOjMBGLzoItYMBiihDhl+MJxJXxD5Oy6q9Wt9YdMxgYEvyTRDm6BR0XgZayE0w==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1447,7 +1447,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1482,9 +1482,9 @@ } }, "node_modules/@aws-sdk/client-route-53": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-route-53/-/client-route-53-3.990.0.tgz", - "integrity": "sha512-ANoqSeSvOpsNuLXmucqUWXX8FfSpIEePcTqIw3DegxqNjuqgxMiQthFGaUZQ2QToHd0I9SfRtuDKHXAZW6W2bw==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-route-53/-/client-route-53-3.991.0.tgz", + "integrity": "sha512-YEhlijhMxcq/eOAE2IBFmAqnmnLgxoFKuX1IMrBoLNa2WMhEVDAluCa7dIJ3EPwJVLaOFlzld+U/HYgNZTAq/g==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1498,7 +1498,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1534,9 +1534,9 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.990.0.tgz", - "integrity": "sha512-XnsM8RgB35Atn2+aYSocitCybDG82x9yYf/s2D23ytpyHCupmuZN3LzK2a0WxmKO6Zf7EtEIYy0mHGY4tLp9YA==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.991.0.tgz", + "integrity": "sha512-zVrOyECGCtwaGP+VzhsigkTraM3mcxuUoBKcCLxWF6hSMVozfCilA1cq1nVrcHeAAcrXgKWbCVHdxx5SQXlUcQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", @@ -1555,9 +1555,9 @@ "@aws-sdk/middleware-ssec": "^3.972.3", "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/signature-v4-multi-region": "3.990.0", + "@aws-sdk/signature-v4-multi-region": "3.991.0", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1600,9 +1600,9 @@ } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.990.0.tgz", - "integrity": "sha512-cf4ZLsjczU/Rh+QAxoXUbc/2OKAm8WWC3j1axE4qIO6FLziJCze94sTSCmhSMeLoSjixtIORERQeAXYnjrYVAg==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.991.0.tgz", + "integrity": "sha512-YJhgFxYchpWEf+kSlZ1WEFWh59jtOJalZCGk5j+1G315f0oCM4kd0oZ9X4GwsfvV4CYis/V/1wYvpZXbjFXH3g==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1615,7 +1615,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1650,9 +1650,9 @@ } }, "node_modules/@aws-sdk/client-sfn": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.990.0.tgz", - "integrity": "sha512-1bavk44iyIALXpTi1P0MmPtVRNn0evxI0V+NPLchEqWmOWFnOCh+E1jPCV/+d1g00qLvFaoMelGd40Kp+ZHSyQ==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.991.0.tgz", + "integrity": "sha512-+Ueid+1o3yXfI7ciuokYF26TzzUaWIeU9eBCVKE+WRuwOyIVlWRd8cb6gPf9corBX3akX8oDVrZq+fjpQhBEEg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1665,7 +1665,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1700,9 +1700,9 @@ } }, "node_modules/@aws-sdk/client-ssm": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.990.0.tgz", - "integrity": "sha512-SQFrsCsYqgpY6HyeUGfNPepFi0CBTuJri8t9+x3Cvs5zl425XfbdfQtbQi+ecbNO8QICMD45hkBO/iP3wATSpA==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.991.0.tgz", + "integrity": "sha512-RiD8SgmGjYcguPt5HgJUluIp4HlPpT34McI/vLMHzu3CSfQSRVf80f20gnRw35WuT+K0LUxmdfzieYrvVJXkhA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1715,7 +1715,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -1799,10 +1799,26 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-sts": { + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints": { "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.990.0.tgz", - "integrity": "sha512-w1MfhIKV1GmQJI2gN64gvtwSPJR55n5TIkujIoZZy3V3OlksAOWCnfUBHoyfu8x4aZn70cINfa+ixPtUHtnEew==", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.990.0.tgz", + "integrity": "sha512-kVwtDc9LNI3tQZHEMNbkLIOpeDK8sRSTuT8eMnzGY+O+JImPisfSTjdh+jw9OTznu+MYZjQsv0258sazVKunYg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.991.0.tgz", + "integrity": "sha512-jE82oh/+uz3YzS3yPx95Ufki1pvBToUAk0K+7vz9JFg5RLKKwqgnR1PZFehJL/eke23lmX4+uhm1D+SAy5INVA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1815,7 +1831,7 @@ "@aws-sdk/middleware-user-agent": "^3.972.10", "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.990.0", + "@aws-sdk/util-endpoints": "3.991.0", "@aws-sdk/util-user-agent-browser": "^3.972.3", "@aws-sdk/util-user-agent-node": "^3.972.8", "@smithy/config-resolver": "^4.4.6", @@ -2108,6 +2124,24 @@ "node": ">=20.0.0" } }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { + "version": "3.990.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.990.0.tgz", + "integrity": "sha512-L3BtUb2v9XmYgQdfGBzbBtKMXaP5fV973y3Qdxeevs6oUTVXFmi/mV1+LnScA/1wVPJC9/hlK+1o5vbt7cG7EQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.10", + "@aws-sdk/nested-clients": "3.990.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.972.8", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.8.tgz", @@ -2127,12 +2161,12 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.990.0.tgz", - "integrity": "sha512-urX4CbPkqYVHErqglluwho98ulIZhB33vdg87IK6F0Uj5pdNF7YBoHMvwOXcFbiDIbYKOeqKQDynsMYRQtp7Vg==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.991.0.tgz", + "integrity": "sha512-DlNG60+kVja4CtR5KPbbXFlNi2M4dGjKRnzN2aexb1ge2jqvK20vX2MGXyNj7oVNQcvwN/qUiCJ77vzS0H7miA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.990.0", + "@aws-sdk/client-cognito-identity": "3.991.0", "@aws-sdk/core": "^3.973.10", "@aws-sdk/credential-provider-cognito-identity": "^3.972.3", "@aws-sdk/credential-provider-env": "^3.972.8", @@ -2143,7 +2177,7 @@ "@aws-sdk/credential-provider-process": "^3.972.8", "@aws-sdk/credential-provider-sso": "^3.972.8", "@aws-sdk/credential-provider-web-identity": "^3.972.8", - "@aws-sdk/nested-clients": "3.990.0", + "@aws-sdk/nested-clients": "3.991.0", "@aws-sdk/types": "^3.973.1", "@smithy/config-resolver": "^4.4.6", "@smithy/core": "^3.23.0", @@ -2157,10 +2191,59 @@ "node": ">=20.0.0" } }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/nested-clients": { + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.991.0.tgz", + "integrity": "sha512-vCWX2O4Kf9h0BviR46r2kc9cAv9twcxDCW9Rlszjkxg0+QN3ji0Q68OVfFZKZYx1BIPkPaWwjeMFB3iUtyyC3w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.10", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.991.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.8", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.14", + "@smithy/middleware-retry": "^4.4.31", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.30", + "@smithy/util-defaults-mode-node": "^4.2.33", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@aws-sdk/ec2-metadata-service": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/ec2-metadata-service/-/ec2-metadata-service-3.990.0.tgz", - "integrity": "sha512-8bqpimaqRJbuLkM/oz/ykxvMHg2UdLdWvP2pqFq5U0DaVUtAgkfMzhT1QrCIVk6NtUHhkPkDQidfqW8fRP3HwA==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/ec2-metadata-service/-/ec2-metadata-service-3.991.0.tgz", + "integrity": "sha512-tj/q7FKlpUkVUZWoGmEa2jVyU5az/5vYhscZX/+xynNs8SbV0nVQeXgYIjZi6pkhYOgohbQzzv31yu9PAmtPMQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.1", @@ -2191,9 +2274,9 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.990.0.tgz", - "integrity": "sha512-SHog6kMWXwLBTeVwFAd+EHwr1874Ei5ob1DTL5mLmJDwbmkFog2VDKN+9BmI4di0yxY057Ps2vhhWLhKy89wuA==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.991.0.tgz", + "integrity": "sha512-NLnFgLcJTixE6PrFxqPkbjbEtjr7JE7/5xxk8Xf8Xr8kFOlx3LyCUVKrmk5zKZBTJRjGomN3FCxRm5KEdOz/Yg==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.8", @@ -2208,7 +2291,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.990.0" + "@aws-sdk/client-s3": "^3.991.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { @@ -2433,6 +2516,22 @@ "node": ">=20.0.0" } }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints": { + "version": "3.990.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.990.0.tgz", + "integrity": "sha512-kVwtDc9LNI3tQZHEMNbkLIOpeDK8sRSTuT8eMnzGY+O+JImPisfSTjdh+jw9OTznu+MYZjQsv0258sazVKunYg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@aws-sdk/middleware-websocket": { "version": "3.972.6", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.6.tgz", @@ -2505,6 +2604,22 @@ "node": ">=20.0.0" } }, + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": { + "version": "3.990.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.990.0.tgz", + "integrity": "sha512-kVwtDc9LNI3tQZHEMNbkLIOpeDK8sRSTuT8eMnzGY+O+JImPisfSTjdh+jw9OTznu+MYZjQsv0258sazVKunYg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.972.3", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.3.tgz", @@ -2522,9 +2637,9 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.990.0.tgz", - "integrity": "sha512-O55s1eFmKi+2Ko5T1hbdxL6tFVONGscSVe9VRxS4m91Tlbo9iG2Q2HvKWq1DuKQAuUWSUfMmjrRt07JNzizr2A==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.991.0.tgz", + "integrity": "sha512-sW+BcPs/RgqsdlrN3YrYr2Q1hEQjT9DY7B0edhZeaEt2WdFQoh+QfBDhlHPCvkJyxbF9BAW8CjJDhvIQYUrx3A==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/middleware-sdk-s3": "^3.972.10", @@ -2539,13 +2654,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.990.0.tgz", - "integrity": "sha512-L3BtUb2v9XmYgQdfGBzbBtKMXaP5fV973y3Qdxeevs6oUTVXFmi/mV1+LnScA/1wVPJC9/hlK+1o5vbt7cG7EQ==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.991.0.tgz", + "integrity": "sha512-bBlhKprCPhOU+XuoFdR8D5hrbfvUxOYPsMm/bTAhaiCZzng0G1QM5jqOet3z9U9BzyIAH+PH6kUGbeDwhv0acA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.10", - "@aws-sdk/nested-clients": "3.990.0", + "@aws-sdk/nested-clients": "3.991.0", "@aws-sdk/types": "^3.973.1", "@smithy/property-provider": "^4.2.8", "@smithy/shared-ini-file-loader": "^4.4.3", @@ -2556,6 +2671,55 @@ "node": ">=20.0.0" } }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients": { + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.991.0.tgz", + "integrity": "sha512-vCWX2O4Kf9h0BviR46r2kc9cAv9twcxDCW9Rlszjkxg0+QN3ji0Q68OVfFZKZYx1BIPkPaWwjeMFB3iUtyyC3w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.10", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.991.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.8", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.14", + "@smithy/middleware-retry": "^4.4.31", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.30", + "@smithy/util-defaults-mode-node": "^4.2.33", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@aws-sdk/types": { "version": "3.973.1", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", @@ -2582,9 +2746,9 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.990.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.990.0.tgz", - "integrity": "sha512-kVwtDc9LNI3tQZHEMNbkLIOpeDK8sRSTuT8eMnzGY+O+JImPisfSTjdh+jw9OTznu+MYZjQsv0258sazVKunYg==", + "version": "3.991.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.991.0.tgz", + "integrity": "sha512-m8tcZ3SbqG3NRDv0Py3iBKdb4/FlpOCP4CQ6wRtsk4vs3UypZ0nFdZwCRVnTN7j+ldj+V72xVi/JBlxFBDE7Sg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.1", @@ -5359,17 +5523,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz", - "integrity": "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz", + "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.55.0", - "@typescript-eslint/type-utils": "8.55.0", - "@typescript-eslint/utils": "8.55.0", - "@typescript-eslint/visitor-keys": "8.55.0", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/type-utils": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -5382,22 +5546,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.55.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz", - "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz", + "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.55.0", - "@typescript-eslint/types": "8.55.0", - "@typescript-eslint/typescript-estree": "8.55.0", - "@typescript-eslint/visitor-keys": "8.55.0", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3" }, "engines": { @@ -5408,19 +5572,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz", - "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", + "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.55.0", - "@typescript-eslint/types": "^8.55.0", + "@typescript-eslint/tsconfig-utils": "^8.56.0", + "@typescript-eslint/types": "^8.56.0", "debug": "^4.4.3" }, "engines": { @@ -5435,14 +5599,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz", - "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", + "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.55.0", - "@typescript-eslint/visitor-keys": "8.55.0" + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5453,9 +5617,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz", - "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", + "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", "dev": true, "license": "MIT", "engines": { @@ -5470,15 +5634,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.55.0.tgz", - "integrity": "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz", + "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.55.0", - "@typescript-eslint/typescript-estree": "8.55.0", - "@typescript-eslint/utils": "8.55.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -5490,14 +5654,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz", - "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", + "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", "dev": true, "license": "MIT", "engines": { @@ -5509,16 +5673,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz", - "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", + "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.55.0", - "@typescript-eslint/tsconfig-utils": "8.55.0", - "@typescript-eslint/types": "8.55.0", - "@typescript-eslint/visitor-keys": "8.55.0", + "@typescript-eslint/project-service": "8.56.0", + "@typescript-eslint/tsconfig-utils": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", @@ -5553,16 +5717,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.55.0.tgz", - "integrity": "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", + "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.55.0", - "@typescript-eslint/types": "8.55.0", - "@typescript-eslint/typescript-estree": "8.55.0" + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5572,19 +5736,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz", - "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", + "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.55.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5595,13 +5759,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -13008,16 +13172,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.55.0.tgz", - "integrity": "sha512-HE4wj+r5lmDVS9gdaN0/+iqNvPZwGfnJ5lZuz7s5vLlg9ODw0bIiiETaios9LvFI1U94/VBXGm3CB2Y5cNFMpw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.0.tgz", + "integrity": "sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.55.0", - "@typescript-eslint/parser": "8.55.0", - "@typescript-eslint/typescript-estree": "8.55.0", - "@typescript-eslint/utils": "8.55.0" + "@typescript-eslint/eslint-plugin": "8.56.0", + "@typescript-eslint/parser": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -13027,7 +13191,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, diff --git a/package.json b/package.json index 1325c9da..677d22c6 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "test:watch": "vitest --project unit", "test:integ": "vitest run --project integ", "test:unit": "vitest run --project unit --coverage", + "test:etoe": "vitest run --project etoe", "test:update-snapshots": "vitest run --project unit --update" }, "dependencies": { diff --git a/tsconfig.json b/tsconfig.json index 388fd36f..39bf03b5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,6 +26,7 @@ "include": [ "src/**/*", "integ-tests/**/*", + "etoe-tests/**/*", "scripts/**/*", "vitest.config.ts", "vitest.integ.config.ts", diff --git a/vitest.config.ts b/vitest.config.ts index d5f08629..58095f7d 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -49,6 +49,15 @@ export default defineConfig({ include: ['integ-tests/**/*.test.ts'], }, }, + { + extends: true, + test: { + name: 'etoe', + include: ['etoe-tests/**/*.test.ts'], + testTimeout: 600000, + hookTimeout: 600000, + }, + }, ], testTimeout: 120000, hookTimeout: 120000, From e552dcf82c5139ea5191b2d25d69d9ded8855c8f Mon Sep 17 00:00:00 2001 From: Jesse Turner Date: Tue, 17 Feb 2026 09:27:01 -0500 Subject: [PATCH 2/5] etoe to e2e --- .github/workflows/{etoe-tests.yml => e2e-tests.yml} | 6 +++--- {etoe-tests => e2e-tests}/create-deploy-invoke.test.ts | 4 ++-- package.json | 2 +- tsconfig.json | 2 +- vitest.config.ts | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) rename .github/workflows/{etoe-tests.yml => e2e-tests.yml} (92%) rename {etoe-tests => e2e-tests}/create-deploy-invoke.test.ts (97%) diff --git a/.github/workflows/etoe-tests.yml b/.github/workflows/e2e-tests.yml similarity index 92% rename from .github/workflows/etoe-tests.yml rename to .github/workflows/e2e-tests.yml index e4d0e48f..7ad9af61 100644 --- a/.github/workflows/etoe-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -11,7 +11,7 @@ permissions: contents: read jobs: - etoe: + e2e: runs-on: ubuntu-latest timeout-minutes: 30 steps: @@ -28,7 +28,7 @@ jobs: - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: - role-to-assume: ${{ secrets.ETOE_AWS_ROLE_ARN }} + role-to-assume: ${{ secrets.E2E_AWS_ROLE_ARN }} aws-region: ${{ inputs.aws_region }} - name: Get AWS Account ID id: aws @@ -39,4 +39,4 @@ jobs: env: AWS_ACCOUNT_ID: ${{ steps.aws.outputs.account_id }} AWS_REGION: ${{ inputs.aws_region }} - run: npm run test:etoe + run: npm run test:e2e diff --git a/etoe-tests/create-deploy-invoke.test.ts b/e2e-tests/create-deploy-invoke.test.ts similarity index 97% rename from etoe-tests/create-deploy-invoke.test.ts rename to e2e-tests/create-deploy-invoke.test.ts index 59344808..e1f1ba15 100644 --- a/etoe-tests/create-deploy-invoke.test.ts +++ b/e2e-tests/create-deploy-invoke.test.ts @@ -17,10 +17,10 @@ describe('e2e: create → deploy → invoke', () => { beforeAll(async () => { if (!canRun) return; - testDir = join(tmpdir(), `agentcore-etoe-${randomUUID()}`); + testDir = join(tmpdir(), `agentcore-e2e-${randomUUID()}`); await mkdir(testDir, { recursive: true }); - agentName = `Etoe${Date.now()}`; + agentName = `E2e${Date.now()}`; const result = await runCLI( [ 'create', diff --git a/package.json b/package.json index 677d22c6..061bd82c 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "test:watch": "vitest --project unit", "test:integ": "vitest run --project integ", "test:unit": "vitest run --project unit --coverage", - "test:etoe": "vitest run --project etoe", + "test:e2e": "vitest run --project e2e", "test:update-snapshots": "vitest run --project unit --update" }, "dependencies": { diff --git a/tsconfig.json b/tsconfig.json index 39bf03b5..ea8523c0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,7 +26,7 @@ "include": [ "src/**/*", "integ-tests/**/*", - "etoe-tests/**/*", + "e2e-tests/**/*", "scripts/**/*", "vitest.config.ts", "vitest.integ.config.ts", diff --git a/vitest.config.ts b/vitest.config.ts index 58095f7d..00f88b25 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -52,8 +52,8 @@ export default defineConfig({ { extends: true, test: { - name: 'etoe', - include: ['etoe-tests/**/*.test.ts'], + name: 'e2e', + include: ['e2e-tests/**/*.test.ts'], testTimeout: 600000, hookTimeout: 600000, }, From 279e2f2e8d9b2c0a2ea334bf1ac7c0ed9e51050f Mon Sep 17 00:00:00 2001 From: Jesse Turner Date: Tue, 17 Feb 2026 09:28:21 -0500 Subject: [PATCH 3/5] change e2e test to sequential. --- e2e-tests/create-deploy-invoke.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e-tests/create-deploy-invoke.test.ts b/e2e-tests/create-deploy-invoke.test.ts index e1f1ba15..cf386324 100644 --- a/e2e-tests/create-deploy-invoke.test.ts +++ b/e2e-tests/create-deploy-invoke.test.ts @@ -9,7 +9,7 @@ import { afterAll, beforeAll, describe, expect, it } from 'vitest'; const hasAws = hasAwsCredentials(); const canRun = prereqs.npm && prereqs.git && prereqs.uv && hasAws; -describe('e2e: create → deploy → invoke', () => { +describe.sequential('e2e: create → deploy → invoke', () => { let testDir: string; let projectPath: string; let agentName: string; From 77009f1b6437c83910b0417dcd9c63d01e876e3f Mon Sep 17 00:00:00 2001 From: Jesse Turner Date: Tue, 17 Feb 2026 09:29:13 -0500 Subject: [PATCH 4/5] add comment to add target later --- e2e-tests/create-deploy-invoke.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/e2e-tests/create-deploy-invoke.test.ts b/e2e-tests/create-deploy-invoke.test.ts index cf386324..8f28d8f7 100644 --- a/e2e-tests/create-deploy-invoke.test.ts +++ b/e2e-tests/create-deploy-invoke.test.ts @@ -44,6 +44,7 @@ describe.sequential('e2e: create → deploy → invoke', () => { const json = JSON.parse(result.stdout); projectPath = json.projectPath; + // TODO: Replace with `agentcore add target` once the CLI command is re-introduced const account = process.env.AWS_ACCOUNT_ID || execSync('aws sts get-caller-identity --query Account --output text').toString().trim(); From 0f18d3043426ca9526b2f801a3020c8744b789c9 Mon Sep 17 00:00:00 2001 From: Jesse Turner Date: Tue, 17 Feb 2026 09:31:09 -0500 Subject: [PATCH 5/5] add parsJsonOutput --- e2e-tests/create-deploy-invoke.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/e2e-tests/create-deploy-invoke.test.ts b/e2e-tests/create-deploy-invoke.test.ts index 8f28d8f7..b026d160 100644 --- a/e2e-tests/create-deploy-invoke.test.ts +++ b/e2e-tests/create-deploy-invoke.test.ts @@ -1,4 +1,4 @@ -import { hasAwsCredentials, prereqs, runCLI } from '../src/test-utils/index.js'; +import { hasAwsCredentials, parseJsonOutput, prereqs, runCLI } from '../src/test-utils/index.js'; import { execSync } from 'node:child_process'; import { randomUUID } from 'node:crypto'; import { mkdir, rm, writeFile } from 'node:fs/promises'; @@ -41,7 +41,7 @@ describe.sequential('e2e: create → deploy → invoke', () => { ); expect(result.exitCode, `Create failed: ${result.stderr}`).toBe(0); - const json = JSON.parse(result.stdout); + const json = parseJsonOutput(result.stdout) as { projectPath: string }; projectPath = json.projectPath; // TODO: Replace with `agentcore add target` once the CLI command is re-introduced @@ -80,7 +80,7 @@ describe.sequential('e2e: create → deploy → invoke', () => { expect(result.exitCode, `Deploy failed: ${result.stderr}`).toBe(0); - const json = JSON.parse(result.stdout); + const json = parseJsonOutput(result.stdout) as { success: boolean }; expect(json.success, 'Deploy should report success').toBe(true); }, 300000 @@ -104,7 +104,7 @@ describe.sequential('e2e: create → deploy → invoke', () => { expect(result.exitCode, `Invoke failed: ${result.stderr}`).toBe(0); - const json = JSON.parse(result.stdout); + const json = parseJsonOutput(result.stdout) as { success: boolean }; expect(json.success, 'Invoke should report success').toBe(true); }, 120000