diff --git a/.changes/next-release/Bug Fix-codecatalyst-token-permissions.json b/.changes/next-release/Bug Fix-codecatalyst-token-permissions.json new file mode 100644 index 00000000000..94537aa3a71 --- /dev/null +++ b/.changes/next-release/Bug Fix-codecatalyst-token-permissions.json @@ -0,0 +1,4 @@ +{ + "type": "Bug Fix", + "description": "CodeCatalyst: Dev Environment connection token stored with insecure file permissions" +} diff --git a/.changes/next-release/Removal-remove-amazon-q-install-prompt.json b/.changes/next-release/Removal-remove-amazon-q-install-prompt.json new file mode 100644 index 00000000000..a690bb5cffa --- /dev/null +++ b/.changes/next-release/Removal-remove-amazon-q-install-prompt.json @@ -0,0 +1,4 @@ +{ + "type": "Removal", + "description": "No longer prompts users to install Amazon Q on startup" +} diff --git a/.changes/next-release/bugfix-cfn-resource-import-1772138230.json b/.changes/next-release/bugfix-cfn-resource-import-1772138230.json new file mode 100644 index 00000000000..69f8c7df2a8 --- /dev/null +++ b/.changes/next-release/bugfix-cfn-resource-import-1772138230.json @@ -0,0 +1,4 @@ +{ + "type": "bugfix", + "description": "Display AWS error message when importing CloudFormation resource state fails. Currently users only see 'Failed to import * resource(s)'." +} diff --git a/.changes/next-release/bugfix-redshift-notebook-xss.json b/.changes/next-release/bugfix-redshift-notebook-xss.json new file mode 100644 index 00000000000..821ddd73dcc --- /dev/null +++ b/.changes/next-release/bugfix-redshift-notebook-xss.json @@ -0,0 +1,4 @@ +{ + "type": "Bug Fix", + "description": "Redshift SQL Notebook: Query results with HTML special characters in column names or cell values are now displayed safely instead of being interpreted as HTML." +} diff --git a/.changes/next-release/feat-hyperpod-deeplink-reconnection.json b/.changes/next-release/feat-hyperpod-deeplink-reconnection.json new file mode 100644 index 00000000000..ee4db88eaf6 --- /dev/null +++ b/.changes/next-release/feat-hyperpod-deeplink-reconnection.json @@ -0,0 +1,4 @@ +{ + "type": "Feature", + "description": "HyperPod: Supporting reconnection for hyperpod spaces connected through deeplink." +} \ No newline at end of file diff --git a/.changes/next-release/feat-workspace-connection-ide-type.json b/.changes/next-release/feat-workspace-connection-ide-type.json new file mode 100644 index 00000000000..f5c0d9feb38 --- /dev/null +++ b/.changes/next-release/feat-workspace-connection-ide-type.json @@ -0,0 +1,4 @@ +{ + "type": "Feature", + "description": "HyperPod: Send correct IDE type (vscode-remote, cursor-remote, kiro-remote) when creating workspace connections, enabling proper multi-IDE support." +} diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 06f87dae3d4..2f4b4000952 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,5 +1,8 @@ -* @aws/aws-ides-team +* @aws/aws-toolkits-team packages/core/src/codewhisperer/ @aws/codewhisperer-team packages/core/src/amazonqFeatureDev/ @aws/earlybird packages/core/src/awsService/accessanalyzer/ @aws/access-analyzer -packages/core/src/awsService/cloudformation/ @aws/cfn-dev-productivity +packages/core/src/awsService/cloudformation/ @aws-cloudformation/cfn-dev-productivity +packages/core/src/awsService/sagemaker/ @aws/sagemaker-code-editor +packages/core/resources/sagemaker_connect* @aws/sagemaker-code-editor +packages/core/resources/hyperpod_connect* @aws/sagemaker-code-editor diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 97cb46fd71f..a10ffc10a9b 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -126,7 +126,7 @@ jobs: matrix: node-version: [18.x] vscode-version: [minimum, stable, insiders] - package: [amazonq, toolkit] + package: [toolkit] env: VSCODE_TEST_VERSION: ${{ matrix.vscode-version }} NODE_OPTIONS: '--max-old-space-size=8192' @@ -188,12 +188,28 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - node-version: [18.x] - vscode-version: [stable] + # Windows runs on Node 20.x because the node-gyp@12 workaround below + # (needed for Visual Studio 2026) requires Node >= 20.17; ubuntu/macos + # stay on 18.x. See the node-gyp step below. + include: + - os: ubuntu-latest + node-version: 18.x + vscode-version: stable + - os: macos-latest + node-version: 18.x + vscode-version: stable + test-user-dir: '/tmp/.vscode-test/user-data/' + - os: windows-latest + node-version: 20.x + vscode-version: stable env: VSCODE_TEST_VERSION: ${{ matrix.vscode-version }} NODE_OPTIONS: '--max-old-space-size=8192' + # Keep the VS Code user-data-dir path short on the POSIX runners. The default + # path under the checkout dir exceeds the Unix-domain-socket path limit (~103 + # on macOS), so VS Code fails to launch with "listen EINVAL". + # Honored by launchTestUtilities.ts (adds --user-data-dir); empty = unset. + AWS_TOOLKIT_TEST_USER_DIR: ${{ matrix.test-user-dir }} steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} @@ -203,6 +219,31 @@ jobs: - name: Setup CloudFormation LSP shell: bash run: bash packages/core/src/testE2E/cloudformation/setup-local-lsp.sh + # registry-js (a native dependency) builds via `prebuild-install || + # node-gyp rebuild`. npm's bundled node-gyp (v10/11) cannot detect Visual + # Studio 2026 (version major 18 -> toolset v145); support landed in + # node-gyp 12.1.0, and the PowerShell VS-detection maxBuffer crash was + # fixed in 12.3.0 (Add-Type -IgnoreWarnings). npm_config_node_gyp is NOT + # honored for a package's own install script, and `npm install` inside + # npm's own dir fails (npm's internal deps aren't public), so install + # node-gyp@12 in isolation (nested deps = self-contained) and drop it onto + # the path npm resolves for native builds. node-gyp >= 12 needs Node >= + # 20.17 (hence Node 20.x above). Remove once npm bundles node-gyp >= 12.1.0. + - name: Replace npm's bundled node-gyp with v12 (Visual Studio 2026 support) + if: runner.os == 'Windows' + shell: bash + run: | + set -eo pipefail + WORK=/tmp/ng12 + rm -rf "$WORK"; mkdir -p "$WORK" + ( cd "$WORK" && npm install node-gyp@12 --no-save --no-audit --no-fund --install-strategy=nested ) + NPM_DIR="$(dirname "$(command -v node)")/node_modules/npm" + echo "Bundled npm dir: $NPM_DIR" + test -d "$NPM_DIR/node_modules/node-gyp" + rm -rf "$NPM_DIR/node_modules/node-gyp" + cp -r "$WORK/node_modules/node-gyp" "$NPM_DIR/node_modules/node-gyp" + echo "node-gyp version now in use:" + node "$NPM_DIR/node_modules/node-gyp/bin/node-gyp.js" --version - run: npm ci - name: Run CloudFormation E2E Tests (Unix) if: runner.os != 'Windows' @@ -249,9 +290,12 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x] + # node-gyp >= 12.1.0 is required to detect Visual Studio 2026, but + # node-gyp >= 12 requires Node >= 20.17, so this job runs on Node 20.x + # (the rest of the matrix stays on 18.x). See the node-gyp step below. + node-version: [20.x] vscode-version: [stable, insiders] - package: [amazonq, toolkit] + package: [toolkit] env: VSCODE_TEST_VERSION: ${{ matrix.vscode-version }} NODE_OPTIONS: '--max-old-space-size=8192' @@ -261,6 +305,30 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} + # registry-js (a native dependency) builds via `prebuild-install || + # node-gyp rebuild`. npm's bundled node-gyp (v10/11) cannot detect Visual + # Studio 2026 (version major 18 -> toolset v145); support landed in + # node-gyp 12.1.0, and the PowerShell VS-detection maxBuffer crash was + # fixed in 12.3.0 (Add-Type -IgnoreWarnings). npm_config_node_gyp is NOT + # honored for a package's own install script, and `npm install` inside + # npm's own dir fails (npm's internal deps aren't public), so install + # node-gyp@12 in isolation (nested deps = self-contained) and drop it onto + # the path npm resolves for native builds. node-gyp >= 12 needs Node >= + # 20.17 (hence Node 20.x above). Remove once npm bundles node-gyp >= 12.1.0. + - name: Replace npm's bundled node-gyp with v12 (Visual Studio 2026 support) + shell: bash + run: | + set -eo pipefail + WORK=/tmp/ng12 + rm -rf "$WORK"; mkdir -p "$WORK" + ( cd "$WORK" && npm install node-gyp@12 --no-save --no-audit --no-fund --install-strategy=nested ) + NPM_DIR="$(dirname "$(command -v node)")/node_modules/npm" + echo "Bundled npm dir: $NPM_DIR" + test -d "$NPM_DIR/node_modules/node-gyp" + rm -rf "$NPM_DIR/node_modules/node-gyp" + cp -r "$WORK/node_modules/node-gyp" "$NPM_DIR/node_modules/node-gyp" + echo "node-gyp version now in use:" + node "$NPM_DIR/node_modules/node-gyp/bin/node-gyp.js" --version - run: npm ci - name: Tests run: npm run test -w packages/${{ matrix.package }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 60863f3b5a4..e06a000832d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,9 +25,7 @@ jobs: feature: ${{ steps.build.outputs.feature }} tagname: ${{ steps.build.outputs.tagname }} toolkit_version: ${{ steps.build.outputs.toolkit_version }} - amazonq_version: ${{ steps.build.outputs.amazonq_version }} toolkit_changes: ${{ steps.build.outputs.toolkit_changes }} - amazonq_changes: ${{ steps.build.outputs.amazonq_changes }} steps: - uses: actions/checkout@v4 with: @@ -57,9 +55,10 @@ jobs: - run: npm ci - name: vsix run: | - npm run createRelease -w packages/toolkit -w packages/amazonq # Generate CHANGELOG.md + npm run createRelease -w packages/toolkit # Generate CHANGELOG.md + npm run -w packages/sagemaker-ssh-kiro package # Must be built before toolkit (toolkit embeds it) npm run -w packages/toolkit package -- --feature "$FEAT_NAME" - npm run -w packages/amazonq package -- --feature "$FEAT_NAME" + rm -f sagemaker-ssh-kiro-*.vsix # Remove standalone VSIX; it's already embedded inside toolkit VSIX - uses: actions/upload-artifact@v4 with: name: artifacts @@ -80,7 +79,6 @@ jobs: echo "feature=$FEAT_NAME" >> $GITHUB_OUTPUT echo "tagname=$TAG_NAME" >> $GITHUB_OUTPUT write_package_info toolkit - write_package_info amazonq publish: needs: [package] @@ -94,13 +92,11 @@ jobs: FEAT_NAME: ${{ needs.package.outputs.feature }} TAG_NAME: ${{ needs.package.outputs.tagname }} AWS_TOOLKIT_VERSION: ${{ needs.package.outputs.toolkit_version }} - AMAZON_Q_VERSION: ${{ needs.package.outputs.amazonq_version }} # # Used in release_notes.md # BRANCH: ${{ github.ref_name }} AWS_TOOLKIT_CHANGES: ${{ needs.package.outputs.toolkit_changes }} - AMAZON_Q_CHANGES: ${{ needs.package.outputs.amazonq_changes }} permissions: contents: write steps: diff --git a/.github/workflows/release_notes.md b/.github/workflows/release_notes.md index 8a044acd831..2a799783854 100644 --- a/.github/workflows/release_notes.md +++ b/.github/workflows/release_notes.md @@ -3,7 +3,6 @@ This is an **unsupported preview build** of the `${BRANCH}` branch of AWS IDE Ex # Install 1. Download the vsix file(s) from "Assets" below. - - Amazon Q $AMAZON_Q_VERSION is provided by `amazon-q-vscode….vsix` - AWS Toolkit $AWS_TOOLKIT_VERSION is provided by `aws-toolkit-vscode….vsix` 2. Run `Extensions: Install from VSIX...` from the VSCode [command palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) and choose the vsix file(s). @@ -16,4 +15,3 @@ ${AMAZON_Q_CHANGES} ## Previous changes - [AWS Toolkit changelog](/packages/toolkit/CHANGELOG.md) -- [Amazon Q changelog](/packages/amazonq/CHANGELOG.md) diff --git a/.gitignore b/.gitignore index 8a8b0fbe406..5eb5fc0d331 100644 --- a/.gitignore +++ b/.gitignore @@ -45,8 +45,6 @@ packages/*/LICENSE packages/*/NOTICE packages/toolkit/package.nls.json packages/toolkit/resources -packages/amazonq/package.nls.json -packages/amazonq/resources # Icons packages/*/resources/fonts/aws-toolkit-icons.woff diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 04e90660dec..d60a2872e6d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -230,7 +230,7 @@ more options. ### Coverage report -You can find the coverage report at `./coverage/amazonq/lcov-report/index.html` and `./coverage/toolkit/lcov-report/index.html` after running the tests. Tests ran from the workspace launch config won't generate a coverage report automatically because it can break file watching. +You can find the coverage report at `./coverage/toolkit/lcov-report/index.html` after running the tests. Tests ran from the workspace launch config won't generate a coverage report automatically because it can break file watching. ### CodeCatalyst Blueprints diff --git a/README.md b/README.md index b841f69ec0c..9fcb0b0ac8a 100644 --- a/README.md +++ b/README.md @@ -5,19 +5,6 @@ This project is open source. We encourage issues, feature requests, code reviews, pull requests or any positive contribution. See [CONTRIBUTING.md](CONTRIBUTING.md) to get started. -### Amazon Q - -[![Marketplace Version](https://img.shields.io/vscode-marketplace/v/AmazonWebServices.amazon-q-vscode.svg) ![Marketplace Downloads](https://img.shields.io/vscode-marketplace/d/AmazonWebServices.amazon-q-vscode.svg)](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.amazon-q-vscode) - -Amazon Q for VS Code is a [VS Code extension](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.amazon-q-vscode) for connecting your IDE to [Amazon Q](https://aws.amazon.com/q/developer/) and leveraging generative AI to accelerate your software development. - -- Code faster with inline code suggestions as you type -- Chat with [Amazon Q](https://aws.amazon.com/q/developer/) to generate code, explain code, and get answers to questions about software development -- Analyze and fix security vulnerabilities in your project -- Upgrade your Java applications - -[Project Directory](https://github.com/aws/aws-toolkit-vscode/tree/master/packages/amazonq) - ### AWS Toolkit [![Marketplace Version](https://img.shields.io/vscode-marketplace/v/AmazonWebServices.aws-toolkit-vscode.svg) ![Marketplace Downloads](https://img.shields.io/vscode-marketplace/d/AmazonWebServices.aws-toolkit-vscode.svg)](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-toolkit-vscode) @@ -30,7 +17,7 @@ AWS Toolkit is a [VS Code extension](https://marketplace.visualstudio.com/itemde - Connect VSCode to your EC2 instances - Connect to your [CodeCatalyst](https://codecatalyst.aws/) Dev Environments - Debug your Lambda functions using [SAM CLI](https://github.com/aws/aws-sam-cli) -- Check and autocomplete code in SAM/CFN (CloudFormation) `template.yaml` files +- Author, validate, and deploy CloudFormation templates with the [CloudFormation Language Server](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ide-extension.html) - `Open Terminal` on your EC2 instances or ECS tasks - `Search Log Group` on your CloudWatch logs - Browse your AWS resources @@ -42,6 +29,7 @@ AWS Toolkit is a [VS Code extension](https://marketplace.visualstudio.com/itemde - Quick Start Guides for... - [Amazon Q](https://marketplace.visualstudio.com/itemdetails?itemName=AmazonWebServices.amazon-q-vscode) - [AWS Toolkit](https://marketplace.visualstudio.com/itemdetails?itemName=AmazonWebServices.aws-toolkit-vscode) + - [AWS CloudFormation Language Server](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ide-extension.html) - [FAQ / Troubleshooting](./docs/faq-credentials.md) - [User Guide](https://docs.aws.amazon.com/console/toolkit-for-vscode/welcome) - General info about [AWS SDKs and Tools](https://docs.aws.amazon.com/sdkref/latest/guide/overview.html) diff --git a/aws-toolkit-vscode.code-workspace b/aws-toolkit-vscode.code-workspace index f03aafae2fe..a0b64cc44ad 100644 --- a/aws-toolkit-vscode.code-workspace +++ b/aws-toolkit-vscode.code-workspace @@ -12,6 +12,9 @@ { "path": "packages/amazonq", }, + { + "path": "packages/sagemaker-ssh-kiro", + }, ], "settings": { "typescript.tsdk": "node_modules/typescript/lib", diff --git a/buildspec/linuxE2ETests.yml b/buildspec/linuxE2ETests.yml index 4cb2f08f03d..1c22c9c05e9 100644 --- a/buildspec/linuxE2ETests.yml +++ b/buildspec/linuxE2ETests.yml @@ -43,7 +43,7 @@ phases: - VCS_COMMIT_ID="${CODEBUILD_RESOLVED_SOURCE_VERSION}" - CI_BUILD_URL=$(echo $CODEBUILD_BUILD_URL | sed 's/#/%23/g') - CI_BUILD_ID="${CODEBUILD_BUILD_ID}" - - test -n "${CODECOV_TOKEN}" && [ "$TARGET_BRANCH" = "master" ] && ./codecov --token=${CODECOV_TOKEN} --branch=${CODEBUILD_RESOLVED_SOURCE_VERSION} --repository=${CODEBUILD_SOURCE_REPO_URL} --file=./coverage/amazonq/lcov.info --file=./coverage/toolkit/lcov.info + - test -n "${CODECOV_TOKEN}" && [ "$TARGET_BRANCH" = "master" ] && ./codecov --token=${CODECOV_TOKEN} --branch=${CODEBUILD_RESOLVED_SOURCE_VERSION} --repository=${CODEBUILD_SOURCE_REPO_URL} --file=./coverage/toolkit/lcov.info finally: - rm -rf ~/.aws/sso/cache || true reports: diff --git a/buildspec/linuxIntegrationTests.yml b/buildspec/linuxIntegrationTests.yml index dacab125b89..f89cf495978 100644 --- a/buildspec/linuxIntegrationTests.yml +++ b/buildspec/linuxIntegrationTests.yml @@ -96,7 +96,7 @@ phases: - VCS_COMMIT_ID="${CODEBUILD_RESOLVED_SOURCE_VERSION}" - CI_BUILD_URL=$(echo $CODEBUILD_BUILD_URL | sed 's/#/%23/g') - CI_BUILD_ID="${CODEBUILD_BUILD_ID}" - - test -n "${CODECOV_TOKEN}" && [ "$TARGET_BRANCH" = "master" ] && ./codecov --token=${CODECOV_TOKEN} --branch=${CODEBUILD_RESOLVED_SOURCE_VERSION} --repository=${CODEBUILD_SOURCE_REPO_URL} --file=./coverage/amazonq/lcov.info --file=./coverage/toolkit/lcov.info + - test -n "${CODECOV_TOKEN}" && [ "$TARGET_BRANCH" = "master" ] && ./codecov --token=${CODECOV_TOKEN} --branch=${CODEBUILD_RESOLVED_SOURCE_VERSION} --repository=${CODEBUILD_SOURCE_REPO_URL} --file=./coverage/toolkit/lcov.info post_build: commands: # Destroy .netrc to avoid leaking $GITHUB_READONLY_TOKEN. diff --git a/buildspec/linuxTests.yml b/buildspec/linuxTests.yml index 241b5bb193a..cd5e4396d75 100644 --- a/buildspec/linuxTests.yml +++ b/buildspec/linuxTests.yml @@ -48,7 +48,7 @@ phases: - VCS_COMMIT_ID="${CODEBUILD_RESOLVED_SOURCE_VERSION}" - CI_BUILD_URL=$(echo $CODEBUILD_BUILD_URL | sed 's/#/%23/g') # Encode `#` in the URL because otherwise the url is clipped in the Codecov.io site - CI_BUILD_ID="${CODEBUILD_BUILD_ID}" - - test -n "${CODECOV_TOKEN}" && [ "$TARGET_BRANCH" = "master" ] && ./codecov --token=${CODECOV_TOKEN} --branch=${CODEBUILD_RESOLVED_SOURCE_VERSION} --repository=${CODEBUILD_SOURCE_REPO_URL} --file=./coverage/amazonq/lcov.info --file=./coverage/toolkit/lcov.info || true + - test -n "${CODECOV_TOKEN}" && [ "$TARGET_BRANCH" = "master" ] && ./codecov --token=${CODECOV_TOKEN} --branch=${CODEBUILD_RESOLVED_SOURCE_VERSION} --repository=${CODEBUILD_SOURCE_REPO_URL} --file=./coverage/toolkit/lcov.info || true reports: unit-test: diff --git a/buildspec/packageTestVsix.yml b/buildspec/packageTestVsix.yml index 73f15c0ba10..43afcdc2843 100644 --- a/buildspec/packageTestVsix.yml +++ b/buildspec/packageTestVsix.yml @@ -27,7 +27,9 @@ phases: - export HOME=/home/codebuild-user # Generate CHANGELOG.md - npm run createRelease -w packages/toolkit -w packages/amazonq + - npm run package -w packages/sagemaker-ssh-kiro # Must be built before toolkit (toolkit embeds it) - npm run package -w packages/toolkit -w packages/amazonq + - rm -f sagemaker-ssh-kiro-*.vsix # Remove standalone VSIX; it's already embedded inside toolkit VSIX artifacts: files: diff --git a/codecov.yml b/codecov.yml index 1e348859f11..196bb232651 100644 --- a/codecov.yml +++ b/codecov.yml @@ -31,7 +31,6 @@ coverage: paths: - 'packages/core/src/codewhisperer/' - 'packages/core/src/amazonq*/*' - - 'packages/amazonq/src/' flags: - 'codewhisperer' target: 80 @@ -104,7 +103,6 @@ flags: paths: - 'packages/core/src/codewhisperer/' - 'packages/core/src/amazonq*/*' - - 'packages/amazonq/src/' amazonqFeatureDev: paths: - 'packages/core/src/amazonqFeatureDev/' diff --git a/docs/arch_runtime.md b/docs/arch_runtime.md index e1cbfd01661..340ac991610 100644 --- a/docs/arch_runtime.md +++ b/docs/arch_runtime.md @@ -20,7 +20,6 @@ If you must define a new key (is it _really_ necessary?), follow these guideline - Choose a prefix as follows (as [recommended](https://code.visualstudio.com/api/extension-guides/command#using-a-custom-when-clause-context)): - `packages/core/` should use `aws.` prefix - `packages/toolkit/` should use `aws.toolkit.` prefix - - `packages/amazonq/` should use `amazonq.` prefix - Use brevity. Less is more. - Document it in the list below. @@ -45,10 +44,6 @@ toolkit/ or amazonq/ if appropriate. - TODO -#### setContext keys owned by packages/amazonq/ - -- TODO - ## How our components communicate TODO: vscode events; the "globals" module; activate(); EventEmitters; ...? diff --git a/docs/icons.md b/docs/icons.md index 46e252d5dac..085623fa6cb 100644 --- a/docs/icons.md +++ b/docs/icons.md @@ -6,7 +6,7 @@ A [build script](../scripts/generateIcons.ts) generates extension artifacts in [ - `resources/fonts/aws-toolkit-icons.woff` - `resources/css/icons.css` -- `contributes.icons` in [amazonq package.json](../packages/amazonq/package.json) and [toolkit package.json](../packages/toolkit/package.json) +- `contributes.icons` in [toolkit package.json](../packages/toolkit/package.json) This script should be ran using `npm run generateIcons` after making updates. Any changes made to `package.json` should be committed with the relevant icons. Type checking in `core/` relies on the entries in `core/package.json`. However, the individual extensions require entries in their `package.json`s as well. Currently, resources (including icons) are shared between `core/` and the individual extensions. If `contributes.icons` in each of the extensions does not match the entry in `core/`, then CI will fail. diff --git a/docs/lsp.md b/docs/lsp.md deleted file mode 100644 index 49a6ad00b87..00000000000 --- a/docs/lsp.md +++ /dev/null @@ -1,137 +0,0 @@ -# Flare Language Server - -## Chat Activation flow - -```mermaid -sequenceDiagram - participant user as User - participant ext as Extension - participant webview as Chat Webview - participant flare as Amazon Q LSP - participant backend as Amazon Q Backend - - user->>ext: opens IDE - ext->>ext: activates - ext->>webview: loads UI - ext->>flare: initialize process - flare->>flare: starts and waits - user->>webview: interacts - webview->>ext: sends message - ext->>flare: sends message - flare->>backend: call api - backend->>flare: returns - flare->>ext: display - ext->>webview: display -``` - -## Language Server Debugging - -If you want to connect a local version of language-servers to aws-toolkit-vscode, follow these steps: - -1. Clone https://github.com/aws/language-servers.git and set it up in the same workspace as this project by cmd+shift+p and "add folder to workspace" and selecting the language-servers folder that you just cloned. Your VS code folder structure should look like below. - - ``` - /aws-toolkit-vscode - /toolkit - /core - /amazonq - /language-servers - ``` - -2. Inside of the language-servers project run: - ``` - npm install - npm run compile - npm run package - ``` - to get the project setup -3. You need to open VScode user settings (Cmd+Shift+P and Search "Open User Settings (JSON)") and add the lines below at the bottom of the settings to enable the lsp experiment: - ``` - "aws.experiments": { - "amazonqLSP": true, - "amazonqLSPInline": true, // optional: enables inline completion from flare - "amazonqLSPChat": true // optional: enables chat from flare - } - ``` -4. Uncomment the `__AMAZONQLSP_PATH` and `__AMAZONQLSP_UI` variables in the `amazonq/.vscode/launch.json` extension configuration -5. Use the `Launch LSP with Debugging` configuration and set breakpoints in VSCode or the language server, Once you run "Launch LSP with Debugging" a new window should start, wait for the plugin to show up there. Then go to the run menu again and run "Attach to Language Server (amazonq)" after this you should be able to add breakpoints in the LSP code. -6. (Optional): Enable `"amazonq.trace.server": "on"` or `"amazonq.trace.server": "verbose"` in your VSCode settings to view detailed log messages sent to/from the language server. These log messages will show up in the "Amazon Q Language Server" output channel - -### Breakpoints Work-Around - -If the breakpoints in your language-servers project remain greyed out and do not trigger when you run `Launch LSP with Debugging`, your debugger may be attaching to the language server before it has launched. You can follow the work-around below to avoid this problem. If anyone fixes this issue, please remove this section. - -1. Set your breakpoints and click `Launch LSP with Debugging` -2. Once the debugging session has started, click `Launch LSP with Debugging` again, then `Cancel` on any pop-ups that appear -3. On the debug panel, click `Attach to Language Server (amazonq)` next to the red stop button -4. Click `Launch LSP with Debugging` again, then `Cancel` on any pop-ups that appear - -## Language Server Runtimes Debugging - -If you want to connect a local version of language-server-runtimes to aws-toolkit-vscode, follow these steps: - -1. Clone https://github.com/aws/language-server-runtimes.git and set it up in the same workspace as this project by cmd+shift+p and "add folder to workspace" and selecting the language-server-runtimes folder that you just cloned. Your VS code folder structure should look like below. - - ``` - /aws-toolkit-vscode - /toolkit - /core - /amazonq - /language-servers - /language-server-runtimes - ``` - -2. Inside of the language-server-runtimes project run: - - ``` - npm install - npm run compile - cd runtimes - npm run prepub - cd out - ``` - - If you get an error running `npm run prepub`, you can instead run `npm run prepub:copyFiles` to skip cleaning and testing. - -3. Choose one of the following approaches: - -### Option A: Using npm pack (Recommended) - -3a. Create a package file: - - npm pack - -You will see a file created like this: `aws-language-server-runtimes-0.*.*.tgz` - -4a. Inside of language-servers, find the package where you need the change. - -For example, if you would like the change in `language-servers/app/aws-lsp-codewhisperer-runtimes`, you would run: - - cd language-servers/app/aws-lsp-codewhisperer-runtimes - - npm install ../../../language-server-runtimes/runtimes/out/aws-language-server-runtimes-0.*.*.tgz - - npm run compile - -5a. If you need the change in aws-toolkit-vscode run: - - cd aws-toolkit-vscode - - npm install ../language-server-runtimes/runtimes/out/aws-language-server-runtimes-0.*.*.tgz - -### Option B: Using npm link (Alternative) - -3b. Create npm links: - - npm link - cd ../../types - npm link - -4b. Inside of aws-toolkit-vscode run: - - npm install - npm link @aws/language-server-runtimes @aws/language-server-runtimes-types - -## Amazon Q Inline Activation - -- In order to get inline completion working you must open a supported file type defined in CodewhispererInlineCompletionLanguages in `packages/amazonq/src/app/inline/completion.ts` diff --git a/docs/web.md b/docs/web.md index 1540ddf8134..5a685c2ae23 100644 --- a/docs/web.md +++ b/docs/web.md @@ -75,7 +75,7 @@ The following will explain how to get your latest local development changes runn 1. Build the extension. We need the Web mode entrypoint file to exist. 2. OPTIONAL: Start up your browser with security disabled. Certain functionalities do not support CORS and will fail otherwise. - On MacOS from the CLI is similar to `/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-web-security` -3. `cd` to the extension you want to test in `packages/`. Eg: `packages/amazonq/`. +3. `cd` to the extension you want to test in `packages/`. Eg: `packages/toolkit/`. - We need to do this since the following command hosts your build from the `cwd`. 4. Follow the [VS Code documentation](https://code.visualstudio.com/api/extension-guides/web-extensions#test-your-web-extension-in-vscode.dev) for setting up certs, serving your the latest changes, and installing the extension to `vscode.dev`. diff --git a/package-lock.json b/package-lock.json index b144b43e595..8a830eeac5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17514,695 +17514,710 @@ } }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.637.0", + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.975.0.tgz", + "integrity": "sha512-55+/Ku+fd1HY3TVKep/4GqgiR65p09/Xfgebknx8mqy18lTohO/8VFn7AusoZGOVypfRv3yVuYktCvINBBrkKw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.637.0", - "@aws-sdk/client-sts": "3.637.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/eventstream-serde-browser": "^3.0.6", - "@smithy/eventstream-serde-config-resolver": "^3.0.3", - "@smithy/eventstream-serde-node": "^3.0.5", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/credential-provider-node": "^3.972.1", + "@aws-sdk/middleware-host-header": "^3.972.1", + "@aws-sdk/middleware-logger": "^3.972.1", + "@aws-sdk/middleware-recursion-detection": "^3.972.1", + "@aws-sdk/middleware-user-agent": "^3.972.2", + "@aws-sdk/region-config-resolver": "^3.972.1", + "@aws-sdk/types": "^3.973.0", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.1", + "@aws-sdk/util-user-agent-node": "^3.972.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.21.1", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@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.11", + "@smithy/middleware-retry": "^4.4.27", + "@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.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.12", + "@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.26", + "@smithy/util-defaults-mode-node": "^4.2.29", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/config-resolver": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz", + "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==", "license": "Apache-2.0", "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/core": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.21.1.tgz", + "integrity": "sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/credential-provider-imds": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz", + "integrity": "sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift/-/client-redshift-3.693.0.tgz", - "integrity": "sha512-k+4emXXK7iOOYjTAU+Erj5RVxu68Hi6iI48h5r8iNMhWRUMqUq346tK5qkD4C4x9SzJu5j0WgPWpVUiHu8ufDw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-codec": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.8.tgz", + "integrity": "sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/client-sts": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.8", + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift-data/-/client-redshift-data-3.693.0.tgz", - "integrity": "sha512-uG5LdlXz80KcauRIucMdiRSQJ2WutewQRHpcTQW4vFUf/kEhUha5fD9FMn+/eJ1NFA2N8hv64vhpzGvu7EiP6Q==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.8.tgz", + "integrity": "sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/client-sts": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", - "@types/uuid": "^9.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/eventstream-serde-universal": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sso": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", - "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.8.tgz", + "integrity": "sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", - "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.8.tgz", + "integrity": "sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@smithy/eventstream-serde-universal": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.8.tgz", + "integrity": "sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sts": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", - "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/core": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", - "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/hash-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz", + "integrity": "sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@smithy/types": "^4.12.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", - "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/invalid-dependency": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz", + "integrity": "sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-stream": "^3.3.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", - "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", - "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-content-length": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz", + "integrity": "sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-ini": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", - "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-endpoint": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.11.tgz", + "integrity": "sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/token-providers": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/core": "^3.21.1", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", - "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-retry": { + "version": "4.4.27", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.27.tgz", + "integrity": "sha512-xFUYCGRVsfgiN5EjsJJSzih9+yjStgMTCLANPlf0LVQkPDYCe0hz97qbdTZosFOiYlGBlHYityGRxrQ/hxhfVQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/types": "^3.7.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/service-error-classification": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", - "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-logger": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", - "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", + "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", - "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@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": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", - "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/node-http-handler": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", + "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@smithy/core": "^2.5.2", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", - "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.9", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/token-providers": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", - "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-endpoints": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", - "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "@smithy/util-endpoints": "^2.1.5", + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", - "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "bowser": "^2.11.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", - "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/service-error-classification": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz", + "integrity": "sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", - "tslib": "^2.6.2" + "@smithy/types": "^4.12.0" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/smithy-client": { + "version": "4.10.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.12.tgz", + "integrity": "sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/core": "^3.21.1", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless": { + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.26.tgz", + "integrity": "sha512-vva0dzYUTgn7DdE0uaha10uEdAgmdLnNFowKFjpMm6p2R0XDk5FHPX3CBJLzWQkQXuEprsb0hGz9YwbicNWhjw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.29", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.29.tgz", + "integrity": "sha512-c6D7IUBsZt/aNnTBHMTf+OVh+h/JcxUUgfTcIJaWRe6zhOum1X+pNKSZtZ+7fbOn5I99XVFtmrnXKv8yHHErTQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.6", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", + "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-retry": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz", + "integrity": "sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-stream": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", + "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-waiter": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.8.tgz", + "integrity": "sha512-n+lahlMWk+aejGuax7DPWtqav8HYnWxQwR+LCG2BgCUmaGcTe9qZCFsmw8TMg9iG75HOwhrJCX9TCJRLH+Yzqg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift-serverless/-/client-redshift-serverless-3.693.0.tgz", - "integrity": "sha512-m6Bhw0Xx/x0KGKP9N7c+Jqs5VT6nkZbfwO+QTxllggsuNfAzGwluCw1hoY++/MQ9oFtioEu+ud7xWOlTIK8w/A==", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift/-/client-redshift-3.693.0.tgz", + "integrity": "sha512-k+4emXXK7iOOYjTAU+Erj5RVxu68Hi6iI48h5r8iNMhWRUMqUq346tK5qkD4C4x9SzJu5j0WgPWpVUiHu8ufDw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -18245,13 +18260,68 @@ "@smithy/util-middleware": "^3.0.9", "@smithy/util-retry": "^3.0.9", "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.8", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sso": { + "node_modules/@aws-sdk/client-redshift-data": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift-data/-/client-redshift-data-3.693.0.tgz", + "integrity": "sha512-uG5LdlXz80KcauRIucMdiRSQJ2WutewQRHpcTQW4vFUf/kEhUha5fD9FMn+/eJ1NFA2N8hv64vhpzGvu7EiP6Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sso": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", @@ -18300,7 +18370,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sso-oidc": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sso-oidc": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", @@ -18353,7 +18423,7 @@ "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sts": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/client-sts": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", @@ -18404,7 +18474,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/core": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/core": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", @@ -18426,7 +18496,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-http": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-http": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", @@ -18447,7 +18517,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-ini": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-ini": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", @@ -18473,7 +18543,7 @@ "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-node": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-node": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", @@ -18496,7 +18566,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-sso": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-sso": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", @@ -18515,7 +18585,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-web-identity": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", @@ -18534,7 +18604,7 @@ "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-host-header": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-host-header": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", @@ -18549,7 +18619,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-logger": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-logger": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", @@ -18563,7 +18633,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-recursion-detection": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", @@ -18578,7 +18648,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-user-agent": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/middleware-user-agent": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", @@ -18596,7 +18666,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/region-config-resolver": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/region-config-resolver": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", @@ -18613,7 +18683,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/token-providers": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/token-providers": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", @@ -18632,7 +18702,7 @@ "@aws-sdk/client-sso-oidc": "^3.693.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-endpoints": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-endpoints": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", @@ -18647,7 +18717,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-user-agent-browser": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", @@ -18659,7 +18729,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-user-agent-node": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@aws-sdk/util-user-agent-node": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", @@ -18683,7 +18753,7 @@ } } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", @@ -18695,7 +18765,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/util-buffer-from": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", @@ -18708,7 +18778,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/client-redshift-data/node_modules/@smithy/util-utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", @@ -18721,7 +18791,59 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sso": { + "node_modules/@aws-sdk/client-redshift-serverless": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-redshift-serverless/-/client-redshift-serverless-3.693.0.tgz", + "integrity": "sha512-m6Bhw0Xx/x0KGKP9N7c+Jqs5VT6nkZbfwO+QTxllggsuNfAzGwluCw1hoY++/MQ9oFtioEu+ud7xWOlTIK8w/A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sso": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", @@ -18770,7 +18892,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sso-oidc": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sso-oidc": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", @@ -18823,7 +18945,7 @@ "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sts": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/client-sts": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", @@ -18874,7 +18996,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/core": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/core": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", @@ -18896,7 +19018,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-http": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-http": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", @@ -18917,7 +19039,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-ini": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-ini": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", @@ -18943,7 +19065,7 @@ "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-node": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-node": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", @@ -18966,7 +19088,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-sso": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-sso": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", @@ -18985,7 +19107,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-web-identity": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", @@ -19004,7 +19126,7 @@ "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-host-header": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-host-header": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", @@ -19019,7 +19141,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-logger": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-logger": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", @@ -19033,7 +19155,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-recursion-detection": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", @@ -19048,7 +19170,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-user-agent": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/middleware-user-agent": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", @@ -19066,7 +19188,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/region-config-resolver": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/region-config-resolver": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", @@ -19083,7 +19205,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/token-providers": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/token-providers": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", @@ -19102,7 +19224,7 @@ "@aws-sdk/client-sso-oidc": "^3.693.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-endpoints": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-endpoints": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", @@ -19117,7 +19239,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-user-agent-browser": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", @@ -19129,7 +19251,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-user-agent-node": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@aws-sdk/util-user-agent-node": { "version": "3.693.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", @@ -19153,7 +19275,7 @@ } } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", @@ -19165,7 +19287,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/util-buffer-from": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", @@ -19178,7 +19300,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/client-redshift-serverless/node_modules/@smithy/util-utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", @@ -19191,45 +19313,29 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3": { + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sso": { "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", + "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/client-sts": "3.693.0", "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-bucket-endpoint": "3.693.0", - "@aws-sdk/middleware-expect-continue": "3.693.0", - "@aws-sdk/middleware-flexible-checksums": "3.693.0", "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-location-constraint": "3.693.0", "@aws-sdk/middleware-logger": "3.693.0", "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-sdk-s3": "3.693.0", - "@aws-sdk/middleware-ssec": "3.693.0", "@aws-sdk/middleware-user-agent": "3.693.0", "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/signature-v4-multi-region": "3.693.0", "@aws-sdk/types": "3.692.0", "@aws-sdk/util-endpoints": "3.693.0", "@aws-sdk/util-user-agent-browser": "3.693.0", "@aws-sdk/util-user-agent-node": "3.693.0", - "@aws-sdk/xml-builder": "3.693.0", "@smithy/config-resolver": "^3.0.11", "@smithy/core": "^2.5.2", - "@smithy/eventstream-serde-browser": "^3.0.12", - "@smithy/eventstream-serde-config-resolver": "^3.0.9", - "@smithy/eventstream-serde-node": "^3.0.11", "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-blob-browser": "^3.1.8", "@smithy/hash-node": "^3.0.9", - "@smithy/hash-stream-node": "^3.1.8", "@smithy/invalid-dependency": "^3.0.9", - "@smithy/md5-js": "^3.0.9", "@smithy/middleware-content-length": "^3.0.11", "@smithy/middleware-endpoint": "^3.2.2", "@smithy/middleware-retry": "^3.0.26", @@ -19249,622 +19355,755 @@ "@smithy/util-endpoints": "^2.1.5", "@smithy/util-middleware": "^3.0.9", "@smithy/util-retry": "^3.0.9", - "@smithy/util-stream": "^3.3.0", "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.8", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control": { - "version": "3.859.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3-control/-/client-s3-control-3.859.0.tgz", - "integrity": "sha512-vzhOtDH4BCdn30+Crg1QxGXbhZIh4Ia84/qNx2EtupkM2UrO6uaZ91qGl175QWU4TcG+mlf/yA/bvrwenhbF6w==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", + "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.858.0", - "@aws-sdk/credential-provider-node": "3.859.0", - "@aws-sdk/middleware-bucket-endpoint": "3.840.0", - "@aws-sdk/middleware-host-header": "3.840.0", - "@aws-sdk/middleware-logger": "3.840.0", - "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-sdk-s3-control": "3.848.0", - "@aws-sdk/middleware-user-agent": "3.858.0", - "@aws-sdk/region-config-resolver": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.848.0", - "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.858.0", - "@aws-sdk/xml-builder": "3.821.0", - "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.7.2", - "@smithy/fetch-http-handler": "^5.1.0", - "@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-apply-body-checksum": "^4.1.2", - "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.17", - "@smithy/middleware-retry": "^4.1.18", - "@smithy/middleware-serde": "^4.0.8", - "@smithy/middleware-stack": "^4.0.4", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/node-http-handler": "^4.1.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.9", - "@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.25", - "@smithy/util-defaults-mode-node": "^4.0.25", - "@smithy/util-endpoints": "^3.0.6", - "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.6", - "@smithy/util-utf8": "^4.0.0", - "@types/uuid": "^9.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/client-sso": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.858.0.tgz", - "integrity": "sha512-iXuZQs4KH6a3Pwnt0uORalzAZ5EXRPr3lBYAsdNwkP8OYyoUz5/TE3BLyw7ceEh0rj4QKGNnNALYo1cDm0EV8w==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", + "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.858.0", - "@aws-sdk/middleware-host-header": "3.840.0", - "@aws-sdk/middleware-logger": "3.840.0", - "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-user-agent": "3.858.0", - "@aws-sdk/region-config-resolver": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.848.0", - "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.858.0", - "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.7.2", - "@smithy/fetch-http-handler": "^5.1.0", - "@smithy/hash-node": "^4.0.4", - "@smithy/invalid-dependency": "^4.0.4", - "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.17", - "@smithy/middleware-retry": "^4.1.18", - "@smithy/middleware-serde": "^4.0.8", - "@smithy/middleware-stack": "^4.0.4", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/node-http-handler": "^4.1.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.9", - "@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.25", - "@smithy/util-defaults-mode-node": "^4.0.25", - "@smithy/util-endpoints": "^3.0.6", - "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.6", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/core": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.858.0.tgz", - "integrity": "sha512-iWm4QLAS+/XMlnecIU1Y33qbBr1Ju+pmWam3xVCPlY4CSptKpVY+2hXOnmg9SbHAX9C005fWhrIn51oDd00c9A==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/core": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", + "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.840.0", - "@aws-sdk/xml-builder": "3.821.0", - "@smithy/core": "^3.7.2", - "@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.9", - "@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": "5.2.5", + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.858.0.tgz", - "integrity": "sha512-kZsGyh2BoSRguzlcGtzdLhw/l/n3KYAC+/l/H0SlsOq3RLHF6tO/cRdsLnwoix2bObChHUp03cex63o1gzdx/Q==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", + "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.858.0", - "@aws-sdk/types": "3.840.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/types": "^4.3.1", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.858.0.tgz", - "integrity": "sha512-GDnfYl3+NPJQ7WQQYOXEA489B212NinpcIDD7rpsB6IWUPo8yDjT5NceK4uUkIR3MFpNCGt9zd/z6NNLdB2fuQ==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", + "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.858.0", - "@aws-sdk/types": "3.840.0", - "@smithy/fetch-http-handler": "^5.1.0", - "@smithy/node-http-handler": "^4.1.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.9", - "@smithy/types": "^4.3.1", - "@smithy/util-stream": "^4.2.3", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.859.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.859.0.tgz", - "integrity": "sha512-KsccE1T88ZDNhsABnqbQj014n5JMDilAroUErFbGqu5/B3sXqUsYmG54C/BjvGTRUFfzyttK9lB9P9h6ddQ8Cw==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", + "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.858.0", - "@aws-sdk/credential-provider-env": "3.858.0", - "@aws-sdk/credential-provider-http": "3.858.0", - "@aws-sdk/credential-provider-process": "3.858.0", - "@aws-sdk/credential-provider-sso": "3.859.0", - "@aws-sdk/credential-provider-web-identity": "3.858.0", - "@aws-sdk/nested-clients": "3.858.0", - "@aws-sdk/types": "3.840.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", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.859.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.859.0.tgz", - "integrity": "sha512-ZRDB2xU5aSyTR/jDcli30tlycu6RFvQngkZhBs9Zoh2BiYXrfh2MMuoYuZk+7uD6D53Q2RIEldDHR9A/TPlRuA==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", + "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.858.0", - "@aws-sdk/credential-provider-http": "3.858.0", - "@aws-sdk/credential-provider-ini": "3.859.0", - "@aws-sdk/credential-provider-process": "3.858.0", - "@aws-sdk/credential-provider-sso": "3.859.0", - "@aws-sdk/credential-provider-web-identity": "3.858.0", - "@aws-sdk/types": "3.840.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", + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.858.0.tgz", - "integrity": "sha512-l5LJWZJMRaZ+LhDjtupFUKEC5hAjgvCRrOvV5T60NCUBOy0Ozxa7Sgx3x+EOwiruuoh3Cn9O+RlbQlJX6IfZIw==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", + "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.858.0", - "@aws-sdk/types": "3.840.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", - "@smithy/types": "^4.3.1", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.859.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.859.0.tgz", - "integrity": "sha512-BwAqmWIivhox5YlFRjManFF8GoTvEySPk6vsJNxDsmGsabY+OQovYxFIYxRCYiHzH7SFjd4Lcd+riJOiXNsvRw==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", + "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.858.0", - "@aws-sdk/core": "3.858.0", - "@aws-sdk/token-providers": "3.859.0", - "@aws-sdk/types": "3.840.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", - "@smithy/types": "^4.3.1", + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.858.0.tgz", - "integrity": "sha512-8iULWsH83iZDdUuiDsRb83M0NqIlXjlDbJUIddVsIrfWp4NmanKw77SV6yOZ66nuJjPsn9j7RDb9bfEPCy5SWA==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-logger": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", + "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.858.0", - "@aws-sdk/nested-clients": "3.858.0", - "@aws-sdk/types": "3.840.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/types": "^4.3.1", + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz", - "integrity": "sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", + "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.840.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", + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", - "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", + "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.840.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/types": "^4.3.1", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-logger": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", - "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", + "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.840.0", - "@smithy/types": "^4.3.1", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", - "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/token-providers": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", + "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.840.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/types": "^4.3.1", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.858.0.tgz", - "integrity": "sha512-pC3FT/sRZ6n5NyXiTVu9dpf1D9j3YbJz3XmeOOwJqO/Mib2PZyIQktvNMPgwaC5KMVB1zWqS5bmCwxpMOnq0UQ==", - "dependencies": { - "@aws-sdk/core": "3.858.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.848.0", - "@smithy/core": "^3.7.2", - "@smithy/protocol-http": "^5.1.2", - "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" + "node": ">=16.0.0" }, - "engines": { - "node": ">=18.0.0" + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.693.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/nested-clients": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.858.0.tgz", - "integrity": "sha512-ChdIj80T2whoWbovmO7o8ICmhEB2S9q4Jes9MBnKAPm69PexcJAK2dQC8yI4/iUP8b3+BHZoUPrYLWjBxIProQ==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-endpoints": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", + "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.858.0", - "@aws-sdk/middleware-host-header": "3.840.0", - "@aws-sdk/middleware-logger": "3.840.0", - "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-user-agent": "3.858.0", - "@aws-sdk/region-config-resolver": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.848.0", - "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.858.0", - "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.7.2", - "@smithy/fetch-http-handler": "^5.1.0", - "@smithy/hash-node": "^4.0.4", - "@smithy/invalid-dependency": "^4.0.4", - "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.17", - "@smithy/middleware-retry": "^4.1.18", - "@smithy/middleware-serde": "^4.0.8", - "@smithy/middleware-stack": "^4.0.4", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/node-http-handler": "^4.1.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.9", - "@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.25", - "@smithy/util-defaults-mode-node": "^4.0.25", - "@smithy/util-endpoints": "^3.0.6", - "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.6", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", - "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", + "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.840.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", + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/token-providers": { - "version": "3.859.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.859.0.tgz", - "integrity": "sha512-6P2wlvm9KBWOvRNn0Pt8RntnXg8fzOb5kEShvWsOsAocZeqKNaYbihum5/Onq1ZPoVtkdb++8eWDocDnM4k85Q==", + "node_modules/@aws-sdk/client-redshift/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", + "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.858.0", - "@aws-sdk/nested-clients": "3.858.0", - "@aws-sdk/types": "3.840.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", - "@smithy/types": "^4.3.1", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/types": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", - "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", + "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/util-arn-parser": { - "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==", + "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/util-endpoints": { - "version": "3.848.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.848.0.tgz", - "integrity": "sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==", + "node_modules/@aws-sdk/client-redshift/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.840.0", - "@smithy/types": "^4.3.1", - "@smithy/url-parser": "^4.0.4", - "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", - "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", + "node_modules/@aws-sdk/client-s3": { + "version": "3.693.0", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.840.0", - "@smithy/types": "^4.3.1", - "bowser": "^2.11.0", + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-bucket-endpoint": "3.693.0", + "@aws-sdk/middleware-expect-continue": "3.693.0", + "@aws-sdk/middleware-flexible-checksums": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-location-constraint": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-sdk-s3": "3.693.0", + "@aws-sdk/middleware-ssec": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/signature-v4-multi-region": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@aws-sdk/xml-builder": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/eventstream-serde-browser": "^3.0.12", + "@smithy/eventstream-serde-config-resolver": "^3.0.9", + "@smithy/eventstream-serde-node": "^3.0.11", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-blob-browser": "^3.1.8", + "@smithy/hash-node": "^3.0.9", + "@smithy/hash-stream-node": "^3.1.8", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/md5-js": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-stream": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.8", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.858.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.858.0.tgz", - "integrity": "sha512-T1m05QlN8hFpx5/5duMjS8uFSK5e6EXP45HQRkZULVkL3DK+jMaxsnh3KLl5LjUoHn/19M4HM0wNUBhYp4Y2Yw==", + "node_modules/@aws-sdk/client-s3-control": { + "version": "3.859.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3-control/-/client-s3-control-3.859.0.tgz", + "integrity": "sha512-vzhOtDH4BCdn30+Crg1QxGXbhZIh4Ia84/qNx2EtupkM2UrO6uaZ91qGl175QWU4TcG+mlf/yA/bvrwenhbF6w==", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/credential-provider-node": "3.859.0", + "@aws-sdk/middleware-bucket-endpoint": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-sdk-s3-control": "3.848.0", "@aws-sdk/middleware-user-agent": "3.858.0", + "@aws-sdk/region-config-resolver": "3.840.0", "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.858.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.7.2", + "@smithy/fetch-http-handler": "^5.1.0", + "@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-apply-body-checksum": "^4.1.2", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.17", + "@smithy/middleware-retry": "^4.1.18", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.9", "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" + "@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.25", + "@smithy/util-defaults-mode-node": "^4.0.25", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/xml-builder": { - "version": "3.821.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", - "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/client-sso": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.858.0.tgz", + "integrity": "sha512-iXuZQs4KH6a3Pwnt0uORalzAZ5EXRPr3lBYAsdNwkP8OYyoUz5/TE3BLyw7ceEh0rj4QKGNnNALYo1cDm0EV8w==", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.858.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.858.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.7.2", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.17", + "@smithy/middleware-retry": "^4.1.18", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.9", "@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.25", + "@smithy/util-defaults-mode-node": "^4.0.25", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/abort-controller": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", - "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/core": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.858.0.tgz", + "integrity": "sha512-iWm4QLAS+/XMlnecIU1Y33qbBr1Ju+pmWam3xVCPlY4CSptKpVY+2hXOnmg9SbHAX9C005fWhrIn51oDd00c9A==", "dependencies": { + "@aws-sdk/types": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.7.2", + "@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.9", "@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": "5.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/chunked-blob-reader": { - "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==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.858.0.tgz", + "integrity": "sha512-kZsGyh2BoSRguzlcGtzdLhw/l/n3KYAC+/l/H0SlsOq3RLHF6tO/cRdsLnwoix2bObChHUp03cex63o1gzdx/Q==", "dependencies": { + "@aws-sdk/core": "3.858.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/chunked-blob-reader-native": { - "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==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.858.0.tgz", + "integrity": "sha512-GDnfYl3+NPJQ7WQQYOXEA489B212NinpcIDD7rpsB6IWUPo8yDjT5NceK4uUkIR3MFpNCGt9zd/z6NNLdB2fuQ==", "dependencies": { - "@smithy/util-base64": "^4.0.0", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/types": "3.840.0", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.9", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.3", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/config-resolver": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz", - "integrity": "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.859.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.859.0.tgz", + "integrity": "sha512-KsccE1T88ZDNhsABnqbQj014n5JMDilAroUErFbGqu5/B3sXqUsYmG54C/BjvGTRUFfzyttK9lB9P9h6ddQ8Cw==", "dependencies": { - "@smithy/node-config-provider": "^4.1.3", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/credential-provider-env": "3.858.0", + "@aws-sdk/credential-provider-http": "3.858.0", + "@aws-sdk/credential-provider-process": "3.858.0", + "@aws-sdk/credential-provider-sso": "3.859.0", + "@aws-sdk/credential-provider-web-identity": "3.858.0", + "@aws-sdk/nested-clients": "3.858.0", + "@aws-sdk/types": "3.840.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", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.4", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/core": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.7.2.tgz", - "integrity": "sha512-JoLw59sT5Bm8SAjFCYZyuCGxK8y3vovmoVbZWLDPTH5XpPEIwpFd9m90jjVMwoypDuB/SdVgje5Y4T7w50lJaw==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.859.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.859.0.tgz", + "integrity": "sha512-ZRDB2xU5aSyTR/jDcli30tlycu6RFvQngkZhBs9Zoh2BiYXrfh2MMuoYuZk+7uD6D53Q2RIEldDHR9A/TPlRuA==", "dependencies": { - "@smithy/middleware-serde": "^4.0.8", - "@smithy/protocol-http": "^5.1.2", + "@aws-sdk/credential-provider-env": "3.858.0", + "@aws-sdk/credential-provider-http": "3.858.0", + "@aws-sdk/credential-provider-ini": "3.859.0", + "@aws-sdk/credential-provider-process": "3.858.0", + "@aws-sdk/credential-provider-sso": "3.859.0", + "@aws-sdk/credential-provider-web-identity": "3.858.0", + "@aws-sdk/types": "3.840.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", - "@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.3", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/credential-provider-imds": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz", - "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.858.0.tgz", + "integrity": "sha512-l5LJWZJMRaZ+LhDjtupFUKEC5hAjgvCRrOvV5T60NCUBOy0Ozxa7Sgx3x+EOwiruuoh3Cn9O+RlbQlJX6IfZIw==", "dependencies": { - "@smithy/node-config-provider": "^4.1.3", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", - "@smithy/url-parser": "^4.0.4", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/fetch-http-handler": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz", - "integrity": "sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.859.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.859.0.tgz", + "integrity": "sha512-BwAqmWIivhox5YlFRjManFF8GoTvEySPk6vsJNxDsmGsabY+OQovYxFIYxRCYiHzH7SFjd4Lcd+riJOiXNsvRw==", "dependencies": { - "@smithy/protocol-http": "^5.1.2", - "@smithy/querystring-builder": "^4.0.4", + "@aws-sdk/client-sso": "3.858.0", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/token-providers": "3.859.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", - "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/hash-blob-browser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz", - "integrity": "sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.858.0.tgz", + "integrity": "sha512-8iULWsH83iZDdUuiDsRb83M0NqIlXjlDbJUIddVsIrfWp4NmanKw77SV6yOZ66nuJjPsn9j7RDb9bfEPCy5SWA==", "dependencies": { - "@smithy/chunked-blob-reader": "^5.0.0", - "@smithy/chunked-blob-reader-native": "^4.0.0", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/nested-clients": "3.858.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -19872,38 +20111,43 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/hash-node": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz", - "integrity": "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz", + "integrity": "sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==", "dependencies": { + "@aws-sdk/types": "3.840.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-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/hash-stream-node": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz", - "integrity": "sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", + "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/invalid-dependency": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz", - "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-logger": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", + "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", "dependencies": { + "@aws-sdk/types": "3.840.0", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -19911,35 +20155,29 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/is-array-buffer": { - "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" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/md5-js": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz", - "integrity": "sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", + "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-content-length": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz", - "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.858.0.tgz", + "integrity": "sha512-pC3FT/sRZ6n5NyXiTVu9dpf1D9j3YbJz3XmeOOwJqO/Mib2PZyIQktvNMPgwaC5KMVB1zWqS5bmCwxpMOnq0UQ==", "dependencies": { + "@aws-sdk/core": "3.858.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@smithy/core": "^3.7.2", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -19948,49 +20186,80 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-endpoint": { - "version": "4.1.17", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.17.tgz", - "integrity": "sha512-S3hSGLKmHG1m35p/MObQCBCdRsrpbPU8B129BVzRqRfDvQqPMQ14iO4LyRw+7LNizYc605COYAcjqgawqi+6jA==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/nested-clients": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.858.0.tgz", + "integrity": "sha512-ChdIj80T2whoWbovmO7o8ICmhEB2S9q4Jes9MBnKAPm69PexcJAK2dQC8yI4/iUP8b3+BHZoUPrYLWjBxIProQ==", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.858.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.858.0", + "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.7.2", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.17", + "@smithy/middleware-retry": "^4.1.18", "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", - "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.9", "@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.25", + "@smithy/util-defaults-mode-node": "^4.0.25", + "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-retry": { - "version": "4.1.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.18.tgz", - "integrity": "sha512-bYLZ4DkoxSsPxpdmeapvAKy7rM5+25gR7PGxq2iMiecmbrRGBHj9s75N74Ylg+aBiw9i5jIowC/cLU2NR0qH8w==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", + "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", "dependencies": { + "@aws-sdk/types": "3.840.0", "@smithy/node-config-provider": "^4.1.3", - "@smithy/protocol-http": "^5.1.2", - "@smithy/service-error-classification": "^4.0.6", - "@smithy/smithy-client": "^4.4.9", "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.6", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-serde": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz", - "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/token-providers": { + "version": "3.859.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.859.0.tgz", + "integrity": "sha512-6P2wlvm9KBWOvRNn0Pt8RntnXg8fzOb5kEShvWsOsAocZeqKNaYbihum5/Onq1ZPoVtkdb++8eWDocDnM4k85Q==", "dependencies": { - "@smithy/protocol-http": "^5.1.2", + "@aws-sdk/core": "3.858.0", + "@aws-sdk/nested-clients": "3.858.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -19998,10 +20267,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-stack": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz", - "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/types": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", + "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -20010,76 +20279,82 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/node-config-provider": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", - "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/util-arn-parser": { + "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": { - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", - "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/node-http-handler": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz", - "integrity": "sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/util-endpoints": { + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.848.0.tgz", + "integrity": "sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==", "dependencies": { - "@smithy/abort-controller": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/querystring-builder": "^4.0.4", + "@aws-sdk/types": "3.840.0", "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/property-provider": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", - "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", + "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", "dependencies": { + "@aws-sdk/types": "3.840.0", "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/protocol-http": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", - "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.858.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.858.0.tgz", + "integrity": "sha512-T1m05QlN8hFpx5/5duMjS8uFSK5e6EXP45HQRkZULVkL3DK+jMaxsnh3KLl5LjUoHn/19M4HM0wNUBhYp4Y2Yw==", "dependencies": { + "@aws-sdk/middleware-user-agent": "3.858.0", + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/querystring-builder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz", - "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", + "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", "dependencies": { "@smithy/types": "^4.3.1", - "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/querystring-parser": { + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/abort-controller": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", - "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -20088,40 +20363,56 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/service-error-classification": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz", - "integrity": "sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/chunked-blob-reader": { + "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": { - "@smithy/types": "^4.3.1" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", - "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/chunked-blob-reader-native": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/config-resolver": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz", + "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" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/signature-v4": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz", - "integrity": "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/core": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.7.2.tgz", + "integrity": "sha512-JoLw59sT5Bm8SAjFCYZyuCGxK8y3vovmoVbZWLDPTH5XpPEIwpFd9m90jjVMwoypDuB/SdVgje5Y4T7w50lJaw==", "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", + "@smithy/middleware-serde": "^4.0.8", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", - "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-stream": "^4.2.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -20129,40 +20420,43 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/smithy-client": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.9.tgz", - "integrity": "sha512-mbMg8mIUAWwMmb74LoYiArP04zWElPzDoA1jVOp3or0cjlDMgoS6WTC3QXK0Vxoc9I4zdrX0tq6qsOmaIoTWEQ==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz", + "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==", "dependencies": { - "@smithy/core": "^3.7.2", - "@smithy/middleware-endpoint": "^4.1.17", - "@smithy/middleware-stack": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", - "@smithy/util-stream": "^4.2.3", + "@smithy/url-parser": "^4.0.4", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/types": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", - "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/fetch-http-handler": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz", + "integrity": "sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==", "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" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/url-parser": { + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/hash-blob-browser": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", - "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz", + "integrity": "sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==", "dependencies": { - "@smithy/querystring-parser": "^4.0.4", + "@smithy/chunked-blob-reader": "^5.0.0", + "@smithy/chunked-blob-reader-native": "^4.0.0", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -20170,11 +20464,12 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-base64": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/hash-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz", + "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" @@ -20183,111 +20478,122 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-body-length-browser": { - "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==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/hash-stream-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz", + "integrity": "sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==", "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-body-length-node": { - "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==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/invalid-dependency": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz", + "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==", "dependencies": { + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-buffer-from": { + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/is-array-buffer": { "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==", + "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": { - "@smithy/is-array-buffer": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-config-provider": { - "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==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/md5-js": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz", + "integrity": "sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==", "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.25", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.25.tgz", - "integrity": "sha512-pxEWsxIsOPLfKNXvpgFHBGFC3pKYKUFhrud1kyooO9CJai6aaKDHfT10Mi5iiipPXN/JhKAu3qX9o75+X85OdQ==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-content-length": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz", + "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==", "dependencies": { - "@smithy/property-provider": "^4.0.4", - "@smithy/smithy-client": "^4.4.9", + "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", - "bowser": "^2.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.25", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.25.tgz", - "integrity": "sha512-+w4n4hKFayeCyELZLfsSQG5mCC3TwSkmRHv4+el5CzFU8ToQpYGhpV7mrRzqlwKkntlPilT1HJy1TVeEvEjWOQ==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-endpoint": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.17.tgz", + "integrity": "sha512-S3hSGLKmHG1m35p/MObQCBCdRsrpbPU8B129BVzRqRfDvQqPMQ14iO4LyRw+7LNizYc605COYAcjqgawqi+6jA==", "dependencies": { - "@smithy/config-resolver": "^4.1.4", - "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/core": "^3.7.2", + "@smithy/middleware-serde": "^4.0.8", "@smithy/node-config-provider": "^4.1.3", - "@smithy/property-provider": "^4.0.4", - "@smithy/smithy-client": "^4.4.9", + "@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" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-endpoints": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", - "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-retry": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.18.tgz", + "integrity": "sha512-bYLZ4DkoxSsPxpdmeapvAKy7rM5+25gR7PGxq2iMiecmbrRGBHj9s75N74Ylg+aBiw9i5jIowC/cLU2NR0qH8w==", "dependencies": { "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/service-error-classification": "^4.0.6", + "@smithy/smithy-client": "^4.4.9", "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-hex-encoding": { - "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==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-serde": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz", + "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==", "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-middleware": { + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/middleware-stack": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz", - "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz", + "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -20296,12 +20602,13 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-retry": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz", - "integrity": "sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/node-config-provider": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", + "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", "dependencies": { - "@smithy/service-error-classification": "^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" }, @@ -20309,896 +20616,4503 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-stream": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz", - "integrity": "sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/node-http-handler": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz", + "integrity": "sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==", "dependencies": { - "@smithy/fetch-http-handler": "^5.1.0", - "@smithy/node-http-handler": "^4.1.0", + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", "@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" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-uri-escape": { - "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==", + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/property-provider": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", + "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", "dependencies": { + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-utf8": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", - "dependencies": { + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/protocol-http": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", + "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/querystring-builder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz", + "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/querystring-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", + "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/service-error-classification": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz", + "integrity": "sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==", + "dependencies": { + "@smithy/types": "^4.3.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", + "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/signature-v4": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz", + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/smithy-client": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.9.tgz", + "integrity": "sha512-mbMg8mIUAWwMmb74LoYiArP04zWElPzDoA1jVOp3or0cjlDMgoS6WTC3QXK0Vxoc9I4zdrX0tq6qsOmaIoTWEQ==", + "dependencies": { + "@smithy/core": "^3.7.2", + "@smithy/middleware-endpoint": "^4.1.17", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/url-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", + "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", + "dependencies": { + "@smithy/querystring-parser": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-base64": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-body-length-browser": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-body-length-node": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-buffer-from": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-config-provider": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.25.tgz", + "integrity": "sha512-pxEWsxIsOPLfKNXvpgFHBGFC3pKYKUFhrud1kyooO9CJai6aaKDHfT10Mi5iiipPXN/JhKAu3qX9o75+X85OdQ==", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.9", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.25.tgz", + "integrity": "sha512-+w4n4hKFayeCyELZLfsSQG5mCC3TwSkmRHv4+el5CzFU8ToQpYGhpV7mrRzqlwKkntlPilT1HJy1TVeEvEjWOQ==", + "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.9", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-endpoints": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", + "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-hex-encoding": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-middleware": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz", + "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-retry": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz", + "integrity": "sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==", + "dependencies": { + "@smithy/service-error-classification": "^4.0.6", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-stream": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz", + "integrity": "sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==", + "dependencies": { + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/node-http-handler": "^4.1.0", + "@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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-uri-escape": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/@smithy/util-utf8": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/client-s3-control/node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ] + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/core": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sagemaker/-/client-sagemaker-3.693.0.tgz", + "integrity": "sha512-iInrrb7V9f0CRBiVCaaxCbpoBRQ5BqxX4elRYI6gE/pSDD2tPqmRfm4reahMtTUcKg1jaSGuvqJLfOpp0HTozQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.8", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/client-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", + "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", + "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", + "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/core": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", + "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", + "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", + "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", + "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", + "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", + "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", + "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/middleware-logger": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", + "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", + "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", + "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", + "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/token-providers": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", + "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/util-endpoints": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", + "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", + "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", + "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.693.0.tgz", + "integrity": "sha512-B2K3aXGnP7eD1ITEIx4kO43l1N5OLqHdLW4AUbwoopwU5qzicc9jADrthXpGxymJI8AhJz9T2WtLmceBU2EpNg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/client-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", + "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", + "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", + "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/core": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", + "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", + "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", + "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", + "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", + "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", + "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", + "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/middleware-logger": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", + "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", + "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", + "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", + "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/token-providers": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", + "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/util-endpoints": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", + "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", + "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", + "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/client-sts": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.8", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sts": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-node": "3.693.0", + "@aws-sdk/middleware-host-header": "3.693.0", + "@aws-sdk/middleware-logger": "3.693.0", + "@aws-sdk/middleware-recursion-detection": "3.693.0", + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/region-config-resolver": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@aws-sdk/util-user-agent-browser": "3.693.0", + "@aws-sdk/util-user-agent-node": "3.693.0", + "@smithy/config-resolver": "^3.0.11", + "@smithy/core": "^2.5.2", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/hash-node": "^3.0.9", + "@smithy/invalid-dependency": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.11", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/middleware-retry": "^3.0.26", + "@smithy/middleware-serde": "^3.0.9", + "@smithy/middleware-stack": "^3.0.9", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/url-parser": "^3.0.9", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.26", + "@smithy/util-defaults-mode-node": "^3.0.26", + "@smithy/util-endpoints": "^2.1.5", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-retry": "^3.0.9", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/core": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/fetch-http-handler": "^4.1.0", + "@smithy/node-http-handler": "^3.3.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-stream": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.693.0", + "@aws-sdk/credential-provider-http": "3.693.0", + "@aws-sdk/credential-provider-ini": "3.693.0", + "@aws-sdk/credential-provider-process": "3.693.0", + "@aws-sdk/credential-provider-sso": "3.693.0", + "@aws-sdk/credential-provider-web-identity": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.693.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/token-providers": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-logger": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-endpoints": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/token-providers": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.693.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-endpoints": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "@smithy/util-endpoints": "^2.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.693.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.975.0.tgz", + "integrity": "sha512-HpgJuleH7P6uILxzJKQOmlHdwaCY+xYC6VgRDzlwVEqU/HXjo4m2gOAyjUbpXlBOCWfGgMUzfBlNJ9z3MboqEQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/middleware-host-header": "^3.972.1", + "@aws-sdk/middleware-logger": "^3.972.1", + "@aws-sdk/middleware-recursion-detection": "^3.972.1", + "@aws-sdk/middleware-user-agent": "^3.972.2", + "@aws-sdk/region-config-resolver": "^3.972.1", + "@aws-sdk/types": "^3.973.0", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.1", + "@aws-sdk/util-user-agent-node": "^3.972.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.21.1", + "@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.11", + "@smithy/middleware-retry": "^4.4.27", + "@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.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.12", + "@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.26", + "@smithy/util-defaults-mode-node": "^4.2.29", + "@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/client-sso/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/config-resolver": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz", + "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/core": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.21.1.tgz", + "integrity": "sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/credential-provider-imds": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz", + "integrity": "sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz", + "integrity": "sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/invalid-dependency": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz", + "integrity": "sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-content-length": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz", + "integrity": "sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-endpoint": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.11.tgz", + "integrity": "sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.21.1", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-retry": { + "version": "4.4.27", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.27.tgz", + "integrity": "sha512-xFUYCGRVsfgiN5EjsJJSzih9+yjStgMTCLANPlf0LVQkPDYCe0hz97qbdTZosFOiYlGBlHYityGRxrQ/hxhfVQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/service-error-classification": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", + "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", + "license": "Apache-2.0", + "dependencies": { + "@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": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", + "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/service-error-classification": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz", + "integrity": "sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/smithy-client": { + "version": "4.10.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.12.tgz", + "integrity": "sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.21.1", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.26.tgz", + "integrity": "sha512-vva0dzYUTgn7DdE0uaha10uEdAgmdLnNFowKFjpMm6p2R0XDk5FHPX3CBJLzWQkQXuEprsb0hGz9YwbicNWhjw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.29", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.29.tgz", + "integrity": "sha512-c6D7IUBsZt/aNnTBHMTf+OVh+h/JcxUUgfTcIJaWRe6zhOum1X+pNKSZtZ+7fbOn5I99XVFtmrnXKv8yHHErTQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.6", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", + "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-retry": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz", + "integrity": "sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", + "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.973.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.2.tgz", + "integrity": "sha512-XwOjX86CNtmhO/Tx2vmNt1tT1yda045LXVm453w9crrkl7oyDEWV3ASg2xNi6hCPWbx1BXtLKJduQiGZnmHXrg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.2", + "@smithy/core": "^3.21.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.2.tgz", + "integrity": "sha512-jGOOV/bV1DhkkUhHiZ3/1GZ67cZyOXaDb7d1rYD6ZiXf5V9tBNOcgqXwRRPvrCbYaFRa1pPMFb3ZjqjWpR3YfA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/core": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.21.1.tgz", + "integrity": "sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-endpoint": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.11.tgz", + "integrity": "sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.21.1", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", + "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", + "license": "Apache-2.0", + "dependencies": { + "@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": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/node-http-handler": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", + "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.8.tgz", + "integrity": "sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/smithy-client": { + "version": "4.10.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.12.tgz", + "integrity": "sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.21.1", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-stream": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", + "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/core/node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.936.0.tgz", + "integrity": "sha512-+aSC59yiD4M5RcYp9Gx3iwX/n4hO3ZWA2Mxmkzmt9gYFBbJ9umx2LpBdrV64y57AtOvfGeo0h7PAXniIufagxw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.936.0.tgz", + "integrity": "sha512-AkJZ426y0G8Lsyi9p7mWudacMKeo8XLZOfxUmeThMkDa3GxGQ1y6BTrOj6ZcvqQ1Hz7Abb3QWPC+EMqhu1Lncw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/credential-provider-node": "3.936.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/middleware-retry": "^4.4.12", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@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.11", + "@smithy/util-defaults-mode-node": "^4.2.14", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-sso": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.936.0.tgz", + "integrity": "sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/middleware-retry": "^4.4.12", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@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.11", + "@smithy/util-defaults-mode-node": "^4.2.14", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/core": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.936.0.tgz", + "integrity": "sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.936.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.936.0.tgz", + "integrity": "sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.936.0.tgz", + "integrity": "sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.936.0.tgz", + "integrity": "sha512-TbUv56ERQQujoHcLMcfL0Q6bVZfYF83gu/TjHkVkdSlHPOIKaG/mhE2XZSQzXv1cud6LlgeBbfzVAxJ+HPpffg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/credential-provider-env": "3.936.0", + "@aws-sdk/credential-provider-http": "3.936.0", + "@aws-sdk/credential-provider-login": "3.936.0", + "@aws-sdk/credential-provider-process": "3.936.0", + "@aws-sdk/credential-provider-sso": "3.936.0", + "@aws-sdk/credential-provider-web-identity": "3.936.0", + "@aws-sdk/nested-clients": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.936.0.tgz", + "integrity": "sha512-rk/2PCtxX9xDsQW8p5Yjoca3StqmQcSfkmD7nQ61AqAHL1YgpSQWqHE+HjfGGiHDYKG7PvE33Ku2GyA7lEIJAw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.936.0", + "@aws-sdk/credential-provider-http": "3.936.0", + "@aws-sdk/credential-provider-ini": "3.936.0", + "@aws-sdk/credential-provider-process": "3.936.0", + "@aws-sdk/credential-provider-sso": "3.936.0", + "@aws-sdk/credential-provider-web-identity": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.936.0.tgz", + "integrity": "sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.936.0.tgz", + "integrity": "sha512-wHlEAJJvtnSyxTfNhN98JcU4taA1ED2JvuI2eePgawqBwS/Tzi0mhED1lvNIaWOkjfLd+nHALwszGrtJwEq4yQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.936.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/token-providers": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.936.0.tgz", + "integrity": "sha512-v3qHAuoODkoRXsAF4RG+ZVO6q2P9yYBT4GMpMEfU9wXVNn7AIfwZgTwzSUfnjNiGva5BKleWVpRpJ9DeuLFbUg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/nested-clients": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", + "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/middleware-logger": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", + "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.936.0.tgz", + "integrity": "sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.936.0", + "@aws/lambda-invoke-store": "^0.2.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.936.0.tgz", + "integrity": "sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@smithy/core": "^3.18.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/nested-clients": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.936.0.tgz", + "integrity": "sha512-eyj2tz1XmDSLSZQ5xnB7cLTVKkSJnYAEoNDSUNhzWPxrBDYeJzIbatecOKceKCU8NBf8gWWZCK/CSY0mDxMO0A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/middleware-retry": "^4.4.12", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@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.11", + "@smithy/util-defaults-mode-node": "^4.2.14", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", + "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/token-providers": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.936.0.tgz", + "integrity": "sha512-vvw8+VXk0I+IsoxZw0mX9TMJawUJvEsg3EF7zcCSetwhNPAU8Xmlhv7E/sN/FgSmm7b7DsqKoW6rVtQiCs1PWQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/nested-clients": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", + "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-endpoints": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", + "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-endpoints": "^3.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", + "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.936.0.tgz", + "integrity": "sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true } - ], + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/xml-builder": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", + "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", + "license": "Apache-2.0", "dependencies": { - "strnum": "^2.1.0" + "@smithy/types": "^4.9.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" }, - "bin": { - "fxparser": "src/cli/cli.js" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3-control/node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ] + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws/lambda-invoke-store": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.1.tgz", + "integrity": "sha512-sIyFcoPZkTtNu9xFeEoynMef3bPJIAbOfUh+ueYcfhVl6xm2VRtMcMclSxmZCMnHHd4hlYKJeq/aggmBEWynww==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/abort-controller": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", + "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/config-resolver": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", + "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/core": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.5.tgz", + "integrity": "sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.6", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/credential-provider-imds": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", + "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", + "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/hash-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", + "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/invalid-dependency": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", + "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/core": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-content-length": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", + "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-endpoint": { + "version": "4.3.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz", + "integrity": "sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-stream": "^3.3.0", + "@smithy/core": "^3.18.5", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-retry": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.12.tgz", + "integrity": "sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-serde": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", + "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-ini": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-stack": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", + "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/token-providers": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/node-config-provider": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", + "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/types": "^3.7.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/node-http-handler": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", + "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/abort-controller": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", + "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/protocol-http": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", + "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/querystring-builder": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", + "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@smithy/core": "^2.5.2", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.9.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/querystring-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", + "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.9", + "dependencies": { + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/service-error-classification": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", + "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", - "tslib": "^2.6.2" + "@smithy/types": "^4.9.0" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", + "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "@smithy/util-endpoints": "^2.1.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/signature-v4": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", + "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "bowser": "^2.11.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/smithy-client": { + "version": "4.9.8", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.8.tgz", + "integrity": "sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/core": "^3.18.5", + "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", + "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/url-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", + "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/querystring-parser": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sagemaker/-/client-sagemaker-3.693.0.tgz", - "integrity": "sha512-iInrrb7V9f0CRBiVCaaxCbpoBRQ5BqxX4elRYI6gE/pSDD2tPqmRfm4reahMtTUcKg1jaSGuvqJLfOpp0HTozQ==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/client-sts": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.8", - "@types/uuid": "^9.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/client-sso": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", - "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", - "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/client-sts": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", - "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/core": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", - "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.11.tgz", + "integrity": "sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", - "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.14.tgz", + "integrity": "sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-stream": "^3.3.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", - "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-endpoints": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", + "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", - "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-ini": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", - "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-middleware": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", + "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/token-providers": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", - "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-retry": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", + "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/types": "^3.7.0", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", - "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-stream": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", + "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/middleware-logger": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", - "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", - "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/middleware-user-agent": { + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/@aws-sdk/credential-provider-env": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", - "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.693.0", "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@smithy/core": "^2.5.2", - "@smithy/protocol-http": "^4.1.6", + "@smithy/property-provider": "^3.1.9", "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, @@ -21206,1716 +25120,1265 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/region-config-resolver": { + "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/core": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", - "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", "@smithy/types": "^3.7.0", - "@smithy/util-config-provider": "^3.0.0", "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/token-providers": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", - "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.3.tgz", + "integrity": "sha512-IbBGWhaxiEl64fznwh5PDEB0N7YJEAvK5b6nRtPVUKdKAHlOPgo6B9XB8mqWDs8Ct0oF/E34ZLiq2U0L5xDkrg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/types": "^3.973.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.693.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/util-endpoints": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", - "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "@smithy/util-endpoints": "^2.1.5", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", - "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "bowser": "^2.11.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", - "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/core": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.21.1.tgz", + "integrity": "sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", "license": "Apache-2.0", "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-endpoint": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.11.tgz", + "integrity": "sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/core": "^3.21.1", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.693.0.tgz", - "integrity": "sha512-B2K3aXGnP7eD1ITEIx4kO43l1N5OLqHdLW4AUbwoopwU5qzicc9jADrthXpGxymJI8AhJz9T2WtLmceBU2EpNg==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/client-sts": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", - "@types/uuid": "^9.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/client-sso": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", - "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", + "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", - "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@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": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/client-sts": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", - "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", + "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/core": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", - "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", - "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-stream": "^3.3.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", - "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", - "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-ini": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", - "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/token-providers": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", - "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/smithy-client": { + "version": "4.10.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.12.tgz", + "integrity": "sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/types": "^3.7.0", + "@smithy/core": "^3.21.1", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", - "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/middleware-logger": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", - "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", - "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", - "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@smithy/core": "^2.5.2", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", - "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.9", + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/token-providers": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", - "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/util-endpoints": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", - "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "@smithy/util-endpoints": "^2.1.5", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", - "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-stream": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", + "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "bowser": "^2.11.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", - "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "license": "Apache-2.0", "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/credential-provider-env": "3.758.0", + "@aws-sdk/credential-provider-http": "3.758.0", + "@aws-sdk/credential-provider-process": "3.758.0", + "@aws-sdk/credential-provider-sso": "3.758.0", + "@aws-sdk/credential-provider-web-identity": "3.758.0", + "@aws-sdk/nested-clients": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sfn/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/client-sso": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/middleware-host-header": "3.734.0", + "@aws-sdk/middleware-logger": "3.734.0", + "@aws-sdk/middleware-recursion-detection": "3.734.0", + "@aws-sdk/middleware-user-agent": "3.758.0", + "@aws-sdk/region-config-resolver": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.743.0", + "@aws-sdk/util-user-agent-browser": "3.734.0", + "@aws-sdk/util-user-agent-node": "3.758.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/core": "^3.1.5", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/hash-node": "^4.0.1", + "@smithy/invalid-dependency": "^4.0.1", + "@smithy/middleware-content-length": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-retry": "^4.0.7", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@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.7", + "@smithy/util-defaults-mode-node": "^4.0.7", + "@smithy/util-endpoints": "^3.0.1", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/core": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/client-sts": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.8", - "@types/uuid": "^9.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@aws-sdk/types": "3.734.0", + "@smithy/core": "^3.1.5", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/signature-v4": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/property-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sts": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-node": "3.693.0", - "@aws-sdk/middleware-host-header": "3.693.0", - "@aws-sdk/middleware-logger": "3.693.0", - "@aws-sdk/middleware-recursion-detection": "3.693.0", - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/region-config-resolver": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@aws-sdk/util-user-agent-browser": "3.693.0", - "@aws-sdk/util-user-agent-node": "3.693.0", - "@smithy/config-resolver": "^3.0.11", - "@smithy/core": "^2.5.2", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/hash-node": "^3.0.9", - "@smithy/invalid-dependency": "^3.0.9", - "@smithy/middleware-content-length": "^3.0.11", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/middleware-retry": "^3.0.26", - "@smithy/middleware-serde": "^3.0.9", - "@smithy/middleware-stack": "^3.0.9", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/url-parser": "^3.0.9", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.26", - "@smithy/util-defaults-mode-node": "^3.0.26", - "@smithy/util-endpoints": "^2.1.5", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-retry": "^3.0.9", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/core": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@aws-sdk/client-sso": "3.758.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/token-providers": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/fetch-http-handler": "^4.1.0", - "@smithy/node-http-handler": "^3.3.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-stream": "^3.3.0", + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/middleware-logger": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.734.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.693.0", - "@aws-sdk/credential-provider-http": "3.693.0", - "@aws-sdk/credential-provider-ini": "3.693.0", - "@aws-sdk/credential-provider-process": "3.693.0", - "@aws-sdk/credential-provider-sso": "3.693.0", - "@aws-sdk/credential-provider-web-identity": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/credential-provider-imds": "^3.2.6", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.743.0", + "@smithy/core": "^3.1.5", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/client-sso": "3.693.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/token-providers": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@aws-sdk/types": "3.734.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/token-providers": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/types": "^3.7.0", + "@aws-sdk/nested-clients": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { + "version": "3.734.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.693.0" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/util-endpoints": { + "version": "3.743.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "@smithy/util-endpoints": "^3.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-logger": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.758.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/abort-controller": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/config-resolver": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-endpoints": "3.693.0", - "@smithy/core": "^2.5.2", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/core": { + "version": "3.1.5", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.9", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.1.2", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/token-providers": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.693.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-endpoints": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "@smithy/util-endpoints": "^2.1.5", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/hash-node": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "bowser": "^2.11.0", + "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/invalid-dependency": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-content-length": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-endpoint": { + "version": "4.0.6", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/core": "^3.1.5", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.637.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-retry": { + "version": "4.0.7", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.637.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-serde": { + "version": "4.0.2", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.637.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-stack": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/node-config-provider": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/node-http-handler": { + "version": "4.0.3", "license": "Apache-2.0", + "peer": true, "dependencies": { + "@smithy/abort-controller": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/property-provider": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/protocol-http": { + "version": "5.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/querystring-builder": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.1.0", + "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/querystring-parser": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/service-error-classification": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.6.2" + "@smithy/types": "^4.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/signature-v4": { + "version": "5.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.637.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/smithy-client": { + "version": "4.1.6", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.637.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", + "@smithy/core": "^3.1.5", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { + "version": "4.1.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/url-parser": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/querystring-parser": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-base64": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/core": { - "version": "3.635.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/core": "^2.4.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.4.1", + "@smithy/is-array-buffer": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.936.0.tgz", - "integrity": "sha512-+aSC59yiD4M5RcYp9Gx3iwX/n4hO3ZWA2Mxmkzmt9gYFBbJ9umx2LpBdrV64y57AtOvfGeo0h7PAXniIufagxw==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-config-provider": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.936.0.tgz", - "integrity": "sha512-AkJZ426y0G8Lsyi9p7mWudacMKeo8XLZOfxUmeThMkDa3GxGQ1y6BTrOj6ZcvqQ1Hz7Abb3QWPC+EMqhu1Lncw==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.7", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-node": "3.936.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@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.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-sso": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.936.0.tgz", - "integrity": "sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.7", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@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.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/core": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.936.0.tgz", - "integrity": "sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-endpoints": { + "version": "3.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.936.0", - "@aws-sdk/xml-builder": "3.930.0", - "@smithy/core": "^3.18.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.936.0.tgz", - "integrity": "sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.936.0.tgz", - "integrity": "sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-middleware": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.936.0.tgz", - "integrity": "sha512-TbUv56ERQQujoHcLMcfL0Q6bVZfYF83gu/TjHkVkdSlHPOIKaG/mhE2XZSQzXv1cud6LlgeBbfzVAxJ+HPpffg==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-retry": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-login": "3.936.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.936.0", - "@aws-sdk/credential-provider-web-identity": "3.936.0", - "@aws-sdk/nested-clients": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.936.0.tgz", - "integrity": "sha512-rk/2PCtxX9xDsQW8p5Yjoca3StqmQcSfkmD7nQ61AqAHL1YgpSQWqHE+HjfGGiHDYKG7PvE33Ku2GyA7lEIJAw==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-stream": { + "version": "4.1.2", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-ini": "3.936.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.936.0", - "@aws-sdk/credential-provider-web-identity": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/types": "^4.1.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" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.936.0.tgz", - "integrity": "sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-sso": { + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.936.0.tgz", - "integrity": "sha512-wHlEAJJvtnSyxTfNhN98JcU4taA1ED2JvuI2eePgawqBwS/Tzi0mhED1lvNIaWOkjfLd+nHALwszGrtJwEq4yQ==", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.936.0.tgz", + "integrity": "sha512-8DVrdRqPyUU66gfV7VZNToh56ZuO5D6agWrkLQE/xbLJOm2RbeRgh6buz7CqV8ipRd6m+zCl9mM4F3osQLZn8Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.936.0", "@aws-sdk/core": "3.936.0", - "@aws-sdk/token-providers": "3.936.0", + "@aws-sdk/nested-clients": "3.936.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" @@ -22924,25 +26387,31 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/credential-provider-web-identity": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/core": { "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.936.0.tgz", - "integrity": "sha512-v3qHAuoODkoRXsAF4RG+ZVO6q2P9yYBT4GMpMEfU9wXVNn7AIfwZgTwzSUfnjNiGva5BKleWVpRpJ9DeuLFbUg==", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.936.0.tgz", + "integrity": "sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.936.0", "@aws-sdk/types": "3.936.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.5", + "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/middleware-host-header": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/middleware-host-header": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", @@ -22957,7 +26426,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/middleware-logger": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/middleware-logger": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", @@ -22971,7 +26440,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/middleware-recursion-detection": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.936.0.tgz", "integrity": "sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==", @@ -22987,7 +26456,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/middleware-user-agent": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/middleware-user-agent": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.936.0.tgz", "integrity": "sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==", @@ -23005,7 +26474,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/nested-clients": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/nested-clients": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.936.0.tgz", "integrity": "sha512-eyj2tz1XmDSLSZQ5xnB7cLTVKkSJnYAEoNDSUNhzWPxrBDYeJzIbatecOKceKCU8NBf8gWWZCK/CSY0mDxMO0A==", @@ -23054,7 +26523,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/region-config-resolver": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/region-config-resolver": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", @@ -23070,25 +26539,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/token-providers": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.936.0.tgz", - "integrity": "sha512-vvw8+VXk0I+IsoxZw0mX9TMJawUJvEsg3EF7zcCSetwhNPAU8Xmlhv7E/sN/FgSmm7b7DsqKoW6rVtQiCs1PWQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/types": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", @@ -23101,7 +26552,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-endpoints": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/util-endpoints": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", @@ -23117,7 +26568,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", @@ -23129,7 +26580,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/util-user-agent-node": { "version": "3.936.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.936.0.tgz", "integrity": "sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==", @@ -23153,7 +26604,7 @@ } } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/xml-builder": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/xml-builder": { "version": "3.930.0", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", @@ -23167,16 +26618,16 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws/lambda-invoke-store": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.1.tgz", - "integrity": "sha512-sIyFcoPZkTtNu9xFeEoynMef3bPJIAbOfUh+ueYcfhVl6xm2VRtMcMclSxmZCMnHHd4hlYKJeq/aggmBEWynww==", + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws/lambda-invoke-store": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.0.tgz", + "integrity": "sha512-D1jAmAZQYMoPiacfgNf7AWhg3DFN3Wq/vQv3WINt9znwjzHp2x+WzdJFxxj7xZL7V1U79As6G8f7PorMYWBKsQ==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/abort-controller": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/abort-controller": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", @@ -23189,7 +26640,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/config-resolver": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/config-resolver": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", @@ -23206,7 +26657,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/core": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/core": { "version": "3.18.5", "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.5.tgz", "integrity": "sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==", @@ -23227,7 +26678,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/credential-provider-imds": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/credential-provider-imds": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", @@ -23243,7 +26694,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/fetch-http-handler": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/fetch-http-handler": { "version": "5.3.6", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", @@ -23259,7 +26710,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/hash-node": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/hash-node": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", @@ -23274,7 +26725,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/invalid-dependency": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/invalid-dependency": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", @@ -23287,7 +26738,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/is-array-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", @@ -23299,7 +26750,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-content-length": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-content-length": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", @@ -23313,7 +26764,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-endpoint": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-endpoint": { "version": "4.3.12", "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz", "integrity": "sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==", @@ -23332,7 +26783,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-retry": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-retry": { "version": "4.4.12", "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.12.tgz", "integrity": "sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==", @@ -23352,7 +26803,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-serde": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-serde": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", @@ -23366,7 +26817,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-stack": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-stack": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", @@ -23379,7 +26830,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/node-config-provider": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/node-config-provider": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", @@ -23394,7 +26845,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/node-http-handler": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/node-http-handler": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", @@ -23410,7 +26861,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/property-provider": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", @@ -23423,7 +26874,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/protocol-http": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/protocol-http": { "version": "5.3.5", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", @@ -23436,7 +26887,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/querystring-builder": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/querystring-builder": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", @@ -23450,7 +26901,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/querystring-parser": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/querystring-parser": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", @@ -23463,7 +26914,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/service-error-classification": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/service-error-classification": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", @@ -23475,7 +26926,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/shared-ini-file-loader": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", @@ -23488,7 +26939,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/signature-v4": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/signature-v4": { "version": "5.3.5", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", @@ -23507,7 +26958,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/smithy-client": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/smithy-client": { "version": "4.9.8", "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.8.tgz", "integrity": "sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==", @@ -23525,7 +26976,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/types": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", @@ -23537,7 +26988,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/url-parser": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/url-parser": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", @@ -23551,7 +27002,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-base64": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-base64": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", @@ -23565,7 +27016,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-body-length-browser": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-body-length-browser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", @@ -23577,7 +27028,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-body-length-node": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-body-length-node": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", @@ -23589,7 +27040,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-buffer-from": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-buffer-from": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", @@ -23602,7 +27053,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-config-provider": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-config-provider": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", @@ -23614,7 +27065,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-defaults-mode-browser": { "version": "4.3.11", "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.11.tgz", "integrity": "sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==", @@ -23629,7 +27080,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-defaults-mode-node": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-defaults-mode-node": { "version": "4.2.14", "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.14.tgz", "integrity": "sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==", @@ -23647,7 +27098,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-endpoints": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-endpoints": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", @@ -23661,7 +27112,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-hex-encoding": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-hex-encoding": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", @@ -23673,7 +27124,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-middleware": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-middleware": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", @@ -23686,7 +27137,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-retry": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-retry": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", @@ -23700,7 +27151,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-stream": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-stream": { "version": "4.5.6", "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", @@ -23719,7 +27170,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-uri-escape": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-uri-escape": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", @@ -23731,7 +27182,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-utf8": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", @@ -23744,7 +27195,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/fast-xml-parser": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/fast-xml-parser": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", @@ -23762,7 +27213,7 @@ "fxparser": "src/cli/cli.js" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/strnum": { + "node_modules/@aws-sdk/credential-provider-login/node_modules/strnum": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", @@ -23774,496 +27225,573 @@ ], "license": "MIT" }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.2.tgz", + "integrity": "sha512-Lz1J5IZdTjLYTVIcDP5DVDgi1xlgsF3p1cnvmbfKbjCRhQpftN2e2J4NFfRRvPD54W9+bZ8l5VipPXtTYK7aEg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/types": "^3.7.0", + "@aws-sdk/credential-provider-env": "^3.972.2", + "@aws-sdk/credential-provider-http": "^3.972.3", + "@aws-sdk/credential-provider-ini": "^3.972.2", + "@aws-sdk/credential-provider-process": "^3.972.2", + "@aws-sdk/credential-provider-sso": "^3.972.2", + "@aws-sdk/credential-provider-web-identity": "^3.972.2", + "@aws-sdk/types": "^3.973.1", + "@smithy/credential-provider-imds": "^4.2.8", + "@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": ">=16.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/core": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.2.tgz", + "integrity": "sha512-wzH1EdrZsytG1xN9UHaK12J9+kfrnd2+c8y0LVoS4O4laEjPoie1qVK3k8/rZe7KOtvULzyMnO3FT4Krr9Z0Dg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.2.tgz", + "integrity": "sha512-Jrb8sLm6k8+L7520irBrvCtdLxNtrG7arIxe9TCeMJt/HxqMGJdbIjw8wILzkEHLMIi4MecF2FbXCln7OT1Tag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/credential-provider-env": "^3.972.2", + "@aws-sdk/credential-provider-http": "^3.972.3", + "@aws-sdk/credential-provider-login": "^3.972.2", + "@aws-sdk/credential-provider-process": "^3.972.2", + "@aws-sdk/credential-provider-sso": "^3.972.2", + "@aws-sdk/credential-provider-web-identity": "^3.972.2", + "@aws-sdk/nested-clients": "3.975.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/credential-provider-imds": "^4.2.8", + "@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-node/node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.2.tgz", + "integrity": "sha512-mlaw2aiI3DrimW85ZMn3g7qrtHueidS58IGytZ+mbFpsYLK5wMjCAKZQtt7VatLMtSBG/dn/EY4njbnYXIDKeQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/nested-clients": "3.975.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.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-node/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.2.tgz", + "integrity": "sha512-NLKLTT7jnUe9GpQAVkPTJO+cs2FjlQDt5fArIYS7h/Iw/CvamzgGYGFRVD2SE05nOHCMwafUSi42If8esGFV+g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@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-node/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.2.tgz", + "integrity": "sha512-x9DAiN9Qz+NjJ99ltDiVQ8d511M/tuF/9MFbe2jUgo7HZhD6+x4S3iT1YcP07ndwDUjmzKGmeOEgE24k4qvfdg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/nested-clients": "3.975.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": ">=16.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.635.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients": { + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.975.0.tgz", + "integrity": "sha512-OkeFHPlQj2c/Y5bQGkX14pxhDWUGUFt3LRHhjcDKsSCw6lrxKcxN3WFZN0qbJwKNydP+knL5nxvfgKiCLpTLRA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/middleware-host-header": "^3.972.1", + "@aws-sdk/middleware-logger": "^3.972.1", + "@aws-sdk/middleware-recursion-detection": "^3.972.1", + "@aws-sdk/middleware-user-agent": "^3.972.2", + "@aws-sdk/region-config-resolver": "^3.972.1", + "@aws-sdk/types": "^3.973.0", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.1", + "@aws-sdk/util-user-agent-node": "^3.972.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.21.1", + "@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.11", + "@smithy/middleware-retry": "^4.4.27", + "@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.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.12", + "@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.26", + "@smithy/util-defaults-mode-node": "^4.2.29", + "@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": ">=16.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/config-resolver": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz", + "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/credential-provider-env": "3.758.0", - "@aws-sdk/credential-provider-http": "3.758.0", - "@aws-sdk/credential-provider-process": "3.758.0", - "@aws-sdk/credential-provider-sso": "3.758.0", - "@aws-sdk/credential-provider-web-identity": "3.758.0", - "@aws-sdk/nested-clients": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/credential-provider-imds": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/client-sso": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/core": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.21.1.tgz", + "integrity": "sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.758.0", - "@aws-sdk/middleware-host-header": "3.734.0", - "@aws-sdk/middleware-logger": "3.734.0", - "@aws-sdk/middleware-recursion-detection": "3.734.0", - "@aws-sdk/middleware-user-agent": "3.758.0", - "@aws-sdk/region-config-resolver": "3.734.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-endpoints": "3.743.0", - "@aws-sdk/util-user-agent-browser": "3.734.0", - "@aws-sdk/util-user-agent-node": "3.758.0", - "@smithy/config-resolver": "^4.0.1", - "@smithy/core": "^3.1.5", - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/hash-node": "^4.0.1", - "@smithy/invalid-dependency": "^4.0.1", - "@smithy/middleware-content-length": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-retry": "^4.0.7", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", - "@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.7", - "@smithy/util-defaults-mode-node": "^4.0.7", - "@smithy/util-endpoints": "^3.0.1", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-retry": "^4.0.1", - "@smithy/util-utf8": "^4.0.0", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/core": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/credential-provider-imds": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz", + "integrity": "sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/core": "^3.1.5", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/signature-v4": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-middleware": "^4.0.1", - "fast-xml-parser": "4.4.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/hash-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz", + "integrity": "sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/property-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.1.2", + "@smithy/types": "^4.12.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/invalid-dependency": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz", + "integrity": "sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/client-sso": "3.758.0", - "@aws-sdk/core": "3.758.0", - "@aws-sdk/token-providers": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.734.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/middleware-content-length": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz", + "integrity": "sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/middleware-logger": { - "version": "3.734.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/middleware-endpoint": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.11.tgz", + "integrity": "sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", + "@smithy/core": "^3.21.1", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.734.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/middleware-retry": { + "version": "4.4.27", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.27.tgz", + "integrity": "sha512-xFUYCGRVsfgiN5EjsJJSzih9+yjStgMTCLANPlf0LVQkPDYCe0hz97qbdTZosFOiYlGBlHYityGRxrQ/hxhfVQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/service-error-classification": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-endpoints": "3.743.0", - "@smithy/core": "^3.1.5", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.734.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", + "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/token-providers": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/nested-clients": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "@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": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { - "version": "3.734.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/node-http-handler": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", + "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/util-endpoints": { - "version": "3.743.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", - "@smithy/util-endpoints": "^3.0.1", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.734.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", - "bowser": "^2.11.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/abort-controller": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/config-resolver": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/service-error-classification": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz", + "integrity": "sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", + "@smithy/types": "^4.12.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/core": { - "version": "3.1.5", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/smithy-client": { + "version": "4.10.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.12.tgz", + "integrity": "sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/middleware-serde": "^4.0.2", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-stream": "^4.1.2", - "@smithy/util-utf8": "^4.0.0", + "@smithy/core": "^3.21.1", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/credential-provider-imds": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/fetch-http-handler": { - "version": "5.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/protocol-http": "^5.0.1", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-base64": "^4.0.0", + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/hash-node": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/invalid-dependency": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/is-array-buffer": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -24271,355 +27799,402 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-content-length": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-endpoint": { - "version": "4.0.6", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/core": "^3.1.5", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", - "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-retry": { - "version": "4.0.7", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.26.tgz", + "integrity": "sha512-vva0dzYUTgn7DdE0uaha10uEdAgmdLnNFowKFjpMm6p2R0XDk5FHPX3CBJLzWQkQXuEprsb0hGz9YwbicNWhjw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/service-error-classification": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-retry": "^4.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-serde": { - "version": "4.0.2", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.29", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.29.tgz", + "integrity": "sha512-c6D7IUBsZt/aNnTBHMTf+OVh+h/JcxUUgfTcIJaWRe6zhOum1X+pNKSZtZ+7fbOn5I99XVFtmrnXKv8yHHErTQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/middleware-stack": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", + "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/node-config-provider": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/node-http-handler": { - "version": "4.0.3", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/abort-controller": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/property-provider": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-retry": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz", + "integrity": "sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/service-error-classification": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/protocol-http": { - "version": "5.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-stream": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", + "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/querystring-builder": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", - "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/querystring-parser": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/service-error-classification": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0" + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/core": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/signature-v4": { - "version": "5.0.1", + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.2.tgz", + "integrity": "sha512-YpwDn8g3gCGUl61cCV0sRxP2pFIwg+ZsMfWQ/GalSyjXtRkctCMFA+u0yPb/Q4uTfNEiya1Y4nm0C5rIHyPW5Q==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-uri-escape": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/client-sso": "3.975.0", + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/token-providers": "3.975.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": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/smithy-client": { - "version": "4.1.6", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/core": "^3.1.5", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.1.2", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { - "version": "4.1.0", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/url-parser": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/querystring-parser": "^4.0.1", - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-base64": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.758.0", "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/nested-clients": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-body-length-browser": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/core": { + "version": "3.758.0", "license": "Apache-2.0", "peer": true, "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/core": "^3.1.5", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/signature-v4": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-body-length-node": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { + "version": "3.734.0", "license": "Apache-2.0", "peer": true, "dependencies": { + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-buffer-from": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/abort-controller": { + "version": "4.0.1", "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-config-provider": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/core": { + "version": "3.1.5", "license": "Apache-2.0", "peer": true, "dependencies": { + "@smithy/middleware-serde": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.1.2", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.7", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.1", "license": "Apache-2.0", "peer": true, - "dependencies": { - "@smithy/property-provider": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", + "dependencies": { + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.0", - "bowser": "^2.11.0", + "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.7", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/config-resolver": "^4.0.1", - "@smithy/credential-provider-imds": "^4.0.1", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-endpoints": { - "version": "3.0.1", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/middleware-endpoint": { + "version": "4.0.6", "license": "Apache-2.0", "peer": true, "dependencies": { + "@smithy/core": "^3.1.5", + "@smithy/middleware-serde": "^4.0.2", "@smithy/node-config-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-hex-encoding": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/middleware-serde": { + "version": "4.0.2", "license": "Apache-2.0", "peer": true, "dependencies": { + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-middleware": { + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/middleware-stack": { "version": "4.0.1", "license": "Apache-2.0", "peer": true, @@ -24631,12 +28206,13 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-retry": { + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/node-config-provider": { "version": "4.0.1", "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/service-error-classification": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, @@ -24644,436 +28220,473 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-stream": { - "version": "4.1.2", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/node-http-handler": { + "version": "4.0.3", "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/node-http-handler": "^4.0.3", + "@smithy/abort-controller": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", "@smithy/types": "^4.1.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" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-uri-escape": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/property-provider": { + "version": "4.0.1", "license": "Apache-2.0", "peer": true, "dependencies": { + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/util-utf8": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/protocol-http": { + "version": "5.0.1", "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.936.0.tgz", - "integrity": "sha512-8DVrdRqPyUU66gfV7VZNToh56ZuO5D6agWrkLQE/xbLJOm2RbeRgh6buz7CqV8ipRd6m+zCl9mM4F3osQLZn8Q==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/querystring-builder": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.1.0", + "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/core": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.936.0.tgz", - "integrity": "sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/querystring-parser": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.936.0", - "@aws-sdk/xml-builder": "3.930.0", - "@smithy/core": "^3.18.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", - "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/middleware-logger": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", - "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/signature-v4": { + "version": "5.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.936.0.tgz", - "integrity": "sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/smithy-client": { + "version": "4.1.6", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.936.0", - "@aws/lambda-invoke-store": "^0.2.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/core": "^3.1.5", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.936.0.tgz", - "integrity": "sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { + "version": "4.1.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@smithy/core": "^3.18.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/nested-clients": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.936.0.tgz", - "integrity": "sha512-eyj2tz1XmDSLSZQ5xnB7cLTVKkSJnYAEoNDSUNhzWPxrBDYeJzIbatecOKceKCU8NBf8gWWZCK/CSY0mDxMO0A==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/url-parser": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@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.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", + "@smithy/querystring-parser": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", - "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-base64": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/types": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", - "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/util-endpoints": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", - "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-endpoints": "^3.2.5", + "@smithy/is-array-buffer": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", - "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", - "bowser": "^2.11.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.936.0.tgz", - "integrity": "sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-middleware": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/xml-builder": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", - "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-stream": { + "version": "4.1.2", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^4.9.0", - "fast-xml-parser": "5.2.5", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/types": "^4.1.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" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws/lambda-invoke-store": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.0.tgz", - "integrity": "sha512-D1jAmAZQYMoPiacfgNf7AWhg3DFN3Wq/vQv3WINt9znwjzHp2x+WzdJFxxj7xZL7V1U79As6G8f7PorMYWBKsQ==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/abort-controller": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", - "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-utf8": { + "version": "4.0.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/config-resolver": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", - "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", + "node_modules/@aws-sdk/credential-providers": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.936.0.tgz", + "integrity": "sha512-RWiX6wuReeEU7/P7apGwWMNO7nrai/CXmMMaho3+pJW7i6ImosgsjSe5tetdv1r4djOtM1b4J4WAbHPKJUahUg==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/client-cognito-identity": "3.936.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/credential-provider-cognito-identity": "3.936.0", + "@aws-sdk/credential-provider-env": "3.936.0", + "@aws-sdk/credential-provider-http": "3.936.0", + "@aws-sdk/credential-provider-ini": "3.936.0", + "@aws-sdk/credential-provider-login": "3.936.0", + "@aws-sdk/credential-provider-node": "3.936.0", + "@aws-sdk/credential-provider-process": "3.936.0", + "@aws-sdk/credential-provider-sso": "3.936.0", + "@aws-sdk/credential-provider-web-identity": "3.936.0", + "@aws-sdk/nested-clients": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.5", + "@smithy/credential-provider-imds": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/core": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.5.tgz", - "integrity": "sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.936.0.tgz", + "integrity": "sha512-AkJZ426y0G8Lsyi9p7mWudacMKeo8XLZOfxUmeThMkDa3GxGQ1y6BTrOj6ZcvqQ1Hz7Abb3QWPC+EMqhu1Lncw==", "license": "Apache-2.0", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/credential-provider-node": "3.936.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/middleware-retry": "^4.4.12", "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@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.11", + "@smithy/util-defaults-mode-node": "^4.2.14", + "@smithy/util-endpoints": "^3.2.5", "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", + "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/credential-provider-imds": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", - "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.936.0.tgz", + "integrity": "sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==", "license": "Apache-2.0", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/middleware-retry": "^4.4.12", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", "@smithy/url-parser": "^4.2.5", + "@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.11", + "@smithy/util-defaults-mode-node": "^4.2.14", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/fetch-http-handler": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", - "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/core": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.936.0.tgz", + "integrity": "sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.936.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/hash-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", - "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.936.0.tgz", + "integrity": "sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/invalid-dependency": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", - "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.936.0.tgz", + "integrity": "sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/is-array-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", - "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.936.0.tgz", + "integrity": "sha512-TbUv56ERQQujoHcLMcfL0Q6bVZfYF83gu/TjHkVkdSlHPOIKaG/mhE2XZSQzXv1cud6LlgeBbfzVAxJ+HPpffg==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/credential-provider-env": "3.936.0", + "@aws-sdk/credential-provider-http": "3.936.0", + "@aws-sdk/credential-provider-login": "3.936.0", + "@aws-sdk/credential-provider-process": "3.936.0", + "@aws-sdk/credential-provider-sso": "3.936.0", + "@aws-sdk/credential-provider-web-identity": "3.936.0", + "@aws-sdk/nested-clients": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-content-length": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", - "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.936.0.tgz", + "integrity": "sha512-rk/2PCtxX9xDsQW8p5Yjoca3StqmQcSfkmD7nQ61AqAHL1YgpSQWqHE+HjfGGiHDYKG7PvE33Ku2GyA7lEIJAw==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.5", + "@aws-sdk/credential-provider-env": "3.936.0", + "@aws-sdk/credential-provider-http": "3.936.0", + "@aws-sdk/credential-provider-ini": "3.936.0", + "@aws-sdk/credential-provider-process": "3.936.0", + "@aws-sdk/credential-provider-sso": "3.936.0", + "@aws-sdk/credential-provider-web-identity": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -25081,52 +28694,53 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-endpoint": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz", - "integrity": "sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.18.5", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/node-config-provider": "^4.3.5", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.936.0.tgz", + "integrity": "sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-retry": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.12.tgz", - "integrity": "sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.936.0.tgz", + "integrity": "sha512-wHlEAJJvtnSyxTfNhN98JcU4taA1ED2JvuI2eePgawqBwS/Tzi0mhED1lvNIaWOkjfLd+nHALwszGrtJwEq4yQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/service-error-classification": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", + "@aws-sdk/client-sso": "3.936.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/token-providers": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-serde": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", - "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.936.0.tgz", + "integrity": "sha512-v3qHAuoODkoRXsAF4RG+ZVO6q2P9yYBT4GMpMEfU9wXVNn7AIfwZgTwzSUfnjNiGva5BKleWVpRpJ9DeuLFbUg==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.5", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/nested-clients": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -25134,12 +28748,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/middleware-stack": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", - "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", + "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -25147,14 +28763,13 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/node-config-provider": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", - "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-logger": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", + "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", + "@aws-sdk/types": "3.936.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -25162,15 +28777,15 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/node-http-handler": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", - "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.936.0.tgz", + "integrity": "sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.5", + "@aws-sdk/types": "3.936.0", + "@aws/lambda-invoke-store": "^0.2.0", "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -25178,12 +28793,17 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/property-provider": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", - "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.936.0.tgz", + "integrity": "sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@smithy/core": "^3.18.5", + "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -25191,39 +28811,82 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/protocol-http": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", - "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/nested-clients": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.936.0.tgz", + "integrity": "sha512-eyj2tz1XmDSLSZQ5xnB7cLTVKkSJnYAEoNDSUNhzWPxrBDYeJzIbatecOKceKCU8NBf8gWWZCK/CSY0mDxMO0A==", "license": "Apache-2.0", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.936.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/middleware-retry": "^4.4.12", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@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.11", + "@smithy/util-defaults-mode-node": "^4.2.14", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/querystring-builder": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", - "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", + "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", - "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/querystring-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", - "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/token-providers": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.936.0.tgz", + "integrity": "sha512-vvw8+VXk0I+IsoxZw0mX9TMJawUJvEsg3EF7zcCSetwhNPAU8Xmlhv7E/sN/FgSmm7b7DsqKoW6rVtQiCs1PWQ==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.936.0", + "@aws-sdk/nested-clients": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -25231,183 +28894,198 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/service-error-classification": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", - "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", + "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0" + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", - "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-endpoints": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", + "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.936.0", "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-endpoints": "^3.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/signature-v4": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", - "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", + "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.5", + "@aws-sdk/types": "3.936.0", "@smithy/types": "^4.9.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/smithy-client": { - "version": "4.9.8", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.8.tgz", - "integrity": "sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.936.0.tgz", + "integrity": "sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", + "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/types": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", - "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/xml-builder": { + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", + "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^4.9.0", + "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/url-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", - "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws/lambda-invoke-store": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.1.tgz", + "integrity": "sha512-sIyFcoPZkTtNu9xFeEoynMef3bPJIAbOfUh+ueYcfhVl6xm2VRtMcMclSxmZCMnHHd4hlYKJeq/aggmBEWynww==", "license": "Apache-2.0", - "dependencies": { - "@smithy/querystring-parser": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-base64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", - "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", + "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "dependencies": { + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-body-length-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", - "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/config-resolver": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", + "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", "license": "Apache-2.0", "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-body-length-node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", - "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/core": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.5.tgz", + "integrity": "sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==", "license": "Apache-2.0", "dependencies": { + "@smithy/middleware-serde": "^4.2.6", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-buffer-from": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", - "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", + "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-config-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", - "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", + "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", "license": "Apache-2.0", "dependencies": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.11.tgz", - "integrity": "sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/hash-node": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", + "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.14.tgz", - "integrity": "sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/invalid-dependency": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", + "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.3", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -25415,670 +29093,676 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-endpoints": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", - "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-hex-encoding": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", - "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", + "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", "license": "Apache-2.0", "dependencies": { + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-middleware": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", - "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-endpoint": { + "version": "4.3.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz", + "integrity": "sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==", "license": "Apache-2.0", "dependencies": { + "@smithy/core": "^3.18.5", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-retry": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", - "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.12.tgz", + "integrity": "sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==", "license": "Apache-2.0", "dependencies": { + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", "@smithy/service-error-classification": "^4.2.5", + "@smithy/smithy-client": "^4.9.8", "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-stream": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", - "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-serde": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", + "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-uri-escape": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", - "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-stack": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", + "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/util-utf8": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", - "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", + "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", + "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", + "license": "Apache-2.0", "dependencies": { - "strnum": "^2.1.0" + "@smithy/abort-controller": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" }, - "bin": { - "fxparser": "src/cli/cli.js" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.637.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", + "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-ini": "3.637.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.637.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.620.1", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/protocol-http": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", + "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.637.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-builder": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", + "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.637.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.9.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.637.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.620.1", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", + "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.621.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/service-error-classification": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", + "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@smithy/types": "^4.9.0" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", + "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/signature-v4": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", + "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/property-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.10", - "@smithy/types": "^3.7.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/core": { - "version": "3.693.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/smithy-client": { + "version": "4.9.8", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.8.tgz", + "integrity": "sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@smithy/core": "^3.18.5", + "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.637.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", + "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.637.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", + "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/querystring-parser": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/nested-clients": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/property-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/core": { - "version": "3.758.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/core": "^3.1.5", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/signature-v4": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-middleware": "^4.0.1", - "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { - "version": "3.734.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/abort-controller": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/core": { - "version": "3.1.5", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/middleware-serde": "^4.0.2", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-stream": "^4.1.2", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/fetch-http-handler": { - "version": "5.0.1", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.11.tgz", + "integrity": "sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/protocol-http": "^5.0.1", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-base64": "^4.0.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/is-array-buffer": { - "version": "4.0.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.14.tgz", + "integrity": "sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/config-resolver": "^4.4.3", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.8", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/middleware-endpoint": { - "version": "4.0.6", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-endpoints": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", + "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/core": "^3.1.5", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", - "@smithy/util-middleware": "^4.0.1", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/middleware-serde": { - "version": "4.0.2", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/middleware-stack": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-middleware": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", + "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/node-config-provider": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-retry": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", + "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/node-http-handler": { - "version": "4.0.3", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-stream": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", + "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/abort-controller": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/property-provider": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/protocol-http": { - "version": "5.0.1", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/querystring-builder": { - "version": "4.0.1", + "node_modules/@aws-sdk/credential-providers/node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", - "@smithy/util-uri-escape": "^4.0.0", + "@smithy/abort-controller": "^3.1.7", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/smithy-client": "^3.4.3", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.693.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/querystring-parser": { - "version": "4.0.1", - "license": "Apache-2.0", - "peer": true, + "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { + "version": "5.6.0", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.1", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@smithy/types": "^4.1.0", - "tslib": "^2.6.2" - }, + "node_modules/@aws-sdk/lib-storage/node_modules/events": { + "version": "3.3.0", + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=0.8.x" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/signature-v4": { - "version": "5.0.1", + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-uri-escape": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-arn-parser": "3.693.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/smithy-client": { - "version": "4.1.6", + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/core": "^3.1.5", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.1.2", + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { - "version": "4.1.0", + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-stream": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/url-parser": { - "version": "4.0.1", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/core": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/querystring-parser": "^4.0.1", - "@smithy/types": "^4.1.0", + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-base64": { - "version": "4.0.0", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-body-length-browser": { - "version": "4.0.0", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-buffer-from": { - "version": "4.0.0", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { + "version": "3.0.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-hex-encoding": { - "version": "4.0.0", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.2.tgz", + "integrity": "sha512-42hZ8jEXT2uR6YybCzNq9OomqHPw43YIfRfz17biZjMQA4jKSQUaHIl6VvqO2Ddl5904pXg2Yd/ku78S0Ikgog==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-middleware": { - "version": "4.0.1", + "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-stream": { - "version": "4.1.2", + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/types": "^4.1.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", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-uri-escape": { - "version": "4.0.0", + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -26086,1078 +29770,891 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/util-utf8": { - "version": "4.0.0", + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.936.0.tgz", - "integrity": "sha512-RWiX6wuReeEU7/P7apGwWMNO7nrai/CXmMMaho3+pJW7i6ImosgsjSe5tetdv1r4djOtM1b4J4WAbHPKJUahUg==", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.2.tgz", + "integrity": "sha512-iUzdXKOgi4JVDDEG/VvoNw50FryRCEm0qAudw12DcZoiNJWl0rN6SYVLcL1xwugMfQncCXieK5UBlG6mhH7iYA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.936.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-cognito-identity": "3.936.0", - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-ini": "3.936.0", - "@aws-sdk/credential-provider-login": "3.936.0", - "@aws-sdk/credential-provider-node": "3.936.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.936.0", - "@aws-sdk/credential-provider-web-identity": "3.936.0", - "@aws-sdk/nested-clients": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.936.0.tgz", - "integrity": "sha512-AkJZ426y0G8Lsyi9p7mWudacMKeo8XLZOfxUmeThMkDa3GxGQ1y6BTrOj6ZcvqQ1Hz7Abb3QWPC+EMqhu1Lncw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-node": "3.936.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@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.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.936.0.tgz", - "integrity": "sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==", + "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@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.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/core": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.936.0.tgz", - "integrity": "sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.2.tgz", + "integrity": "sha512-/mzlyzJDtngNFd/rAYvqx29a2d0VuiYKN84Y/Mu9mGw7cfMOCyRK+896tb9wV6MoPRHUX7IXuKCIL8nzz2Pz5A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.936.0", - "@aws-sdk/xml-builder": "3.930.0", - "@smithy/core": "^3.18.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", + "@aws-sdk/types": "^3.973.1", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.936.0.tgz", - "integrity": "sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws/lambda-invoke-store": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.3.tgz", + "integrity": "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==", + "license": "Apache-2.0", "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.936.0.tgz", - "integrity": "sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.936.0.tgz", - "integrity": "sha512-TbUv56ERQQujoHcLMcfL0Q6bVZfYF83gu/TjHkVkdSlHPOIKaG/mhE2XZSQzXv1cud6LlgeBbfzVAxJ+HPpffg==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-login": "3.936.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.936.0", - "@aws-sdk/credential-provider-web-identity": "3.936.0", - "@aws-sdk/nested-clients": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.936.0.tgz", - "integrity": "sha512-rk/2PCtxX9xDsQW8p5Yjoca3StqmQcSfkmD7nQ61AqAHL1YgpSQWqHE+HjfGGiHDYKG7PvE33Ku2GyA7lEIJAw==", + "node_modules/@aws-sdk/middleware-sdk-api-gateway": { + "version": "3.693.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-ini": "3.936.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.936.0", - "@aws-sdk/credential-provider-web-identity": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.936.0.tgz", - "integrity": "sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==", + "node_modules/@aws-sdk/middleware-sdk-ec2": { + "version": "3.693.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-format-url": "3.693.0", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.936.0.tgz", - "integrity": "sha512-wHlEAJJvtnSyxTfNhN98JcU4taA1ED2JvuI2eePgawqBwS/Tzi0mhED1lvNIaWOkjfLd+nHALwszGrtJwEq4yQ==", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.693.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.936.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/token-providers": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-arn-parser": "3.693.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.9", + "@smithy/util-stream": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3-control": { + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3-control/-/middleware-sdk-s3-control-3.848.0.tgz", + "integrity": "sha512-1zozD+IKFzFE9RLOCBOGPjhi+jUj0bLxf0ntqBMBJKX9Cf5zqvVuck7mCY19+m0/B+GuSAoiQm2yPV6dcgN17g==", + "dependencies": { + "@aws-sdk/middleware-bucket-endpoint": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@aws-sdk/util-endpoints": "3.848.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.936.0.tgz", - "integrity": "sha512-v3qHAuoODkoRXsAF4RG+ZVO6q2P9yYBT4GMpMEfU9wXVNn7AIfwZgTwzSUfnjNiGva5BKleWVpRpJ9DeuLFbUg==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz", + "integrity": "sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.840.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" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", - "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@aws-sdk/types": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", + "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@aws-sdk/util-arn-parser": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@aws-sdk/util-endpoints": { + "version": "3.848.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.848.0.tgz", + "integrity": "sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-logger": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", - "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/node-config-provider": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", + "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.936.0.tgz", - "integrity": "sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/property-provider": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", + "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", "dependencies": { - "@aws-sdk/types": "3.936.0", - "@aws/lambda-invoke-store": "^0.2.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.936.0.tgz", - "integrity": "sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/protocol-http": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", + "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@smithy/core": "^3.18.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/nested-clients": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.936.0.tgz", - "integrity": "sha512-eyj2tz1XmDSLSZQ5xnB7cLTVKkSJnYAEoNDSUNhzWPxrBDYeJzIbatecOKceKCU8NBf8gWWZCK/CSY0mDxMO0A==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/querystring-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", + "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/middleware-host-header": "3.936.0", - "@aws-sdk/middleware-logger": "3.936.0", - "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", - "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@aws-sdk/util-endpoints": "3.936.0", - "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-retry": "^4.4.12", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@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.11", - "@smithy/util-defaults-mode-node": "^4.2.14", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-utf8": "^4.2.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", - "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", + "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/token-providers": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.936.0.tgz", - "integrity": "sha512-vvw8+VXk0I+IsoxZw0mX9TMJawUJvEsg3EF7zcCSetwhNPAU8Xmlhv7E/sN/FgSmm7b7DsqKoW6rVtQiCs1PWQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", - "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/url-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", + "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/querystring-parser": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-endpoints": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", - "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/util-config-provider": { + "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": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-endpoints": "^3.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", - "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.936.0", - "@smithy/types": "^4.9.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.936.0.tgz", - "integrity": "sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/util-endpoints": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", + "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.936.0", - "@aws-sdk/types": "3.936.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/xml-builder": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", - "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/core": { + "version": "3.693.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", - "fast-xml-parser": "5.2.5", + "@aws-sdk/types": "3.692.0", + "@smithy/core": "^2.5.2", + "@smithy/node-config-provider": "^3.1.10", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", + "@smithy/util-middleware": "^3.0.9", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws/lambda-invoke-store": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.1.tgz", - "integrity": "sha512-sIyFcoPZkTtNu9xFeEoynMef3bPJIAbOfUh+ueYcfhVl6xm2VRtMcMclSxmZCMnHHd4hlYKJeq/aggmBEWynww==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", - "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/config-resolver": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", - "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/core": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.5.tgz", - "integrity": "sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.363.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.363.0.tgz", + "integrity": "sha512-1yy2Ac50FO8BrODaw5bPWvVrRhaVLqXTFH6iHB+dJLPUkwtY5zLM3Mp+9Ilm7kME+r7oIB1wuO6ZB1Lf4ZszIw==", "dependencies": { - "@smithy/middleware-serde": "^4.2.6", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", - "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" + "@aws-sdk/middleware-signing": "3.363.0", + "@aws-sdk/types": "3.357.0", + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", - "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/types": { + "version": "3.357.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", + "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", - "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", - "@smithy/types": "^4.9.0", - "@smithy/util-base64": "^4.3.0", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/hash-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", - "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.363.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.363.0.tgz", + "integrity": "sha512-/7qia715pt9JKYIPDGu22WmdZxD8cfF/5xB+1kmILg7ZtjO0pPuTaCNJ7xiIuFd7Dn7JXp5lop08anX/GOhNRQ==", "dependencies": { - "@smithy/types": "^4.9.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "@aws-sdk/types": "3.357.0", + "@smithy/property-provider": "^1.0.1", + "@smithy/protocol-http": "^1.1.0", + "@smithy/signature-v4": "^1.0.1", + "@smithy/types": "^1.1.0", + "@smithy/util-middleware": "^1.0.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/invalid-dependency": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", - "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/is-array-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", - "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", "dependencies": { - "tslib": "^2.6.2" + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/types": { + "version": "3.357.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", + "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", + "dependencies": { + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", - "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/eventstream-codec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz", + "integrity": "sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw==", "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^1.2.0", + "@smithy/util-hex-encoding": "^1.1.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/is-array-buffer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", + "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", + "dependencies": { + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-endpoint": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz", - "integrity": "sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/property-provider": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.2.0.tgz", + "integrity": "sha512-qlJd9gT751i4T0t/hJAyNGfESfi08Fek8QiLcysoKPgR05qHhG0OYhlaCJHhpXy4ECW0lHyjvFM1smrCLIXVfw==", "dependencies": { - "@smithy/core": "^3.18.5", - "@smithy/middleware-serde": "^4.2.6", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-middleware": "^4.2.5", - "tslib": "^2.6.2" + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.12.tgz", - "integrity": "sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/protocol-http": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", + "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/service-error-classification": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-serde": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", - "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.1.0.tgz", + "integrity": "sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==", "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" + "@smithy/eventstream-codec": "^1.1.0", + "@smithy/is-array-buffer": "^1.1.0", + "@smithy/types": "^1.2.0", + "@smithy/util-hex-encoding": "^1.1.0", + "@smithy/util-middleware": "^1.1.0", + "@smithy/util-uri-escape": "^1.1.0", + "@smithy/util-utf8": "^1.1.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-stack": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", - "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", - "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", + "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" + "@smithy/is-array-buffer": "^1.1.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", - "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-hex-encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", + "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", "dependencies": { - "@smithy/abort-controller": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", - "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-middleware": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", + "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/protocol-http": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", - "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-uri-escape": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", + "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", "dependencies": { - "@smithy/types": "^4.9.0", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-builder": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", - "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", + "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", "dependencies": { - "@smithy/types": "^4.9.0", - "@smithy/util-uri-escape": "^4.2.0", - "tslib": "^2.6.2" + "@smithy/util-buffer-from": "^1.1.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", - "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.693.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.692.0", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/service-error-classification": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", - "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", + "node_modules/@aws-sdk/middleware-stack": { + "version": "3.342.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0" + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", - "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.3.tgz", + "integrity": "sha512-zq6aTiO/BiAIOA8EH8nB+wYvvnZ14Md9Gomm5DDhParshVEVglAyNPO5ADK4ZXFQbftIoO+Vgcvf4gewW/+iYQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.972.0", + "@smithy/core": "^3.21.1", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/signature-v4": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", - "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/smithy-client": { - "version": "4.9.8", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.8.tgz", - "integrity": "sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.5", - "@smithy/middleware-endpoint": "^4.3.12", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", - "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/core": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.21.1.tgz", + "integrity": "sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==", "license": "Apache-2.0", "dependencies": { + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", - "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-base64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", - "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", - "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", "license": "Apache-2.0", "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", - "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/node-http-handler": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", + "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", "license": "Apache-2.0", "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-buffer-from": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", - "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-config-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", - "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.11.tgz", - "integrity": "sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.14.tgz", - "integrity": "sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.3", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", - "@smithy/types": "^4.9.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-endpoints": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", - "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-hex-encoding": { + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-buffer-from": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", - "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "license": "Apache-2.0", "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-middleware": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", - "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-retry": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", - "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-stream": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", - "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-stream": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", + "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/types": "^4.9.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-hex-encoding": "^4.2.0", @@ -27168,7 +30665,7 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-uri-escape": { + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-uri-escape": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", @@ -27180,1430 +30677,1405 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-utf8": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^2.1.0" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/@aws-sdk/lib-storage": { - "version": "3.693.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^3.1.7", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/smithy-client": "^3.4.3", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.693.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { - "version": "5.6.0", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/events": { - "version": "3.3.0", - "license": "MIT", + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=0.8.x" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-arn-parser": "3.693.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", - "@smithy/util-config-provider": "^3.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/middleware-host-header": "3.734.0", + "@aws-sdk/middleware-logger": "3.734.0", + "@aws-sdk/middleware-recursion-detection": "3.734.0", + "@aws-sdk/middleware-user-agent": "3.758.0", + "@aws-sdk/region-config-resolver": "3.734.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.743.0", + "@aws-sdk/util-user-agent-browser": "3.734.0", + "@aws-sdk/util-user-agent-node": "3.758.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/core": "^3.1.5", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/hash-node": "^4.0.1", + "@smithy/invalid-dependency": "^4.0.1", + "@smithy/middleware-content-length": "^4.0.1", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-retry": "^4.0.7", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/protocol-http": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@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.7", + "@smithy/util-defaults-mode-node": "^4.0.7", + "@smithy/util-endpoints": "^3.0.1", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/core": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@aws-sdk/types": "3.734.0", + "@smithy/core": "^3.1.5", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/signature-v4": "^5.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-stream": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/core": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-logger": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.758.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@aws-sdk/core": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@aws-sdk/util-endpoints": "3.743.0", + "@smithy/core": "^3.1.5", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@aws-sdk/types": "3.734.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/types": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": { + "version": "3.743.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "@smithy/util-endpoints": "^3.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.734.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.758.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.758.0", + "@aws-sdk/types": "3.734.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/abort-controller": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/config-resolver": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/core": { + "version": "3.1.5", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.1.2", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-api-gateway": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/types": "^3.7.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-ec2": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/hash-node": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-format-url": "3.693.0", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/invalid-dependency": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/core": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-arn-parser": "3.693.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.9", - "@smithy/util-stream": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control": { - "version": "3.848.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3-control/-/middleware-sdk-s3-control-3.848.0.tgz", - "integrity": "sha512-1zozD+IKFzFE9RLOCBOGPjhi+jUj0bLxf0ntqBMBJKX9Cf5zqvVuck7mCY19+m0/B+GuSAoiQm2yPV6dcgN17g==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/middleware-bucket-endpoint": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-arn-parser": "3.804.0", - "@aws-sdk/util-endpoints": "3.848.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/types": "^4.3.1", - "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz", - "integrity": "sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-content-length": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.840.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", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@aws-sdk/types": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", - "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-endpoint": { + "version": "4.0.6", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^4.3.1", + "@smithy/core": "^3.1.5", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@aws-sdk/util-arn-parser": { - "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==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-retry": { + "version": "4.0.7", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.6.2" + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@aws-sdk/util-endpoints": { - "version": "3.848.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.848.0.tgz", - "integrity": "sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-serde": { + "version": "4.0.2", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.840.0", - "@smithy/types": "^4.3.1", - "@smithy/url-parser": "^4.0.4", - "@smithy/util-endpoints": "^3.0.6", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/node-config-provider": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", - "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-stack": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", - "@smithy/types": "^4.3.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/property-provider": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", - "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-config-provider": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^4.3.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/protocol-http": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", - "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler": { + "version": "4.0.3", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^4.3.1", + "@smithy/abort-controller": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/querystring-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", - "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/property-provider": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^4.3.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", - "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/protocol-http": { + "version": "5.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^4.3.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/types": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", - "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/querystring-builder": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { + "@smithy/types": "^4.1.0", + "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/url-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", - "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/querystring-parser": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/querystring-parser": "^4.0.4", - "@smithy/types": "^4.3.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/util-config-provider": { - "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==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/service-error-classification": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.6.2" + "@smithy/types": "^4.1.0" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3-control/node_modules/@smithy/util-endpoints": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", - "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.1.3", - "@smithy/types": "^4.3.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/core": { - "version": "3.693.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/signature-v4": { + "version": "5.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/core": "^2.5.2", - "@smithy/node-config-provider": "^3.1.10", - "@smithy/property-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", - "@smithy/util-middleware": "^3.0.9", - "fast-xml-parser": "4.4.1", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/smithy-client": { + "version": "4.1.6", "license": "Apache-2.0", + "peer": true, "dependencies": { + "@smithy/core": "^3.1.5", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { + "version": "4.1.0", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/url-parser": { + "version": "4.0.1", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/querystring-parser": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.363.0.tgz", - "integrity": "sha512-1yy2Ac50FO8BrODaw5bPWvVrRhaVLqXTFH6iHB+dJLPUkwtY5zLM3Mp+9Ilm7kME+r7oIB1wuO6ZB1Lf4ZszIw==", - "dependencies": { - "@aws-sdk/middleware-signing": "3.363.0", - "@aws-sdk/types": "3.357.0", - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-base64": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.363.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.363.0.tgz", - "integrity": "sha512-/7qia715pt9JKYIPDGu22WmdZxD8cfF/5xB+1kmILg7ZtjO0pPuTaCNJ7xiIuFd7Dn7JXp5lop08anX/GOhNRQ==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.357.0", - "@smithy/property-provider": "^1.0.1", - "@smithy/protocol-http": "^1.1.0", - "@smithy/signature-v4": "^1.0.1", - "@smithy/types": "^1.1.0", - "@smithy/util-middleware": "^1.0.1", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/types": { - "version": "3.357.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz", - "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/eventstream-codec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz", - "integrity": "sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^1.2.0", - "@smithy/util-hex-encoding": "^1.1.0", - "tslib": "^2.5.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/is-array-buffer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", - "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/property-provider": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.2.0.tgz", - "integrity": "sha512-qlJd9gT751i4T0t/hJAyNGfESfi08Fek8QiLcysoKPgR05qHhG0OYhlaCJHhpXy4ECW0lHyjvFM1smrCLIXVfw==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.7", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^1.2.0", - "tslib": "^2.5.0" + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/protocol-http": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", - "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.7", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^1.2.0", - "tslib": "^2.5.0" + "@smithy/config-resolver": "^4.0.1", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.1.0.tgz", - "integrity": "sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-endpoints": { + "version": "3.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/eventstream-codec": "^1.1.0", - "@smithy/is-array-buffer": "^1.1.0", - "@smithy/types": "^1.2.0", - "@smithy/util-hex-encoding": "^1.1.0", - "@smithy/util-middleware": "^1.1.0", - "@smithy/util-uri-escape": "^1.1.0", - "@smithy/util-utf8": "^1.1.0", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", - "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-middleware": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^1.1.0", - "tslib": "^2.5.0" + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-hex-encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", - "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-retry": { + "version": "4.0.1", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-middleware": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", - "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-stream": { + "version": "4.1.2", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/types": "^4.1.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" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-uri-escape": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", - "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", - "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^1.1.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.693.0", + "node_modules/@aws-sdk/property-provider": { + "version": "3.46.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.692.0", - "@smithy/types": "^3.7.0", - "tslib": "^2.6.2" + "@aws-sdk/types": "3.46.0", + "tslib": "^2.3.0" }, "engines": { - "node": ">=16.0.0" + "node": ">= 12.0.0" } }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.342.0", + "node_modules/@aws-sdk/property-provider/node_modules/@aws-sdk/types": { + "version": "3.46.0", + "license": "Apache-2.0", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http": { + "version": "3.370.0", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.370.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.637.0", + "node_modules/@aws-sdk/protocol-http/node_modules/@aws-sdk/types": { + "version": "3.370.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@smithy/types": "^1.1.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/types": { + "version": "1.2.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/nested-clients": { - "version": "3.758.0", + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.2.tgz", + "integrity": "sha512-/7vRBsfmiOlg2X67EdKrzzQGw5/SbkXb7ALHQmlQLkZh8qNgvS2G2dDC6NtF3hzFlpP3j2k+KIEtql/6VrI6JA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.758.0", - "@aws-sdk/middleware-host-header": "3.734.0", - "@aws-sdk/middleware-logger": "3.734.0", - "@aws-sdk/middleware-recursion-detection": "3.734.0", - "@aws-sdk/middleware-user-agent": "3.758.0", - "@aws-sdk/region-config-resolver": "3.734.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-endpoints": "3.743.0", - "@aws-sdk/util-user-agent-browser": "3.734.0", - "@aws-sdk/util-user-agent-node": "3.758.0", - "@smithy/config-resolver": "^4.0.1", - "@smithy/core": "^3.1.5", - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/hash-node": "^4.0.1", - "@smithy/invalid-dependency": "^4.0.1", - "@smithy/middleware-content-length": "^4.0.1", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-retry": "^4.0.7", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/protocol-http": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", - "@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.7", - "@smithy/util-defaults-mode-node": "^4.0.7", - "@smithy/util-endpoints": "^3.0.1", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-retry": "^4.0.1", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/core": { - "version": "3.758.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/core": "^3.1.5", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/signature-v4": "^5.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-middleware": "^4.0.1", - "fast-xml-parser": "4.4.1", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.734.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/config-resolver": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz", + "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-logger": { - "version": "3.734.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", + "@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": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.734.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.758.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/core": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@aws-sdk/util-endpoints": "3.743.0", - "@smithy/core": "^3.1.5", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.734.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/types": { - "version": "3.734.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": { - "version": "3.743.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", + "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", - "@smithy/util-endpoints": "^3.0.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.734.0", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@aws-sdk/types": "3.734.0", - "@smithy/types": "^4.1.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.758.0", + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.758.0", - "@aws-sdk/types": "3.734.0", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/abort-controller": { - "version": "4.0.1", + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@aws-sdk/signature-v4-multi-region": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@aws-sdk/util-format-url": "3.693.0", + "@smithy/middleware-endpoint": "^3.2.2", + "@smithy/protocol-http": "^4.1.6", + "@smithy/smithy-client": "^3.4.3", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/config-resolver": { - "version": "4.0.1", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.693.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", + "@aws-sdk/middleware-sdk-s3": "3.693.0", + "@aws-sdk/types": "3.692.0", + "@smithy/protocol-http": "^4.1.6", + "@smithy/signature-v4": "^4.2.2", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/core": { - "version": "3.1.5", + "node_modules/@aws-sdk/smithy-client": { + "version": "3.342.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/middleware-serde": "^4.0.2", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-stream": "^4.1.2", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" + "@aws-sdk/middleware-stack": "3.342.0", + "@aws-sdk/types": "3.342.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/credential-provider-imds": { - "version": "4.0.1", + "node_modules/@aws-sdk/smithy-client/node_modules/@aws-sdk/types": { + "version": "3.342.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/fetch-http-handler": { - "version": "5.0.1", + "node_modules/@aws-sdk/token-providers": { + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.975.0.tgz", + "integrity": "sha512-AWQt64hkVbDQ+CmM09wnvSk2mVyH4iRROkmYkr3/lmUtFNbE2L/fnw26sckZnUcFCsHPqbkQrcsZAnTcBLbH4w==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/protocol-http": "^5.0.1", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-base64": "^4.0.0", + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/nested-clients": "3.975.0", + "@aws-sdk/types": "^3.973.0", + "@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": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/hash-node": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients": { + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.975.0.tgz", + "integrity": "sha512-OkeFHPlQj2c/Y5bQGkX14pxhDWUGUFt3LRHhjcDKsSCw6lrxKcxN3WFZN0qbJwKNydP+knL5nxvfgKiCLpTLRA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/middleware-host-header": "^3.972.1", + "@aws-sdk/middleware-logger": "^3.972.1", + "@aws-sdk/middleware-recursion-detection": "^3.972.1", + "@aws-sdk/middleware-user-agent": "^3.972.2", + "@aws-sdk/region-config-resolver": "^3.972.1", + "@aws-sdk/types": "^3.973.0", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.1", + "@aws-sdk/util-user-agent-node": "^3.972.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.21.1", + "@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.11", + "@smithy/middleware-retry": "^4.4.27", + "@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.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.12", + "@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.26", + "@smithy/util-defaults-mode-node": "^4.2.29", + "@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": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/invalid-dependency": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/is-array-buffer": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-content-length": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/config-resolver": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz", + "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-endpoint": { - "version": "4.0.6", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/core": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.21.1.tgz", + "integrity": "sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/core": "^3.1.5", - "@smithy/middleware-serde": "^4.0.2", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", - "@smithy/url-parser": "^4.0.1", - "@smithy/util-middleware": "^4.0.1", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-retry": { - "version": "4.0.7", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/credential-provider-imds": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz", + "integrity": "sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/service-error-classification": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-retry": "^4.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-serde": { - "version": "4.0.2", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-stack": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/hash-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz", + "integrity": "sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-config-provider": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/invalid-dependency": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz", + "integrity": "sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/property-provider": "^4.0.1", - "@smithy/shared-ini-file-loader": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler": { - "version": "4.0.3", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/abort-controller": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/querystring-builder": "^4.0.1", - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/property-provider": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-content-length": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz", + "integrity": "sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/protocol-http": { - "version": "5.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-endpoint": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.11.tgz", + "integrity": "sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/core": "^3.21.1", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/querystring-builder": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-retry": { + "version": "4.4.27", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.27.tgz", + "integrity": "sha512-xFUYCGRVsfgiN5EjsJJSzih9+yjStgMTCLANPlf0LVQkPDYCe0hz97qbdTZosFOiYlGBlHYityGRxrQ/hxhfVQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", - "@smithy/util-uri-escape": "^4.0.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/service-error-classification": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/querystring-parser": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/service-error-classification": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", + "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@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": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/signature-v4": { - "version": "5.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", + "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.1", - "@smithy/util-uri-escape": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/smithy-client": { - "version": "4.1.6", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/core": "^3.1.5", - "@smithy/middleware-endpoint": "^4.0.6", - "@smithy/middleware-stack": "^4.0.1", - "@smithy/protocol-http": "^5.0.1", - "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.1.2", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { - "version": "4.1.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/url-parser": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/querystring-parser": "^4.0.1", - "@smithy/types": "^4.1.0", + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-base64": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-body-length-browser": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/service-error-classification": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz", + "integrity": "sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "tslib": "^2.6.2" + "@smithy/types": "^4.12.0" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-body-length-node": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-buffer-from": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/smithy-client": { + "version": "4.10.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.12.tgz", + "integrity": "sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/is-array-buffer": "^4.0.0", + "@smithy/core": "^3.21.1", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-config-provider": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -28611,55 +32083,51 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.7", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/property-provider": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", - "bowser": "^2.11.0", + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.7", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/config-resolver": "^4.0.1", - "@smithy/credential-provider-imds": "^4.0.1", - "@smithy/node-config-provider": "^4.0.1", - "@smithy/property-provider": "^4.0.1", - "@smithy/smithy-client": "^4.1.6", - "@smithy/types": "^4.1.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-endpoints": { - "version": "3.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.1", - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-hex-encoding": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -28667,273 +32135,303 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-middleware": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/types": "^4.1.0", + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-retry": { - "version": "4.0.1", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/service-error-classification": "^4.0.1", - "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-stream": { - "version": "4.1.2", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.26.tgz", + "integrity": "sha512-vva0dzYUTgn7DdE0uaha10uEdAgmdLnNFowKFjpMm6p2R0XDk5FHPX3CBJLzWQkQXuEprsb0hGz9YwbicNWhjw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/fetch-http-handler": "^5.0.1", - "@smithy/node-http-handler": "^4.0.3", - "@smithy/types": "^4.1.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", + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-uri-escape": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.29", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.29.tgz", + "integrity": "sha512-c6D7IUBsZt/aNnTBHMTf+OVh+h/JcxUUgfTcIJaWRe6zhOum1X+pNKSZtZ+7fbOn5I99XVFtmrnXKv8yHHErTQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { + "@smithy/config-resolver": "^4.4.6", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8": { - "version": "4.0.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", + "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@smithy/util-buffer-from": "^4.0.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.46.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.46.0", - "tslib": "^2.3.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/property-provider/node_modules/@aws-sdk/types": { - "version": "3.46.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 12.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.370.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-retry": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz", + "integrity": "sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.370.0", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/protocol-http/node_modules/@aws-sdk/types": { - "version": "3.370.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-stream": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", + "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^1.1.0", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/types": { - "version": "1.2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/types": { + "version": "3.692.0", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/s3-request-presigner": { + "node_modules/@aws-sdk/util-arn-parser": { "version": "3.693.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/signature-v4-multi-region": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@aws-sdk/util-format-url": "3.693.0", - "@smithy/middleware-endpoint": "^3.2.2", - "@smithy/protocol-http": "^4.1.6", - "@smithy/smithy-client": "^3.4.3", - "@smithy/types": "^3.7.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.693.0", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.972.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.972.0.tgz", + "integrity": "sha512-6JHsl1V/a1ZW8D8AFfd4R52fwZPnZ5H4U6DS8m/bWT8qad72NvbOFAC7U2cDtFs2TShqUO3TEiX/EJibtY3ijg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.693.0", - "@aws-sdk/types": "3.692.0", - "@smithy/protocol-http": "^4.1.6", - "@smithy/signature-v4": "^4.2.2", - "@smithy/types": "^3.7.0", + "@aws-sdk/types": "3.972.0", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.342.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": { + "version": "3.972.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.972.0.tgz", + "integrity": "sha512-U7xBIbLSetONxb2bNzHyDgND3oKGoIfmknrEVnoEU4GUSs+0augUOIn9DIWGUO2ETcRFdsRUnmx9KhPT9Ojbug==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-stack": "3.342.0", - "@aws-sdk/types": "3.342.0", - "tslib": "^2.5.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/smithy-client/node_modules/@aws-sdk/types": { - "version": "3.342.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "@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": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/types": { - "version": "3.692.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.7.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.693.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.637.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", + "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-format-url": { @@ -28960,37 +32458,56 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.2.tgz", + "integrity": "sha512-gz76bUyebPZRxIsBHJUd/v+yiyFzm9adHbr8NykP2nm+z/rFyvQneOHajrUejtmnc5tTBeaDPL4X25TnagRk4A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.614.0", + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.2.tgz", + "integrity": "sha512-vnxOc4C6AR7hVbwyFo1YuH0GB6dgJlWt8nIOOJpnzJAWJPkUMPJ9Zv2lnKsSU7TTZbhP2hEO8OZ4PYH59XFv8Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/middleware-user-agent": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -29002,14 +32519,69 @@ } }, "node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { - "version": "3.609.0", + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", + "license": "Apache-2.0", + "dependencies": { + "@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": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-utf8-browser": { @@ -29585,9 +33157,10 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -29600,11 +33173,13 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -29625,9 +33200,11 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "dev": true, - "license": "BSD-3-Clause" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true }, "node_modules/@iarna/toml": { "version": "2.2.5", @@ -29779,6 +33356,28 @@ "dev": true, "license": "MIT" }, + "node_modules/@jsep-plugin/assignment": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", + "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@jsep-plugin/regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", + "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, "node_modules/@koa/cors": { "version": "5.0.0", "dev": true, @@ -31805,6 +35404,33 @@ "@types/node": "*" } }, + "node_modules/@types/ssh2": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", + "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.18" + } + }, + "node_modules/@types/ssh2/node_modules/@types/node": { + "version": "18.19.129", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.129.tgz", + "integrity": "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/ssh2/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/stream-buffers": { "version": "3.0.7", "dev": true, @@ -32861,10 +36487,6 @@ "ajv": "^6.9.1" } }, - "node_modules/amazon-q-vscode": { - "resolved": "packages/amazonq", - "link": true - }, "node_modules/amazon-states-language-service": { "version": "1.16.1", "license": "MIT", @@ -33806,6 +37428,15 @@ "version": "1.0.3", "license": "MIT" }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/builtin-modules": { "version": "3.3.0", "dev": true, @@ -34618,6 +38249,20 @@ "node": ">=4" } }, + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/create-ecdh": { "version": "4.0.4", "license": "MIT", @@ -35573,15 +39218,17 @@ } }, "node_modules/eslint": { - "version": "8.56.0", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -38203,6 +41850,14 @@ "node": ">= 14" } }, + "node_modules/jsep": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", + "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/jsesc": { "version": "3.0.2", "dev": true, @@ -38381,12 +42036,20 @@ } }, "node_modules/jsonpath-plus": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz", - "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", - "license": "MIT", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.4.0.tgz", + "integrity": "sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==", + "dependencies": { + "@jsep-plugin/assignment": "^1.3.0", + "@jsep-plugin/regex": "^1.0.4", + "jsep": "^1.4.0" + }, + "bin": { + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, "node_modules/jsprim": { @@ -39505,6 +43168,13 @@ "thenify-all": "^1.0.0" } }, + "node_modules/nan": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", + "license": "MIT", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.3", "dev": true, @@ -41597,6 +45267,10 @@ "version": "2.1.2", "license": "MIT" }, + "node_modules/sagemaker-ssh-kiro": { + "resolved": "packages/sagemaker-ssh-kiro", + "link": true + }, "node_modules/sanitize-html": { "version": "2.13.0", "license": "MIT", @@ -42181,6 +45855,23 @@ "version": "1.0.3", "license": "BSD-3-Clause" }, + "node_modules/ssh2": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.17.0.tgz", + "integrity": "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==", + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.10", + "nan": "^2.23.0" + } + }, "node_modules/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -44733,7 +48424,8 @@ }, "packages/amazonq": { "name": "amazon-q-vscode", - "version": "1.108.0-SNAPSHOT", + "version": "1.113.0-SNAPSHOT", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "aws-core-vscode": "file:../core/" @@ -44774,7 +48466,7 @@ "@aws-sdk/client-iam": "<3.731.0", "@aws-sdk/client-iot": "~3.693.0", "@aws-sdk/client-iotsecuretunneling": "~3.693.0", - "@aws-sdk/client-lambda": "<3.731.0", + "@aws-sdk/client-lambda": "^3.953.0", "@aws-sdk/client-redshift": "~3.693.0", "@aws-sdk/client-redshift-data": "~3.693.0", "@aws-sdk/client-redshift-serverless": "~3.693.0", @@ -47027,9 +50719,23 @@ "assert": "^2.1.0" } }, + "packages/sagemaker-ssh-kiro": { + "version": "0.2.0", + "license": "Apache-2.0", + "dependencies": { + "ssh2": "^1.17.0" + }, + "devDependencies": { + "@types/ssh2": "^1.15.0" + }, + "engines": { + "npm": "^10.1.0", + "vscode": "^1.83.0" + } + }, "packages/toolkit": { "name": "aws-toolkit-vscode", - "version": "3.94.0-SNAPSHOT", + "version": "4.11.0-SNAPSHOT", "license": "Apache-2.0", "dependencies": { "aws-core-vscode": "file:../core/" diff --git a/package.json b/package.json index 1c63c1e0dde..655f16f43eb 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "testWeb": "npm run testWeb -w packages/ --if-present", "testE2E": "npm run testE2E -w packages/ --if-present", "testInteg": "npm run testInteg -w packages/ --if-present", - "package": "npm run package -w packages/toolkit -w packages/amazonq", + "package": "npm run package -w packages/sagemaker-ssh-kiro && npm run package -w packages/toolkit -w packages/amazonq && rm -f sagemaker-ssh-kiro-*.vsix", "newChange": "echo 'Must specify subproject/workspace with -w packages/' && false", "createRelease": "echo 'Must specify subproject/workspace with -w packages/' && false", "lint": "npm run lint -w packages/ --if-present", @@ -38,7 +38,6 @@ "reset": "npm run clean && ts-node ./scripts/clean.ts node_modules && npm install", "generateNonCodeFiles": "npm run generateNonCodeFiles -w packages/ --if-present", "mergeReports": "ts-node ./scripts/mergeReports.ts", - "skippedTestReport": "ts-node ./scripts/skippedTestReport.ts ./packages/amazonq/test/e2e/", "scan-licenses": "ts-node ./scripts/scan-licenses.ts" }, "devDependencies": { @@ -80,5 +79,8 @@ "jaro-winkler": "^0.2.8", "vscode-nls": "^5.2.0", "vscode-nls-dev": "^4.0.4" + }, + "overrides": { + "jsonpath-plus": "^10.3.0" } } diff --git a/packages/amazonq/.c8rc.json b/packages/amazonq/.c8rc.json deleted file mode 100644 index 95d5af7c32b..00000000000 --- a/packages/amazonq/.c8rc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "report-dir": "../../coverage/amazonq", - "reporter": ["lcov"], - "all": true, - "exclude": ["**/test*/**", "**/node_modules/**"] -} diff --git a/packages/amazonq/.changes/1.0.0.json b/packages/amazonq/.changes/1.0.0.json deleted file mode 100644 index 9499804cd6d..00000000000 --- a/packages/amazonq/.changes/1.0.0.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "date": "2024-04-29", - "version": "1.0.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Code Transformation: Address various issues in TransformationHub UX." - }, - { - "type": "Bug Fix", - "description": "Code Transformation: Transform may fail if JAVA_HOME has leading or trailing whitespace" - }, - { - "type": "Bug Fix", - "description": "Chat: Q panel doesn't fit to its parent" - }, - { - "type": "Bug Fix", - "description": "Feature Development: update welcome message and menu item description for /dev command" - }, - { - "type": "Bug Fix", - "description": "Code Transformation: show error messages in chat" - }, - { - "type": "Bug Fix", - "description": "Code Transformation: Proposed changes not updated when multiple transformation jobs run in sequence." - }, - { - "type": "Bug Fix", - "description": "Feature Development: Update error message for monthly conversation limit reach" - }, - { - "type": "Bug Fix", - "description": "Code Transformation: Omit Maven metadata files when uploading dependencies to fix certain build failures in backend." - }, - { - "type": "Feature", - "description": "Code Transformation: Refreshed UI during CodeTransformation" - }, - { - "type": "Feature", - "description": "Chat: cmd + i to open chat" - }, - { - "type": "Feature", - "description": "Right Click + no code selected shows Q context menu" - }, - { - "type": "Feature", - "description": "Security Scan: Scans can now run on all files in the project" - }, - { - "type": "Feature", - "description": "Chat: Updates quick action commands style and groupings" - }, - { - "type": "Feature", - "description": "Code Transformation: add details about expected changes in transformation plan" - }, - { - "type": "Feature", - "description": "Enable Amazon Q feature development and Amazon Q transform capabilities (/dev and /transform) for AWS Builder ID users." - }, - { - "type": "Feature", - "description": "Initial release" - }, - { - "type": "Feature", - "description": "Chat: Added metric parameters to recordAddMessage telemetry event." - }, - { - "type": "Feature", - "description": "Security Scan: Scans can now run automatically when file changes are made" - }, - { - "type": "Feature", - "description": "Chat: brief CodeLens to advertise chat" - }, - { - "type": "Feature", - "description": "Security Scan: Send security issue to chat for explanation and fix" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.1.0.json b/packages/amazonq/.changes/1.1.0.json deleted file mode 100644 index 4e3083f31a5..00000000000 --- a/packages/amazonq/.changes/1.1.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2024-04-30", - "version": "1.1.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed markdown is not getting parsed inside list items." - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Copy to clipboard on code blocks doesn't work" - }, - { - "type": "Bug Fix", - "description": "Fixed a crash when trying to use Q /dev on large projects or projects containing files with unsupported encoding." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.10.0.json b/packages/amazonq/.changes/1.10.0.json deleted file mode 100644 index 6d6521e6fa6..00000000000 --- a/packages/amazonq/.changes/1.10.0.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "date": "2024-06-21", - "version": "1.10.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Security Scan: Fixes an issue where project-scans time out for larger projects." - }, - { - "type": "Bug Fix", - "description": "Amazon Q /dev command: Fix file rejections for files outside of src/" - }, - { - "type": "Bug Fix", - "description": "Feature Development: update /dev welcome message" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed broken code blocks with typewriter text in list items." - }, - { - "type": "Feature", - "description": "UX: New style for the login window" - }, - { - "type": "Removal", - "description": "Auth: No longer share SSO sessions with AWS Toolkit." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.100.0.json b/packages/amazonq/.changes/1.100.0.json deleted file mode 100644 index e1deb61908b..00000000000 --- a/packages/amazonq/.changes/1.100.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-10-16", - "version": "1.100.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.101.0.json b/packages/amazonq/.changes/1.101.0.json deleted file mode 100644 index 7a72dabfc9e..00000000000 --- a/packages/amazonq/.changes/1.101.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-10-22", - "version": "1.101.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.102.0.json b/packages/amazonq/.changes/1.102.0.json deleted file mode 100644 index df8ee166397..00000000000 --- a/packages/amazonq/.changes/1.102.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-10-30", - "version": "1.102.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.103.0.json b/packages/amazonq/.changes/1.103.0.json deleted file mode 100644 index b7ba187c759..00000000000 --- a/packages/amazonq/.changes/1.103.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-11-06", - "version": "1.103.0", - "entries": [ - { - "type": "Feature", - "description": "Q CodeTransformation: add more job metadata to history table" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.104.0.json b/packages/amazonq/.changes/1.104.0.json deleted file mode 100644 index d6346984469..00000000000 --- a/packages/amazonq/.changes/1.104.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-11-15", - "version": "1.104.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.105.0.json b/packages/amazonq/.changes/1.105.0.json deleted file mode 100644 index 1a435ce46b9..00000000000 --- a/packages/amazonq/.changes/1.105.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-11-19", - "version": "1.105.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Remove show logs menu item for non Q views" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.106.0.json b/packages/amazonq/.changes/1.106.0.json deleted file mode 100644 index 23dffe4c5e6..00000000000 --- a/packages/amazonq/.changes/1.106.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-11-21", - "version": "1.106.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.107.0.json b/packages/amazonq/.changes/1.107.0.json deleted file mode 100644 index 2baf3e97c81..00000000000 --- a/packages/amazonq/.changes/1.107.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2026-01-08", - "version": "1.107.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.11.0.json b/packages/amazonq/.changes/1.11.0.json deleted file mode 100644 index 202625b2560..00000000000 --- a/packages/amazonq/.changes/1.11.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2024-06-27", - "version": "1.11.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fix for inline buttons don't have borders" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fix for some edge cases when followups appear on top without styles" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fix for prompt input removes whole word if it starts with @ character but there is no context selected" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fix for prompt input doesn't show multi line content properly after it reaches 10-15 lines" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /dev command: Fix in progress experience for ongoing backend calls" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.12.0.json b/packages/amazonq/.changes/1.12.0.json deleted file mode 100644 index a2cf430a220..00000000000 --- a/packages/amazonq/.changes/1.12.0.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "date": "2024-07-08", - "version": "1.12.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Security Scans: Fixed unnecessary yellow lines appearing in both auto scans and project scans." - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed prompt input becomes invisible if an html special character is inserted" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed button font sizes are too big" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed buttons don't show borders inside a message" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transform: Link UI messages to troubleshooting docs" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /dev command: improve user error messages" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed button texts are cropped too short" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed prompt input and selected command horizontal alignment" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed prompt input becomes invisible when multine text inserted with paste" - }, - { - "type": "Feature", - "description": "Q feature dev: Only use relevant code and related files" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.13.0.json b/packages/amazonq/.changes/1.13.0.json deleted file mode 100644 index 7bf940dd04a..00000000000 --- a/packages/amazonq/.changes/1.13.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2024-07-11", - "version": "1.13.0", - "entries": [ - { - "type": "Bug Fix", - "description": "AD/LDAP users may see \"uv_os_get_passwd ENOENT\" error on startup #5277" - }, - { - "type": "Feature", - "description": "Add support for [Amazon Q Chat Workspace Context](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/workspace-context.html). Customers can use `@workspace` to ask questions regarding local workspace." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.14.0.json b/packages/amazonq/.changes/1.14.0.json deleted file mode 100644 index 95f9248b933..00000000000 --- a/packages/amazonq/.changes/1.14.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2024-07-11", - "version": "1.14.0", - "entries": [ - { - "type": "Feature", - "description": "Amazon Q/dev proactively show code generation iterations" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.15.0.json b/packages/amazonq/.changes/1.15.0.json deleted file mode 100644 index cda200cb196..00000000000 --- a/packages/amazonq/.changes/1.15.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2024-07-15", - "version": "1.15.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixes a bug when the prompt input exceeds the width of the chat box it's not always wrapped correctly." - }, - { - "type": "Bug Fix", - "description": "Amazon Q: Corrected a miswording in the Amazon Q: Share Content With AWS setting." - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixes a bug when user input contains 4 or more spaces at the beginning of the line for multiline inputs, that line appears like a code block instead of a paragraph" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.16.0.json b/packages/amazonq/.changes/1.16.0.json deleted file mode 100644 index 1d24082abd6..00000000000 --- a/packages/amazonq/.changes/1.16.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2024-07-18", - "version": "1.16.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon q /dev: include granular error handling for code generation failed state" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transformation: always show build logs from last job run" - }, - { - "type": "Bug Fix", - "description": "Unexpected SSO expiration on Windows due to EPERM" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.17.0.json b/packages/amazonq/.changes/1.17.0.json deleted file mode 100644 index d65bee6fdcc..00000000000 --- a/packages/amazonq/.changes/1.17.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2024-07-25", - "version": "1.17.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Dev and Transform introduction text formatted incorrectly" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /dev: update error message for code gen timeout and include backfill for error name" - }, - { - "type": "Bug Fix", - "description": "Sign-in page may fail to render in rare circumstances." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.18.0.json b/packages/amazonq/.changes/1.18.0.json deleted file mode 100644 index 8ca73a4cc3f..00000000000 --- a/packages/amazonq/.changes/1.18.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2024-07-29", - "version": "1.18.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Security Scan: Fixed an issue scans were not able to succeed on Java projects with .class files" - }, - { - "type": "Bug Fix", - "description": "FileNotFound error causing early SSO expiration" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.19.0.json b/packages/amazonq/.changes/1.19.0.json deleted file mode 100644 index 90fe678b7fd..00000000000 --- a/packages/amazonq/.changes/1.19.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2024-08-01", - "version": "1.19.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixing issue with an incorrect input cursor position in the prompt text box" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixing issue with the max tabs notification not being dismissible." - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Showing/hiding the scrollbars is now controlled by the OS settings" - }, - { - "type": "Bug Fix", - "description": "Q chat may stop responding after processing Python/Java code" - }, - { - "type": "Feature", - "description": "Amazon q /dev: i18n support for messaging" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.2.0.json b/packages/amazonq/.changes/1.2.0.json deleted file mode 100644 index df142bc0933..00000000000 --- a/packages/amazonq/.changes/1.2.0.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "date": "2024-05-07", - "version": "1.2.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Fix bug when Amazon Q chat sends code selection while user has no selection" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transformation: make jobId visible in job history tab at start of job and allow summary.md + icons to be saved when accepting changes" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Typewriter animator parts showing up in code fields inside listitems" - }, - { - "type": "Bug Fix", - "description": "Security Scan: Addresses a bug where security issues sometimes appear multiple times" - }, - { - "type": "Feature", - "description": "Update cross file context config for Q inline suggestion" - }, - { - "type": "Feature", - "description": "Amazon Q: Security scans now support C, C++, and PHP files" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.20.0.json b/packages/amazonq/.changes/1.20.0.json deleted file mode 100644 index fbaee8ce3f8..00000000000 --- a/packages/amazonq/.changes/1.20.0.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "date": "2024-08-08", - "version": "1.20.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q /dev: include a retry option for the same prompt after folder reselection" - }, - { - "type": "Bug Fix", - "description": "Ignore virtual environment when indexing workspace" - }, - { - "type": "Feature", - "description": "Amazon Q Code Transformation: show pro tier users estimated cost of /transform on projects over 100K lines" - }, - { - "type": "Feature", - "description": "Amazon Q Code Transformation: warn user if absolute file paths are found in the pom.xml" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.21.0.json b/packages/amazonq/.changes/1.21.0.json deleted file mode 100644 index d6c630a689e..00000000000 --- a/packages/amazonq/.changes/1.21.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2024-08-15", - "version": "1.21.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Q feature dev: update file extension list and minor UI fixes" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.22.0.json b/packages/amazonq/.changes/1.22.0.json deleted file mode 100644 index 2053fb1f123..00000000000 --- a/packages/amazonq/.changes/1.22.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2024-08-22", - "version": "1.22.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Avoid refreshing code suggestion for paginated response" - }, - { - "type": "Bug Fix", - "description": "Update login logo styling" - }, - { - "type": "Bug Fix", - "description": "Correct indentation when insert Q chat code at cursor position" - }, - { - "type": "Feature", - "description": "Add notification for extended session to IdC users" - }, - { - "type": "Feature", - "description": "Support more programming languages for workspace index" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.23.0.json b/packages/amazonq/.changes/1.23.0.json deleted file mode 100644 index 1aff236995a..00000000000 --- a/packages/amazonq/.changes/1.23.0.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "date": "2024-08-29", - "version": "1.23.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Fix bug when undo inline suggestion causes command not found" - }, - { - "type": "Bug Fix", - "description": "Auth: `SyntaxError` causing unexpected SSO logout" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transformation: allow symlinks for JDK path" - }, - { - "type": "Bug Fix", - "description": "Fix bug where text with inline code copied from Amazon Q Chat had new line breaks around the inline code text" - }, - { - "type": "Bug Fix", - "description": "Fix bug with code indentation and nested list formatting in chat response prompt" - }, - { - "type": "Bug Fix", - "description": "Fix bug when disabled commands does not get filtered in quick actions" - }, - { - "type": "Bug Fix", - "description": "Auth: Users may be silently logged out due to network issues when starting the extension." - }, - { - "type": "Feature", - "description": "Support AB testing" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.24.0.json b/packages/amazonq/.changes/1.24.0.json deleted file mode 100644 index a5a87d9b747..00000000000 --- a/packages/amazonq/.changes/1.24.0.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "date": "2024-09-05", - "version": "1.24.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Network errors causing premature SSO logout" - }, - { - "type": "Bug Fix", - "description": "Fix SyntaxError causing premature expiration (edge case)" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transformation: show instructions for finding JDK path on Linux" - }, - { - "type": "Bug Fix", - "description": "UI: 'Start using Amazon Q' may display even if the user is signed in." - }, - { - "type": "Bug Fix", - "description": "Add getFeature and isEnabled utility methods to FeatureConfigProvider" - }, - { - "type": "Feature", - "description": "Amazon Q /dev: include in progress state agent in code generation" - }, - { - "type": "Feature", - "description": "Reduce workspace CPU indexing time by 50%" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.25.0.json b/packages/amazonq/.changes/1.25.0.json deleted file mode 100644 index b3cdaff40c1..00000000000 --- a/packages/amazonq/.changes/1.25.0.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "date": "2024-09-12", - "version": "1.25.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fixed inline code blocks are not vertically aligned with texts" - }, - { - "type": "Feature", - "description": "Record telemetry event when AWS Toolkits extension is uninstalled." - }, - { - "type": "Feature", - "description": "Improve workspace indexing by only index files that are changed since last indexing" - }, - { - "type": "Removal", - "description": "Amazon Q Feature dev: Remove approach generation flow" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.26.0.json b/packages/amazonq/.changes/1.26.0.json deleted file mode 100644 index 5f7e5361811..00000000000 --- a/packages/amazonq/.changes/1.26.0.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "date": "2024-09-19", - "version": "1.26.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Security Scan: Fixed an issue where the wrong icon was used in the status bar menu." - }, - { - "type": "Bug Fix", - "description": "Disable Amazon Q LSP in AL2" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fix shifted chat contents when closing and opening chat panel back" - }, - { - "type": "Bug Fix", - "description": "Security Scan: Minor styling improvements in the security issue webview panel" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Fix tooltip remaining on screen when closing and opening chat panel back" - }, - { - "type": "Bug Fix", - "description": "Auth: Login state not updating across multiple VS Code windows." - }, - { - "type": "Feature", - "description": "Support @workspace queries for specific files like `@workspace what does test.ts do? `. " - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.27.0.json b/packages/amazonq/.changes/1.27.0.json deleted file mode 100644 index 005008c342f..00000000000 --- a/packages/amazonq/.changes/1.27.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2024-09-27", - "version": "1.27.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Security Scan: Fixes an issue that incorrectly removes hardcoded credentials detections from auto scans." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.28.0.json b/packages/amazonq/.changes/1.28.0.json deleted file mode 100644 index 481a4d8e7d2..00000000000 --- a/packages/amazonq/.changes/1.28.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2024-10-03", - "version": "1.28.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q /dev: define first folder as a root path for LLM-created files when using workspaces" - }, - { - "type": "Feature", - "description": "Amazon Q Code Transformation: allow users to skip running tests" - }, - { - "type": "Feature", - "description": "Amazon Q Developer: Updated legal disclaimer text" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.29.0.json b/packages/amazonq/.changes/1.29.0.json deleted file mode 100644 index 35cc08b1b25..00000000000 --- a/packages/amazonq/.changes/1.29.0.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "date": "2024-10-10", - "version": "1.29.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q /dev: include telemetry for workspace usage when generating new files" - }, - { - "type": "Bug Fix", - "description": "Amazon Q extension may fail to start if AWS Toolkit extension fails to start" - }, - { - "type": "Bug Fix", - "description": "Start language server by default" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Feature Dev: Add error messages when the upload URL expires" - }, - { - "type": "Bug Fix", - "description": "Amazon Q (/dev): view diffs of previous /dev iterations" - }, - { - "type": "Bug Fix", - "description": "Q dev handle no change required" - }, - { - "type": "Deprecation", - "description": "The next release of this extension will require VS Code 1.83.0 or newer." - }, - { - "type": "Feature", - "description": "Automatically pause and resume @workspace indexing when OS CPU load is high" - }, - { - "type": "Feature", - "description": "Add buttons to code blocks to view and accept diffs." - }, - { - "type": "Feature", - "description": "Inline completion for more json files, and all yaml files" - }, - { - "type": "Feature", - "description": "Show a one-time warning if new VS Code is required" - }, - { - "type": "Removal", - "description": "Minimum required VSCode version is now 1.83" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.3.0.json b/packages/amazonq/.changes/1.3.0.json deleted file mode 100644 index 9645f416074..00000000000 --- a/packages/amazonq/.changes/1.3.0.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "date": "2024-05-08", - "version": "1.3.0", - "entries": [ - { - "type": "Bug Fix", - "description": "modifying the root folder for /dev now modifies it" - }, - { - "type": "Bug Fix", - "description": "Q chat may stop responding after processing Javascript/Typescript code" - }, - { - "type": "Bug Fix", - "description": "Completion may fail unexpected if user opened many tabs" - }, - { - "type": "Feature", - "description": "Inline Suggestions: Only display the 'Open Chat' CodeLens if the user is signed into Amazon Q." - }, - { - "type": "Feature", - "description": "Security Scan: Scans can now be run without an open editor" - }, - { - "type": "Feature", - "description": "Security Scan: Multi-root workspace support" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.30.0.json b/packages/amazonq/.changes/1.30.0.json deleted file mode 100644 index 070f0f7be5f..00000000000 --- a/packages/amazonq/.changes/1.30.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2024-10-17", - "version": "1.30.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Various fixes and changes" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.31.0.json b/packages/amazonq/.changes/1.31.0.json deleted file mode 100644 index 882fbad0f49..00000000000 --- a/packages/amazonq/.changes/1.31.0.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "date": "2024-10-29", - "version": "1.31.0", - "entries": [ - { - "type": "Breaking Change", - "description": "Change keybind for focusing chat to ctrl+win+i on Windows, ctrl+cmd+i on macOS and ctrl+meta+i on Linux" - }, - { - "type": "Bug Fix", - "description": "Inline Suggestions: Occasional `ValidationException` if user context has too many characters." - }, - { - "type": "Bug Fix", - "description": "Update `@workspace` index when adding or deleting a file" - }, - { - "type": "Bug Fix", - "description": "fixed device code detection when running auth through tunneled vscode" - }, - { - "type": "Feature", - "description": "Use inline chat to select code and transform it with natural language instructions" - }, - { - "type": "Feature", - "description": "Amazon Q /dev: Add stop generation action" - }, - { - "type": "Feature", - "description": "Provide more frequent updates about code changes made by agent" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.32.0.json b/packages/amazonq/.changes/1.32.0.json deleted file mode 100644 index cfa6f4796bf..00000000000 --- a/packages/amazonq/.changes/1.32.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2024-10-29", - "version": "1.32.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Remove warning when no input is provided to inline chat input box" - }, - { - "type": "Bug Fix", - "description": "Use Sagemaker environment IAM Credentials for Code Completion when they're available" - }, - { - "type": "Bug Fix", - "description": "Inline: Code completion not working for Sagemaker Pro Tier users." - }, - { - "type": "Bug Fix", - "description": "Disable /transform and /dev commands for sagemaker users as they're not supported" - }, - { - "type": "Feature", - "description": "Amazon SageMaker Studio: Enable Free Tier Chat for IAM users" - } - ] -} diff --git a/packages/amazonq/.changes/1.33.0.json b/packages/amazonq/.changes/1.33.0.json deleted file mode 100644 index ac740352518..00000000000 --- a/packages/amazonq/.changes/1.33.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2024-10-30", - "version": "1.33.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q /dev: fix for stop button showing for Code Transformation" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.34.0.json b/packages/amazonq/.changes/1.34.0.json deleted file mode 100644 index 35d1a3b1e1d..00000000000 --- a/packages/amazonq/.changes/1.34.0.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "date": "2024-11-07", - "version": "1.34.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Align example help text with prompt message in chat" - }, - { - "type": "Bug Fix", - "description": "Improve `@workspace` index auto pause start strategy. " - }, - { - "type": "Feature", - "description": "Allow users to View and Apply diff when they explictily send code to Amazon Q using - Fix, Refactor, Optimize and Send To Prompt." - }, - { - "type": "Feature", - "description": "Security Scan: Auto-scan now supports JSX, TSX, Kotlin, Scala, and Shell files." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.35.0.json b/packages/amazonq/.changes/1.35.0.json deleted file mode 100644 index 45b791ac4c4..00000000000 --- a/packages/amazonq/.changes/1.35.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2024-11-11", - "version": "1.35.0", - "entries": [ - { - "type": "Breaking Change", - "description": "Change focus chat keybind to win+alt+i on Windows, cmd+alt+i on macOS, and meta+alt+i on Linux" - }, - { - "type": "Bug Fix", - "description": "Fix suboptimal inline suggestions from Amazon Q caused by improperly formatted supplemental context" - }, - { - "type": "Bug Fix", - "description": "Fix empty chunks being sent to service and get validationException" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.36.0.json b/packages/amazonq/.changes/1.36.0.json deleted file mode 100644 index 0b10e6d8720..00000000000 --- a/packages/amazonq/.changes/1.36.0.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "date": "2024-11-14", - "version": "1.36.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Fix broken inline suggestion auto-trigger on Systemverfilog files if users dont have systemverilog extension installed and enabled" - }, - { - "type": "Bug Fix", - "description": "tutorial always showing on start" - }, - { - "type": "Feature", - "description": "Enable default `@workspace` context of Amazon Q chat for certain users" - }, - { - "type": "Feature", - "description": "Amazon Q /dev: Add an action to accept individual files" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.37.0.json b/packages/amazonq/.changes/1.37.0.json deleted file mode 100644 index 3076836aa3c..00000000000 --- a/packages/amazonq/.changes/1.37.0.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "date": "2024-11-22", - "version": "1.37.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Feature Dev: display limit reached error message" - }, - { - "type": "Bug Fix", - "description": "Amazon Q chat: `@workspace` command shown in all tab types" - }, - { - "type": "Bug Fix", - "description": "Chat container exceeds width of container" - }, - { - "type": "Bug Fix", - "description": "amazon q inline: skip indexing when no workspace folders are found" - }, - { - "type": "Bug Fix", - "description": "file details and name unneccessary cropping" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /dev: update diff window behavior after a change is accepted" - }, - { - "type": "Feature", - "description": "Amazon Q /dev: support `.gradle` files" - }, - { - "type": "Feature", - "description": "Code Transform: Enable support for Java 17 projects." - }, - { - "type": "Feature", - "description": "Notifications: Support for delivering critical alerts and product updates" - }, - { - "type": "Feature", - "description": "Retrieve and display a customization name when a customization is overridden in an AB test" - }, - { - "type": "Feature", - "description": "Feature(Amazon Q Code Transformation): support conversions of embedded SQL from Oracle to PostgreSQL" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.38.0.json b/packages/amazonq/.changes/1.38.0.json deleted file mode 100644 index cc04393dfa7..00000000000 --- a/packages/amazonq/.changes/1.38.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2024-11-27", - "version": "1.38.0", - "entries": [ - { - "type": "Feature", - "description": "Amazon Q /dev: support `Dockerfile` files" - }, - { - "type": "Feature", - "description": "Introduce @workspace command to enhance context fetching for Chat" - }, - { - "type": "Feature", - "description": "Feature(Amazon Q Code Transformation): allow users to view results in 5 smaller diffs" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.39.0.json b/packages/amazonq/.changes/1.39.0.json deleted file mode 100644 index 750b30ba03a..00000000000 --- a/packages/amazonq/.changes/1.39.0.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "date": "2024-12-03", - "version": "1.39.0", - "entries": [ - { - "type": "Feature", - "description": "Added a getting started page for exploring amazon q agents" - }, - { - "type": "Feature", - "description": "`/test` in Q chat to generate unit tests for java and python" - }, - { - "type": "Feature", - "description": "`/doc` in Q chat to generate and update documentation for your project" - }, - { - "type": "Feature", - "description": "Amazon Q Code Scan is now Amazon Q Code Review" - }, - { - "type": "Feature", - "description": "`/review` in Q chat to scan your code for vulnerabilities and quality issues, and generate fixes" - }, - { - "type": "Feature", - "description": "Security Scan: New TreeView to display security scan issues and vulnerabilities detected in your project. The TreeView provides an organized and hierarchical view of the scan results, making it easier to navigate and prioritize the issues that need to be addressed." - }, - { - "type": "Feature", - "description": "Security Scan: Added ability to suppress or ignore security issues" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.4.0.json b/packages/amazonq/.changes/1.4.0.json deleted file mode 100644 index aab7e1f2b70..00000000000 --- a/packages/amazonq/.changes/1.4.0.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "date": "2024-05-13", - "version": "1.4.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Auth: No longer request AWS account scopes during login." - }, - { - "type": "Bug Fix", - "description": "Security Scan: Fixes an issue where scans fail for projects with Terraform files" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transform: Show additional status messages to align with experience when JAVA_HOME set incorrectly." - }, - { - "type": "Feature", - "description": "UX: Added keyboard navigation to login screen." - }, - { - "type": "Feature", - "description": "New SSO Authorization Code flow for faster logins" - }, - { - "type": "Feature", - "description": "Transform: Add human intervention to help update dependencies during transformation." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.40.0.json b/packages/amazonq/.changes/1.40.0.json deleted file mode 100644 index ea251bdd8fe..00000000000 --- a/packages/amazonq/.changes/1.40.0.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "date": "2024-12-10", - "version": "1.40.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Improved LLM code review for file review." - }, - { - "type": "Bug Fix", - "description": "@workspace is missing from the welcome to q chat tab" - }, - { - "type": "Bug Fix", - "description": "Fix chat syntax highlighting when using several different themes" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /doc: progress bar persists after cancelling README creation" - }, - { - "type": "Bug Fix", - "description": "Code Review: Fixed a bug where some issues are missing from the code issues view for workspaces with custom names" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /doc: Prompt user to choose a folder in chat" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /dev not adding Dockerfiles in nested folders" - }, - { - "type": "Bug Fix", - "description": "Improved Code Fix generation for code review issues" - }, - { - "type": "Bug Fix", - "description": "Fix the quick start buttons on the explore page to show amazon q colours on hover" - }, - { - "type": "Feature", - "description": "Q feature dev: recognize .bms, .pli code files" - }, - { - "type": "Feature", - "description": "Amazon Q Code Transformation: show job ID in Transformation Hub" - }, - { - "type": "Feature", - "description": "UI improvements to Amazon Q Chat: New splash loader animation, initial streaming card animation, improved button colours" - }, - { - "type": "Feature", - "description": "Add acknowledgement button for amazon q chat disclaimer" - }, - { - "type": "Feature", - "description": "Navigate through prompt history by using the up/down arrows" - }, - { - "type": "Feature", - "description": "Amazon Q: Simplify log channel" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.41.0.json b/packages/amazonq/.changes/1.41.0.json deleted file mode 100644 index d0ca09cb476..00000000000 --- a/packages/amazonq/.changes/1.41.0.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "date": "2024-12-17", - "version": "1.41.0", - "entries": [ - { - "type": "Bug Fix", - "description": "/review: Apply fix removes other issues in the same file." - }, - { - "type": "Bug Fix", - "description": "Fix(Amazon Q Code Transformation): show correct diff when running consecutive transformations" - }, - { - "type": "Bug Fix", - "description": "Improve when the welcome page is shown in amazon q chat" - }, - { - "type": "Bug Fix", - "description": "Code Review: Cleaned up output logs when running /review" - }, - { - "type": "Bug Fix", - "description": "Code Review: Fixed a bug where applying a fix did not update the positions of other issues in the same file." - }, - { - "type": "Bug Fix", - "description": "Chat: When navigating to previous prompts, code attachments are sometimes displayed incorrectly" - }, - { - "type": "Bug Fix", - "description": "/review: Diagnostics in the problems panel are mapped to the wrong code" - }, - { - "type": "Bug Fix", - "description": "Fix opentabs context possibly timeout due to race condition of misuse of different timeout functionalities" - }, - { - "type": "Bug Fix", - "description": "Auth: SSO session was bad, but no reauth prompt given" - }, - { - "type": "Bug Fix", - "description": "Reduce frequency of system status poll" - }, - { - "type": "Bug Fix", - "description": "Chat: When writing a prompt without sending it, navigating via up/down arrows sometimes deletes the unsent prompt." - }, - { - "type": "Bug Fix", - "description": "Code Review: Fixed a bug where projects with repeated path names did not scan properly." - }, - { - "type": "Feature", - "description": "/review: Code fix automatically scrolls into view after generation." - }, - { - "type": "Feature", - "description": "Chat: improve font size and line-height in footer (below prompt input field)" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.42.0.json b/packages/amazonq/.changes/1.42.0.json deleted file mode 100644 index 7327ed0c9c4..00000000000 --- a/packages/amazonq/.changes/1.42.0.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "date": "2025-01-09", - "version": "1.42.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q /doc: Improve button text phrasing" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /dev: Fix issue when files are deleted while preparing context" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transformation: allow POSTGRESQL as target DB for SQL conversions" - }, - { - "type": "Bug Fix", - "description": "Fix context menu displaying when typing @, even though input is disallowed" - }, - { - "type": "Bug Fix", - "description": "Amazon Q can update mvn and gradle build files" - }, - { - "type": "Bug Fix", - "description": "/transform: use correct documentation link in SQL conversion help message" - }, - { - "type": "Bug Fix", - "description": "Up/down history navigation only triggering on first/last line of prompt input" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /test: Fix to redirect /test to generate tests in chat for external files out of workspace scope." - }, - { - "type": "Bug Fix", - "description": "/review: Code block extends beyond page margins in code issue detail view" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transformation: retry project upload up to 3 times" - }, - { - "type": "Feature", - "description": "Amazon Q Code Transformation: add view summary button in chat" - }, - { - "type": "Feature", - "description": "Amazon Q: new code syntax highlighter for improved accuracy" - }, - { - "type": "Removal", - "description": "Settings: No longer migrate old CodeWhisperer settings or initialize telemetry setting from AWS Toolkit." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.43.0.json b/packages/amazonq/.changes/1.43.0.json deleted file mode 100644 index a4f2376f2e6..00000000000 --- a/packages/amazonq/.changes/1.43.0.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "date": "2025-01-15", - "version": "1.43.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Auth: Valid StartURL not accepted at login" - }, - { - "type": "Bug Fix", - "description": "Fix inline completion supplementalContext length exceeding maximum in certain cases" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /test: Unit test generation completed message shows after accept/reject action" - }, - { - "type": "Bug Fix", - "description": "/test: for unsupported languages was sometimes unreliable" - }, - { - "type": "Bug Fix", - "description": "User-selected customizations are sometimes not being persisted." - }, - { - "type": "Bug Fix", - "description": "Amazon q /dev: Remove hard-coded limits and instead rely server-side data to communicate number of code generations remaining" - }, - { - "type": "Feature", - "description": "Adds capability to send new context commands to AB groups" - }, - { - "type": "Feature", - "description": "feat(amazonq): Add error message for updated README too large" - }, - { - "type": "Feature", - "description": "Enhance Q inline completion context fetching for better suggestion quality" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.44.0.json b/packages/amazonq/.changes/1.44.0.json deleted file mode 100644 index 7593e9a7af3..00000000000 --- a/packages/amazonq/.changes/1.44.0.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "date": "2025-01-23", - "version": "1.44.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q: word duplication when pressing tab on context selector fixed" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /doc: Prevent users from requesting changes if no iterations remain" - }, - { - "type": "Bug Fix", - "description": "`/test`: view diffs by clicking files in the file tree, aligning the behavior with the 'View Diff' button." - }, - { - "type": "Bug Fix", - "description": "/review: Improved error handling for code fix operations" - }, - { - "type": "Bug Fix", - "description": "Amazon Q: cursor no longer jumps after navigating prompt history" - }, - { - "type": "Bug Fix", - "description": "Improve the text description of workspace index settings" - }, - { - "type": "Bug Fix", - "description": "Notifications: 'Dismiss' command visible in command palette." - }, - { - "type": "Bug Fix", - "description": "/transform: replace icons in Transformation Hub with text" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /doc: Ask for user prompt if error occurs while updating documentation" - }, - { - "type": "Feature", - "description": "Amazon Q: increase chat current active file context char limit to 40k" - }, - { - "type": "Feature", - "description": "/review: Code issues can be grouped by file location or severity" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.45.0-SNAPSHOT.json b/packages/amazonq/.changes/1.45.0-SNAPSHOT.json deleted file mode 100644 index 881d3e94e5a..00000000000 --- a/packages/amazonq/.changes/1.45.0-SNAPSHOT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-01-30", - "version": "1.45.0-SNAPSHOT", - "entries": [ - { - "type": "Bug Fix", - "description": "Allow AB users with an overridden customization to go back to the default customization" - }, - { - "type": "Bug Fix", - "description": "For security reasons, disabled auto linkify for link texts coming in markdown other than [TEXT](URL) format" - }, - { - "type": "Feature", - "description": "Add setting to allow Q /dev to run code and test commands" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.45.0.json b/packages/amazonq/.changes/1.45.0.json deleted file mode 100644 index 7ef04691624..00000000000 --- a/packages/amazonq/.changes/1.45.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-01-30", - "version": "1.45.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Allow AB users with an overridden customization to go back to the default customization" - }, - { - "type": "Bug Fix", - "description": "For security reasons, disabled auto linkify for link texts coming in markdown other than [TEXT](URL) format" - }, - { - "type": "Feature", - "description": "Add setting to allow Q /dev to run code and test commands" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.46.0.json b/packages/amazonq/.changes/1.46.0.json deleted file mode 100644 index 1253cbe3d01..00000000000 --- a/packages/amazonq/.changes/1.46.0.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "date": "2025-02-05", - "version": "1.46.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Citation links are not clickable as numbers, but appear as non-clickable texts" - }, - { - "type": "Bug Fix", - "description": "Fix language server start failure in AL2023 ARM64" - }, - { - "type": "Bug Fix", - "description": "/review: Auto-review issues did not populate code issues list" - }, - { - "type": "Bug Fix", - "description": "Amazon Q: Fix code upload error when using /dev or /doc on Remote SSH" - }, - { - "type": "Bug Fix", - "description": "/test placeholder text aligned across IDEs" - }, - { - "type": "Bug Fix", - "description": "Inline: Typos in the first example suggestion" - }, - { - "type": "Feature", - "description": "Inline suggestions: Pre-fetch recommendations to reduce suggestion latency." - }, - { - "type": "Feature", - "description": "Added github issue link and description to the chat answer feedback form" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.47.0.json b/packages/amazonq/.changes/1.47.0.json deleted file mode 100644 index 5e168b79fe2..00000000000 --- a/packages/amazonq/.changes/1.47.0.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "date": "2025-02-13", - "version": "1.47.0", - "entries": [ - { - "type": "Bug Fix", - "description": "`Send to prompt` and other context menu options not sent if chat was closed" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /test: Truncating user input to 4096 characters for unit test generation." - }, - { - "type": "Bug Fix", - "description": "Amazon Q /test: Q identify active test file and infer source file for test generation." - }, - { - "type": "Bug Fix", - "description": "/review: Code review starts automatically when invoked from menu" - }, - { - "type": "Feature", - "description": "Amazon Q /dev: support `.hbs`, `.gjs`, `.gts`, `.astro`, `.mdx`, `.svelte`, `.erb`, `.rake` files" - }, - { - "type": "Feature", - "description": "/transform: automatically download results when ready" - }, - { - "type": "Feature", - "description": "/transform: support Java 21 transformations" - }, - { - "type": "Removal", - "description": "Reverted prefetch logic to enable more stable inline completion" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.48.0.json b/packages/amazonq/.changes/1.48.0.json deleted file mode 100644 index 409649ab817..00000000000 --- a/packages/amazonq/.changes/1.48.0.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "date": "2025-02-20", - "version": "1.48.0", - "entries": [ - { - "type": "Bug Fix", - "description": "/dev and /doc: Multi-root workspace with duplicate files causes infinite 'Uploading code...' loop" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /doc: update workspace too large error message " - }, - { - "type": "Bug Fix", - "description": "/review: Auto-review should not remove issues from manual reviews" - }, - { - "type": "Bug Fix", - "description": "/transform: allow View Summary button to work even after accepting diff" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /test: Fixing the issue of target file does not exist." - }, - { - "type": "Feature", - "description": "Amazon Q /doc: Add support for infrastructure diagrams" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.49.0.json b/packages/amazonq/.changes/1.49.0.json deleted file mode 100644 index b08aff46ac7..00000000000 --- a/packages/amazonq/.changes/1.49.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2025-02-27", - "version": "1.49.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q /test: Unit test generation displays an inaccurate diff view for non-primary packages in the workspace." - }, - { - "type": "Bug Fix", - "description": "Amazon Q /doc: Fix uploading file method throwing incorrect workspace too large error message" - }, - { - "type": "Bug Fix", - "description": "/transform: skip running tests locally when user chooses to do so" - }, - { - "type": "Bug Fix", - "description": "/review: ignored lines should not show up in scan issues" - }, - { - "type": "Bug Fix", - "description": "/test: update capability card text" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.5.0.json b/packages/amazonq/.changes/1.5.0.json deleted file mode 100644 index 1e59c67e102..00000000000 --- a/packages/amazonq/.changes/1.5.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2024-05-17", - "version": "1.5.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Security Scan: Fixes an issue when scanning projects with binary files" - }, - { - "type": "Bug Fix", - "description": "Fixes an issue where the /dev chat wouldn't let customers modify the source folder when exceeding the size limit" - }, - { - "type": "Bug Fix", - "description": "Security Scan: Improved error notifications" - }, - { - "type": "Feature", - "description": "Security Scan: Added custom command to run the security scan." - }, - { - "type": "Feature", - "description": "Security Scan: \"View details\" and \"Explain\" options can now be accessed from the problems panel" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.50.0.json b/packages/amazonq/.changes/1.50.0.json deleted file mode 100644 index bd832127681..00000000000 --- a/packages/amazonq/.changes/1.50.0.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "date": "2025-03-06", - "version": "1.50.0", - "entries": [ - { - "type": "Bug Fix", - "description": "/doc: Usage in multiple chat tabs may cause unexpected behavior." - }, - { - "type": "Bug Fix", - "description": "/review: subsequent reviews weren't possible" - }, - { - "type": "Feature", - "description": "Amazon Q chat: Use `@` to add folders, files, and saved prompts as context" - }, - { - "type": "Feature", - "description": "Amazon Q chat: increase chat input height to 3 lines" - }, - { - "type": "Feature", - "description": "Amazon Q chat: Show list of files sent as context in chat response" - }, - { - "type": "Feature", - "description": "Amazon Q chat: Add support for `.md` file rules in workspace-level `.amazonq/rules` directory" - }, - { - "type": "Test", - "description": "add Q Chat /review command test coverage" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.51.0.json b/packages/amazonq/.changes/1.51.0.json deleted file mode 100644 index 97870fda325..00000000000 --- a/packages/amazonq/.changes/1.51.0.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "date": "2025-03-12", - "version": "1.51.0", - "entries": [ - { - "type": "Bug Fix", - "description": "increase scan timeout to reduce front-end timeout errors" - }, - { - "type": "Bug Fix", - "description": "Amazon Q chat: Create a new prompt form does not autofocus or submit with Enter press" - }, - { - "type": "Bug Fix", - "description": "/review: Zip files are created with the wrong file path for file scans in multifolder workspaces." - }, - { - "type": "Bug Fix", - "description": "/review: Invalid file path characters caused some detections to be skipped on Windows" - }, - { - "type": "Feature", - "description": "Amazon Q Chat: You can now keep a \"library\" of prompt files in your home directory under `~/.aws/amazonq/prompts` and then quickly add them to the context using `@` on any project you’re working on. Prompt files are in markdown (`.md`) format." - }, - { - "type": "Feature", - "description": "/review: show code diff for fix preview" - }, - { - "type": "Feature", - "description": "/test: display test plan summary in chat after generating tests" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.52.0.json b/packages/amazonq/.changes/1.52.0.json deleted file mode 100644 index a4f357edc87..00000000000 --- a/packages/amazonq/.changes/1.52.0.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "date": "2025-03-20", - "version": "1.52.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q chat: @Folders and @Files are missing `@` prefix in chat history" - }, - { - "type": "Bug Fix", - "description": "/review: Code Issues ellipses menu displays AWS Toolkit options, if installed." - }, - { - "type": "Bug Fix", - "description": "Amazon Q chat: Progress indicator height is stretched" - }, - { - "type": "Bug Fix", - "description": "Amazon Q chat: Long descriptions in context list are cut off" - }, - { - "type": "Bug Fix", - "description": "Amazon Q chat: Improve responses for saved prompts and workspace rules" - }, - { - "type": "Bug Fix", - "description": "/test: show descriptive error message" - }, - { - "type": "Bug Fix", - "description": "Code Review: Fixed a bug where issues are double counted in the Q chat" - }, - { - "type": "Bug Fix", - "description": "Amazon Q chat: Animation timings are too long" - }, - { - "type": "Bug Fix", - "description": "Fix inline completion failure due to context length exceeding the threshold" - }, - { - "type": "Feature", - "description": "/review: passing referenceTrackerConfiguration to StartCodeFixJob" - }, - { - "type": "Feature", - "description": "/review: rename setting `showInlineCodeSuggestionsWithCodeReferences` to `showCodeWithReferences`" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.53.0.json b/packages/amazonq/.changes/1.53.0.json deleted file mode 100644 index cb548513e35..00000000000 --- a/packages/amazonq/.changes/1.53.0.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "date": "2025-03-28", - "version": "1.53.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Choosing a nested subfolder for `/doc` on Windows results in `The folder you chose did not contain any source files` error" - }, - { - "type": "Feature", - "description": "Add support for Code search in Q chat" - }, - { - "type": "Feature", - "description": "(Experimental) Amazon Q inline code suggestions via Amazon Q Language Server. (enable with `aws.experiments.amazonqLSP: true`)" - }, - { - "type": "Feature", - "description": "Command Palette: Add `Amazon Q: Open Chat` command." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.54.0.json b/packages/amazonq/.changes/1.54.0.json deleted file mode 100644 index 32e6ccabf4a..00000000000 --- a/packages/amazonq/.changes/1.54.0.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "date": "2025-04-03", - "version": "1.54.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q chat: `@prompts` not added to context" - }, - { - "type": "Feature", - "description": "Amazon Q chat: View and search chat history" - }, - { - "type": "Feature", - "description": "SageMaker Unified Studio: Disable Sign out" - }, - { - "type": "Feature", - "description": "SageMaker Unified Studio: Update Q Chat Introduction message" - }, - { - "type": "Feature", - "description": "/review: automatically generate fix without clicking Generate Fix button" - }, - { - "type": "Feature", - "description": "Amazon Q chat: Automatically persist chats between IDE sessions" - }, - { - "type": "Feature", - "description": "Save user command execution logs to plugin output." - }, - { - "type": "Feature", - "description": "Amazon Q chat: Code blocks in chat messages have a max-height of 21 lines and can be scrolled inside" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.55.0.json b/packages/amazonq/.changes/1.55.0.json deleted file mode 100644 index 194814fc3be..00000000000 --- a/packages/amazonq/.changes/1.55.0.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "date": "2025-04-09", - "version": "1.55.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Update chat history icon" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: chat occasionally freezes and displays gray screen" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Set owner-only permissions for chat history and saved prompt files" - }, - { - "type": "Feature", - "description": "`/test` generates tests in all languages, not only Java/Python" - }, - { - "type": "Feature", - "description": "Amazon Q chat: Click export icon to save chat transcript in Markdown or HTML" - }, - { - "type": "Feature", - "description": "SageMaker: Disable the unsupported agentic commands and welcome prompt" - }, - { - "type": "Feature", - "description": "Amazon Q Chat: Add `@code` context for PHP, Ruby, Scala, Shell, and Swift projects" - }, - { - "type": "Feature", - "description": "Enterprise users can choose their preferred Amazon Q profile to improve personalization and workflow across different business regions" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.56.0.json b/packages/amazonq/.changes/1.56.0.json deleted file mode 100644 index 8de6eea2db5..00000000000 --- a/packages/amazonq/.changes/1.56.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-04-09", - "version": "1.56.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Improve status message while loading Amazon Q Profiles during login" - }, - { - "type": "Bug Fix", - "description": "\"failed to run command\" error" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.57.0.json b/packages/amazonq/.changes/1.57.0.json deleted file mode 100644 index 3a7a8d2ab95..00000000000 --- a/packages/amazonq/.changes/1.57.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-04-10", - "version": "1.57.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Fix bug where generate fix does not work" - }, - { - "type": "Bug Fix", - "description": "Fix bug where review shows 0 findings" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.58.0.json b/packages/amazonq/.changes/1.58.0.json deleted file mode 100644 index 02395a6dfd8..00000000000 --- a/packages/amazonq/.changes/1.58.0.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "date": "2025-04-11", - "version": "1.58.0", - "entries": [ - { - "type": "Bug Fix", - "description": "inline chat activates properly when using 'aws.experiments.amazonqChatLSP' feature flag" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: code blocks in responses flicker, switching tabs during answer streaming makes expand button disappear" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: tab bar buttons disappear when closing non-active tab" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: chat history list does not truncate markdown" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.59.0.json b/packages/amazonq/.changes/1.59.0.json deleted file mode 100644 index 840d65f5294..00000000000 --- a/packages/amazonq/.changes/1.59.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-04-11", - "version": "1.59.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Code fix line number or file is sometimes not accurate" - }, - { - "type": "Bug Fix", - "description": "Fix Q agents will fail for /transform /dev /test features if IdC kms key is configured with 400 error" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.6.0.json b/packages/amazonq/.changes/1.6.0.json deleted file mode 100644 index 9974f06a414..00000000000 --- a/packages/amazonq/.changes/1.6.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2024-05-21", - "version": "1.6.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Inside chat body, if there is a code block inside a list item it shows
tags" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Prompt input field allows additional input beyond the character limit" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Chat: Prompt input field not getting focus when chat window opens" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.60.0.json b/packages/amazonq/.changes/1.60.0.json deleted file mode 100644 index 64a9b9ea137..00000000000 --- a/packages/amazonq/.changes/1.60.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-04-18", - "version": "1.60.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Users might be bound to a customization which they dont have access with the selected profile and it causes service throwing 403 when using inline suggestion and chat features" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.61.0.json b/packages/amazonq/.changes/1.61.0.json deleted file mode 100644 index 64b0f4da610..00000000000 --- a/packages/amazonq/.changes/1.61.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-04-22", - "version": "1.61.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Some users not signaled they needed to select a Region Profile to get features working" - }, - { - "type": "bugfix", - "description": "/review: disable auto-review by default" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.62.0.json b/packages/amazonq/.changes/1.62.0.json deleted file mode 100644 index 530f26ccb29..00000000000 --- a/packages/amazonq/.changes/1.62.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-04-25", - "version": "1.62.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Toast message to warn users if Developer Profile is not selected" - }, - { - "type": "Bug Fix", - "description": "Fix users can not log in successfully with 2+ IDE instnaces open due to throttle error throw by the service" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.63.0.json b/packages/amazonq/.changes/1.63.0.json deleted file mode 100644 index 10020659c5a..00000000000 --- a/packages/amazonq/.changes/1.63.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-05-01", - "version": "1.63.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Q profile selection hangs when a region is blocked" - }, - { - "type": "Feature", - "description": "Agentic coding experience: Amazon Q can now write code and run shell commands on your behalf" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.64.0.json b/packages/amazonq/.changes/1.64.0.json deleted file mode 100644 index 461ad140c01..00000000000 --- a/packages/amazonq/.changes/1.64.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-05-02", - "version": "1.64.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Enable Amazon Q LSP in AL2 instances" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.65.0.json b/packages/amazonq/.changes/1.65.0.json deleted file mode 100644 index ec01584f56b..00000000000 --- a/packages/amazonq/.changes/1.65.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-05-05", - "version": "1.65.0", - "entries": [ - { - "type": "Feature", - "description": "Support selecting customizations across all Q profiles with automatic profile switching for enterprise users" - }, - { - "type": "Feature", - "description": "Memorize and autofill users' last Sso login profile" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.66.0.json b/packages/amazonq/.changes/1.66.0.json deleted file mode 100644 index ab4a819b85a..00000000000 --- a/packages/amazonq/.changes/1.66.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-05-09", - "version": "1.66.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Avoid inline completion 'Improperly formed request' errors when file is too large" - }, - { - "type": "Bug Fix", - "description": "Named agent tabs sometimes open with unnecessary input options" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.67.0.json b/packages/amazonq/.changes/1.67.0.json deleted file mode 100644 index 59ff03eacdd..00000000000 --- a/packages/amazonq/.changes/1.67.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-05-14", - "version": "1.67.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Previous and subsequent cells are used as context for completion in a Jupyter notebook" - }, - { - "type": "Bug Fix", - "description": "Support chat in AL2 aarch64" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.68.0.json b/packages/amazonq/.changes/1.68.0.json deleted file mode 100644 index 2c21170aa0b..00000000000 --- a/packages/amazonq/.changes/1.68.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-05-15", - "version": "1.68.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Fix Error: 'Amazon Q service is not signed in'" - }, - { - "type": "Bug Fix", - "description": "Fix Error: 'Amazon Q Profile is not selected for IDC connection type'" - }, - { - "type": "Feature", - "description": "Add inline completion support for abap language" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.69.0.json b/packages/amazonq/.changes/1.69.0.json deleted file mode 100644 index caa8ed28676..00000000000 --- a/packages/amazonq/.changes/1.69.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-05-22", - "version": "1.69.0", - "entries": [ - { - "type": "Bug Fix", - "description": "/transform: avoid prompting user for target JDK path unnecessarily" - }, - { - "type": "Removal", - "description": "/transform: remove option to select multiple diffs" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.7.0.json b/packages/amazonq/.changes/1.7.0.json deleted file mode 100644 index cfc03fc40e6..00000000000 --- a/packages/amazonq/.changes/1.7.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2024-05-30", - "version": "1.7.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Feature Development: File rejection is not rejecting a file when code is generated" - }, - { - "type": "Bug Fix", - "description": "Security Scan: Improved accuracy when applying security fixes" - }, - { - "type": "Bug Fix", - "description": "Amazon Q Code Transformation: show more specific error messages on failure cases" - }, - { - "type": "Feature", - "description": "Security Scan: Support for scanning files outside of workspaces." - }, - { - "type": "Feature", - "description": "Amazon Q now publishes to Open VSX: https://open-vsx.org/namespace/amazonwebservices" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.70.0.json b/packages/amazonq/.changes/1.70.0.json deleted file mode 100644 index 841e8107430..00000000000 --- a/packages/amazonq/.changes/1.70.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-05-28", - "version": "1.70.0", - "entries": [ - { - "type": "Removal", - "description": "Disable local workspace LSP" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.71.0.json b/packages/amazonq/.changes/1.71.0.json deleted file mode 100644 index be5cc5a2013..00000000000 --- a/packages/amazonq/.changes/1.71.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-06-04", - "version": "1.71.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.72.0.json b/packages/amazonq/.changes/1.72.0.json deleted file mode 100644 index 10b0b374c3a..00000000000 --- a/packages/amazonq/.changes/1.72.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-06-11", - "version": "1.72.0", - "entries": [ - { - "type": "Feature", - "description": "Launch LSP with bundled artifacts as fallback" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.73.0.json b/packages/amazonq/.changes/1.73.0.json deleted file mode 100644 index 25cda6dcf03..00000000000 --- a/packages/amazonq/.changes/1.73.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-06-11", - "version": "1.73.0", - "entries": [ - { - "type": "Feature", - "description": "Add MCP Server Support" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.74.0.json b/packages/amazonq/.changes/1.74.0.json deleted file mode 100644 index e584f7a9d01..00000000000 --- a/packages/amazonq/.changes/1.74.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-06-12", - "version": "1.74.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.75.0.json b/packages/amazonq/.changes/1.75.0.json deleted file mode 100644 index 384d07654a4..00000000000 --- a/packages/amazonq/.changes/1.75.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-06-13", - "version": "1.75.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.76.0.json b/packages/amazonq/.changes/1.76.0.json deleted file mode 100644 index eaa2ce8af56..00000000000 --- a/packages/amazonq/.changes/1.76.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-06-18", - "version": "1.76.0", - "entries": [ - { - "type": "Bug Fix", - "description": "/transform: only show lines of code statistic in plan" - }, - { - "type": "Feature", - "description": "Add model selection feature" - }, - { - "type": "Feature", - "description": "Pin context items in chat and manage workspace rules" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.77.0.json b/packages/amazonq/.changes/1.77.0.json deleted file mode 100644 index 37436c259f9..00000000000 --- a/packages/amazonq/.changes/1.77.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-06-18", - "version": "1.77.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.78.0.json b/packages/amazonq/.changes/1.78.0.json deleted file mode 100644 index 9a6f35cf36f..00000000000 --- a/packages/amazonq/.changes/1.78.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-06-20", - "version": "1.78.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Resolve missing chat options in Amazon Q chat interface." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.79.0.json b/packages/amazonq/.changes/1.79.0.json deleted file mode 100644 index 51d910cca2b..00000000000 --- a/packages/amazonq/.changes/1.79.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-06-25", - "version": "1.79.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Added automatic system certificate detection and VSCode proxy settings support" - }, - { - "type": "Bug Fix", - "description": "Improved Amazon Linux 2 support with better SageMaker environment detection" - }, - { - "type": "Feature", - "description": "/transform: run all builds client-side" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.8.0.json b/packages/amazonq/.changes/1.8.0.json deleted file mode 100644 index 9f64639c310..00000000000 --- a/packages/amazonq/.changes/1.8.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2024-06-07", - "version": "1.8.0", - "entries": [ - { - "type": "Bug Fix", - "description": "fix(featureDev): fix file rejection for multi-workspaces" - }, - { - "type": "Feature", - "description": "The `Send to Amazon Q` [context menu](https://github.com/aws/aws-toolkit-vscode/assets/371007/ce4c61a4-1b58-48ee-8500-56667d45dd7d) was renamed to `Amazon Q`" - }, - { - "type": "Feature", - "description": "Amazon Q Transform: Increase project upload size limit to 2GB" - }, - { - "type": "Feature", - "description": "feat(featureDev): generated plan being shown from top" - }, - { - "type": "Feature", - "description": "Add additional commands for Amazon Q." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.80.0.json b/packages/amazonq/.changes/1.80.0.json deleted file mode 100644 index 20e948b69f2..00000000000 --- a/packages/amazonq/.changes/1.80.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-07-01", - "version": "1.80.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.81.0.json b/packages/amazonq/.changes/1.81.0.json deleted file mode 100644 index b93c5693ad4..00000000000 --- a/packages/amazonq/.changes/1.81.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-07-02", - "version": "1.81.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Stop auto inline completion when deleting code" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.82.0.json b/packages/amazonq/.changes/1.82.0.json deleted file mode 100644 index 816da045f4a..00000000000 --- a/packages/amazonq/.changes/1.82.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-07-07", - "version": "1.82.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Prompt re-authenticate if auto trigger failed with expired token" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.83.0.json b/packages/amazonq/.changes/1.83.0.json deleted file mode 100644 index 5997b2b1b95..00000000000 --- a/packages/amazonq/.changes/1.83.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-07-09", - "version": "1.83.0", - "entries": [ - { - "type": "Feature", - "description": "Amazon Q /test, /doc, and /dev capabilities integrated into Agentic coding." - }, - { - "type": "Feature", - "description": "Added image support to Amazon Q chat, users can now upload images from their local file system" - }, - { - "type": "Removal", - "description": "Deprecate \"amazon q is generating...\" UI for inline suggestion" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.84.0.json b/packages/amazonq/.changes/1.84.0.json deleted file mode 100644 index e73a685e054..00000000000 --- a/packages/amazonq/.changes/1.84.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-07-17", - "version": "1.84.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Slightly delay rendering inline completion when user is typing" - }, - { - "type": "Bug Fix", - "description": "Render first response before receiving all paginated inline completion results" - }, - { - "type": "Feature", - "description": "Explain and Fix for any issue in Code Issues panel will pull the experience into chat. Also no more view details tab." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.85.0.json b/packages/amazonq/.changes/1.85.0.json deleted file mode 100644 index b0aba38025b..00000000000 --- a/packages/amazonq/.changes/1.85.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-07-19", - "version": "1.85.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.86.0.json b/packages/amazonq/.changes/1.86.0.json deleted file mode 100644 index abe84ce5b5f..00000000000 --- a/packages/amazonq/.changes/1.86.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-07-30", - "version": "1.86.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Let Enter invoke auto completion more consistently" - }, - { - "type": "Bug Fix", - "description": "Faster and more responsive inline completion UX" - }, - { - "type": "Bug Fix", - "description": "Use documentChangeEvent as auto trigger condition" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.87.0.json b/packages/amazonq/.changes/1.87.0.json deleted file mode 100644 index d80e11a2bfa..00000000000 --- a/packages/amazonq/.changes/1.87.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-07-31", - "version": "1.87.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.88.0.json b/packages/amazonq/.changes/1.88.0.json deleted file mode 100644 index 05e006954d8..00000000000 --- a/packages/amazonq/.changes/1.88.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-08-06", - "version": "1.88.0", - "entries": [ - { - "type": "Feature", - "description": "Amazon Q Chat provides error explanations and fixes when hovering or right-clicking on error indicators and messages" - }, - { - "type": "Feature", - "description": "/transform: Show transformation history in Transformation Hub and allow users to resume jobs" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.89.0.json b/packages/amazonq/.changes/1.89.0.json deleted file mode 100644 index 95ef52909d5..00000000000 --- a/packages/amazonq/.changes/1.89.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-08-13", - "version": "1.89.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.9.0.json b/packages/amazonq/.changes/1.9.0.json deleted file mode 100644 index 546b595dc56..00000000000 --- a/packages/amazonq/.changes/1.9.0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "date": "2024-06-14", - "version": "1.9.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q inline suggestions: remember `Pause Auto-Suggestions` after IDE restart" - }, - { - "type": "Bug Fix", - "description": "Amazon Q /dev command: stop showing spinner when there is an error." - }, - { - "type": "Bug Fix", - "description": "Security Scan: Fixes an issue where auto-scans cause the editor to become unresponsive for larger projects." - }, - { - "type": "Bug Fix", - "description": "Fix(Amazon Q Code Transformation): show more detailed error messages for proxy issues" - }, - { - "type": "Feature", - "description": "Amazon Q Code Transform: Allow user to view transformation build log" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.90.0.json b/packages/amazonq/.changes/1.90.0.json deleted file mode 100644 index 547528bce40..00000000000 --- a/packages/amazonq/.changes/1.90.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-08-15", - "version": "1.90.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.91.0.json b/packages/amazonq/.changes/1.91.0.json deleted file mode 100644 index b555f97447c..00000000000 --- a/packages/amazonq/.changes/1.91.0.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "date": "2025-08-22", - "version": "1.91.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Enable inline completion in Jupyter Notebook" - }, - { - "type": "Feature", - "description": "Amazon Q supports admin control for MCP servers to restrict MCP server usage" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.92.0.json b/packages/amazonq/.changes/1.92.0.json deleted file mode 100644 index 46f2518fb37..00000000000 --- a/packages/amazonq/.changes/1.92.0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "date": "2025-08-28", - "version": "1.92.0", - "entries": [ - { - "type": "Feature", - "description": "Amazon Q supports admin control for MCP servers to restrict MCP server usage" - }, - { - "type": "Feature", - "description": "Enabling dynamic model fetching capabilities in Amazon Q chat" - }, - { - "type": "Feature", - "description": "Amazon Q: Support for configuring and utilizing remote MCP servers." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.93.0.json b/packages/amazonq/.changes/1.93.0.json deleted file mode 100644 index c8f34a95645..00000000000 --- a/packages/amazonq/.changes/1.93.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-09-05", - "version": "1.93.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.94.0.json b/packages/amazonq/.changes/1.94.0.json deleted file mode 100644 index d0adc1ee037..00000000000 --- a/packages/amazonq/.changes/1.94.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-09-11", - "version": "1.94.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.95.0.json b/packages/amazonq/.changes/1.95.0.json deleted file mode 100644 index 8014b9e23b2..00000000000 --- a/packages/amazonq/.changes/1.95.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-09-19", - "version": "1.95.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q automatically refreshes expired IAM Credentials in Sagemaker instances" - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.96.0.json b/packages/amazonq/.changes/1.96.0.json deleted file mode 100644 index 17919dd6374..00000000000 --- a/packages/amazonq/.changes/1.96.0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "date": "2025-09-25", - "version": "1.96.0", - "entries": [ - { - "type": "Bug Fix", - "description": "Amazon Q support web/container environments running Ubuntu/Linux, even when the host machine is Amazon Linux 2." - } - ] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.97.0.json b/packages/amazonq/.changes/1.97.0.json deleted file mode 100644 index 94952817128..00000000000 --- a/packages/amazonq/.changes/1.97.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-09-29", - "version": "1.97.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.98.0.json b/packages/amazonq/.changes/1.98.0.json deleted file mode 100644 index a71130bc08a..00000000000 --- a/packages/amazonq/.changes/1.98.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-10-02", - "version": "1.98.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.changes/1.99.0.json b/packages/amazonq/.changes/1.99.0.json deleted file mode 100644 index 9d1089ee8fa..00000000000 --- a/packages/amazonq/.changes/1.99.0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "date": "2025-10-10", - "version": "1.99.0", - "entries": [] -} \ No newline at end of file diff --git a/packages/amazonq/.vscode/launch.json b/packages/amazonq/.vscode/launch.json deleted file mode 100644 index b00c5071ce5..00000000000 --- a/packages/amazonq/.vscode/launch.json +++ /dev/null @@ -1,168 +0,0 @@ -// A launch configuration that compiles the extension and then opens it inside a new window -// Use IntelliSense to learn about possible attributes. -// Hover to view descriptions of existing attributes. -// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceFolder}"], - "env": { - "SSMDOCUMENT_LANGUAGESERVER_PORT": "6010", - "WEBPACK_DEVELOPER_SERVER": "http://localhost:8080" - // Below allows for overrides used during development - // "__AMAZONQLSP_PATH": "${workspaceFolder}/../../../language-servers/app/aws-lsp-codewhisperer-runtimes/out/agent-standalone.js", - // "__AMAZONQLSP_UI": "${workspaceFolder}/../../../language-servers/chat-client/build/amazonq-ui.js" - }, - "envFile": "${workspaceFolder}/.local.env", - "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], - "preLaunchTask": "watch", - "postDebugTask": "terminate", - "presentation": { - "group": "1_Extension", - "order": 2 - } - }, - { - /** Handles the entire process of building and running the toolkit extension in the browser. **/ - "name": "Extension (Web)", - "type": "chrome", - "request": "attach", - "port": 9222, - /** - To get an understanding why we need the following: - - comment out the following - - set a breakpoint in VS Code that gets triggerd on extension startup - Now in the Chrome Developer Tools menu, the extension will load slower and open up random files. - I think this is due to source maps for irrelevant code being attempted to be resolved and slowing execution. - - What this is doing is ignoring certain modules that match the following paths, it matches the path of - a file in `Developer Tools` > `Sources`. - I was inspired by this: https://github.com/microsoft/vscode-test-web/blob/897bca4907a87a6bc564efc242ce6794e5da3232/.vscode/launch.json#L28 - **/ - "resolveSourceMapLocations": ["!**/node_modules/**", "!**/vs/**", "!**/extensions/**"], - "preLaunchTask": "webRun", - "postDebugTask": "webRunTerminate", - "presentation": { - "group": "1_Extension", - "order": 4 - } - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--disable-extensions", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/test/unit/index", - "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder" - ], - "env": { - "DEVELOPMENT_PATH": "${workspaceFolder}", - "AWS_TOOLKIT_AUTOMATION": "local" - }, - "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], - "preLaunchTask": "watch", - "presentation": { - "group": "3_ExtensionTests", - "order": 2 - } - }, - { - "name": "Extension Tests (current file)", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--disable-extensions", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/test/unit/index", - "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder" - ], - "env": { - "TEST_FILE": "${relativeFile}", - "DEVELOPMENT_PATH": "${workspaceFolder}", - "AWS_TOOLKIT_AUTOMATION": "local" - }, - "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], - "preLaunchTask": "watch", - "presentation": { - "group": "2_ExtensionTestsCurrentFile", - "order": 2 - } - }, - { - "name": "Extension Tests (web)", - "type": "extensionHost", - "debugWebWorkerHost": true, - "request": "launch", - "args": [ - "--disable-extension=amazonwebservices.aws-toolkit-vscode", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionDevelopmentKind=web", - "--extensionTestsPath=${workspaceFolder}/dist/test/web/testRunnerWebCore", - "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder" - ], - "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], - "preLaunchTask": "webRun", - "presentation": { - "group": "3_ExtensionTests", - "order": 3 - } - }, - { - "name": "E2E Test (current file)", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--disable-extension=amazonwebservices.aws-toolkit-vscode", - "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/test/e2e/index.js" - ], - "env": { - "TEST_FILE": "${relativeFile}", - "DEVELOPMENT_PATH": "${workspaceFolder}", - "AWS_TOOLKIT_AUTOMATION": "local" - }, - "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], - "preLaunchTask": "watch", - "presentation": { - "group": "4_E2ETestCurrentFile", - "order": 2 - } - }, - { - "name": "Attach to Language Server", - "type": "node", - "request": "attach", - "port": 6080, // Hard defined in core/src/shared/lsp/platform.ts - "outFiles": ["${workspaceFolder}/../../../language-servers/**/out/**/*.js"], - "skipFiles": [ - "/**", - "${workspaceFolder}/../../../language-servers/**/node_modules/**/*.js" - ], - "restart": { - "maxAttempts": 10, - "delay": 1000 - } - } - ], - "compounds": [ - { - "name": "Launch LSP with Debugging", - "configurations": ["Extension", "Attach to Language Server"], - "presentation": { - "group": "1_Extension", - "order": 5 - } - } - ] -} diff --git a/packages/amazonq/.vscode/settings.json b/packages/amazonq/.vscode/settings.json deleted file mode 100644 index 4715e0254bf..00000000000 --- a/packages/amazonq/.vscode/settings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "files.exclude": {}, - "search.exclude": { - "dist": true, - "node_modules": true - }, - "files.watcherExclude": {}, - "typescript.preferences.importModuleSpecifier": "relative", - "javascript.preferences.importModuleSpecifier": "relative", - "typescript.tsdk": "../../node_modules/typescript/lib", - "npm.packageManager": "npm" -} diff --git a/packages/amazonq/.vscode/tasks.json b/packages/amazonq/.vscode/tasks.json deleted file mode 100644 index 86652ec71df..00000000000 --- a/packages/amazonq/.vscode/tasks.json +++ /dev/null @@ -1,174 +0,0 @@ -// See https://go.microsoft.com/fwlink/?LinkId=733558 -// for the documentation about the tasks.json format -{ - "version": "2.0.0", - "tasks": [ - { - "label": "watch", - "type": "shell", - "command": "npm", - "args": ["run", "watch"], - "problemMatcher": "$tsc-watch", - "isBackground": true, - "group": { - "kind": "build", - "isDefault": true - }, - "dependsOn": ["watchCore", "webpackCore", "serveVueCore"] - }, - { - "label": "watchCore", - "command": "npm run compileOnly -- --watch", - "type": "shell", - "isBackground": true, - "problemMatcher": "$tsc-watch", - "options": { - "cwd": "${workspaceFolder}/../../packages/core" - } - }, - { - "label": "webpackCore", - "command": "npm run webpackDev -- --watch", - "type": "shell", - "isBackground": true, - "problemMatcher": "$ts-webpack-watch", - "options": { - "cwd": "${workspaceFolder}/../../packages/core" - } - }, - { - "label": "serveVueCore", - "command": "npm run serveVue", - "type": "shell", - "detail": "Webpack + local server for Vue webview files from `core`.", - "isBackground": true, - "problemMatcher": "$ts-webpack-watch", - "options": { - "cwd": "${workspaceFolder}/../../packages/core" - }, - "presentation": { "panel": "dedicated" } - }, - { - "label": "terminate", - "command": "echo run terminate", - "type": "shell", - "presentation": { - "close": true - } - }, - // ---------- Start: Web Mode Tasks ---------- - { - "label": "webRun", - "type": "npm", - "script": "webRun", - "detail": "Runs VS Code in the Chrome browser with our toolkit installed", - "isBackground": true, - "dependsOn": ["webWatch"], - /** - We only need this problem matcher to signal when this task is completed. - Since this task starts a web server it does not terminate and we need to use - problemMatcher.background.endsPattern to read the CLI and know when this task - can signal it is done. - - The rest of the data in problemMatcher is required by VS Code to be "valid", - but not important for what we need. - - Doc: https://code.visualstudio.com/Docs/editor/tasks#_defining-a-problem-matcher - **/ - "problemMatcher": { - "pattern": [ - { - "regexp": "this section irrelevant but it must exist to work", - "file": 1, - "location": 2, - "message": 3 - } - ], - "background": { - "activeOnStart": true, - "beginsPattern": "^@vscode/test-web", - "endsPattern": "^Listening on" - } - } - }, - { - "label": "webWatch", - "type": "npm", - "script": "webWatch", - "detail": "Webpacks our toolkit code (with --watch) in preparation to be run in the browser", - "isBackground": true, - // Since `webpack --watch` never terminates (but finishes packaging at some point), - // VS Code uses this to parse the CLI output to pattern match something that indicates it is done - "problemMatcher": "$ts-webpack-watch", - "dependsOn": ["webCoreModuleWatch"] - }, - { - "label": "webCoreModuleWatch", - "type": "shell", - "command": "npm run compileDev -- --watch", - "detail": "Webpacks our toolkit code as a module in preparation to be webpacked by the toolkit package", - "isBackground": true, - // Since `webpack --watch` never terminates (but finishes packaging at some point), - // VS Code uses this to parse the CLI output to pattern match something that indicates it is done - "problemMatcher": "$ts-webpack-watch", - "options": { - "cwd": "${workspaceFolder}/../../packages/core" - } - }, - /** - After we stop debugging our browser, we also want to stop the web server. - When this task is ran it will stop the web server. - - From: https://stackoverflow.com/a/60330174 - **/ - { - "label": "webRunTerminate", - "command": "echo ${input:webRunTerminate}", - "type": "shell", - "dependsOn": [] - }, - // ---------- End: Web Mode Tasks ---------- - { - "type": "npm", - "script": "lint", - "problemMatcher": "$eslint-stylish" - }, - { - "type": "npm", - "script": "lintfix", - "problemMatcher": "$eslint-stylish" - }, - { - "type": "npm", - "script": "compile", - "dependsOn": ["Kill Tasks"], - "problemMatcher": "$tsc" - }, - { - "type": "npm", - "script": "clean", - "dependsOn": ["Kill Tasks"], - "problemMatcher": [] - }, - { - "label": "Kill Tasks", - "type": "process", - "command": "${input:killTasks}", - "problemMatcher": [] - } - ], - "inputs": [ - { - "id": "killTasks", - "type": "command", - "command": "workbench.action.tasks.terminate", - "args": "terminateAll" - }, - { - "id": "webRunTerminate", - "type": "command", - "command": "workbench.action.tasks.terminate", - "args": "webRun" - } - ] -} diff --git a/packages/amazonq/CHANGELOG.md b/packages/amazonq/CHANGELOG.md deleted file mode 100644 index 4583523540b..00000000000 --- a/packages/amazonq/CHANGELOG.md +++ /dev/null @@ -1,744 +0,0 @@ -## 1.107.0 2026-01-08 - -- Miscellaneous non-user-facing changes - -## 1.106.0 2025-11-21 - -- Miscellaneous non-user-facing changes - -## 1.105.0 2025-11-19 - -- **Bug Fix** Remove show logs menu item for non Q views - -## 1.104.0 2025-11-15 - -- Miscellaneous non-user-facing changes - -## 1.103.0 2025-11-06 - -- **Feature** Q CodeTransformation: add more job metadata to history table - -## 1.102.0 2025-10-30 - -- Miscellaneous non-user-facing changes - -## 1.101.0 2025-10-22 - -- Miscellaneous non-user-facing changes - -## 1.100.0 2025-10-16 - -- Miscellaneous non-user-facing changes - -## 1.99.0 2025-10-10 - -- Miscellaneous non-user-facing changes - -## 1.98.0 2025-10-02 - -- Miscellaneous non-user-facing changes - -## 1.97.0 2025-09-29 - -- Miscellaneous non-user-facing changes - -## 1.96.0 2025-09-25 - -- **Bug Fix** Amazon Q support web/container environments running Ubuntu/Linux, even when the host machine is Amazon Linux 2. - -## 1.95.0 2025-09-19 - -- **Bug Fix** Amazon Q automatically refreshes expired IAM Credentials in Sagemaker instances - -## 1.94.0 2025-09-11 - -- Miscellaneous non-user-facing changes - -## 1.93.0 2025-09-05 - -- Miscellaneous non-user-facing changes - -## 1.92.0 2025-08-28 - -- **Feature** Amazon Q supports admin control for MCP servers to restrict MCP server usage -- **Feature** Enabling dynamic model fetching capabilities in Amazon Q chat -- **Feature** Amazon Q: Support for configuring and utilizing remote MCP servers. - -## 1.91.0 2025-08-22 - -- **Bug Fix** Enable inline completion in Jupyter Notebook -- **Feature** Amazon Q supports admin control for MCP servers to restrict MCP server usage - -## 1.90.0 2025-08-15 - -- Miscellaneous non-user-facing changes - -## 1.89.0 2025-08-13 - -- Miscellaneous non-user-facing changes - -## 1.88.0 2025-08-06 - -- **Feature** Amazon Q Chat provides error explanations and fixes when hovering or right-clicking on error indicators and messages -- **Feature** /transform: Show transformation history in Transformation Hub and allow users to resume jobs - -## 1.87.0 2025-07-31 - -- Miscellaneous non-user-facing changes - -## 1.86.0 2025-07-30 - -- **Bug Fix** Let Enter invoke auto completion more consistently -- **Bug Fix** Faster and more responsive inline completion UX -- **Bug Fix** Use documentChangeEvent as auto trigger condition - -## 1.85.0 2025-07-19 - -- Miscellaneous non-user-facing changes - -## 1.84.0 2025-07-17 - -- **Bug Fix** Slightly delay rendering inline completion when user is typing -- **Bug Fix** Render first response before receiving all paginated inline completion results -- **Feature** Explain and Fix for any issue in Code Issues panel will pull the experience into chat. Also no more view details tab. - -## 1.83.0 2025-07-09 - -- **Feature** Amazon Q /test, /doc, and /dev capabilities integrated into Agentic coding. -- **Feature** Added image support to Amazon Q chat, users can now upload images from their local file system -- **Removal** Deprecate "amazon q is generating..." UI for inline suggestion - -## 1.82.0 2025-07-07 - -- **Bug Fix** Prompt re-authenticate if auto trigger failed with expired token - -## 1.81.0 2025-07-02 - -- **Bug Fix** Stop auto inline completion when deleting code - -## 1.80.0 2025-07-01 - -- Miscellaneous non-user-facing changes - -## 1.79.0 2025-06-25 - -- **Bug Fix** Added automatic system certificate detection and VSCode proxy settings support -- **Bug Fix** Improved Amazon Linux 2 support with better SageMaker environment detection -- **Feature** /transform: run all builds client-side - -## 1.78.0 2025-06-20 - -- **Bug Fix** Resolve missing chat options in Amazon Q chat interface. - -## 1.77.0 2025-06-18 - -- Miscellaneous non-user-facing changes - -## 1.76.0 2025-06-18 - -- **Bug Fix** /transform: only show lines of code statistic in plan -- **Feature** Add model selection feature -- **Feature** Pin context items in chat and manage workspace rules - -## 1.75.0 2025-06-13 - -- Miscellaneous non-user-facing changes - -## 1.74.0 2025-06-12 - -- Miscellaneous non-user-facing changes - -## 1.73.0 2025-06-11 - -- **Feature** Add MCP Server Support - -## 1.72.0 2025-06-11 - -- **Feature** Launch LSP with bundled artifacts as fallback - -## 1.71.0 2025-06-04 - -- Miscellaneous non-user-facing changes - -## 1.70.0 2025-05-28 - -- **Removal** Disable local workspace LSP - -## 1.69.0 2025-05-22 - -- **Bug Fix** /transform: avoid prompting user for target JDK path unnecessarily -- **Removal** /transform: remove option to select multiple diffs - -## 1.68.0 2025-05-15 - -- **Bug Fix** Fix Error: 'Amazon Q service is not signed in' -- **Bug Fix** Fix Error: 'Amazon Q Profile is not selected for IDC connection type' -- **Feature** Add inline completion support for abap language - -## 1.67.0 2025-05-14 - -- **Bug Fix** Previous and subsequent cells are used as context for completion in a Jupyter notebook -- **Bug Fix** Support chat in AL2 aarch64 - -## 1.66.0 2025-05-09 - -- **Bug Fix** Avoid inline completion 'Improperly formed request' errors when file is too large -- **Bug Fix** Named agent tabs sometimes open with unnecessary input options - -## 1.65.0 2025-05-05 - -- **Feature** Support selecting customizations across all Q profiles with automatic profile switching for enterprise users -- **Feature** Memorize and autofill users' last Sso login profile - -## 1.64.0 2025-05-02 - -- **Bug Fix** Enable Amazon Q LSP in AL2 instances - -## 1.63.0 2025-05-01 - -- **Bug Fix** Q profile selection hangs when a region is blocked -- **Feature** Agentic coding experience: Amazon Q can now write code and run shell commands on your behalf - -## 1.62.0 2025-04-25 - -- **Bug Fix** Toast message to warn users if Developer Profile is not selected -- **Bug Fix** Fix users can not log in successfully with 2+ IDE instnaces open due to throttle error throw by the service - -## 1.61.0 2025-04-22 - -- **Bug Fix** Some users not signaled they needed to select a Region Profile to get features working -- **bugfix** /review: disable auto-review by default - -## 1.60.0 2025-04-18 - -- **Bug Fix** Users might be bound to a customization which they dont have access with the selected profile and it causes service throwing 403 when using inline suggestion and chat features - -## 1.59.0 2025-04-11 - -- **Bug Fix** Code fix line number or file is sometimes not accurate -- **Bug Fix** Fix Q agents will fail for /transform /dev /test features if IdC kms key is configured with 400 error - -## 1.58.0 2025-04-11 - -- **Bug Fix** inline chat activates properly when using 'aws.experiments.amazonqChatLSP' feature flag -- **Bug Fix** Amazon Q Chat: code blocks in responses flicker, switching tabs during answer streaming makes expand button disappear -- **Bug Fix** Amazon Q Chat: tab bar buttons disappear when closing non-active tab -- **Bug Fix** Amazon Q Chat: chat history list does not truncate markdown - -## 1.57.0 2025-04-10 - -- **Bug Fix** Fix bug where generate fix does not work -- **Bug Fix** Fix bug where review shows 0 findings - -## 1.56.0 2025-04-09 - -- **Bug Fix** Improve status message while loading Amazon Q Profiles during login -- **Bug Fix** "failed to run command" error - -## 1.55.0 2025-04-09 - -- **Bug Fix** Amazon Q Chat: Update chat history icon -- **Bug Fix** Amazon Q Chat: chat occasionally freezes and displays gray screen -- **Bug Fix** Amazon Q Chat: Set owner-only permissions for chat history and saved prompt files -- **Feature** `/test` generates tests in all languages, not only Java/Python -- **Feature** Amazon Q chat: Click export icon to save chat transcript in Markdown or HTML -- **Feature** SageMaker: Disable the unsupported agentic commands and welcome prompt -- **Feature** Amazon Q Chat: Add `@code` context for PHP, Ruby, Scala, Shell, and Swift projects -- **Feature** Enterprise users can choose their preferred Amazon Q profile to improve personalization and workflow across different business regions - -## 1.54.0 2025-04-03 - -- **Bug Fix** Amazon Q chat: `@prompts` not added to context -- **Feature** Amazon Q chat: View and search chat history -- **Feature** SageMaker Unified Studio: Disable Sign out -- **Feature** SageMaker Unified Studio: Update Q Chat Introduction message -- **Feature** /review: automatically generate fix without clicking Generate Fix button -- **Feature** Amazon Q chat: Automatically persist chats between IDE sessions -- **Feature** Save user command execution logs to plugin output. -- **Feature** Amazon Q chat: Code blocks in chat messages have a max-height of 21 lines and can be scrolled inside - -## 1.53.0 2025-03-28 - -- **Bug Fix** Amazon Q Chat: Choosing a nested subfolder for `/doc` on Windows results in `The folder you chose did not contain any source files` error -- **Feature** Add support for Code search in Q chat -- **Feature** (Experimental) Amazon Q inline code suggestions via Amazon Q Language Server. (enable with `aws.experiments.amazonqLSP: true`) -- **Feature** Command Palette: Add `Amazon Q: Open Chat` command. - -## 1.52.0 2025-03-20 - -- **Bug Fix** Amazon Q chat: @Folders and @Files are missing `@` prefix in chat history -- **Bug Fix** /review: Code Issues ellipses menu displays AWS Toolkit options, if installed. -- **Bug Fix** Amazon Q chat: Progress indicator height is stretched -- **Bug Fix** Amazon Q chat: Long descriptions in context list are cut off -- **Bug Fix** Amazon Q chat: Improve responses for saved prompts and workspace rules -- **Bug Fix** /test: show descriptive error message -- **Bug Fix** Code Review: Fixed a bug where issues are double counted in the Q chat -- **Bug Fix** Amazon Q chat: Animation timings are too long -- **Bug Fix** Fix inline completion failure due to context length exceeding the threshold -- **Feature** /review: passing referenceTrackerConfiguration to StartCodeFixJob -- **Feature** /review: rename setting `showInlineCodeSuggestionsWithCodeReferences` to `showCodeWithReferences` - -## 1.51.0 2025-03-12 - -- **Bug Fix** increase scan timeout to reduce front-end timeout errors -- **Bug Fix** Amazon Q chat: Create a new prompt form does not autofocus or submit with Enter press -- **Bug Fix** /review: Zip files are created with the wrong file path for file scans in multifolder workspaces. -- **Bug Fix** /review: Invalid file path characters caused some detections to be skipped on Windows -- **Feature** Amazon Q Chat: You can now keep a "library" of prompt files in your home directory under `~/.aws/amazonq/prompts` and then quickly add them to the context using `@` on any project you’re working on. Prompt files are in markdown (`.md`) format. -- **Feature** /review: show code diff for fix preview -- **Feature** /test: display test plan summary in chat after generating tests - -## 1.50.0 2025-03-06 - -- **Bug Fix** /doc: Usage in multiple chat tabs may cause unexpected behavior. -- **Bug Fix** /review: subsequent reviews weren't possible -- **Feature** Amazon Q chat: Use `@` to add folders, files, and saved prompts as context -- **Feature** Amazon Q chat: increase chat input height to 3 lines -- **Feature** Amazon Q chat: Show list of files sent as context in chat response -- **Feature** Amazon Q chat: Add support for `.md` file rules in workspace-level `.amazonq/rules` directory -- **Test** add Q Chat /review command test coverage - -## 1.49.0 2025-02-27 - -- **Bug Fix** Amazon Q /test: Unit test generation displays an inaccurate diff view for non-primary packages in the workspace. -- **Bug Fix** Amazon Q /doc: Fix uploading file method throwing incorrect workspace too large error message -- **Bug Fix** /transform: skip running tests locally when user chooses to do so -- **Bug Fix** /review: ignored lines should not show up in scan issues -- **Bug Fix** /test: update capability card text - -## 1.48.0 2025-02-20 - -- **Bug Fix** /dev and /doc: Multi-root workspace with duplicate files causes infinite 'Uploading code...' loop -- **Bug Fix** Amazon Q /doc: update workspace too large error message -- **Bug Fix** /review: Auto-review should not remove issues from manual reviews -- **Bug Fix** /transform: allow View Summary button to work even after accepting diff -- **Bug Fix** Amazon Q /test: Fixing the issue of target file does not exist. -- **Feature** Amazon Q /doc: Add support for infrastructure diagrams - -## 1.47.0 2025-02-13 - -- **Bug Fix** `Send to prompt` and other context menu options not sent if chat was closed -- **Bug Fix** Amazon Q /test: Truncating user input to 4096 characters for unit test generation. -- **Bug Fix** Amazon Q /test: Q identify active test file and infer source file for test generation. -- **Bug Fix** /review: Code review starts automatically when invoked from menu -- **Feature** Amazon Q /dev: support `.hbs`, `.gjs`, `.gts`, `.astro`, `.mdx`, `.svelte`, `.erb`, `.rake` files -- **Feature** /transform: automatically download results when ready -- **Feature** /transform: support Java 21 transformations -- **Removal** Reverted prefetch logic to enable more stable inline completion - -## 1.46.0 2025-02-05 - -- **Bug Fix** Citation links are not clickable as numbers, but appear as non-clickable texts -- **Bug Fix** Fix language server start failure in AL2023 ARM64 -- **Bug Fix** /review: Auto-review issues did not populate code issues list -- **Bug Fix** Amazon Q: Fix code upload error when using /dev or /doc on Remote SSH -- **Bug Fix** /test placeholder text aligned across IDEs -- **Bug Fix** Inline: Typos in the first example suggestion -- **Feature** Inline suggestions: Pre-fetch recommendations to reduce suggestion latency. -- **Feature** Added github issue link and description to the chat answer feedback form - -## 1.45.0 2025-01-30 - -- **Bug Fix** Allow AB users with an overridden customization to go back to the default customization -- **Bug Fix** For security reasons, disabled auto linkify for link texts coming in markdown other than [TEXT](URL) format -- **Feature** Add setting to allow Q /dev to run code and test commands - -## 1.44.0 2025-01-23 - -- **Bug Fix** Amazon Q: word duplication when pressing tab on context selector fixed -- **Bug Fix** Amazon Q /doc: Prevent users from requesting changes if no iterations remain -- **Bug Fix** `/test`: view diffs by clicking files in the file tree, aligning the behavior with the 'View Diff' button. -- **Bug Fix** /review: Improved error handling for code fix operations -- **Bug Fix** Amazon Q: cursor no longer jumps after navigating prompt history -- **Bug Fix** Improve the text description of workspace index settings -- **Bug Fix** Notifications: 'Dismiss' command visible in command palette. -- **Bug Fix** /transform: replace icons in Transformation Hub with text -- **Bug Fix** Amazon Q /doc: Ask for user prompt if error occurs while updating documentation -- **Feature** Amazon Q: increase chat current active file context char limit to 40k -- **Feature** /review: Code issues can be grouped by file location or severity - -## 1.43.0 2025-01-15 - -- **Bug Fix** Auth: Valid StartURL not accepted at login -- **Bug Fix** Fix inline completion supplementalContext length exceeding maximum in certain cases -- **Bug Fix** Amazon Q /test: Unit test generation completed message shows after accept/reject action -- **Bug Fix** /test: for unsupported languages was sometimes unreliable -- **Bug Fix** User-selected customizations are sometimes not being persisted. -- **Bug Fix** Amazon q /dev: Remove hard-coded limits and instead rely server-side data to communicate number of code generations remaining -- **Feature** Adds capability to send new context commands to AB groups -- **Feature** feat(amazonq): Add error message for updated README too large -- **Feature** Enhance Q inline completion context fetching for better suggestion quality - -## 1.42.0 2025-01-09 - -- **Bug Fix** Amazon Q /doc: Improve button text phrasing -- **Bug Fix** Amazon Q /dev: Fix issue when files are deleted while preparing context -- **Bug Fix** Amazon Q Code Transformation: allow POSTGRESQL as target DB for SQL conversions -- **Bug Fix** Fix context menu displaying when typing @, even though input is disallowed -- **Bug Fix** Amazon Q can update mvn and gradle build files -- **Bug Fix** /transform: use correct documentation link in SQL conversion help message -- **Bug Fix** Up/down history navigation only triggering on first/last line of prompt input -- **Bug Fix** Amazon Q /test: Fix to redirect /test to generate tests in chat for external files out of workspace scope. -- **Bug Fix** /review: Code block extends beyond page margins in code issue detail view -- **Bug Fix** Amazon Q Code Transformation: retry project upload up to 3 times -- **Feature** Amazon Q Code Transformation: add view summary button in chat -- **Feature** Amazon Q: new code syntax highlighter for improved accuracy -- **Removal** Settings: No longer migrate old CodeWhisperer settings or initialize telemetry setting from AWS Toolkit. - -## 1.41.0 2024-12-17 - -- **Bug Fix** /review: Apply fix removes other issues in the same file. -- **Bug Fix** Fix(Amazon Q Code Transformation): show correct diff when running consecutive transformations -- **Bug Fix** Improve when the welcome page is shown in amazon q chat -- **Bug Fix** Code Review: Cleaned up output logs when running /review -- **Bug Fix** Code Review: Fixed a bug where applying a fix did not update the positions of other issues in the same file. -- **Bug Fix** Chat: When navigating to previous prompts, code attachments are sometimes displayed incorrectly -- **Bug Fix** /review: Diagnostics in the problems panel are mapped to the wrong code -- **Bug Fix** Fix opentabs context possibly timeout due to race condition of misuse of different timeout functionalities -- **Bug Fix** Auth: SSO session was bad, but no reauth prompt given -- **Bug Fix** Reduce frequency of system status poll -- **Bug Fix** Chat: When writing a prompt without sending it, navigating via up/down arrows sometimes deletes the unsent prompt. -- **Bug Fix** Code Review: Fixed a bug where projects with repeated path names did not scan properly. -- **Feature** /review: Code fix automatically scrolls into view after generation. -- **Feature** Chat: improve font size and line-height in footer (below prompt input field) - -## 1.40.0 2024-12-10 - -- **Bug Fix** Improved LLM code review for file review. -- **Bug Fix** @workspace is missing from the welcome to q chat tab -- **Bug Fix** Fix chat syntax highlighting when using several different themes -- **Bug Fix** Amazon Q /doc: progress bar persists after cancelling README creation -- **Bug Fix** Code Review: Fixed a bug where some issues are missing from the code issues view for workspaces with custom names -- **Bug Fix** Amazon Q /doc: Prompt user to choose a folder in chat -- **Bug Fix** Amazon Q /dev not adding Dockerfiles in nested folders -- **Bug Fix** Improved Code Fix generation for code review issues -- **Bug Fix** Fix the quick start buttons on the explore page to show amazon q colours on hover -- **Feature** Q feature dev: recognize .bms, .pli code files -- **Feature** Amazon Q Code Transformation: show job ID in Transformation Hub -- **Feature** UI improvements to Amazon Q Chat: New splash loader animation, initial streaming card animation, improved button colours -- **Feature** Add acknowledgement button for amazon q chat disclaimer -- **Feature** Navigate through prompt history by using the up/down arrows -- **Feature** Amazon Q: Simplify log channel - -## 1.39.0 2024-12-03 - -- **Feature** Added a getting started page for exploring amazon q agents -- **Feature** `/test` in Q chat to generate unit tests for java and python -- **Feature** `/doc` in Q chat to generate and update documentation for your project -- **Feature** Amazon Q Code Scan is now Amazon Q Code Review -- **Feature** `/review` in Q chat to scan your code for vulnerabilities and quality issues, and generate fixes -- **Feature** Security Scan: New TreeView to display security scan issues and vulnerabilities detected in your project. The TreeView provides an organized and hierarchical view of the scan results, making it easier to navigate and prioritize the issues that need to be addressed. -- **Feature** Security Scan: Added ability to suppress or ignore security issues - -## 1.38.0 2024-11-27 - -- **Feature** Amazon Q /dev: support `Dockerfile` files -- **Feature** Introduce @workspace command to enhance context fetching for Chat -- **Feature** Feature(Amazon Q Code Transformation): allow users to view results in 5 smaller diffs - -## 1.37.0 2024-11-22 - -- **Bug Fix** Amazon Q Feature Dev: display limit reached error message -- **Bug Fix** Amazon Q chat: `@workspace` command shown in all tab types -- **Bug Fix** Chat container exceeds width of container -- **Bug Fix** amazon q inline: skip indexing when no workspace folders are found -- **Bug Fix** file details and name unneccessary cropping -- **Bug Fix** Amazon Q /dev: update diff window behavior after a change is accepted -- **Feature** Amazon Q /dev: support `.gradle` files -- **Feature** Code Transform: Enable support for Java 17 projects. -- **Feature** Notifications: Support for delivering critical alerts and product updates -- **Feature** Retrieve and display a customization name when a customization is overridden in an AB test -- **Feature** Feature(Amazon Q Code Transformation): support conversions of embedded SQL from Oracle to PostgreSQL - -## 1.36.0 2024-11-14 - -- **Bug Fix** Fix broken inline suggestion auto-trigger on Systemverfilog files if users dont have systemverilog extension installed and enabled -- **Bug Fix** tutorial always showing on start -- **Feature** Enable default `@workspace` context of Amazon Q chat for certain users -- **Feature** Amazon Q /dev: Add an action to accept individual files - -## 1.35.0 2024-11-11 - -- **Breaking Change** Change focus chat keybind to win+alt+i on Windows, cmd+alt+i on macOS, and meta+alt+i on Linux -- **Bug Fix** Fix suboptimal inline suggestions from Amazon Q caused by improperly formatted supplemental context -- **Bug Fix** Fix empty chunks being sent to service and get validationException - -## 1.34.0 2024-11-07 - -- **Bug Fix** Align example help text with prompt message in chat -- **Bug Fix** Improve `@workspace` index auto pause start strategy. -- **Feature** Allow users to View and Apply diff when they explictily send code to Amazon Q using - Fix, Refactor, Optimize and Send To Prompt. -- **Feature** Security Scan: Auto-scan now supports JSX, TSX, Kotlin, Scala, and Shell files. - -## 1.33.0 2024-10-30 - -- **Bug Fix** Amazon Q /dev: fix for stop button showing for Code Transformation - -## 1.32.0 2024-10-29 - -- **Bug Fix** Remove warning when no input is provided to inline chat input box -- **Bug Fix** Use Sagemaker environment IAM Credentials for Code Completion when they're available -- **Bug Fix** Inline: Code completion not working for Sagemaker Pro Tier users. -- **Bug Fix** Disable /transform and /dev commands for sagemaker users as they're not supported -- **Feature** Amazon SageMaker Studio: Enable Free Tier Chat for IAM users - -## 1.31.0 2024-10-29 - -- **Breaking Change** Change keybind for focusing chat to ctrl+win+i on Windows, ctrl+cmd+i on macOS and ctrl+meta+i on Linux -- **Bug Fix** Inline Suggestions: Occasional `ValidationException` if user context has too many characters. -- **Bug Fix** Update `@workspace` index when adding or deleting a file -- **Bug Fix** fixed device code detection when running auth through tunneled vscode -- **Feature** Use inline chat to select code and transform it with natural language instructions -- **Feature** Amazon Q /dev: Add stop generation action -- **Feature** Provide more frequent updates about code changes made by agent - -## 1.30.0 2024-10-17 - -- **Bug Fix** Various fixes and changes - -## 1.29.0 2024-10-10 - -- **Bug Fix** Amazon Q /dev: include telemetry for workspace usage when generating new files -- **Bug Fix** Amazon Q extension may fail to start if AWS Toolkit extension fails to start -- **Bug Fix** Start language server by default -- **Bug Fix** Amazon Q Feature Dev: Add error messages when the upload URL expires -- **Bug Fix** Amazon Q (/dev): view diffs of previous /dev iterations -- **Bug Fix** Q dev handle no change required -- **Deprecation** The next release of this extension will require VS Code 1.83.0 or newer. -- **Feature** Automatically pause and resume @workspace indexing when OS CPU load is high -- **Feature** Add buttons to code blocks to view and accept diffs. -- **Feature** Inline completion for more json files, and all yaml files -- **Feature** Show a one-time warning if new VS Code is required -- **Removal** Minimum required VSCode version is now 1.83 - -## 1.28.0 2024-10-03 - -- **Bug Fix** Amazon Q /dev: define first folder as a root path for LLM-created files when using workspaces -- **Feature** Amazon Q Code Transformation: allow users to skip running tests -- **Feature** Amazon Q Developer: Updated legal disclaimer text - -## 1.27.0 2024-09-27 - -- **Bug Fix** Security Scan: Fixes an issue that incorrectly removes hardcoded credentials detections from auto scans. - -## 1.26.0 2024-09-19 - -- **Bug Fix** Security Scan: Fixed an issue where the wrong icon was used in the status bar menu. -- **Bug Fix** Disable Amazon Q LSP in AL2 -- **Bug Fix** Amazon Q Chat: Fix shifted chat contents when closing and opening chat panel back -- **Bug Fix** Security Scan: Minor styling improvements in the security issue webview panel -- **Bug Fix** Amazon Q Chat: Fix tooltip remaining on screen when closing and opening chat panel back -- **Bug Fix** Auth: Login state not updating across multiple VS Code windows. -- **Feature** Support @workspace queries for specific files like `@workspace what does test.ts do? `. - -## 1.25.0 2024-09-12 - -- **Bug Fix** Amazon Q Chat: Fixed inline code blocks are not vertically aligned with texts -- **Feature** Record telemetry event when Amazon Q extension is uninstalled. -- **Feature** Improve workspace indexing by only index files that are changed since last indexing -- **Removal** Amazon Q Feature dev: Remove approach generation flow - -## 1.24.0 2024-09-05 - -- **Bug Fix** Network errors causing premature SSO logout -- **Bug Fix** Fix SyntaxError causing premature expiration (edge case) -- **Bug Fix** Amazon Q Code Transformation: show instructions for finding JDK path on Linux -- **Bug Fix** UI: 'Start using Amazon Q' may display even if the user is signed in. -- **Bug Fix** Add getFeature and isEnabled utility methods to FeatureConfigProvider -- **Feature** Amazon Q /dev: include in progress state agent in code generation -- **Feature** Reduce workspace CPU indexing time by 50% - -## 1.23.0 2024-08-29 - -- **Bug Fix** Fix bug when undo inline suggestion causes command not found -- **Bug Fix** Auth: `SyntaxError` causing unexpected SSO logout -- **Bug Fix** Amazon Q Code Transformation: allow symlinks for JDK path -- **Bug Fix** Fix bug where text with inline code copied from Amazon Q Chat had new line breaks around the inline code text -- **Bug Fix** Fix bug with code indentation and nested list formatting in chat response prompt -- **Bug Fix** Fix bug when disabled commands does not get filtered in quick actions -- **Bug Fix** Auth: Users may be silently logged out due to network issues when starting the extension. -- **Feature** Support AB testing - -## 1.22.0 2024-08-22 - -- **Bug Fix** Avoid refreshing code suggestion for paginated response -- **Bug Fix** Update login logo styling -- **Bug Fix** Correct indentation when insert Q chat code at cursor position -- **Feature** Add notification for extended session to IdC users -- **Feature** Support more programming languages for workspace index - -## 1.21.0 2024-08-15 - -- **Bug Fix** Q feature dev: update file extension list and minor UI fixes - -## 1.20.0 2024-08-08 - -- **Bug Fix** Amazon Q /dev: include a retry option for the same prompt after folder reselection -- **Bug Fix** Ignore virtual environment when indexing workspace -- **Feature** Amazon Q Code Transformation: show pro tier users estimated cost of /transform on projects over 100K lines -- **Feature** Amazon Q Code Transformation: warn user if absolute file paths are found in the pom.xml - -## 1.19.0 2024-08-01 - -- **Bug Fix** Amazon Q Chat: Fixing issue with an incorrect input cursor position in the prompt text box -- **Bug Fix** Amazon Q Chat: Fixing issue with the max tabs notification not being dismissible. -- **Bug Fix** Amazon Q Chat: Showing/hiding the scrollbars is now controlled by the OS settings -- **Bug Fix** Q chat may stop responding after processing Python/Java code -- **Feature** Amazon q /dev: i18n support for messaging - -## 1.18.0 2024-07-29 - -- **Bug Fix** Security Scan: Fixed an issue scans were not able to succeed on Java projects with .class files -- **Bug Fix** FileNotFound error causing early SSO expiration - -## 1.17.0 2024-07-25 - -- **Bug Fix** Amazon Q Dev and Transform introduction text formatted incorrectly -- **Bug Fix** Amazon Q /dev: update error message for code gen timeout and include backfill for error name -- **Bug Fix** Sign-in page may fail to render in rare circumstances. - -## 1.16.0 2024-07-18 - -- **Bug Fix** Amazon q /dev: include granular error handling for code generation failed state -- **Bug Fix** Amazon Q Code Transformation: always show build logs from last job run -- **Bug Fix** Unexpected SSO expiration on Windows due to EPERM - -## 1.15.0 2024-07-15 - -- **Bug Fix** Amazon Q Chat: Fixes a bug when the prompt input exceeds the width of the chat box it's not always wrapped correctly. -- **Bug Fix** Amazon Q: Corrected a miswording in the Amazon Q: Share Content With AWS setting. -- **Bug Fix** Amazon Q Chat: Fixes a bug when user input contains 4 or more spaces at the beginning of the line for multiline inputs, that line appears like a code block instead of a paragraph - -## 1.14.0 2024-07-11 - -- **Feature** Amazon Q/dev proactively show code generation iterations - -## 1.13.0 2024-07-11 - -- **Bug Fix** AD/LDAP users may see "uv_os_get_passwd ENOENT" error on startup #5277 -- **Feature** Add support for [Amazon Q Chat Workspace Context](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/workspace-context.html). Customers can use `@workspace` to ask questions regarding local workspace. - -## 1.12.0 2024-07-08 - -- **Bug Fix** Amazon Q Security Scans: Fixed unnecessary yellow lines appearing in both auto scans and project scans. -- **Bug Fix** Amazon Q Chat: Fixed prompt input becomes invisible if an html special character is inserted -- **Bug Fix** Amazon Q Chat: Fixed button font sizes are too big -- **Bug Fix** Amazon Q Chat: Fixed buttons don't show borders inside a message -- **Bug Fix** Amazon Q Code Transform: Link UI messages to troubleshooting docs -- **Bug Fix** Amazon Q /dev command: improve user error messages -- **Bug Fix** Amazon Q Chat: Fixed button texts are cropped too short -- **Bug Fix** Amazon Q Chat: Fixed prompt input and selected command horizontal alignment -- **Bug Fix** Amazon Q Chat: Fixed prompt input becomes invisible when multine text inserted with paste -- **Feature** Q feature dev: Only use relevant code and related files - -## 1.11.0 2024-06-27 - -- **Bug Fix** Amazon Q Chat: Fix for inline buttons don't have borders -- **Bug Fix** Amazon Q Chat: Fix for some edge cases when followups appear on top without styles -- **Bug Fix** Amazon Q Chat: Fix for prompt input removes whole word if it starts with @ character but there is no context selected -- **Bug Fix** Amazon Q Chat: Fix for prompt input doesn't show multi line content properly after it reaches 10-15 lines -- **Bug Fix** Amazon Q /dev command: Fix in progress experience for ongoing backend calls - -## 1.10.0 2024-06-21 - -- **Bug Fix** Security Scan: Fixes an issue where project-scans time out for larger projects. -- **Bug Fix** Amazon Q /dev command: Fix file rejections for files outside of src/ -- **Bug Fix** Feature Development: update /dev welcome message -- **Bug Fix** Amazon Q Chat: Fixed broken code blocks with typewriter text in list items. -- **Feature** UX: New style for the login window -- **Removal** Auth: No longer share SSO sessions with AWS Toolkit. - -## 1.9.0 2024-06-14 - -- **Bug Fix** Amazon Q inline suggestions: remember `Pause Auto-Suggestions` after IDE restart -- **Bug Fix** Amazon Q /dev command: stop showing spinner when there is an error. -- **Bug Fix** Security Scan: Fixes an issue where auto-scans cause the editor to become unresponsive for larger projects. -- **Bug Fix** Fix(Amazon Q Code Transformation): show more detailed error messages for proxy issues -- **Feature** Amazon Q Code Transform: Allow user to view transformation build log - -## 1.8.0 2024-06-07 - -- **Bug Fix** fix(featureDev): fix file rejection for multi-workspaces -- **Feature** The `Send to Amazon Q` [context menu](https://github.com/aws/aws-toolkit-vscode/assets/371007/ce4c61a4-1b58-48ee-8500-56667d45dd7d) was renamed to `Amazon Q` -- **Feature** Amazon Q Transform: Increase project upload size limit to 2GB -- **Feature** feat(featureDev): generated plan being shown from top -- **Feature** Add additional commands for Amazon Q. - -## 1.7.0 2024-05-30 - -- **Bug Fix** Feature Development: File rejection is not rejecting a file when code is generated -- **Bug Fix** Security Scan: Improved accuracy when applying security fixes -- **Bug Fix** Amazon Q Code Transformation: show more specific error messages on failure cases -- **Feature** Security Scan: Support for scanning files outside of workspaces. -- **Feature** Amazon Q now publishes to Open VSX: https://open-vsx.org/namespace/amazonwebservices - -## 1.6.0 2024-05-21 - -- **Bug Fix** Amazon Q Chat: Inside chat body, if there is a code block inside a list item it shows
tags -- **Bug Fix** Amazon Q Chat: Prompt input field allows additional input beyond the character limit -- **Bug Fix** Amazon Q Chat: Prompt input field not getting focus when chat window opens - -## 1.5.0 2024-05-17 - -- **Bug Fix** Security Scan: Fixes an issue when scanning projects with binary files -- **Bug Fix** Fixes an issue where the /dev chat wouldn't let customers modify the source folder when exceeding the size limit -- **Bug Fix** Security Scan: Improved error notifications -- **Feature** Security Scan: Added custom command to run the security scan. -- **Feature** Security Scan: "View details" and "Explain" options can now be accessed from the problems panel - -## 1.4.0 2024-05-13 - -- **Bug Fix** Auth: No longer request AWS account scopes during login. -- **Bug Fix** Security Scan: Fixes an issue where scans fail for projects with Terraform files -- **Bug Fix** Amazon Q Code Transform: Show additional status messages to align with experience when JAVA_HOME set incorrectly. -- **Feature** UX: Added keyboard navigation to login screen. -- **Feature** New SSO Authorization Code flow for faster logins -- **Feature** Transform: Add human intervention to help update dependencies during transformation. - -## 1.3.0 2024-05-08 - -- **Bug Fix** modifying the root folder for /dev now modifies it -- **Bug Fix** Q chat may stop responding after processing Javascript/Typescript code -- **Bug Fix** Completion may fail unexpected if user opened many tabs -- **Feature** Inline Suggestions: Only display the 'Open Chat' CodeLens if the user is signed into Amazon Q. -- **Feature** Security Scan: Scans can now be run without an open editor -- **Feature** Security Scan: Multi-root workspace support - -## 1.2.0 2024-05-07 - -- **Bug Fix** Fix bug when Amazon Q chat sends code selection while user has no selection -- **Bug Fix** Amazon Q Code Transformation: make jobId visible in job history tab at start of job and allow summary.md + icons to be saved when accepting changes -- **Bug Fix** Amazon Q Chat: Typewriter animator parts showing up in code fields inside listitems -- **Bug Fix** Security Scan: Addresses a bug where security issues sometimes appear multiple times -- **Feature** Update cross file context config for Q inline suggestion -- **Feature** Amazon Q: Security scans now support C, C++, and PHP files - -## 1.1.0 2024-04-30 - -- **Bug Fix** Amazon Q Chat: Fixed markdown is not getting parsed inside list items. -- **Bug Fix** Amazon Q Chat: Copy to clipboard on code blocks doesn't work -- **Bug Fix** Fixed a crash when trying to use Q /dev on large projects or projects containing files with unsupported encoding. - -## 1.0.0 2024-04-29 - -- **Bug Fix** Code Transformation: Address various issues in TransformationHub UX. -- **Bug Fix** Code Transformation: Transform may fail if JAVA_HOME has leading or trailing whitespace -- **Bug Fix** Chat: Q panel doesn't fit to its parent -- **Bug Fix** Feature Development: update welcome message and menu item description for /dev command -- **Bug Fix** Code Transformation: show error messages in chat -- **Bug Fix** Code Transformation: Proposed changes not updated when multiple transformation jobs run in sequence. -- **Bug Fix** Feature Development: Update error message for monthly conversation limit reach -- **Bug Fix** Code Transformation: Omit Maven metadata files when uploading dependencies to fix certain build failures in backend. -- **Feature** Code Transformation: Refreshed UI during CodeTransformation -- **Feature** Chat: cmd + i to open chat -- **Feature** Right Click + no code selected shows Q context menu -- **Feature** Security Scan: Scans can now run on all files in the project -- **Feature** Chat: Updates quick action commands style and groupings -- **Feature** Code Transformation: add details about expected changes in transformation plan -- **Feature** Enable Amazon Q feature development and Amazon Q transform capabilities (/dev and /transform) for AWS Builder ID users. -- **Feature** Initial release -- **Feature** Chat: Added metric parameters to recordAddMessage telemetry event. -- **Feature** Security Scan: Scans can now run automatically when file changes are made -- **Feature** Chat: brief CodeLens to advertise chat -- **Feature** Security Scan: Send security issue to chat for explanation and fix - diff --git a/packages/amazonq/README.md b/packages/amazonq/README.md deleted file mode 100644 index e3ec16bb2ac..00000000000 --- a/packages/amazonq/README.md +++ /dev/null @@ -1,58 +0,0 @@ -![Try Amazon Q Free Tier](https://img.shields.io/badge/Try%20Amazon%20Q-Free%20Tier-success?style=flat-square) -[![Twitter Follow](https://img.shields.io/badge/follow-@aws-1DA1F2?style=flat-square&logo=aws&logoColor=white&label=Follow)](https://x.com/awscloud) -[![Youtube Channel Views](https://img.shields.io/youtube/channel/views/UCd6MoB9NC6uYN2grvUNT-Zg?style=flat-square&logo=youtube&label=Youtube)](https://www.youtube.com/@amazonwebservices) -![Marketplace Installs](https://img.shields.io/vscode-marketplace/i/AmazonWebServices.amazon-q-vscode.svg?label=Installs&style=flat-square) - -# Agentic coding experience - -Amazon Q Developer uses information across native and MCP server-based tools to intelligently perform actions beyond code suggestions, such as reading files, generating code diffs, and running commands based on your natural language instruction. Simply type your prompt in your preferred language and Q Developer will provide continuous status updates and iteratively apply changes based on your feedback, helping you accomplish tasks faster. - -### Implement new features - -Generate new code across your entire project and implement features. - -### Generate documentation - -Write API, technical design, and onboarding documentation. - -### Automate code reviews - -Perform code reviews, flagging suspicious code patterns and assessing deployment risk. - -### Generate unit tests - -Generate unit tests and add them to your project, helping you improve code quality, fast. - -
- -# Core features - -### MCP support - -Add Model Context Protocol (MCP) servers to give Amazon Q Developer access to important context. - -### Inline suggestions - -Receive real-time code suggestions ranging from snippets to full functions based on your comments and existing code. - -[_15+ languages supported including Python, TypeScript, Rust, Terraform, AWS Cloudformation, and more_](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-language-ide-support.html) - -### Inline chat - -Seamlessly chat within the inline coding experience. Select a section of code that you need assistance with and initiate chat within the editor to request actions such as "Optimize this code", "Add comments", or "Write tests". - -### Chat - -Generate code, explain code, and get answers about software development. - -
- -# Getting Started - -**Free Tier** - create or log in with an AWS Builder ID (a personal profile from AWS). - -**Pro Tier** - if your organization is on the Amazon Q Developer Pro tier, log in with single sign-on. - -# Troubleshooting & feedback - -[File a bug](https://github.com/aws/aws-toolkit-vscode/issues/new?assignees=&labels=bug&projects=&template=bug_report.md) or [submit a feature request](https://github.com/aws/aws-toolkit-vscode/issues/new?assignees=&labels=feature-request&projects=&template=feature_request.md) on our Github repository. diff --git a/packages/amazonq/package.json b/packages/amazonq/package.json deleted file mode 100644 index 9619a7053db..00000000000 --- a/packages/amazonq/package.json +++ /dev/null @@ -1,1506 +0,0 @@ -{ - "name": "amazon-q-vscode", - "displayName": "Amazon Q", - "description": "The most capable generative AI–powered assistant for software development.", - "version": "1.108.0-SNAPSHOT", - "extensionKind": [ - "workspace" - ], - "publisher": "amazonwebservices", - "icon": "resources/marketplace/amazonq-icon-256x256.png", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/aws/aws-toolkit-vscode" - }, - "bugs": { - "url": "https://github.com/aws/aws-toolkit-vscode/issues" - }, - "galleryBanner": { - "color": "#232F3E", - "theme": "dark" - }, - "categories": [ - "AI", - "Chat", - "Programming Languages", - "Education", - "Machine Learning" - ], - "keywords": [ - "AWS", - "Codewhisperer", - "AI", - "Assistant", - "Chatbot", - "Q Developer" - ], - "preview": false, - "qna": "https://github.com/aws/aws-toolkit-vscode/issues", - "activationEvents": [ - "onStartupFinished", - "onUri", - "onCommand:aws.amazonq.accept", - "onView:aws.codeWhisperer.securityPanel" - ], - "main": "./dist/src/extensionNode", - "browser": "./dist/src/extensionWeb", - "scripts": { - "vscode:prepublish": "npm run clean && npm run buildScripts && webpack --mode production", - "buildScripts": "npm run generateNonCodeFiles && npm run copyFiles && npm run generateIcons && npm run generateSettings && tsc -p ./ --noEmit", - "generateNonCodeFiles": "ts-node ../../scripts/generateNonCodeFiles.ts", - "copyFiles": "ts-node ./scripts/build/copyFiles.ts", - "clean": "ts-node ../../scripts/clean.ts dist/ LICENSE NOTICE", - "compile": "npm run clean && npm run buildScripts && webpack", - "compileDev": "npm run testCompile && webpack --mode development", - "compileOnly": "tsc -p ./", - "package": "ts-node ../../scripts/package.ts", - "lint": "true", - "watch": "npm run clean && npm run buildScripts && tsc -watch -p ./", - "testCompile": "npm run clean && npm run buildScripts && npm run compileOnly", - "test": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts unit dist/test/unit/index.js ../core/dist/src/testFixtures/workspaceFolder", - "testE2E": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts e2e dist/test/e2e/index.js ../core/dist/src/testFixtures/workspaceFolder", - "testWeb": "npm run compileDev && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts web dist/test/web/testRunnerWebCore.js", - "webRun": "npx @vscode/test-web --open-devtools --browserOption=--disable-web-security --waitForDebugger=9222 --extensionDevelopmentPath=. .", - "webWatch": "npm run clean && npm run buildScripts && webpack --mode development --watch", - "serve": "webpack serve --config-name mainServe --mode development", - "newChange": "ts-node ../../scripts/newChange.ts", - "createRelease": "ts-node ../../scripts/createRelease.ts", - "generateIcons": "ts-node ../../scripts/generateIcons.ts", - "generateSettings": "ts-node ../../scripts/generateSettings.ts" - }, - "dependencies": { - "aws-core-vscode": "file:../core/" - }, - "contributesComments": { - "configuration": { - "properties": "Any settings also defined in packages/core/package.json will override same-named settings in this file." - } - }, - "contributes": { - "configuration": { - "type": "object", - "title": "%AWS.amazonq.productName%", - "properties": { - "amazonQ.telemetry": { - "type": "boolean", - "default": true, - "markdownDescription": "%AWS.configuration.description.amazonq.telemetry%" - }, - "amazonQ.suppressPrompts": { - "type": "object", - "description": "%AWS.configuration.description.suppressPrompts%", - "default": {}, - "properties": { - "createCredentialsProfile": { - "type": "boolean", - "default": false - }, - "codeWhispererNewWelcomeMessage": { - "type": "boolean", - "default": false - }, - "codeWhispererConnectionExpired": { - "type": "boolean", - "default": false - }, - "amazonQWelcomePage": { - "type": "boolean", - "default": false - }, - "amazonQSessionConfigurationMessage": { - "type": "boolean", - "default": false - }, - "minIdeVersion": { - "type": "boolean", - "default": false - }, - "ssoCacheError": { - "type": "boolean", - "default": false - }, - "amazonQLspManifestMessage": { - "type": "boolean", - "default": false - }, - "amazonQWorkspaceLspManifestMessage": { - "type": "boolean", - "default": false - }, - "amazonQChatDisclaimer": { - "type": "boolean", - "default": false - }, - "amazonQChatPairProgramming": { - "type": "boolean", - "default": false - }, - "amazonQSelectDeveloperProfile": { - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "amazonQ.showCodeWithReferences": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq%", - "default": true - }, - "amazonQ.allowFeatureDevelopmentToRunCodeAndTests": { - "markdownDescription": "%AWS.configuration.description.featureDevelopment.allowRunningCodeAndTests%", - "type": "object", - "default": {} - }, - "amazonQ.importRecommendationForInlineCodeSuggestions": { - "type": "boolean", - "description": "%AWS.configuration.description.amazonq.importRecommendation%", - "default": true - }, - "amazonQ.shareContentWithAWS": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq.shareContentWithAWS%", - "default": true, - "scope": "application" - }, - "amazonQ.workspaceIndex": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndex%", - "default": false, - "scope": "application" - }, - "amazonQ.workspaceIndexWorkerThreads": { - "type": "number", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexWorkerThreads%", - "default": 0, - "scope": "application" - }, - "amazonQ.workspaceIndexUseGPU": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexUseGPU%", - "default": false, - "scope": "application" - }, - "amazonQ.workspaceIndexMaxSize": { - "type": "number", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexMaxSize%", - "default": 2048, - "scope": "application" - }, - "amazonQ.workspaceIndexMaxFileSize": { - "type": "number", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexMaxFileSize%", - "default": 10, - "scope": "application" - }, - "amazonQ.workspaceIndexCacheDirPath": { - "type": "string", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexCacheDirPath%", - "default": null, - "scope": "application" - }, - "amazonQ.workspaceIndexIgnoreFilePatterns": { - "type": "array", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexIgnoreFilePatterns%", - "default": [], - "scope": "application" - }, - "amazonQ.ignoredSecurityIssues": { - "type": "array", - "markdownDescription": "%AWS.configuration.description.amazonq.ignoredSecurityIssues%", - "scope": "window", - "items": { - "type": "string" - } - }, - "amazonQ.proxy.certificateAuthority": { - "type": "string", - "markdownDescription": "%AWS.configuration.description.amazonq.proxy.certificateAuthority%", - "default": null, - "scope": "application" - }, - "amazonQ.proxy.enableProxyAndCertificateAutoDiscovery": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq.proxy.enableProxyAndCertificateAutoDiscovery%", - "default": true - } - } - }, - "viewsContainers": { - "activitybar": [ - { - "id": "amazonq", - "title": "%AWS.amazonq.title%", - "icon": "resources/amazonq-logo.svg" - } - ], - "panel": [ - { - "id": "aws-codewhisperer-reference-log", - "title": "Code Reference Log", - "icon": "media/aws-logo.svg" - }, - { - "id": "aws-codewhisperer-transformation-hub", - "title": "Transformation Hub", - "icon": "media/aws-logo.svg" - } - ] - }, - "views": { - "amazonq": [ - { - "id": "aws.amazonq.notifications", - "name": "%AWS.notifications.title%", - "when": "!(isCloud9 || aws.isSageMaker) && aws.amazonq.notifications.show" - }, - { - "type": "webview", - "id": "aws.amazonq.AmazonCommonAuth", - "name": "%AWS.amazonq.login%", - "when": "!aws.isWebExtHost && aws.amazonq.showLoginView" - }, - { - "type": "tree", - "id": "aws.amazonq.SecurityIssuesTree", - "name": "%AWS.amazonq.security%", - "when": "!aws.isSageMaker && !aws.isWebExtHost && !aws.amazonq.showLoginView", - "visibility": "collapsed" - }, - { - "type": "webview", - "id": "aws.amazonq.AmazonQChatView", - "name": "%AWS.amazonq.chat%", - "when": "!aws.isWebExtHost && !aws.amazonq.showLoginView" - } - ], - "aws-codewhisperer-reference-log": [ - { - "type": "webview", - "id": "aws.codeWhisperer.referenceLog", - "name": "" - } - ], - "aws-codewhisperer-transformation-hub": [ - { - "type": "webview", - "id": "aws.amazonq.transformationHub", - "name": "Status", - "when": "gumby.wasQCodeTransformationUsed" - }, - { - "id": "aws.amazonq.transformationProposedChangesTree", - "name": "Proposed Changes", - "when": "gumby.transformationProposalReviewInProgress" - } - ] - }, - "viewsWelcome": [ - { - "view": "aws.amazonq.transformationProposedChangesTree", - "contents": "Project transformation is complete.\n[Download Proposed Changes](command:aws.amazonq.transformationHub.reviewChanges.startReview)", - "when": "gumby.reviewState == NotStarted" - }, - { - "view": "aws.amazonq.transformationProposedChangesTree", - "contents": "Project transformation is complete.\n Downloading the proposed changes...", - "when": "gumby.reviewState == PreparingReview" - }, - { - "view": "aws.amazonq.SecurityIssuesTree", - "contents": "No code issues have been detected in the workspace.", - "when": "!aws.amazonq.security.noMatches" - }, - { - "view": "aws.amazonq.SecurityIssuesTree", - "contents": "No matches.\n[Clear Filters](command:aws.amazonq.securityIssuesTreeFilter.clearFilters)", - "when": "aws.amazonq.security.noMatches" - } - ], - "submenus": [ - { - "label": "%AWS.submenu.amazonqEditorContextSubmenu.title%", - "id": "amazonqEditorContextSubmenu" - }, - { - "label": "%AWS.generic.feedback%", - "id": "aws.amazonq.submenu.feedback" - }, - { - "label": "%AWS.generic.help%", - "id": "aws.amazonq.submenu.help" - }, - { - "label": "%AWS.generic.moreActions%", - "id": "aws.amazonq.submenu.securityIssueMoreActions", - "icon": "$(ellipsis)" - } - ], - "menus": { - "commandPalette": [ - { - "command": "aws.amazonq.reconnect", - "when": "false" - }, - { - "command": "amazonq.dev.openMenu", - "when": "aws.isDevMode" - }, - { - "command": "aws.amazonq.learnMore", - "when": "false" - } - ], - "view/title": [ - { - "command": "aws.amazonq.stopTransformationInHub", - "when": "view == aws.amazonq.transformationHub", - "group": "navigation@1" - }, - { - "command": "aws.amazonq.showPlanProgressInHub", - "when": "view == aws.amazonq.transformationHub", - "group": "navigation@2" - }, - { - "command": "aws.amazonq.showHistoryInHub", - "when": "view == aws.amazonq.transformationHub", - "group": "navigation@3" - }, - { - "command": "aws.amazonq.showTransformationPlanInHub", - "when": "view == aws.amazonq.transformationHub", - "group": "navigation@4" - }, - { - "command": "aws.amazonq.transformationHub.summary.reveal", - "when": "view == aws.amazonq.transformationHub", - "group": "navigation@5" - }, - { - "command": "aws.amazonq.transformationHub.reviewChanges.acceptChanges", - "when": "view == aws.amazonq.transformationProposedChangesTree && gumby.reviewState == InReview", - "group": "navigation@1" - }, - { - "command": "aws.amazonq.transformationHub.reviewChanges.rejectChanges", - "when": "view == aws.amazonq.transformationProposedChangesTree && gumby.reviewState == InReview", - "group": "navigation@2" - }, - { - "command": "aws.amazonq.openReferencePanel", - "when": "view == aws.amazonq.AmazonQChatView", - "group": "0_topAmazonQ@1" - }, - { - "command": "aws.amazonq.selectRegionProfile", - "when": "view == aws.amazonq.AmazonQChatView && aws.amazonq.connectedSsoIdc == true", - "group": "1_amazonQ@1" - }, - { - "command": "aws.amazonq.manageSubscription", - "when": "(view == aws.amazonq.AmazonQChatView) && aws.codewhisperer.connected", - "group": "1_amazonQ@2" - }, - { - "command": "aws.amazonq.learnMore", - "when": "view =~ /^aws\\.amazonq/", - "group": "1_amazonQ@3" - }, - { - "command": "aws.amazonq.signout", - "when": "(view == aws.amazonq.AmazonQChatView) && aws.codewhisperer.connected && !aws.isSageMakerUnifiedStudio", - "group": "2_amazonQ@4" - }, - { - "command": "aws.amazonq.showLogs", - "when": "(view =~ /^aws\\.amazonq/) && !aws.isSageMakerUnifiedStudio", - "group": "1_amazonQ@5" - }, - { - "command": "aws.amazonq.reconnect", - "when": "(view == aws.amazonq.AmazonQChatView) && aws.codewhisperer.connectionExpired", - "group": "2_amazonQ@3" - }, - { - "submenu": "aws.amazonq.submenu.feedback", - "when": "view =~ /^aws\\.amazonq/", - "group": "y_toolkitMeta@1" - }, - { - "submenu": "aws.amazonq.submenu.help", - "when": "view =~ /^aws\\.amazonq/", - "group": "y_toolkitMeta@2" - }, - { - "command": "aws.amazonq.codescan.showGroupingStrategy", - "when": "view == aws.amazonq.SecurityIssuesTree", - "group": "navigation@1" - }, - { - "command": "aws.amazonq.security.showFilters", - "when": "view == aws.amazonq.SecurityIssuesTree", - "group": "navigation@2" - } - ], - "view/item/context": [ - { - "command": "_aws.amazonq.notifications.dismiss", - "when": "viewItem == amazonqNotificationStartUp", - "group": "inline@1" - }, - { - "command": "aws.amazonq.openSecurityIssuePanel", - "when": "false && view == aws.amazonq.SecurityIssuesTree && (viewItem == issueWithoutFix || viewItem == issueWithFix || viewItem == issueWithFixDisabled)", - "group": "inline@4" - }, - { - "command": "aws.amazonq.security.explain", - "when": "view == aws.amazonq.SecurityIssuesTree && (viewItem == issueWithoutFix || viewItem == issueWithFix || viewItem == issueWithFixDisabled)", - "group": "inline@4" - }, - { - "command": "aws.amazonq.security.generateFix", - "when": "view == aws.amazonq.SecurityIssuesTree && (viewItem == issueWithoutFix || viewItem == issueWithFix || viewItem == issueWithFixDisabled)", - "group": "inline@5" - }, - { - "command": "aws.amazonq.security.ignore", - "when": "view == aws.amazonq.SecurityIssuesTree && (viewItem == issueWithoutFix || viewItem == issueWithFix || viewItem == issueWithFixDisabled)", - "group": "inline@6" - }, - { - "submenu": "aws.amazonq.submenu.securityIssueMoreActions", - "when": "view == aws.amazonq.SecurityIssuesTree && (viewItem == issueWithoutFix || viewItem == issueWithFix || viewItem == issueWithFixDisabled)", - "group": "inline@7" - } - ], - "amazonqEditorContextSubmenu": [ - { - "command": "aws.amazonq.explainCode", - "group": "cw_chat@1" - }, - { - "command": "aws.amazonq.refactorCode", - "group": "cw_chat@2" - }, - { - "command": "aws.amazonq.fixCode", - "group": "cw_chat@3" - }, - { - "command": "aws.amazonq.optimizeCode", - "group": "cw_chat@4" - }, - { - "command": "aws.amazonq.generateUnitTests", - "when": "!aws.isSageMaker", - "group": "cw_chat@5" - }, - { - "command": "aws.amazonq.sendToPrompt", - "group": "cw_chat@6" - }, - { - "command": "aws.amazonq.inline.invokeChat", - "group": "cw_chat@7" - } - ], - "editor/context": [ - { - "submenu": "amazonqEditorContextSubmenu", - "group": "cw_chat" - } - ], - "aws.amazonq.submenu.feedback": [ - { - "command": "aws.amazonq.submitFeedback", - "when": "!aws.isWebExtHost", - "group": "1_feedback@1" - }, - { - "command": "aws.amazonq.createIssueOnGitHub", - "group": "1_feedback@2" - } - ], - "aws.amazonq.submenu.help": [ - { - "command": "aws.amazonq.walkthrough.show", - "group": "1_help@1" - }, - { - "command": "aws.amazonq.github", - "group": "1_help@2" - }, - { - "command": "aws.amazonq.aboutExtension", - "group": "1_help@3" - }, - { - "command": "aws.amazonq.viewLogs", - "group": "1_help@4" - } - ], - "aws.amazonq.submenu.securityIssueMoreActions": [ - { - "command": "aws.amazonq.security.explain", - "when": "false", - "group": "1_more@1" - }, - { - "command": "aws.amazonq.applySecurityFix", - "when": "false && view == aws.amazonq.SecurityIssuesTree && viewItem == issueWithFix", - "group": "1_more@3" - }, - { - "command": "aws.amazonq.security.regenerateFix", - "when": "false && view == aws.amazonq.SecurityIssuesTree && viewItem == issueWithFix", - "group": "1_more@4" - }, - { - "command": "aws.amazonq.security.ignoreAll", - "group": "1_more@5" - } - ] - }, - "commands": [ - { - "command": "aws.amazonq.stopCmdExecution", - "title": "Stop Amazon Q", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.runCmdExecution", - "title": "Run Amazon Q Tool", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.rejectCmdExecution", - "title": "Reject Amazon Q Tool", - "category": "%AWS.amazonq.title%" - }, - { - "command": "_aws.amazonq.notifications.dismiss", - "title": "%AWS.generic.dismiss%", - "category": "%AWS.amazonq.title%", - "enablement": "view == aws.amazonq.notifications", - "icon": "$(remove-close)" - }, - { - "command": "aws.amazonq.explainCode", - "title": "%AWS.command.amazonq.explainCode%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.refactorCode", - "title": "%AWS.command.amazonq.refactorCode%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.fixCode", - "title": "%AWS.command.amazonq.fixCode%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.optimizeCode", - "title": "%AWS.command.amazonq.optimizeCode%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.sendToPrompt", - "title": "%AWS.command.amazonq.sendToPrompt%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.generateUnitTests", - "title": "%AWS.command.amazonq.generateUnitTests%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected && !aws.isSageMaker" - }, - { - "command": "aws.amazonq.reconnect", - "title": "%AWS.command.codewhisperer.reconnect%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.openReferencePanel", - "title": "%AWS.command.codewhisperer.openReferencePanel%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.showLogs", - "title": "%AWS.command.codewhisperer.showLogs%", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.selectRegionProfile", - "title": "Change Profile", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.transformationHub.reviewChanges.acceptChanges", - "title": "%AWS.command.q.transform.acceptChanges%" - }, - { - "command": "aws.amazonq.transformationHub.reviewChanges.rejectChanges", - "title": "%AWS.command.q.transform.rejectChanges%" - }, - { - "command": "aws.amazonq.transformationHub.summary.reveal", - "title": "%AWS.command.q.transform.showChangeSummary%", - "enablement": "gumby.isSummaryAvailable" - }, - { - "command": "aws.amazonq.showTransformationPlanInHub", - "title": "%AWS.command.q.transform.showTransformationPlan%", - "enablement": "gumby.isPlanAvailable" - }, - { - "command": "aws.amazonq.createIssueOnGitHub", - "title": "%AWS.command.createIssueOnGitHub%", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.submitFeedback", - "title": "%AWS.command.submitFeedback%", - "enablement": "!aws.isWebExtHost", - "category": "%AWS.amazonq.title%", - "icon": "$(comment)" - }, - { - "command": "aws.amazonq.viewLogs", - "title": "%AWS.command.viewLogs%", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.github", - "title": "%AWS.command.github%", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.aboutExtension", - "title": "%AWS.command.aboutToolkit%", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.invokeInlineCompletion", - "title": "%AWS.command.codewhisperer.title%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.configure", - "title": "%AWS.command.codewhisperer.configure%", - "category": "%AWS.amazonq.title%", - "icon": "$(gear)" - }, - { - "command": "aws.amazonq.introduction", - "title": "%AWS.command.codewhisperer.introduction%", - "category": "%AWS.amazonq.title%", - "icon": "$(question)" - }, - { - "command": "aws.amazonq.manageSubscription", - "title": "%AWS.command.manageSubscription%", - "category": "%AWS.amazonq.title%", - "icon": "$(gear)", - "enablement": "aws.codewhisperer.connected && !aws.amazonq.connectedSsoIdc" - }, - { - "command": "aws.amazonq.signout", - "title": "%AWS.command.codewhisperer.signout%", - "category": "%AWS.amazonq.title%", - "icon": "$(debug-disconnect)", - "enablement": "aws.codewhisperer.connected && !aws.isSageMakerUnifiedStudio" - }, - { - "command": "aws.amazonq.learnMore", - "title": "%AWS.amazonq.learnMore%", - "category": "%AWS.amazonq.title%" - }, - { - "command": "amazonq.dev.openMenu", - "title": "Open Developer Menu", - "category": "Amazon Q (Developer)", - "enablement": "aws.isDevMode" - }, - { - "command": "aws.amazonq.stopTransformationInHub", - "title": "%AWS.command.q.transform.stopJobInHub%", - "enablement": "gumby.isStopButtonAvailable" - }, - { - "command": "aws.amazonq.showPlanProgressInHub", - "title": "%AWS.command.q.transform.viewJobProgress%" - }, - { - "command": "aws.amazonq.showHistoryInHub", - "title": "%AWS.command.q.transform.viewJobHistory%" - }, - { - "command": "aws.amazonq.selectCustomization", - "title": "%AWS.codewhisperer.customization.notification.new_customizations.select%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.gettingStarted", - "title": "Try inline suggestion examples", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.toggleCodeSuggestion", - "title": "%AWS.amazonq.toggleCodeSuggestion%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.codeWhisperer.toggleCodeScan", - "title": "%AWS.amazonq.toggleCodeScan%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.securityIssuesTreeFilter.clearFilters", - "title": "Clear Filters", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.security.generateFix", - "title": "%AWS.command.amazonq.generateFix%", - "icon": "$(wrench)", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.applySecurityFix", - "title": "%AWS.command.amazonq.acceptFix%", - "icon": "$(check)", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.security.regenerateFix", - "title": "%AWS.command.amazonq.regenerateFix%", - "icon": "$(lightbulb-autofix)", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.openSecurityIssuePanel", - "title": "%AWS.command.amazonq.viewDetails%", - "icon": "$(search)", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.security.explain", - "title": "%AWS.command.amazonq.explainIssue%", - "icon": "$(search)", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.security.ignore", - "title": "%AWS.command.amazonq.ignoreIssue%", - "icon": "$(circle-slash)", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.security.ignoreAll", - "title": "%AWS.command.amazonq.ignoreAllIssues%", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.security.showFilters", - "title": "%AWS.command.amazonq.filterIssues%", - "icon": "$(filter)", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.codescan.showGroupingStrategy", - "title": "%AWS.command.amazonq.groupIssues%", - "icon": "$(list-filter)", - "enablement": "view == aws.amazonq.SecurityIssuesTree" - }, - { - "command": "aws.amazonq.inline.invokeChat", - "title": "%AWS.amazonq.inline.invokeChat%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.focusChat", - "title": "%AWS.amazonq.openChat%", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.walkthrough.show", - "title": "%AWS.amazonq.welcomeWalkthrough%" - }, - { - "command": "aws.amazonq.clearCache", - "title": "%AWS.amazonq.clearCache%", - "category": "%AWS.amazonq.title%" - }, - { - "command": "aws.amazonq.inline.acceptEdit", - "title": "%AWS.amazonq.inline.acceptEdit%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.inline.rejectEdit", - "title": "%AWS.amazonq.inline.rejectEdit%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.toggleNextEditPredictionPanel", - "title": "%AWS.amazonq.toggleNextEditPredictionPanel%", - "category": "%AWS.amazonq.title%", - "enablement": "aws.codewhisperer.connected" - } - ], - "keybindings": [ - { - "command": "aws.amazonq.stopCmdExecution", - "key": "ctrl+shift+backspace", - "mac": "cmd+shift+backspace", - "when": "aws.amazonq.amazonqChatLSP.isFocus" - }, - { - "command": "aws.amazonq.runCmdExecution", - "key": "ctrl+shift+enter", - "mac": "cmd+shift+enter", - "when": "aws.amazonq.amazonqChatLSP.isFocus" - }, - { - "command": "aws.amazonq.rejectCmdExecution", - "key": "ctrl+shift+r", - "mac": "cmd+shift+r", - "when": "aws.amazonq.amazonqChatLSP.isFocus" - }, - { - "command": "_aws.amazonq.focusChat.keybinding", - "win": "win+alt+i", - "mac": "cmd+alt+i", - "linux": "meta+alt+i" - }, - { - "command": "aws.amazonq.inline.debugAcceptEdit", - "key": "ctrl+alt+a", - "mac": "cmd+alt+a", - "when": "editorTextFocus" - }, - { - "command": "aws.amazonq.inline.debugRejectEdit", - "key": "ctrl+alt+r", - "mac": "cmd+alt+r", - "when": "editorTextFocus" - }, - { - "command": "aws.amazonq.explainCode", - "win": "win+alt+e", - "mac": "cmd+alt+e", - "linux": "meta+alt+e" - }, - { - "command": "aws.amazonq.refactorCode", - "win": "win+alt+u", - "mac": "cmd+alt+u", - "linux": "meta+alt+u" - }, - { - "command": "aws.amazonq.fixCode", - "win": "win+alt+h", - "mac": "cmd+alt+y", - "linux": "meta+alt+y" - }, - { - "command": "aws.amazonq.optimizeCode", - "win": "win+alt+a", - "mac": "cmd+alt+a", - "linux": "meta+alt+a" - }, - { - "command": "aws.amazonq.sendToPrompt", - "key": "win+alt+q", - "mac": "cmd+alt+q", - "linux": "meta+alt+q" - }, - { - "command": "aws.amazonq.generateUnitTests", - "key": "win+alt+n", - "mac": "cmd+alt+t", - "linux": "meta+alt+t" - }, - { - "command": "aws.amazonq.invokeInlineCompletion", - "key": "alt+c", - "mac": "alt+c", - "when": "editorTextFocus && aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.rejectCodeSuggestion", - "key": "escape", - "mac": "escape", - "when": "inlineSuggestionVisible && !editorReadonly && aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.dismissTutorial", - "key": "escape", - "mac": "escape", - "when": "aws.codewhisperer.tutorial.workInProgress && !inlineSuggestionVisible && !suggestWidgetVisible" - }, - { - "key": "right", - "command": "aws.amazonq.showNext", - "when": "inlineSuggestionVisible && !editorReadonly && aws.codewhisperer.connected" - }, - { - "key": "left", - "command": "aws.amazonq.showPrev", - "when": "inlineSuggestionVisible && !editorReadonly && aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.checkInlineSuggestionVisibility", - "when": "inlineSuggestionVisible && !editorReadonly && aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.inline.invokeChat", - "win": "ctrl+i", - "mac": "cmd+i", - "linux": "ctrl+i", - "when": "editorTextFocus && aws.codewhisperer.connected" - }, - { - "command": "aws.amazonq.inline.waitForUserDecisionAcceptAll", - "key": "enter", - "when": "editorTextFocus && aws.codewhisperer.connected && amazonq.inline.codelensShortcutEnabled" - }, - { - "command": "aws.amazonq.inline.waitForUserDecisionRejectAll", - "key": "escape", - "when": "editorTextFocus && aws.codewhisperer.connected && amazonq.inline.codelensShortcutEnabled" - }, - { - "command": "aws.amazonq.inline.acceptEdit", - "key": "tab", - "when": "editorTextFocus && aws.amazonq.editSuggestionActive" - }, - { - "command": "aws.amazonq.inline.rejectEdit", - "key": "escape", - "when": "editorTextFocus && aws.amazonq.editSuggestionActive" - } - ], - "icons": { - "aws-amazonq-q-gradient": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1aa" - } - }, - "aws-amazonq-q-squid-ink": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ab" - } - }, - "aws-amazonq-q-white": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ac" - } - }, - "aws-amazonq-severity-critical": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ad" - } - }, - "aws-amazonq-severity-high": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ae" - } - }, - "aws-amazonq-severity-info": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1af" - } - }, - "aws-amazonq-severity-low": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b0" - } - }, - "aws-amazonq-severity-medium": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b1" - } - }, - "aws-amazonq-transform-arrow-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b2" - } - }, - "aws-amazonq-transform-arrow-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b3" - } - }, - "aws-amazonq-transform-default-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b4" - } - }, - "aws-amazonq-transform-default-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b5" - } - }, - "aws-amazonq-transform-dependencies-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b6" - } - }, - "aws-amazonq-transform-dependencies-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b7" - } - }, - "aws-amazonq-transform-file-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b8" - } - }, - "aws-amazonq-transform-file-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b9" - } - }, - "aws-amazonq-transform-logo": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ba" - } - }, - "aws-amazonq-transform-step-into-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1bb" - } - }, - "aws-amazonq-transform-step-into-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1bc" - } - }, - "aws-amazonq-transform-variables-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1bd" - } - }, - "aws-amazonq-transform-variables-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1be" - } - }, - "aws-applicationcomposer-icon": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1bf" - } - }, - "aws-applicationcomposer-icon-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c0" - } - }, - "aws-apprunner-service": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c1" - } - }, - "aws-cdk-logo": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c2" - } - }, - "aws-cloudformation-stack": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c3" - } - }, - "aws-cloudwatch-log-group": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c4" - } - }, - "aws-codecatalyst-logo": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c5" - } - }, - "aws-codewhisperer-icon-black": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c6" - } - }, - "aws-codewhisperer-icon-white": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c7" - } - }, - "aws-codewhisperer-learn": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c8" - } - }, - "aws-ecr-registry": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1c9" - } - }, - "aws-ecs-cluster": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ca" - } - }, - "aws-ecs-container": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1cb" - } - }, - "aws-ecs-service": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1cc" - } - }, - "aws-generic-attach-file": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1cd" - } - }, - "aws-iot-certificate": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ce" - } - }, - "aws-iot-policy": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1cf" - } - }, - "aws-iot-thing": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d0" - } - }, - "aws-lambda-create-stack": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d1" - } - }, - "aws-lambda-create-stack-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d2" - } - }, - "aws-lambda-deployed-function": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d3" - } - }, - "aws-lambda-function": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d4" - } - }, - "aws-lambda-invoke-remotely": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d5" - } - }, - "aws-mynah-MynahIconBlack": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d6" - } - }, - "aws-mynah-MynahIconWhite": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d7" - } - }, - "aws-mynah-logo": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d8" - } - }, - "aws-redshift-cluster": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1d9" - } - }, - "aws-redshift-cluster-connected": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1da" - } - }, - "aws-redshift-database": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1db" - } - }, - "aws-redshift-redshift-cluster-connected": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1dc" - } - }, - "aws-redshift-schema": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1dd" - } - }, - "aws-redshift-table": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1de" - } - }, - "aws-s3-bucket": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1df" - } - }, - "aws-s3-create-bucket": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e0" - } - }, - "aws-sagemaker-code-editor": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e1" - } - }, - "aws-sagemaker-jupyter-lab": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e2" - } - }, - "aws-sagemakerunifiedstudio-catalog": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e3" - } - }, - "aws-sagemakerunifiedstudio-spaces": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e4" - } - }, - "aws-sagemakerunifiedstudio-spaces-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e5" - } - }, - "aws-sagemakerunifiedstudio-symbol-int": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e6" - } - }, - "aws-sagemakerunifiedstudio-table": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e7" - } - }, - "aws-schemas-registry": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e8" - } - }, - "aws-schemas-schema": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1e9" - } - }, - "aws-stepfunctions-preview": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ea" - } - } - }, - "walkthroughs": [ - { - "id": "aws.amazonq.walkthrough", - "title": "Meet Amazon Q", - "description": "Your generative AI-powered assistant across the software development lifecycle.", - "steps": [ - { - "id": "aws.amazonq.walkthrough.inlineSuggestions", - "title": "Get inline code suggestions", - "description": "Amazon Q suggests code as you type based on your open files. Accepted suggestions from licensed code will go into the Code Reference Log.\n\n[Try Example](command:_aws.amazonq.walkthrough.inlineSuggestionsExample)\n\n**TIP: Invoke manually with opt/alt + c**", - "media": { - "markdown": "./resources/walkthrough/amazonq/inline.md" - }, - "completionEvents": [ - "onCommand:_aws.amazonq.walkthrough.inlineSuggestionsExample" - ] - }, - { - "id": "aws.amazonq.walkthrough.chat", - "title": "Ask using chat", - "description": "Amazon Q answers software development questions, writes code based on your current file, and cites sources.\n\nUse the right-click menu for quick commands.\n\n**TIP: Drag and drop the Q panel to dock on the right**", - "media": { - "markdown": "./resources/walkthrough/amazonq/chat.md" - }, - "completionEvents": [] - }, - { - "id": "aws.amazonq.walkthrough.settings", - "title": "Access actions and options", - "description": "Pause inline suggestions, open the Code Reference Log, access Settings, and more from the Amazon Q menu.\n\n[Open the status bar menu](command:_aws.amazonq.walkthrough.listCommands)", - "media": { - "markdown": "./resources/walkthrough/amazonq/menu.md" - }, - "completionEvents": [ - "onCommand:_aws.amazonq.walkthrough.listCommands" - ] - } - ] - } - ] - }, - "engines": { - "npm": "^10.1.0", - "vscode": "^1.83.0" - } -} diff --git a/packages/amazonq/src/api.ts b/packages/amazonq/src/api.ts deleted file mode 100644 index 03b2a32ea55..00000000000 --- a/packages/amazonq/src/api.ts +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { SendMessageCommandOutput, SendMessageRequest } from '@amzn/amazon-q-developer-streaming-client' -import { GenerateAssistantResponseCommandOutput, GenerateAssistantResponseRequest } from '@amzn/codewhisperer-streaming' -import { AuthUtil } from 'aws-core-vscode/codewhisperer' -import { ChatSession } from 'aws-core-vscode/codewhispererChat' -import { api } from 'aws-core-vscode/amazonq' - -export default { - chatApi: { - async chat(request: GenerateAssistantResponseRequest): Promise { - const chatSession = new ChatSession() - return chatSession.chatSso(request) - }, - async chatIam(request: SendMessageRequest): Promise { - const chatSession = new ChatSession() - return chatSession.chatIam(request) - }, - }, - authApi: { - async reauthIfNeeded() { - if (AuthUtil.instance.isConnectionExpired()) { - await AuthUtil.instance.showReauthenticatePrompt() - } - }, - async getChatAuthState() { - return AuthUtil.instance.getChatAuthState() - }, - }, -} satisfies api diff --git a/packages/amazonq/src/app/amazonqScan/app.ts b/packages/amazonq/src/app/amazonqScan/app.ts deleted file mode 100644 index bd12e3acd01..00000000000 --- a/packages/amazonq/src/app/amazonqScan/app.ts +++ /dev/null @@ -1,70 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { AmazonQAppInitContext, MessageListener } from 'aws-core-vscode/amazonq' -import { AuthUtil, codeScanState, onDemandFileScanState } from 'aws-core-vscode/codewhisperer' -import { ScanChatControllerEventEmitters, ChatSessionManager } from 'aws-core-vscode/amazonqScan' -import { ScanController } from './chat/controller/controller' -import { AppToWebViewMessageDispatcher } from './chat/views/connector/connector' -import { Messenger } from './chat/controller/messenger/messenger' -import { UIMessageListener } from './chat/views/actions/uiMessageListener' -import { debounce } from 'lodash' - -export function init(appContext: AmazonQAppInitContext) { - const scanChatControllerEventEmitters: ScanChatControllerEventEmitters = { - authClicked: new vscode.EventEmitter(), - tabOpened: new vscode.EventEmitter(), - tabClosed: new vscode.EventEmitter(), - runScan: new vscode.EventEmitter(), - formActionClicked: new vscode.EventEmitter(), - errorThrown: new vscode.EventEmitter(), - showSecurityScan: new vscode.EventEmitter(), - scanStopped: new vscode.EventEmitter(), - followUpClicked: new vscode.EventEmitter(), - scanProgress: new vscode.EventEmitter(), - processResponseBodyLinkClick: new vscode.EventEmitter(), - fileClicked: new vscode.EventEmitter(), - scanCancelled: new vscode.EventEmitter(), - processChatItemVotedMessage: new vscode.EventEmitter(), - } - const dispatcher = new AppToWebViewMessageDispatcher(appContext.getAppsToWebViewMessagePublisher()) - const messenger = new Messenger(dispatcher) - - new ScanController(scanChatControllerEventEmitters, messenger, appContext.onDidChangeAmazonQVisibility.event) - - const scanChatUIInputEventEmitter = new vscode.EventEmitter() - - new UIMessageListener({ - chatControllerEventEmitters: scanChatControllerEventEmitters, - webViewMessageListener: new MessageListener(scanChatUIInputEventEmitter), - }) - - const debouncedEvent = debounce(async () => { - const authenticated = (await AuthUtil.instance.getChatAuthState()).amazonQ === 'connected' - let authenticatingSessionID = '' - - if (authenticated) { - const session = ChatSessionManager.Instance.getSession() - - if (session.isTabOpen() && session.isAuthenticating) { - authenticatingSessionID = session.tabID! - session.isAuthenticating = false - } - } - - messenger.sendAuthenticationUpdate(authenticated, [authenticatingSessionID]) - }, 500) - - AuthUtil.instance.secondaryAuth.onDidChangeActiveConnection(() => { - return debouncedEvent() - }) - AuthUtil.instance.regionProfileManager.onDidChangeRegionProfile(() => { - return debouncedEvent() - }) - - codeScanState.setChatControllers(scanChatControllerEventEmitters) - onDemandFileScanState.setChatControllers(scanChatControllerEventEmitters) -} diff --git a/packages/amazonq/src/app/amazonqScan/chat/controller/controller.ts b/packages/amazonq/src/app/amazonqScan/chat/controller/controller.ts deleted file mode 100644 index 72af0a200c5..00000000000 --- a/packages/amazonq/src/app/amazonqScan/chat/controller/controller.ts +++ /dev/null @@ -1,372 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - * - * This class is responsible for responding to UI events by calling - * the Scan extension. - */ -import * as vscode from 'vscode' -import { AuthController } from 'aws-core-vscode/amazonq' -import { getLogger, placeholder, i18n, openUrl, fs, TabTypeDataMap, randomUUID } from 'aws-core-vscode/shared' -import { ScanChatControllerEventEmitters, Session, ChatSessionManager } from 'aws-core-vscode/amazonqScan' -import { - AggregatedCodeScanIssue, - AuthUtil, - CodeAnalysisScope, - codeScanState, - isGitRepo, - onDemandFileScanState, - SecurityScanError, - SecurityScanStep, - showFileScan, - showSecurityScan, -} from 'aws-core-vscode/codewhisperer' -import { Messenger, ScanNamedMessages } from './messenger/messenger' -import MessengerUtils from './messenger/messengerUtils' -import { - cancellingProgressField, - fileScanProgressField, - projectScanProgressField, - ScanAction, - scanProgressMessage, - scanSummaryMessage, -} from '../../models/constants' -import path from 'path' -import { telemetry } from 'aws-core-vscode/telemetry' - -export class ScanController { - private readonly messenger: Messenger - private readonly sessionStorage: ChatSessionManager - private authController: AuthController - - public constructor( - private readonly chatControllerMessageListeners: ScanChatControllerEventEmitters, - messenger: Messenger, - onDidChangeAmazonQVisibility: vscode.Event - ) { - this.messenger = messenger - this.sessionStorage = ChatSessionManager.Instance - this.authController = new AuthController() - - this.chatControllerMessageListeners.tabOpened.event((data) => { - return this.tabOpened(data) - }) - - this.chatControllerMessageListeners.tabClosed.event((data) => { - return this.tabClosed(data) - }) - - this.chatControllerMessageListeners.authClicked.event((data) => { - this.authClicked(data) - }) - - this.chatControllerMessageListeners.runScan.event((data) => { - return this.scanInitiated(data) - }) - - this.chatControllerMessageListeners.formActionClicked.event((data) => { - return this.formActionClicked(data) - }) - - this.chatControllerMessageListeners.errorThrown.event((data) => { - return this.handleError(data) - }) - - this.chatControllerMessageListeners.showSecurityScan.event((data) => { - return this.handleScanResults(data) - }) - - this.chatControllerMessageListeners.scanStopped.event((data) => { - return this.handleScanStopped(data) - }) - - this.chatControllerMessageListeners.followUpClicked.event((data) => { - return this.handleFollowUpClicked(data) - }) - - this.chatControllerMessageListeners.scanProgress.event((data) => { - return this.handleScanProgress(data) - }) - - this.chatControllerMessageListeners.processResponseBodyLinkClick.event((data) => { - return this.processLink(data) - }) - - this.chatControllerMessageListeners.fileClicked.event((data) => { - return this.processFileClick(data) - }) - - this.chatControllerMessageListeners.scanCancelled.event((data) => { - return this.handleScanCancelled(data) - }) - - this.chatControllerMessageListeners.processChatItemVotedMessage.event((data) => { - telemetry.amazonq_feedback.emit({ - featureId: 'amazonQReview', - amazonqConversationId: this.sessionStorage.getSession().scanUuid, - credentialStartUrl: AuthUtil.instance.startUrl, - interactionType: data.vote, - }) - }) - - AuthUtil.instance.regionProfileManager.onDidChangeRegionProfile(() => { - this.sessionStorage.removeActiveTab() - }) - } - - private async tabOpened(message: any) { - const session: Session = this.sessionStorage.getSession() - const tabID = this.sessionStorage.setActiveTab(message.tabID) - - // check if authentication has expired - try { - getLogger().debug(`Q - Review: Session created with id: ${session.tabID}`) - - const authState = await AuthUtil.instance.getChatAuthState() - if (authState.amazonQ !== 'connected') { - void this.messenger.sendAuthNeededExceptionMessage(authState, tabID) - session.isAuthenticating = true - return - } - } catch (err: any) { - this.messenger.sendErrorMessage(err.message, message.tabID) - } - } - - private async tabClosed(data: any) { - this.sessionStorage.removeActiveTab() - } - - private authClicked(message: any) { - this.authController.handleAuth(message.authType) - - this.messenger.sendAnswer({ - type: 'answer', - tabID: message.tabID, - message: 'Follow instructions to re-authenticate ...', - }) - - // Explicitly ensure the user goes through the re-authenticate flow - this.messenger.sendChatInputEnabled(message.tabID, false) - } - - private async scanInitiated(message: any) { - const session: Session = this.sessionStorage.getSession() - try { - // check that a project is open - const workspaceFolders = vscode.workspace.workspaceFolders - if (workspaceFolders === undefined || workspaceFolders.length === 0) { - this.messenger.sendChatInputEnabled(message.tabID, false) - this.messenger.sendErrorResponse('no-project-found', message.tabID) - return - } - // check that the session is authenticated - const authState = await AuthUtil.instance.getChatAuthState() - if (authState.amazonQ !== 'connected') { - void this.messenger.sendAuthNeededExceptionMessage(authState, message.tabID) - session.isAuthenticating = true - return - } - this.messenger.sendPromptMessage({ - tabID: message.tabID, - message: i18n('AWS.amazonq.scans.runCodeScan'), - }) - this.messenger.sendCapabilityCard({ tabID: message.tabID }) - // Displaying types of scans and wait for user input - this.messenger.sendUpdatePlaceholder(message.tabID, i18n('AWS.amazonq.scans.waitingForInput')) - - this.messenger.sendScans(message.tabID, i18n('AWS.amazonq.scans.chooseScan.description')) - } catch (e: any) { - this.messenger.sendErrorMessage(e.message, message.tabID) - } - } - - private async formActionClicked(message: any) { - const typedAction = MessengerUtils.stringToEnumValue(ScanAction, message.action as any) - switch (typedAction) { - case ScanAction.STOP_PROJECT_SCAN: - codeScanState.setToCancelling() - this.messenger.sendUpdatePromptProgress(message.tabID, cancellingProgressField) - break - case ScanAction.STOP_FILE_SCAN: - onDemandFileScanState.setToCancelling() - this.messenger.sendUpdatePromptProgress(message.tabID, cancellingProgressField) - break - } - } - - private async handleError(message: { - error: SecurityScanError - tabID: string - scope: CodeAnalysisScope - fileName: string | undefined - scanUuid?: string - }) { - if (this.isNotMatchingId(message)) { - return - } - if (message.error.code === 'NoSourceFilesError') { - this.messenger.sendScanResults(message.tabID, message.scope, message.fileName, true) - this.messenger.sendAnswer({ - tabID: message.tabID, - type: 'answer', - canBeVoted: true, - message: scanSummaryMessage(message.scope, []), - }) - } else { - this.messenger.sendErrorResponse(message.error, message.tabID) - } - } - - private async handleScanResults(message: { - error: Error - totalIssues: number - tabID: string - securityRecommendationCollection: AggregatedCodeScanIssue[] - scope: CodeAnalysisScope - fileName: string - scanUuid?: string - }) { - if (this.isNotMatchingId(message)) { - return - } - this.messenger.sendScanResults(message.tabID, message.scope, message.fileName, true) - this.messenger.sendAnswer({ - tabID: message.tabID, - type: 'answer', - canBeVoted: true, - message: scanSummaryMessage(message.scope, message.securityRecommendationCollection), - }) - } - - private async handleScanStopped(message: { tabID: string }) { - this.messenger.sendUpdatePlaceholder(message.tabID, TabTypeDataMap.review.placeholder) - // eslint-disable-next-line unicorn/no-null - this.messenger.sendUpdatePromptProgress(message.tabID, null) - this.messenger.sendChatInputEnabled(message.tabID, true) - } - - private async handleFollowUpClicked(message: any) { - switch (message.followUp.type) { - case ScanAction.RUN_PROJECT_SCAN: { - this.messenger.sendPromptMessage({ - tabID: message.tabID, - message: i18n('AWS.amazonq.scans.projectScan'), - }) - - const workspaceFolders = vscode.workspace.workspaceFolders ?? [] - for (const folder of workspaceFolders) { - if (!(await isGitRepo(folder.uri))) { - this.messenger.sendAnswer({ - tabID: message.tabID, - type: 'answer', - message: i18n('AWS.amazonq.scans.noGitRepo'), - }) - break - } - } - - this.messenger.sendScanInProgress({ - type: 'answer-stream', - tabID: message.tabID, - canBeVoted: true, - message: scanProgressMessage(0, CodeAnalysisScope.PROJECT), - }) - this.messenger.sendUpdatePromptProgress(message.tabID, projectScanProgressField) - const scanUuid = randomUUID() - this.sessionStorage.getSession().scanUuid = scanUuid - void showSecurityScan.execute(placeholder, 'amazonQChat', true, scanUuid) - break - } - case ScanAction.RUN_FILE_SCAN: { - // check if IDE has active file open. - const activeEditor = vscode.window.activeTextEditor - // also check all open editors and allow this to proceed if only one is open (even if not main focus) - const allVisibleEditors = vscode.window.visibleTextEditors - const openFileEditors = allVisibleEditors.filter((editor) => editor.document.uri.scheme === 'file') - const hasOnlyOneOpenFileSplitView = openFileEditors.length === 1 - getLogger().debug(`hasOnlyOneOpenSplitView: ${hasOnlyOneOpenFileSplitView}`) - // is not a file if the currently highlighted window is not a file, and there is either more than one or no file windows open - const isNotFile = activeEditor?.document.uri.scheme !== 'file' && !hasOnlyOneOpenFileSplitView - getLogger().debug(`activeEditor: ${activeEditor}, isNotFile: ${isNotFile}`) - if (!activeEditor || isNotFile) { - this.messenger.sendErrorResponse( - isNotFile ? 'invalid-file-type' : 'no-open-file-found', - message.tabID - ) - this.messenger.sendUpdatePlaceholder( - message.tabID, - 'Please open and highlight a source code file in order run a code scan.' - ) - this.messenger.sendChatInputEnabled(message.tabID, true) - return - } - const fileEditorToTest = hasOnlyOneOpenFileSplitView ? openFileEditors[0] : activeEditor - const fileName = fileEditorToTest.document.uri.fsPath - - this.messenger.sendPromptMessage({ - tabID: message.tabID, - message: i18n('AWS.amazonq.scans.fileScan'), - }) - this.messenger.sendScanInProgress({ - type: 'answer-stream', - tabID: message.tabID, - canBeVoted: true, - message: scanProgressMessage( - SecurityScanStep.GENERATE_ZIP - 1, - CodeAnalysisScope.FILE_ON_DEMAND, - fileName ? path.basename(fileName) : undefined - ), - }) - this.messenger.sendUpdatePromptProgress(message.tabID, fileScanProgressField) - const scanUuid = randomUUID() - this.sessionStorage.getSession().scanUuid = scanUuid - void showFileScan.execute(placeholder, 'amazonQChat', scanUuid) - break - } - } - } - - private async handleScanProgress(message: any) { - if (this.isNotMatchingId(message)) { - return - } - this.messenger.sendAnswer({ - type: 'answer-part', - tabID: message.tabID, - messageID: ScanNamedMessages.SCAN_SUBMISSION_STATUS_MESSAGE, - message: scanProgressMessage( - message.step, - message.scope, - message.fileName ? path.basename(message.fileName) : undefined - ), - }) - } - - private processLink(message: any) { - void openUrl(vscode.Uri.parse(message.link)) - } - - private async processFileClick(message: any) { - const workspaceFolders = vscode.workspace.workspaceFolders ?? [] - for (const workspaceFolder of workspaceFolders) { - const projectPath = workspaceFolder.uri.fsPath - const filePathWithoutProjectName = message.filePath.split('/').slice(1).join('/') - const absolutePath = path.join(projectPath, filePathWithoutProjectName) - if (await fs.existsFile(absolutePath)) { - const document = await vscode.workspace.openTextDocument(absolutePath) - await vscode.window.showTextDocument(document) - } - } - } - - private async handleScanCancelled(message: any) { - this.messenger.sendAnswer({ type: 'answer', tabID: message.tabID, message: 'Cancelled' }) - } - - private isNotMatchingId(data: { scanUuid?: string }): boolean { - const messagescanUuid = data.scanUuid - const currentscanUuid = this.sessionStorage.getSession().scanUuid - return Boolean(messagescanUuid) && Boolean(currentscanUuid) && messagescanUuid !== currentscanUuid - } -} diff --git a/packages/amazonq/src/app/amazonqScan/chat/controller/messenger/messenger.ts b/packages/amazonq/src/app/amazonqScan/chat/controller/messenger/messenger.ts deleted file mode 100644 index 18b05e8bb84..00000000000 --- a/packages/amazonq/src/app/amazonqScan/chat/controller/messenger/messenger.ts +++ /dev/null @@ -1,230 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - * - * This class controls the presentation of the various chat bubbles presented by the - * Q Security Scans. - * - * As much as possible, all strings used in the experience should originate here. - */ - -import { AuthFollowUpType, AuthMessageDataMap } from 'aws-core-vscode/amazonq' -import { - FeatureAuthState, - SecurityScanError, - CodeWhispererConstants, - SecurityScanStep, - DefaultCodeScanErrorMessage, -} from 'aws-core-vscode/codewhisperer' -import { ChatItemButton, ProgressField } from '@aws/mynah-ui/dist/static' -import { MynahIcons, ChatItemAction } from '@aws/mynah-ui' -import { ChatItemType } from 'aws-core-vscode/amazonq' -import { - AppToWebViewMessageDispatcher, - AuthNeededException, - AuthenticationUpdateMessage, - CapabilityCardMessage, - ChatInputEnabledMessage, - ChatMessage, - ChatPrompt, - ErrorMessage, - UpdatePlaceholderMessage, - UpdatePromptProgressMessage, -} from '../../views/connector/connector' -import { i18n } from 'aws-core-vscode/shared' -import { ScanAction, scanProgressMessage } from '../../../models/constants' -import path from 'path' - -export type UnrecoverableErrorType = 'no-project-found' | 'no-open-file-found' | 'invalid-file-type' - -export enum ScanNamedMessages { - SCAN_SUBMISSION_STATUS_MESSAGE = 'scanSubmissionMessage', -} - -export class Messenger { - public constructor(private readonly dispatcher: AppToWebViewMessageDispatcher) {} - - public sendAnswer(params: { - message?: string - type: ChatItemType - tabID: string - messageID?: string - followUps?: ChatItemAction[] - canBeVoted?: boolean - }) { - this.dispatcher.sendChatMessage( - new ChatMessage( - { - message: params.message, - messageType: params.type, - messageId: params.messageID, - followUps: params.followUps, - canBeVoted: true, - }, - params.tabID - ) - ) - } - - public sendChatInputEnabled(tabID: string, enabled: boolean) { - this.dispatcher.sendChatInputEnabled(new ChatInputEnabledMessage(tabID, enabled)) - } - - public sendUpdatePlaceholder(tabID: string, newPlaceholder: string) { - this.dispatcher.sendUpdatePlaceholder(new UpdatePlaceholderMessage(tabID, newPlaceholder)) - } - - public sendUpdatePromptProgress(tabID: string, progressField: ProgressField | null) { - this.dispatcher.sendUpdatePromptProgress(new UpdatePromptProgressMessage(tabID, progressField)) - } - - public async sendAuthNeededExceptionMessage(credentialState: FeatureAuthState, tabID: string) { - let authType: AuthFollowUpType = 'full-auth' - let message = AuthMessageDataMap[authType].message - - switch (credentialState.amazonQ) { - case 'disconnected': - authType = 'full-auth' - message = AuthMessageDataMap[authType].message - break - case 'unsupported': - authType = 'use-supported-auth' - message = AuthMessageDataMap[authType].message - break - case 'expired': - authType = 're-auth' - message = AuthMessageDataMap[authType].message - break - } - - this.dispatcher.sendAuthNeededExceptionMessage(new AuthNeededException(message, authType, tabID)) - } - - public sendAuthenticationUpdate(scanEnabled: boolean, authenticatingTabIDs: string[]) { - this.dispatcher.sendAuthenticationUpdate(new AuthenticationUpdateMessage(scanEnabled, authenticatingTabIDs)) - } - - public sendScanInProgress(params: { - message?: string - type: ChatItemType - tabID: string - messageID?: string - canBeVoted?: boolean - }) { - this.dispatcher.sendChatMessage( - new ChatMessage( - { - message: params.message, - messageType: params.type, - messageId: ScanNamedMessages.SCAN_SUBMISSION_STATUS_MESSAGE, - canBeVoted: params.canBeVoted, - }, - params.tabID - ) - ) - } - - public sendErrorMessage(errorMessage: string, tabID: string) { - this.dispatcher.sendErrorMessage( - new ErrorMessage(CodeWhispererConstants.genericErrorMessage, errorMessage, tabID) - ) - } - - public sendScanResults( - tabID: string, - scope: CodeWhispererConstants.CodeAnalysisScope, - fileName?: string, - canBeVoted?: boolean - ) { - this.dispatcher.sendChatMessage( - new ChatMessage( - { - message: scanProgressMessage( - SecurityScanStep.PROCESS_SCAN_RESULTS + 1, - scope, - fileName ? path.basename(fileName) : undefined - ), - messageType: 'answer-part', - messageId: ScanNamedMessages.SCAN_SUBMISSION_STATUS_MESSAGE, - canBeVoted: canBeVoted, - }, - tabID - ) - ) - } - - public sendErrorResponse(error: UnrecoverableErrorType | SecurityScanError, tabID: string) { - let message = DefaultCodeScanErrorMessage - const buttons: ChatItemButton[] = [] - if (typeof error === 'string') { - switch (error) { - case 'no-project-found': { - // TODO: If required we can add "Open the Projects" button in the chat panel. - message = CodeWhispererConstants.noOpenProjectsFound - break - } - case 'no-open-file-found': { - message = CodeWhispererConstants.noOpenFileFound - break - } - case 'invalid-file-type': { - message = CodeWhispererConstants.invalidFileTypeChatMessage - break - } - } - } else if (error.code === 'NoActiveFileError') { - message = CodeWhispererConstants.noOpenFileFound - } else if (error.code === 'ContentLengthError') { - message = CodeWhispererConstants.ProjectSizeExceededErrorMessage - } else if (error.code === 'NoSourceFilesError') { - message = CodeWhispererConstants.noSourceFilesErrorMessage - } else { - message = error.customerFacingMessage - } - this.dispatcher.sendChatMessage( - new ChatMessage( - { - message, - messageType: 'answer', - buttons, - }, - tabID - ) - ) - } - - public sendScans(tabID: string, message: string) { - const followUps: ChatItemAction[] = [] - followUps.push({ - pillText: i18n('AWS.amazonq.scans.projectScan'), - status: 'info', - icon: 'folder' as MynahIcons, - type: ScanAction.RUN_PROJECT_SCAN, - }) - followUps.push({ - pillText: i18n('AWS.amazonq.scans.fileScan'), - status: 'info', - icon: 'file' as MynahIcons, - type: ScanAction.RUN_FILE_SCAN, - }) - this.dispatcher.sendChatMessage( - new ChatMessage( - { - message, - messageType: 'ai-prompt', - followUps, - }, - tabID - ) - ) - } - - // This function shows selected scan type in the chat panel as a user input - public sendPromptMessage(params: { tabID: string; message: string }) { - this.dispatcher.sendPromptMessage(new ChatPrompt(params.message, params.tabID)) - } - - public sendCapabilityCard(params: { tabID: string }) { - this.dispatcher.sendChatMessage(new CapabilityCardMessage(params.tabID)) - } -} diff --git a/packages/amazonq/src/app/amazonqScan/chat/controller/messenger/messengerUtils.ts b/packages/amazonq/src/app/amazonqScan/chat/controller/messenger/messengerUtils.ts deleted file mode 100644 index 455a4ebf4af..00000000000 --- a/packages/amazonq/src/app/amazonqScan/chat/controller/messenger/messengerUtils.ts +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - * - */ -// TODO: Refactor the common functionality between Transform, FeatureDev, CWSPRChat, Scan and UTG to a new Folder. - -export default class MessengerUtils { - static stringToEnumValue = ( - enumObject: T, - value: `${T[K]}` - ): T[K] => { - if (Object.values(enumObject).includes(value)) { - return value as unknown as T[K] - } else { - throw new Error('Value provided was not found in Enum') - } - } -} diff --git a/packages/amazonq/src/app/amazonqScan/chat/session/session.ts b/packages/amazonq/src/app/amazonqScan/chat/session/session.ts deleted file mode 100644 index 1ca7e8d7362..00000000000 --- a/packages/amazonq/src/app/amazonqScan/chat/session/session.ts +++ /dev/null @@ -1,25 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -export enum ConversationState { - IDLE, - JOB_SUBMITTED, -} - -export class Session { - // Used to keep track of whether or not the current session is currently authenticating/needs authenticating - public isAuthenticating: boolean = false - - // A tab may or may not be currently open - public tabID: string | undefined - - public conversationState: ConversationState = ConversationState.IDLE - - constructor() {} - - public isTabOpen(): boolean { - return this.tabID !== undefined - } -} diff --git a/packages/amazonq/src/app/amazonqScan/chat/storages/chatSession.ts b/packages/amazonq/src/app/amazonqScan/chat/storages/chatSession.ts deleted file mode 100644 index b7df6eb0cc6..00000000000 --- a/packages/amazonq/src/app/amazonqScan/chat/storages/chatSession.ts +++ /dev/null @@ -1,54 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - * - */ - -import { Session } from '../session/session' - -export class SessionNotFoundError extends Error {} - -export class ChatSessionManager { - private static _instance: ChatSessionManager - private activeSession: Session | undefined - - constructor() {} - - public static get Instance() { - return this._instance || (this._instance = new this()) - } - - private createSession(): Session { - this.activeSession = new Session() - return this.activeSession - } - - public getSession(): Session { - if (this.activeSession === undefined) { - return this.createSession() - } - - return this.activeSession - } - - public setActiveTab(tabID: string): string { - if (this.activeSession !== undefined) { - if (!this.activeSession.isTabOpen()) { - this.activeSession.tabID = tabID - return tabID - } - return this.activeSession.tabID! - } - - throw new SessionNotFoundError() - } - - public removeActiveTab(): void { - if (this.activeSession !== undefined) { - if (this.activeSession.isTabOpen()) { - this.activeSession.tabID = undefined - return - } - } - } -} diff --git a/packages/amazonq/src/app/amazonqScan/chat/views/actions/uiMessageListener.ts b/packages/amazonq/src/app/amazonqScan/chat/views/actions/uiMessageListener.ts deleted file mode 100644 index efa577313ab..00000000000 --- a/packages/amazonq/src/app/amazonqScan/chat/views/actions/uiMessageListener.ts +++ /dev/null @@ -1,126 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { MessageListener, ExtensionMessage } from 'aws-core-vscode/amazonq' -import { ScanChatControllerEventEmitters } from 'aws-core-vscode/amazonqScan' - -type UIMessage = ExtensionMessage & { - tabID?: string -} - -export interface UIMessageListenerProps { - readonly chatControllerEventEmitters: ScanChatControllerEventEmitters - readonly webViewMessageListener: MessageListener -} - -export class UIMessageListener { - private scanControllerEventsEmitters: ScanChatControllerEventEmitters | undefined - private webViewMessageListener: MessageListener - - constructor(props: UIMessageListenerProps) { - this.scanControllerEventsEmitters = props.chatControllerEventEmitters - this.webViewMessageListener = props.webViewMessageListener - - // Now we are listening to events that get sent from amazonq/webview/actions/actionListener (e.g. the tab) - this.webViewMessageListener.onMessage((msg) => { - this.handleMessage(msg) - }) - } - - private handleMessage(msg: ExtensionMessage) { - switch (msg.command) { - case 'new-tab-was-created': - this.tabOpened(msg) - break - case 'tab-was-removed': - this.tabClosed(msg) - break - case 'auth-follow-up-was-clicked': - this.authClicked(msg) - break - case 'review': - this.scan(msg) - break - case 'form-action-click': - this.formActionClicked(msg) - break - case 'follow-up-was-clicked': - this.followUpClicked(msg) - break - case 'response-body-link-click': - this.processResponseBodyLinkClick(msg) - break - case 'file-click': - this.processFileClick(msg) - break - case 'chat-item-voted': - this.chatItemVoted(msg) - break - } - } - - private scan(msg: UIMessage) { - this.scanControllerEventsEmitters?.runScan.fire({ - tabID: msg.tabID, - }) - } - - private formActionClicked(msg: UIMessage) { - this.scanControllerEventsEmitters?.formActionClicked.fire({ - ...msg, - }) - } - - private tabOpened(msg: UIMessage) { - this.scanControllerEventsEmitters?.tabOpened.fire({ - tabID: msg.tabID, - }) - } - - private tabClosed(msg: UIMessage) { - this.scanControllerEventsEmitters?.tabClosed.fire({ - tabID: msg.tabID, - }) - } - - private authClicked(msg: UIMessage) { - this.scanControllerEventsEmitters?.authClicked.fire({ - tabID: msg.tabID, - authType: msg.authType, - }) - } - - private followUpClicked(msg: UIMessage) { - this.scanControllerEventsEmitters?.followUpClicked.fire({ - followUp: msg.followUp, - tabID: msg.tabID, - }) - } - - private processResponseBodyLinkClick(msg: UIMessage) { - this.scanControllerEventsEmitters?.processResponseBodyLinkClick.fire({ - command: msg.command, - messageId: msg.messageId, - tabID: msg.tabID, - link: msg.link, - }) - } - - private processFileClick(msg: UIMessage) { - this.scanControllerEventsEmitters?.fileClicked.fire({ - tabID: msg.tabID, - messageId: msg.messageId, - filePath: msg.filePath, - }) - } - - private chatItemVoted(msg: any) { - this.scanControllerEventsEmitters?.processChatItemVotedMessage.fire({ - tabID: msg.tabID, - command: msg.command, - vote: msg.vote, - }) - } -} diff --git a/packages/amazonq/src/app/amazonqScan/chat/views/connector/connector.ts b/packages/amazonq/src/app/amazonqScan/chat/views/connector/connector.ts deleted file mode 100644 index c906a401f91..00000000000 --- a/packages/amazonq/src/app/amazonqScan/chat/views/connector/connector.ts +++ /dev/null @@ -1,192 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { AuthFollowUpType, MessagePublisher, ChatItemType } from 'aws-core-vscode/amazonq' -import { ScanMessageType } from 'aws-core-vscode/amazonqScan' -import { ChatItemButton, ProgressField, ChatItemAction, ChatItemContent } from '@aws/mynah-ui/dist/static' -import { scanChat } from '../../../models/constants' -import { MynahIcons } from '@aws/mynah-ui' - -class UiMessage { - readonly time: number = Date.now() - readonly sender: string = scanChat - readonly type: ScanMessageType = 'chatMessage' - readonly status: string = 'info' - - public constructor(protected tabID: string) {} -} - -export class AuthenticationUpdateMessage { - readonly time: number = Date.now() - readonly sender: string = scanChat - readonly type: ScanMessageType = 'authenticationUpdateMessage' - - constructor( - readonly scanEnabled: boolean, - readonly authenticatingTabIDs: string[] - ) {} -} - -export class AuthNeededException extends UiMessage { - override type: ScanMessageType = 'authNeededException' - - constructor( - readonly message: string, - readonly authType: AuthFollowUpType, - tabID: string - ) { - super(tabID) - } -} - -export interface ChatMessageProps { - readonly message: string | undefined - readonly messageId?: string | undefined - readonly messageType: ChatItemType - readonly canBeVoted?: boolean - readonly buttons?: ChatItemButton[] - readonly followUps?: ChatItemAction[] | undefined - readonly informationCard?: ChatItemContent['informationCard'] - readonly fileList?: ChatItemContent['fileList'] -} - -export class ChatMessage extends UiMessage { - readonly message: string | undefined - readonly messageId?: string | undefined - readonly messageType: ChatItemType - readonly canBeVoted?: boolean - readonly buttons: ChatItemButton[] - readonly followUps: ChatItemAction[] | undefined - readonly informationCard: ChatItemContent['informationCard'] - readonly fileList: ChatItemContent['fileList'] - override type: ScanMessageType = 'chatMessage' - - constructor(props: ChatMessageProps, tabID: string) { - super(tabID) - this.message = props.message - this.messageType = props.messageType - this.buttons = props.buttons || [] - this.messageId = props.messageId || undefined - this.followUps = props.followUps - this.informationCard = props.informationCard || undefined - this.fileList = props.fileList - this.canBeVoted = props.canBeVoted || undefined - } -} - -export class CapabilityCardMessage extends ChatMessage { - constructor(tabID: string) { - super( - { - message: '', - messageType: 'answer', - informationCard: { - title: '/review', - description: 'Included in your Q Developer subscription', - content: { - body: `I can review your workspace for vulnerabilities and issues. - -After you begin a review, I will: -1. Review all relevant code in your workspace or your current file -2. Provide a list of issues for your review - -You can then investigate, fix, or ignore issues. - -To learn more, check out our [User Guide](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/security-scans.html).`, - }, - icon: 'bug' as MynahIcons, - }, - }, - tabID - ) - } -} - -export class ChatInputEnabledMessage extends UiMessage { - override type: ScanMessageType = 'chatInputEnabledMessage' - - constructor( - tabID: string, - readonly enabled: boolean - ) { - super(tabID) - } -} - -export class UpdatePlaceholderMessage extends UiMessage { - readonly newPlaceholder: string - override type: ScanMessageType = 'updatePlaceholderMessage' - - constructor(tabID: string, newPlaceholder: string) { - super(tabID) - this.newPlaceholder = newPlaceholder - } -} - -export class UpdatePromptProgressMessage extends UiMessage { - readonly progressField: ProgressField | null - override type: ScanMessageType = 'updatePromptProgress' - constructor(tabID: string, progressField: ProgressField | null) { - super(tabID) - this.progressField = progressField - } -} - -export class ErrorMessage extends UiMessage { - override type: ScanMessageType = 'errorMessage' - constructor( - readonly title: string, - readonly message: string, - tabID: string - ) { - super(tabID) - } -} - -export class ChatPrompt extends UiMessage { - readonly message: string | undefined - readonly messageType = 'system-prompt' - override type: ScanMessageType = 'chatPrompt' - constructor(message: string | undefined, tabID: string) { - super(tabID) - this.message = message - } -} - -export class AppToWebViewMessageDispatcher { - constructor(private readonly appsToWebViewMessagePublisher: MessagePublisher) {} - - public sendChatMessage(message: ChatMessage) { - this.appsToWebViewMessagePublisher.publish(message) - } - - public sendUpdatePlaceholder(message: UpdatePlaceholderMessage) { - this.appsToWebViewMessagePublisher.publish(message) - } - - public sendUpdatePromptProgress(message: UpdatePromptProgressMessage) { - this.appsToWebViewMessagePublisher.publish(message) - } - - public sendAuthenticationUpdate(message: AuthenticationUpdateMessage) { - this.appsToWebViewMessagePublisher.publish(message) - } - - public sendAuthNeededExceptionMessage(message: AuthNeededException) { - this.appsToWebViewMessagePublisher.publish(message) - } - - public sendChatInputEnabled(message: ChatInputEnabledMessage) { - this.appsToWebViewMessagePublisher.publish(message) - } - - public sendErrorMessage(message: ErrorMessage) { - this.appsToWebViewMessagePublisher.publish(message) - } - - public sendPromptMessage(message: ChatPrompt) { - this.appsToWebViewMessagePublisher.publish(message) - } -} diff --git a/packages/amazonq/src/app/amazonqScan/index.ts b/packages/amazonq/src/app/amazonqScan/index.ts deleted file mode 100644 index c195193740b..00000000000 --- a/packages/amazonq/src/app/amazonqScan/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -export { default as MessengerUtils } from './chat/controller/messenger/messengerUtils' -export { init as scanChatAppInit } from './app' diff --git a/packages/amazonq/src/app/amazonqScan/models/constants.ts b/packages/amazonq/src/app/amazonqScan/models/constants.ts deleted file mode 100644 index 4180b130b78..00000000000 --- a/packages/amazonq/src/app/amazonqScan/models/constants.ts +++ /dev/null @@ -1,101 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import { ProgressField, MynahIcons, ChatItemButton } from '@aws/mynah-ui' -import { AggregatedCodeScanIssue, CodeAnalysisScope, SecurityScanStep, severities } from 'aws-core-vscode/codewhisperer' -import { i18n } from 'aws-core-vscode/shared' - -// For uniquely identifiying which chat messages should be routed to Scan -export const scanChat = 'scanChat' - -export enum ScanAction { - RUN_PROJECT_SCAN = 'runProjectScan', - RUN_FILE_SCAN = 'runFileScan', - STOP_PROJECT_SCAN = 'stopProjectScan', - STOP_FILE_SCAN = 'stopFileScan', -} - -export const cancelFileScanButton: ChatItemButton = { - id: ScanAction.STOP_FILE_SCAN, - text: i18n('AWS.generic.cancel'), - icon: 'cancel' as MynahIcons, -} - -export const cancelProjectScanButton: ChatItemButton = { - ...cancelFileScanButton, - id: ScanAction.STOP_PROJECT_SCAN, -} - -export const fileScanProgressField: ProgressField = { - status: 'default', - text: i18n('AWS.amazonq.scans.fileScanInProgress'), - value: -1, - actions: [cancelFileScanButton], -} - -export const projectScanProgressField: ProgressField = { - ...fileScanProgressField, - text: i18n('AWS.amazonq.scans.projectScanInProgress'), - actions: [cancelProjectScanButton], -} - -export const cancellingProgressField: ProgressField = { - status: 'warning', - text: i18n('AWS.generic.cancelling'), - value: -1, - actions: [], -} - -const checkIcons = { - wait: '☐', - current: '☐', - done: '☑', -} -export const scanProgressMessage = ( - currentStep: SecurityScanStep, - scope: CodeAnalysisScope, - fileName?: string -) => `Okay, I'm reviewing ${scope === CodeAnalysisScope.PROJECT ? 'your project' : fileName ? `\`${fileName}\`` : 'your file'} for code issues. - -This may take a few minutes. I'll share my progress here. - -${getIconForStep(SecurityScanStep.CREATE_SCAN_JOB, currentStep)} Initiating code review - -${getIconForStep(SecurityScanStep.POLL_SCAN_STATUS, currentStep)} Reviewing your code - -${getIconForStep(SecurityScanStep.PROCESS_SCAN_RESULTS, currentStep)} Processing review results -` - -export const scanSummaryMessage = ( - scope: CodeAnalysisScope, - securityRecommendationCollection: AggregatedCodeScanIssue[] -) => { - const severityCounts = securityRecommendationCollection.reduce( - (accumulator, current) => ({ - ...Object.fromEntries( - severities.map((severity) => [ - severity, - accumulator[severity] + - current.issues.filter((issue) => issue.severity === severity && issue.visible).length, - ]) - ), - }), - Object.fromEntries(severities.map((severity) => [severity, 0])) - ) - return `I completed the code review. I found the following issues in your ${scope === CodeAnalysisScope.PROJECT ? 'workspace' : 'file'}: -${Object.entries(severityCounts) - .map(([severity, count]) => `- ${severity}: \`${count} ${count === 1 ? 'issue' : 'issues'}\``) - .join('\n')} -` -} - -const getIconForStep = (targetStep: number, currentStep: number) => { - return currentStep === targetStep - ? checkIcons.current - : currentStep > targetStep - ? checkIcons.done - : checkIcons.wait -} - -export const codeReviewInChat = true diff --git a/packages/amazonq/src/app/chat/activation.ts b/packages/amazonq/src/app/chat/activation.ts deleted file mode 100644 index 7517d668497..00000000000 --- a/packages/amazonq/src/app/chat/activation.ts +++ /dev/null @@ -1,74 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { ExtensionContext } from 'vscode' -import { telemetry } from 'aws-core-vscode/telemetry' -import { AuthUtil } from 'aws-core-vscode/codewhisperer' -import { Commands, getLogger, placeholder } from 'aws-core-vscode/shared' -import * as amazonq from 'aws-core-vscode/amazonq' - -export async function activate(context: ExtensionContext) { - const appInitContext = amazonq.DefaultAmazonQAppInitContext.instance - await amazonq.TryChatCodeLensProvider.register(appInitContext.onDidChangeAmazonQVisibility.event) - - context.subscriptions.push( - amazonq.focusAmazonQChatWalkthrough.register(), - amazonq.walkthroughInlineSuggestionsExample.register(), - amazonq.openAmazonQWalkthrough.register(), - amazonq.listCodeWhispererCommandsWalkthrough.register(), - amazonq.focusAmazonQPanel.register(), - amazonq.focusAmazonQPanelKeybinding.register(), - amazonq.tryChatCodeLensCommand.register() - ) - - Commands.register('aws.amazonq.learnMore', () => { - void vscode.env.openExternal(vscode.Uri.parse(amazonq.amazonQHelpUrl)) - }) - - void setupAuthNotification() -} - -/** - * Display a notification to user for Log In. - * - * Authentication Notification is displayed when: - * - User is not authenticated - * - Once every session - * - */ -async function setupAuthNotification() { - let notificationDisplayed = false // Auth Notification should be displayed only once. - await tryShowNotification() - - async function tryShowNotification() { - // Do not show the notification if the IDE starts and user is already authenticated. - if (AuthUtil.instance.isConnected()) { - notificationDisplayed = true - } - - if (notificationDisplayed) { - return - } - - const source = 'authNotification' - const buttonAction = 'Sign In' - notificationDisplayed = true - - telemetry.toolkit_showNotification.emit({ - component: 'editor', - id: source, - reason: 'notLoggedIn', - result: 'Succeeded', - }) - const selection = await vscode.window.showWarningMessage('Start using Amazon Q', buttonAction) - - if (selection === buttonAction) { - amazonq.focusAmazonQPanel.execute(placeholder, source).catch((e) => { - getLogger().error('focusAmazonQPanel failed: %s', e) - }) - } - } -} diff --git a/packages/amazonq/src/app/chat/node/activateAgents.ts b/packages/amazonq/src/app/chat/node/activateAgents.ts deleted file mode 100644 index cd0309d7f2d..00000000000 --- a/packages/amazonq/src/app/chat/node/activateAgents.ts +++ /dev/null @@ -1,16 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as amazonqNode from 'aws-core-vscode/amazonq/node' -import { scanChatAppInit } from '../../amazonqScan' -import { DefaultAmazonQAppInitContext } from 'aws-core-vscode/amazonq' - -export function activateAgents() { - const appInitContext = DefaultAmazonQAppInitContext.instance - - amazonqNode.cwChatAppInit(appInitContext) - amazonqNode.gumbyChatAppInit(appInitContext) - scanChatAppInit(appInitContext) -} diff --git a/packages/amazonq/src/app/inline/EditRendering/diffUtils.ts b/packages/amazonq/src/app/inline/EditRendering/diffUtils.ts deleted file mode 100644 index 7f9ca54b6aa..00000000000 --- a/packages/amazonq/src/app/inline/EditRendering/diffUtils.ts +++ /dev/null @@ -1,93 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -// TODO: deprecate this file in favor of core/shared/utils/diffUtils -import { applyPatch } from 'diff' - -export type LineDiff = - | { type: 'added'; content: string } - | { type: 'removed'; content: string } - | { type: 'modified'; before: string; after: string } - -/** - * Apply a unified diff to original code to generate modified code - * @param originalCode The original code as a string - * @param unifiedDiff The unified diff content - * @returns The modified code after applying the diff - */ -export function applyUnifiedDiff(docText: string, unifiedDiff: string): string { - try { - // First try the standard diff package - try { - const result = applyPatch(docText, unifiedDiff) - if (result !== false) { - return result - } - } catch (error) {} - - // Parse the unified diff to extract the changes - const diffLines = unifiedDiff.split('\n') - let result = docText - - // Find all hunks in the diff - const hunkStarts = diffLines - .map((line, index) => (line.startsWith('@@ ') ? index : -1)) - .filter((index) => index !== -1) - - // Process each hunk - for (const hunkStart of hunkStarts) { - // Parse the hunk header - const hunkHeader = diffLines[hunkStart] - const match = hunkHeader.match(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/) - - if (!match) { - continue - } - - const oldStart = parseInt(match[1]) - const oldLines = parseInt(match[2]) - - // Extract the content lines for this hunk - let i = hunkStart + 1 - const contentLines = [] - while (i < diffLines.length && !diffLines[i].startsWith('@@')) { - contentLines.push(diffLines[i]) - i++ - } - - // Build the old and new text - let oldText = '' - let newText = '' - - for (const line of contentLines) { - if (line.startsWith('-')) { - oldText += line.substring(1) + '\n' - } else if (line.startsWith('+')) { - newText += line.substring(1) + '\n' - } else if (line.startsWith(' ')) { - oldText += line.substring(1) + '\n' - newText += line.substring(1) + '\n' - } - } - - // Remove trailing newline if it was added - oldText = oldText.replace(/\n$/, '') - newText = newText.replace(/\n$/, '') - - // Find the text to replace in the document - const docLines = docText.split('\n') - const startLine = oldStart - 1 // Convert to 0-based - const endLine = startLine + oldLines - - // Extract the text that should be replaced - const textToReplace = docLines.slice(startLine, endLine).join('\n') - - // Replace the text - result = result.replace(textToReplace, newText) - } - return result - } catch (error) { - return docText // Return original text if all methods fail - } -} diff --git a/packages/amazonq/src/app/inline/EditRendering/displayImage.ts b/packages/amazonq/src/app/inline/EditRendering/displayImage.ts deleted file mode 100644 index df4841bacfd..00000000000 --- a/packages/amazonq/src/app/inline/EditRendering/displayImage.ts +++ /dev/null @@ -1,471 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { getLogger, setContext } from 'aws-core-vscode/shared' -import * as vscode from 'vscode' -import { applyPatch, diffLines } from 'diff' -import { BaseLanguageClient } from 'vscode-languageclient' -import { CodeWhispererSession } from '../sessionManager' -import { LogInlineCompletionSessionResultsParams } from '@aws/language-server-runtimes/protocol' -import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes/protocol' -import path from 'path' -import { imageVerticalOffset } from './svgGenerator' -import { EditSuggestionState } from '../editSuggestionState' -import type { AmazonQInlineCompletionItemProvider } from '../completion' -import { vsCodeState } from 'aws-core-vscode/codewhisperer' - -const autoDiscardEditCursorDistance = 10 - -export class EditDecorationManager { - private imageDecorationType: vscode.TextEditorDecorationType - private removedCodeDecorationType: vscode.TextEditorDecorationType - private currentImageDecoration: vscode.DecorationOptions | undefined - private currentRemovedCodeDecorations: vscode.DecorationOptions[] = [] - private acceptHandler: (() => void) | undefined - private rejectHandler: ((isDiscard: boolean) => void) | undefined - - constructor() { - this.registerCommandHandlers() - this.imageDecorationType = vscode.window.createTextEditorDecorationType({ - isWholeLine: true, - }) - - this.removedCodeDecorationType = vscode.window.createTextEditorDecorationType({ - backgroundColor: 'rgba(255, 0, 0, 0.2)', - }) - } - - private imageToDecoration(image: vscode.Uri, range: vscode.Range) { - return { - range, - renderOptions: { - after: { - contentIconPath: image, - verticalAlign: 'text-top', - width: '100%', - height: 'auto', - margin: '1px 0', - }, - }, - hoverMessage: new vscode.MarkdownString('Edit suggestion. Press [Tab] to accept or [Esc] to reject.'), - } - } - - /** - * Highlights code that will be removed using the provided highlight ranges - * @param editor The active text editor - * @param startLine The line where the edit starts - * @param highlightRanges Array of ranges specifying which parts to highlight - * @returns Array of decoration options - */ - private highlightRemovedLines( - editor: vscode.TextEditor, - startLine: number, - highlightRanges: Array<{ line: number; start: number; end: number }> - ): vscode.DecorationOptions[] { - const decorations: vscode.DecorationOptions[] = [] - - // Group ranges by line for more efficient processing - const rangesByLine = new Map>() - - // Process each range and adjust line numbers relative to document - for (const range of highlightRanges) { - const documentLine = startLine + range.line - - // Skip if line is out of bounds - if (documentLine >= editor.document.lineCount) { - continue - } - - // Add to ranges map, grouped by line - if (!rangesByLine.has(documentLine)) { - rangesByLine.set(documentLine, []) - } - rangesByLine.get(documentLine)!.push({ - start: range.start, - end: range.end, - }) - } - - // Process each line with ranges - for (const [lineNumber, ranges] of rangesByLine.entries()) { - const lineLength = editor.document.lineAt(lineNumber).text.length - - if (ranges.length === 0) { - continue - } - - // Check if we should highlight the entire line - if (ranges.length === 1 && ranges[0].start === 0 && ranges[0].end >= lineLength) { - // Highlight entire line - const range = new vscode.Range( - new vscode.Position(lineNumber, 0), - new vscode.Position(lineNumber, lineLength) - ) - decorations.push({ range }) - } else { - // Create individual decorations for each range on this line - for (const range of ranges) { - const end = Math.min(range.end, lineLength) - if (range.start < end) { - const vsRange = new vscode.Range( - new vscode.Position(lineNumber, range.start), - new vscode.Position(lineNumber, end) - ) - decorations.push({ range: vsRange }) - } - } - } - } - - return decorations - } - - /** - * Displays an edit suggestion as an SVG image in the editor and highlights removed code - */ - public async displayEditSuggestion( - editor: vscode.TextEditor, - svgImage: vscode.Uri, - startLine: number, - onAccept: () => Promise, - onReject: (isDiscard: boolean) => Promise, - originalCode: string, - newCode: string, - originalCodeHighlightRanges: Array<{ line: number; start: number; end: number }> - ): Promise { - // Clear old decorations but don't reset state (state is already set in displaySvgDecoration) - editor.setDecorations(this.imageDecorationType, []) - editor.setDecorations(this.removedCodeDecorationType, []) - this.currentImageDecoration = undefined - this.currentRemovedCodeDecorations = [] - - this.acceptHandler = onAccept - this.rejectHandler = onReject - - // Get the line text to determine the end position - const lineText = editor.document.lineAt(Math.max(0, startLine - imageVerticalOffset)).text - const endPosition = new vscode.Position(Math.max(0, startLine - imageVerticalOffset), lineText.length) - const range = new vscode.Range(endPosition, endPosition) - - this.currentImageDecoration = this.imageToDecoration(svgImage, range) - - // Apply image decoration - editor.setDecorations(this.imageDecorationType, [this.currentImageDecoration]) - - // Highlight removed code with red background - this.currentRemovedCodeDecorations = this.highlightRemovedLines(editor, startLine, originalCodeHighlightRanges) - editor.setDecorations(this.removedCodeDecorationType, this.currentRemovedCodeDecorations) - } - - /** - * Clears all edit suggestion decorations - */ - public async clearDecorations(editor: vscode.TextEditor, disposables: vscode.Disposable[]): Promise { - for (const d of disposables) { - d.dispose() - } - editor.setDecorations(this.imageDecorationType, []) - editor.setDecorations(this.removedCodeDecorationType, []) - this.currentImageDecoration = undefined - this.currentRemovedCodeDecorations = [] - this.acceptHandler = undefined - this.rejectHandler = undefined - await setContext('aws.amazonq.editSuggestionActive' as any, false) - EditSuggestionState.setEditSuggestionActive(false) - } - - /** - * Registers command handlers for accepting/rejecting suggestions - */ - public registerCommandHandlers(): void { - // Register Tab key handler for accepting suggestion - vscode.commands.registerCommand('aws.amazonq.inline.acceptEdit', () => { - if (this.acceptHandler) { - this.acceptHandler() - } - }) - - // Register Esc key handler for rejecting suggestion - vscode.commands.registerCommand('aws.amazonq.inline.rejectEdit', (isDiscard: boolean = false) => { - if (this.rejectHandler) { - this.rejectHandler(isDiscard) - } - }) - } - - /** - * Disposes resources - */ - public dispose(): void { - this.imageDecorationType.dispose() - this.removedCodeDecorationType.dispose() - } - - // Use process-wide singleton to prevent multiple instances on Windows - static readonly decorationManagerKey = Symbol.for('aws.amazonq.decorationManager') - - static getDecorationManager(): EditDecorationManager { - const globalObj = global as any - if (!globalObj[this.decorationManagerKey]) { - globalObj[this.decorationManagerKey] = new EditDecorationManager() - } - return globalObj[this.decorationManagerKey] - } -} - -export const decorationManager = EditDecorationManager.getDecorationManager() - -/** - * Function to replace editor's content with new code - */ -async function replaceEditorContent(editor: vscode.TextEditor, newCode: string): Promise { - const document = editor.document - const fullRange = new vscode.Range( - 0, - 0, - document.lineCount - 1, - document.lineAt(document.lineCount - 1).text.length - ) - - await editor.edit((editBuilder) => { - editBuilder.replace(fullRange, newCode) - }) -} - -/** - * Calculates the end position of the actual edited content by finding the last changed part - */ -function getEndOfEditPosition(originalCode: string, newCode: string): vscode.Position { - const changes = diffLines(originalCode, newCode) - let lineOffset = 0 - - // Track the end position of the last added chunk - let lastChangeEndLine = 0 - let lastChangeEndColumn = 0 - let foundAddedContent = false - - for (const part of changes) { - if (part.added) { - foundAddedContent = true - - // Calculate lines in this added part - const lines = part.value.split('\n') - const linesCount = lines.length - - // Update position to the end of this added chunk - lastChangeEndLine = lineOffset + linesCount - 1 - - // Get the length of the last line in this added chunk - lastChangeEndColumn = lines[linesCount - 1].length - } - - // Update line offset (skip removed parts) - if (!part.removed) { - const partLineCount = part.value.split('\n').length - lineOffset += partLineCount - 1 - } - } - - // If we found added content, return position at the end of the last addition - if (foundAddedContent) { - return new vscode.Position(lastChangeEndLine, lastChangeEndColumn) - } - - // Fallback to current cursor position if no changes were found - const editor = vscode.window.activeTextEditor - return editor ? editor.selection.active : new vscode.Position(0, 0) -} - -/** - * Helper function to create discard telemetry params - */ -function createDiscardTelemetryParams( - session: CodeWhispererSession, - item: InlineCompletionItemWithReferences -): LogInlineCompletionSessionResultsParams { - return { - sessionId: session.sessionId, - completionSessionResult: { - [item.itemId]: { - seen: false, - accepted: false, - discarded: true, - }, - }, - totalSessionDisplayTime: Date.now() - session.requestStartTime, - firstCompletionDisplayLatency: session.firstCompletionDisplayLatency, - isInlineEdit: true, - } -} - -/** - * Helper function to display SVG decorations - */ -export async function displaySvgDecoration( - editor: vscode.TextEditor, - svgImage: vscode.Uri, - startLine: number, - newCode: string, - originalCodeHighlightRanges: Array<{ line: number; start: number; end: number }>, - session: CodeWhispererSession, - languageClient: BaseLanguageClient, - item: InlineCompletionItemWithReferences, - listeners: vscode.Disposable[], - inlineCompletionProvider?: AmazonQInlineCompletionItemProvider -) { - function logSuggestionFailure(type: 'DISCARD' | 'REJECT', reason: string, suggestionContent: string) { - getLogger('nextEditPrediction').debug( - `Auto ${type} edit suggestion with reason=${reason}, suggetion: ${suggestionContent}` - ) - } - // Check if edit is too far from current cursor position - const currentCursorLine = editor.selection.active.line - if (Math.abs(startLine - currentCursorLine) >= autoDiscardEditCursorDistance) { - // Emit DISCARD telemetry for edit suggestion that can't be shown because the suggestion is too far away - const params = createDiscardTelemetryParams(session, item) - void languageClient.sendNotification('aws/logInlineCompletionSessionResults', params) - logSuggestionFailure('DISCARD', 'cursor is too far away', item.insertText as string) - return - } - - const originalCode = editor.document.getText() - - // Set edit state immediately to prevent race condition with completion requests - await setContext('aws.amazonq.editSuggestionActive' as any, true) - EditSuggestionState.setEditSuggestionActive(true) - - // Check if a completion suggestion is currently active - if so, discard edit suggestion - if (inlineCompletionProvider && (await inlineCompletionProvider.isCompletionActive())) { - // Clean up state since we're not showing the edit - await setContext('aws.amazonq.editSuggestionActive' as any, false) - EditSuggestionState.setEditSuggestionActive(false) - - // Emit DISCARD telemetry for edit suggestion that can't be shown due to active completion - const params = createDiscardTelemetryParams(session, item) - void languageClient.sendNotification('aws/logInlineCompletionSessionResults', params) - logSuggestionFailure('DISCARD', 'Conflicting active inline completion', item.insertText as string) - return - } - - const isPatchValid = applyPatch(editor.document.getText(), item.insertText as string) - if (!isPatchValid) { - // Clean up state since we're not showing the edit - await setContext('aws.amazonq.editSuggestionActive' as any, false) - EditSuggestionState.setEditSuggestionActive(false) - - const params = createDiscardTelemetryParams(session, item) - // TODO: this session is closed on flare side hence discarded is not emitted in flare - void languageClient.sendNotification('aws/logInlineCompletionSessionResults', params) - logSuggestionFailure('DISCARD', 'Invalid patch', item.insertText as string) - return - } - - await decorationManager.displayEditSuggestion( - editor, - svgImage, - startLine, - async () => { - // Handle accept - getLogger().info('Edit suggestion accepted') - - // Replace content - try { - vsCodeState.isCodeWhispererEditing = true - await replaceEditorContent(editor, newCode) - } finally { - vsCodeState.isCodeWhispererEditing = false - } - - // Move cursor to end of the actual changed content - const endPosition = getEndOfEditPosition(originalCode, newCode) - editor.selection = new vscode.Selection(endPosition, endPosition) - - await decorationManager.clearDecorations(editor, listeners) - - const params: LogInlineCompletionSessionResultsParams = { - sessionId: session.sessionId, - completionSessionResult: { - [item.itemId]: { - seen: true, - accepted: true, - discarded: false, - }, - }, - totalSessionDisplayTime: Date.now() - session.requestStartTime, - firstCompletionDisplayLatency: session.firstCompletionDisplayLatency, - isInlineEdit: true, - } - void languageClient.sendNotification('aws/logInlineCompletionSessionResults', params) - session.triggerOnAcceptance = true - }, - async (isDiscard: boolean) => { - // Handle reject - if (isDiscard) { - getLogger().info('Edit suggestion discarded') - } else { - getLogger().info('Edit suggestion rejected') - } - await decorationManager.clearDecorations(editor, listeners) - - const suggestionState = isDiscard - ? { - seen: false, - accepted: false, - discarded: true, - } - : { - seen: true, - accepted: false, - discarded: false, - } - const params: LogInlineCompletionSessionResultsParams = { - sessionId: session.sessionId, - completionSessionResult: { - [item.itemId]: suggestionState, - }, - totalSessionDisplayTime: Date.now() - session.requestStartTime, - firstCompletionDisplayLatency: session.firstCompletionDisplayLatency, - isInlineEdit: true, - } - void languageClient.sendNotification('aws/logInlineCompletionSessionResults', params) - }, - originalCode, - newCode, - originalCodeHighlightRanges - ) -} - -export function deactivate() { - decorationManager.dispose() -} - -let decorationType: vscode.TextEditorDecorationType | undefined - -export function decorateLinesWithGutterIcon(lineNumbers: number[]) { - const editor = vscode.window.activeTextEditor - if (!editor) { - return - } - - // Dispose previous decoration if it exists - if (decorationType) { - decorationType.dispose() - } - - // Create a new gutter decoration with a small green dot - decorationType = vscode.window.createTextEditorDecorationType({ - gutterIconPath: vscode.Uri.file( - path.join(__dirname, 'media', 'green-dot.svg') // put your svg file in a `media` folder - ), - gutterIconSize: 'contain', - }) - - const decorations: vscode.DecorationOptions[] = lineNumbers.map((line) => ({ - range: new vscode.Range(new vscode.Position(line, 0), new vscode.Position(line, 0)), - })) - - editor.setDecorations(decorationType, decorations) -} diff --git a/packages/amazonq/src/app/inline/EditRendering/imageRenderer.ts b/packages/amazonq/src/app/inline/EditRendering/imageRenderer.ts deleted file mode 100644 index 6a4eeacf642..00000000000 --- a/packages/amazonq/src/app/inline/EditRendering/imageRenderer.ts +++ /dev/null @@ -1,210 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { displaySvgDecoration, decorationManager } from './displayImage' -import { SvgGenerationService } from './svgGenerator' -import { getContext, getLogger } from 'aws-core-vscode/shared' -import { BaseLanguageClient } from 'vscode-languageclient' -import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes/protocol' -import { CodeWhispererSession } from '../sessionManager' -import type { AmazonQInlineCompletionItemProvider } from '../completion' -import { vsCodeState } from 'aws-core-vscode/codewhisperer' -import { applyPatch, createPatch } from 'diff' -import { EditSuggestionState } from '../editSuggestionState' -import { debounce } from 'aws-core-vscode/utils' - -const autoRejectEditCursorDistance = 25 -const maxPrefixRetryCharDiff = 5 -const rerenderDeboucneInMs = 500 - -enum RejectReason { - DocumentChange = 'Invalid patch due to document change', - NotApplicableToOriginal = 'ApplyPatch fail for original code', - MaxRetry = `Already retry ${maxPrefixRetryCharDiff} times`, -} - -export class EditsSuggestionSvg { - private readonly logger = getLogger('nextEditPrediction') - private documentChangedListener: vscode.Disposable | undefined - private cursorChangedListener: vscode.Disposable | undefined - - private startLine = 0 - - private documentChangeTrace = { - contentChanged: '', - count: 0, - } - - constructor( - private suggestion: InlineCompletionItemWithReferences, - private readonly editor: vscode.TextEditor, - private readonly languageClient: BaseLanguageClient, - private readonly session: CodeWhispererSession, - private readonly inlineCompletionProvider?: AmazonQInlineCompletionItemProvider - ) {} - - async show(patchedSuggestion?: InlineCompletionItemWithReferences) { - if (!this.editor) { - this.logger.error(`attempting to render an edit suggestion while editor is undefined`) - return - } - - const item = patchedSuggestion ? patchedSuggestion : this.suggestion - - try { - const svgGenerationService = new SvgGenerationService() - // Generate your SVG image with the file contents - const currentFile = this.editor.document.uri.fsPath - const { svgImage, startLine, newCode, originalCodeHighlightRange } = - await svgGenerationService.generateDiffSvg(currentFile, this.suggestion.insertText as string) - - // For cursorChangeListener to access - this.startLine = startLine - - if (newCode.length === 0) { - this.logger.warn('not able to apply provided edit suggestion, skip rendering') - return - } - - if (svgImage) { - const documentChangedListener = (this.documentChangedListener ??= - vscode.workspace.onDidChangeTextDocument(async (e) => { - await this.onDocChange(e) - })) - - const cursorChangedListener = (this.cursorChangedListener ??= - vscode.window.onDidChangeTextEditorSelection((e) => { - this.onCursorChange(e) - })) - - // display the SVG image - await displaySvgDecoration( - this.editor, - svgImage, - startLine, - newCode, - originalCodeHighlightRange, - this.session, - this.languageClient, - item, - [documentChangedListener, cursorChangedListener], - this.inlineCompletionProvider - ) - } else { - this.logger.error('SVG image generation returned an empty result.') - } - } catch (error) { - this.logger.error(`Error generating SVG image: ${error}`) - } - } - - private onCursorChange(e: vscode.TextEditorSelectionChangeEvent) { - if (!EditSuggestionState.isEditSuggestionActive()) { - return - } - if (e.textEditor !== this.editor) { - return - } - const currentPosition = e.selections[0].active - const distance = Math.abs(currentPosition.line - this.startLine) - if (distance > autoRejectEditCursorDistance) { - this.autoReject(`cursor position move too far away off ${autoRejectEditCursorDistance} lines`) - } - } - - private async onDocChange(e: vscode.TextDocumentChangeEvent) { - if (e.contentChanges.length <= 0) { - return - } - if (e.document !== this.editor.document) { - return - } - if (vsCodeState.isCodeWhispererEditing) { - return - } - if (getContext('aws.amazonq.editSuggestionActive') === false) { - return - } - - // TODO: handle multi-contentChanges scenario - const diff = e.contentChanges[0] ? e.contentChanges[0].text : '' - this.logger.info(`docChange sessionId=${this.session.sessionId}, contentChange=${diff}`) - - // Track document changes because we might need to hide/reject suggestions while users are typing for better UX - this.documentChangeTrace.contentChanged += e.contentChanges[0].text - this.documentChangeTrace.count++ - /** - * 1. Take the diff returned by the model and apply it to the code we originally sent to the model - * 2. Do a diff between the above code and what's currently in the editor - * 3. Show this second diff to the user as the edit suggestion - */ - // Users' file content when the request fires (best guess because the actual process happens in language server) - const originalCode = this.session.fileContent - const appliedToOriginal = applyPatch(originalCode, this.suggestion.insertText as string) - try { - if (appliedToOriginal) { - const updatedPatch = this.patchSuggestion(appliedToOriginal) - - if ( - this.documentChangeTrace.contentChanged.length > maxPrefixRetryCharDiff || - this.documentChangeTrace.count > maxPrefixRetryCharDiff - ) { - // Reject the suggestion if users've typed over 5 characters while the suggestion is shown - this.autoReject(RejectReason.MaxRetry) - } else if (applyPatch(this.editor.document.getText(), updatedPatch.insertText as string) === false) { - this.autoReject(RejectReason.DocumentChange) - } else { - // Close the previoius popup and rerender it - this.logger.debug(`calling rerender with suggestion\n ${updatedPatch.insertText as string}`) - await this.debouncedRerender(updatedPatch) - } - } else { - this.autoReject(RejectReason.NotApplicableToOriginal) - } - } catch (e) { - this.logger.error(`encountered error while processing edit suggestion when users type ${e}`) - // TODO: Maybe we should auto reject/hide suggestions in this scenario - } - } - - async dispose() { - this.documentChangedListener?.dispose() - this.cursorChangedListener?.dispose() - await decorationManager.clearDecorations(this.editor, []) - } - - debouncedRerender = debounce( - async (suggestion: InlineCompletionItemWithReferences) => await this.rerender(suggestion), - rerenderDeboucneInMs, - true - ) - - private async rerender(suggestion: InlineCompletionItemWithReferences) { - await decorationManager.clearDecorations(this.editor, []) - await this.show(suggestion) - } - - private autoReject(reason: string) { - function logSuggestionFailure(type: 'REJECT', reason: string, suggestionContent: string) { - getLogger('nextEditPrediction').debug( - `Auto ${type} edit suggestion with reason=${reason}, suggetion: ${suggestionContent}` - ) - } - - logSuggestionFailure('REJECT', reason, this.suggestion.insertText as string) - void vscode.commands.executeCommand('aws.amazonq.inline.rejectEdit') - } - - private patchSuggestion(appliedToOriginal: string): InlineCompletionItemWithReferences { - const updatedPatch = createPatch( - this.editor.document.fileName, - this.editor.document.getText(), - appliedToOriginal - ) - this.logger.info(`Update edit suggestion\n ${updatedPatch}`) - return { ...this.suggestion, insertText: updatedPatch } - } -} diff --git a/packages/amazonq/src/app/inline/EditRendering/stringUtils.ts b/packages/amazonq/src/app/inline/EditRendering/stringUtils.ts deleted file mode 100644 index b8c9a52d052..00000000000 --- a/packages/amazonq/src/app/inline/EditRendering/stringUtils.ts +++ /dev/null @@ -1,28 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * Strips common indentation from each line of code that may contain HTML tags - * @param lines Array of code lines (may contain HTML tags) - * @returns Array of code lines with common indentation removed - */ -export function stripCommonIndentation(lines: string[]): string[] { - if (lines.length === 0) { - return lines - } - const removeFirstTag = (line: string) => line.replace(/^<[^>]*>/, '') - const getLeadingWhitespace = (text: string) => text.match(/^\s*/)?.[0] || '' - - // Find minimum indentation across all lines - const minIndentLength = Math.min(...lines.map((line) => getLeadingWhitespace(removeFirstTag(line)).length)) - - // Remove common indentation from each line - return lines.map((line) => { - const firstTagRemovedLine = removeFirstTag(line) - const leadingWhitespace = getLeadingWhitespace(firstTagRemovedLine) - const reducedWhitespace = leadingWhitespace.substring(minIndentLength) - return line.replace(leadingWhitespace, reducedWhitespace) - }) -} diff --git a/packages/amazonq/src/app/inline/EditRendering/svgGenerator.ts b/packages/amazonq/src/app/inline/EditRendering/svgGenerator.ts deleted file mode 100644 index 59752a7b08a..00000000000 --- a/packages/amazonq/src/app/inline/EditRendering/svgGenerator.ts +++ /dev/null @@ -1,519 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { diffWordsWithSpace, diffLines } from 'diff' -import * as vscode from 'vscode' -import { ToolkitError, getLogger } from 'aws-core-vscode/shared' -import { diffUtilities } from 'aws-core-vscode/shared' -import { stripCommonIndentation } from './stringUtils' -type Range = { line: number; start: number; end: number } - -const logger = getLogger('nextEditPrediction') -export const imageVerticalOffset = 1 -export const emptyDiffSvg = { - svgImage: vscode.Uri.parse(''), - startLine: 0, - newCode: '', - originalCodeHighlightRange: [], -} - -const defaultLineHighlightLength = 4 - -export class SvgGenerationService { - /** - * Generates an SVG image representing a code diff - * @param originalCode The original code - * @param newCode The new code with editsss - * @param theme The editor theme information - * @param offSet The margin to add to the left of the image - */ - public async generateDiffSvg( - filePath: string, - udiff: string - ): Promise<{ - svgImage: vscode.Uri - startLine: number - newCode: string - originalCodeHighlightRange: Range[] - }> { - const textDoc = await vscode.workspace.openTextDocument(filePath) - const originalCode = textDoc.getText().replaceAll('\r\n', '\n') - if (originalCode === '') { - logger.error(`udiff format error`) - throw new ToolkitError('udiff format error') - } - const newCode = await diffUtilities.getPatchedCode(filePath, udiff) - - const { createSVGWindow } = await import('svgdom') - - const svgjs = await import('@svgdotjs/svg.js') - const SVG = svgjs.SVG - const registerWindow = svgjs.registerWindow - - // Get editor theme info - const currentTheme = this.getEditorTheme() - - // Get edit diffs with highlight - const { addedLines, removedLines } = this.getEditedLinesFromCode(originalCode, newCode) - - const modifiedLines = diffUtilities.getModifiedLinesFromCode(addedLines, removedLines) - // TODO remove - // eslint-disable-next-line aws-toolkits/no-json-stringify-in-log - logger.info(`Line mapping: ${JSON.stringify(modifiedLines)}`) - - // Calculate dimensions based on code content - const { offset, editStartLine, isPositionValid } = this.calculatePosition( - originalCode.split('\n'), - newCode.split('\n'), - addedLines, - currentTheme - ) - - // if the position for the EDITS suggestion is not valid (there is no difference between new - // and current code content), return EMPTY_DIFF_SVG and skip the suggestion. - if (!isPositionValid) { - return emptyDiffSvg - } - - const highlightRanges = this.generateHighlightRanges(removedLines, addedLines, modifiedLines) - const diffAddedWithHighlight = this.getHighlightEdit(addedLines, highlightRanges.addedRanges) - const normalizedDiffLines = stripCommonIndentation(diffAddedWithHighlight) - - // Create SVG window, document, and container - const window = createSVGWindow() - const document = window.document - registerWindow(window, document) - const draw = SVG(document.documentElement) as any - - const { width, height } = this.calculateDimensions(addedLines, currentTheme) - draw.size(width + offset, height) - - // Generate CSS for syntax highlighting HTML content based on theme - const styles = this.generateStyles(currentTheme) - const htmlContent = this.generateHtmlContent(normalizedDiffLines, styles, offset) - - // Create foreignObject to embed HTML - const foreignObject = draw.foreignObject(width + offset, height) - foreignObject.node.innerHTML = htmlContent.trim() - - const svgData = draw.svg() - const svgResult = `data:image/svg+xml;base64,${Buffer.from(svgData).toString('base64')}` - - return { - svgImage: vscode.Uri.parse(svgResult), - startLine: editStartLine, - newCode: newCode, - originalCodeHighlightRange: highlightRanges.removedRanges, - } - } - - private calculateDimensions(newLines: string[], currentTheme: editorThemeInfo): { width: number; height: number } { - // Calculate appropriate width and height based on diff content - const maxLineLength = Math.max(...newLines.map((line) => line.length)) - - const headerFrontSize = Math.ceil(currentTheme.fontSize * 0.66) - - // Estimate width based on character count and font size - const width = Math.max(41 * headerFrontSize * 0.7, maxLineLength * currentTheme.fontSize * 0.7) - - // Calculate height based on diff line count and line height - const totalLines = newLines.length + 1 // +1 for header - const height = totalLines * currentTheme.lingHeight + 25 // +25 for padding - - return { width, height } - } - - private generateStyles(theme: editorThemeInfo): string { - // Generate CSS styles based on editor theme - const fontSize = theme.fontSize - const headerFrontSize = Math.ceil(fontSize * 0.66) - const lineHeight = theme.lingHeight - const foreground = theme.foreground - const bordeColor = 'rgba(212, 212, 212, 0.5)' - const background = theme.background || '#1e1e1e' - const diffRemoved = theme.diffRemoved || 'rgba(255, 0, 0, 0.2)' - const diffAdded = 'rgba(72, 128, 72, 0.52)' - return ` - .code-container { - font-family: ${'monospace'}; - color: ${foreground}; - font-size: ${fontSize}px; - line-height: ${lineHeight}px; - background-color: ${background}; - border: 1px solid ${bordeColor}; - border-radius: 0px; - padding-top: 3px; - padding-bottom: 5px; - padding-left: 10px; - } - .diff-header { - color: ${theme.foreground || '#d4d4d4'}; - margin: 0; - font-size: ${headerFrontSize}px; - padding: 0px; - } - .diff-removed { - background-color: ${diffRemoved}; - white-space: pre-wrap; /* Preserve whitespace */ - text-decoration: line-through; - opacity: 0.7; - } - .diff-changed { - white-space: pre-wrap; /* Preserve whitespace */ - background-color: ${diffAdded}; - } - .diff-unchanged { - white-space: pre-wrap; /* Preserve indentation for unchanged lines */ - } - ` - } - - private generateHtmlContent(diffLines: string[], styles: string, offSet: number): string { - return ` -
- -
-
Q: Press [Tab] to accept or [Esc] to reject:
- ${diffLines.map((line) => `
${line}
`).join('')} -
-
- ` - } - - /** - * Extract added and removed lines by comparing original and new code - * @param originalCode The original code string - * @param newCode The new code string - * @returns Object containing arrays of added and removed lines - */ - private getEditedLinesFromCode( - originalCode: string, - newCode: string - ): { addedLines: string[]; removedLines: string[] } { - const addedLines: string[] = [] - const removedLines: string[] = [] - - const changes = diffLines(originalCode, newCode) - - for (const change of changes) { - if (change.added) { - addedLines.push(...change.value.split('\n').filter((line) => line.length > 0)) - } else if (change.removed) { - removedLines.push(...change.value.split('\n').filter((line) => line.length > 0)) - } - } - - return { addedLines, removedLines } - } - - /** - * Applies highlighting to code lines based on the specified ranges - * @param newLines Array of code lines to highlight - * @param highlightRanges Array of ranges specifying which parts of the lines to highlight - * @returns Array of HTML strings with appropriate spans for highlighting - */ - private getHighlightEdit(newLines: string[], highlightRanges: Range[]): string[] { - const result: string[] = [] - - // Group ranges by line for easier lookup - const rangesByLine = new Map() - for (const range of highlightRanges) { - if (!rangesByLine.has(range.line)) { - rangesByLine.set(range.line, []) - } - rangesByLine.get(range.line)!.push(range) - } - - // Process each line of code - for (let lineIndex = 0; lineIndex < newLines.length; lineIndex++) { - const line = newLines[lineIndex] - // Get ranges for this line - const lineRanges = rangesByLine.get(lineIndex) || [] - - // If no ranges for this line, leave it as-is with HTML escaping - if (lineRanges.length === 0) { - result.push(`${this.escapeHtml(line)}`) - continue - } - - // Sort ranges by start position to ensure correct ordering - lineRanges.sort((a, b) => a.start - b.start) - - // Build the highlighted line - let highlightedLine = '' - let currentPos = 0 - - for (const range of lineRanges) { - // Add text before the current range (with HTML escaping) - if (range.start > currentPos) { - const beforeText = line.substring(currentPos, range.start) - highlightedLine += `${this.escapeHtml(beforeText)}` - } - - // Add the highlighted part (with HTML escaping) - const highlightedText = line.substring(range.start, range.end) - highlightedLine += `${this.escapeHtml(highlightedText)}` - - // Update current position - currentPos = range.end - } - - // Add any remaining text after the last range (with HTML escaping) - if (currentPos < line.length) { - const afterText = line.substring(currentPos) - highlightedLine += `${this.escapeHtml(afterText)}` - } - - result.push(highlightedLine) - } - - return result - } - - private getEditorTheme(): editorThemeInfo { - const editorConfig = vscode.workspace.getConfiguration('editor') - const fontSize = editorConfig.get('fontSize', 12) // Default to 12 if not set - const lineHeightSetting = editorConfig.get('lineHeight', 0) // Default to 0 if not set - - /** - * Calculate effective line height, documented as such: - * Use 0 to automatically compute the line height from the font size. - * Values between 0 and 8 will be used as a multiplier with the font size. - * Values greater than or equal to 8 will be used as effective values. - */ - let effectiveLineHeight: number - if (lineHeightSetting > 0 && lineHeightSetting < 8) { - effectiveLineHeight = lineHeightSetting * fontSize - } else if (lineHeightSetting >= 8) { - effectiveLineHeight = lineHeightSetting - } else { - effectiveLineHeight = Math.round(1.5 * fontSize) - } - - const themeName = vscode.workspace.getConfiguration('workbench').get('colorTheme', 'Default') - const themeColors = this.getThemeColors(themeName) - - return { - fontSize: fontSize, - lingHeight: effectiveLineHeight, - ...themeColors, - } - } - - private getThemeColors(themeName: string): { - foreground: string - background: string - diffAdded: string - diffRemoved: string - } { - // Define default dark theme colors - const darkThemeColors = { - foreground: 'rgba(212, 212, 212, 1)', - background: 'rgba(30, 30, 30, 1)', - diffAdded: 'rgba(231, 245, 231, 0.2)', - diffRemoved: 'rgba(255, 0, 0, 0.2)', - } - - // Define default light theme colors - const lightThemeColors = { - foreground: 'rgba(0, 0, 0, 1)', - background: 'rgba(255, 255, 255, 1)', - diffAdded: 'rgba(198, 239, 206, 0.2)', - diffRemoved: 'rgba(255, 199, 206, 0.5)', - } - - // For dark and light modes - const themeNameLower = themeName.toLowerCase() - - if (themeNameLower.includes('dark')) { - return darkThemeColors - } else if (themeNameLower.includes('light')) { - return lightThemeColors - } - - // Define colors for specific themes, add more if needed. - const themeColorMap: { - [key: string]: { foreground: string; background: string; diffAdded: string; diffRemoved: string } - } = { - Abyss: { - foreground: 'rgba(255, 255, 255, 1)', - background: 'rgba(0, 12, 24, 1)', - diffAdded: 'rgba(0, 255, 0, 0.2)', - diffRemoved: 'rgba(255, 0, 0, 0.3)', - }, - Red: { - foreground: 'rgba(255, 0, 0, 1)', - background: 'rgba(51, 0, 0, 1)', - diffAdded: 'rgba(255, 100, 100, 0.2)', - diffRemoved: 'rgba(255, 0, 0, 0.5)', - }, - } - - // Return colors for the specific theme or default to light theme - return themeColorMap[themeName] || lightThemeColors - } - - private calculatePosition( - originalLines: string[], - newLines: string[], - diffLines: string[], - theme: editorThemeInfo - ): { offset: number; editStartLine: number; isPositionValid: boolean } { - // Determine the starting line of the edit in the original file - let editStartLineInOldFile = 0 - const maxLength = Math.min(originalLines.length, newLines.length) - - for (let i = 0; i <= maxLength; i++) { - // if there is no difference between the original lines and the new lines, skip calculating for the start position. - if (i === maxLength && originalLines[i] === newLines[i] && originalLines.length === newLines.length) { - logger.info( - 'There is no difference between current and new code suggestion. Skip calculating for start position.' - ) - return { - offset: 0, - editStartLine: 0, - isPositionValid: false, - } - } - if (originalLines[i] !== newLines[i] || i === maxLength) { - editStartLineInOldFile = i - break - } - } - const shiftedStartLine = Math.max(0, editStartLineInOldFile - imageVerticalOffset) - - // Determine the range to consider - const startLine = shiftedStartLine - const endLine = Math.min(editStartLineInOldFile + diffLines.length, originalLines.length) - - // Find the longest line within the specified range - let maxLineLength = 0 - for (let i = startLine; i <= endLine; i++) { - const lineLength = originalLines[i]?.length || 0 - if (lineLength > maxLineLength) { - maxLineLength = lineLength - } - } - - // Calculate the offset based on the longest line and the starting line length - const startLineLength = originalLines[startLine]?.length || 0 - const offset = (maxLineLength - startLineLength) * theme.fontSize * 0.7 + 10 // padding - - return { offset, editStartLine: editStartLineInOldFile, isPositionValid: true } - } - - private escapeHtml(text: string): string { - return text - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, ''') - } - - /** - * Generates character-level highlight ranges for both original and modified code. - * @param originalCode Array of original code lines - * @param afterCode Array of code lines after modification - * @param modifiedLines Map of original lines to modified lines - * @returns Object containing ranges for original and after code character level highlighting - */ - private generateHighlightRanges( - originalCode: string[], - afterCode: string[], - modifiedLines: Map - ): { removedRanges: Range[]; addedRanges: Range[] } { - const originalRanges: Range[] = [] - const afterRanges: Range[] = [] - - // Create reverse mapping for quicker lookups - const reverseMap = new Map() - for (const [original, modified] of modifiedLines.entries()) { - reverseMap.set(modified, original) - } - - // Process original code lines - produces highlight ranges in current editor text - for (let lineIndex = 0; lineIndex < originalCode.length; lineIndex++) { - const line = originalCode[lineIndex] - - /** - * If [line] is an empty line or only contains whitespace char, [diffWordsWithSpace] will say it's not an "remove", i.e. [part.removed] will be undefined, - * therefore the deletion will not be highlighted. Thus fallback this scenario to highlight the entire line - */ - // If line exists in modifiedLines as a key, process character diffs - if (Array.from(modifiedLines.keys()).includes(line) && line.trim().length > 0) { - const modifiedLine = modifiedLines.get(line)! - const changes = diffWordsWithSpace(line, modifiedLine) - - let charPos = 0 - for (const part of changes) { - if (part.removed) { - originalRanges.push({ - line: lineIndex, - start: charPos, - end: charPos + part.value.length, - }) - } - - if (!part.added) { - charPos += part.value.length - } - } - } else { - // Line doesn't exist in modifiedLines values, highlight entire line - originalRanges.push({ - line: lineIndex, - start: 0, - end: line.length ?? defaultLineHighlightLength, - }) - } - } - - // Process after code lines - used for highlight in SVG image - for (let lineIndex = 0; lineIndex < afterCode.length; lineIndex++) { - const line = afterCode[lineIndex] - - if (reverseMap.has(line)) { - const originalLine = reverseMap.get(line)! - const changes = diffWordsWithSpace(originalLine, line) - - let charPos = 0 - for (const part of changes) { - if (part.added) { - afterRanges.push({ - line: lineIndex, - start: charPos, - end: charPos + part.value.length, - }) - } - - if (!part.removed) { - charPos += part.value.length - } - } - } else { - afterRanges.push({ - line: lineIndex, - start: 0, - end: line.length, - }) - } - } - - return { - removedRanges: originalRanges, - addedRanges: afterRanges, - } - } -} - -interface editorThemeInfo { - fontSize: number - lingHeight: number - foreground?: string - background?: string - diffAdded?: string - diffRemoved?: string -} diff --git a/packages/amazonq/src/app/inline/activation.ts b/packages/amazonq/src/app/inline/activation.ts deleted file mode 100644 index 5a86d340c00..00000000000 --- a/packages/amazonq/src/app/inline/activation.ts +++ /dev/null @@ -1,128 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import vscode from 'vscode' -import { - acceptSuggestion, - AuthUtil, - CodeSuggestionsState, - CodeWhispererCodeCoverageTracker, - CodeWhispererConstants, - CodeWhispererSettings, - ConfigurationEntry, - DefaultCodeWhispererClient, - invokeRecommendation, - isInlineCompletionEnabled, - KeyStrokeHandler, - RecommendationHandler, - runtimeLanguageContext, - TelemetryHelper, - UserWrittenCodeTracker, - vsCodeState, -} from 'aws-core-vscode/codewhisperer' -import { Commands, getLogger, globals, sleep } from 'aws-core-vscode/shared' -import { BaseLanguageClient } from 'vscode-languageclient' - -export async function activate(languageClient: BaseLanguageClient) { - const codewhispererSettings = CodeWhispererSettings.instance - const client = new DefaultCodeWhispererClient() - - if (isInlineCompletionEnabled()) { - await setSubscriptionsforInlineCompletion() - await AuthUtil.instance.setVscodeContextProps() - RecommendationHandler.instance.setLanguageClient(languageClient) - } - - function getAutoTriggerStatus(): boolean { - return CodeSuggestionsState.instance.isSuggestionsEnabled() - } - - async function getConfigEntry(): Promise { - const isShowMethodsEnabled: boolean = - vscode.workspace.getConfiguration('editor').get('suggest.showMethods') || false - const isAutomatedTriggerEnabled: boolean = getAutoTriggerStatus() - const isManualTriggerEnabled: boolean = true - const isSuggestionsWithCodeReferencesEnabled = codewhispererSettings.isSuggestionsWithCodeReferencesEnabled() - - // TODO:remove isManualTriggerEnabled - return { - isShowMethodsEnabled, - isManualTriggerEnabled, - isAutomatedTriggerEnabled, - isSuggestionsWithCodeReferencesEnabled, - } - } - - async function setSubscriptionsforInlineCompletion() { - RecommendationHandler.instance.subscribeSuggestionCommands() - - /** - * Automated trigger - */ - globals.context.subscriptions.push( - acceptSuggestion.register(globals.context), - vscode.window.onDidChangeActiveTextEditor(async (editor) => { - await RecommendationHandler.instance.onEditorChange() - }), - vscode.window.onDidChangeWindowState(async (e) => { - await RecommendationHandler.instance.onFocusChange() - }), - vscode.window.onDidChangeTextEditorSelection(async (e) => { - await RecommendationHandler.instance.onCursorChange(e) - }), - vscode.workspace.onDidChangeTextDocument(async (e) => { - const editor = vscode.window.activeTextEditor - if (!editor) { - return - } - if (e.document !== editor.document) { - return - } - if (!runtimeLanguageContext.isLanguageSupported(e.document)) { - return - } - - CodeWhispererCodeCoverageTracker.getTracker(e.document.languageId)?.countTotalTokens(e) - UserWrittenCodeTracker.instance.onTextDocumentChange(e) - /** - * Handle this keystroke event only when - * 1. It is not a backspace - * 2. It is not caused by CodeWhisperer editing - * 3. It is not from undo/redo. - */ - if (e.contentChanges.length === 0 || vsCodeState.isCodeWhispererEditing) { - return - } - - if (vsCodeState.lastUserModificationTime) { - TelemetryHelper.instance.setTimeSinceLastModification( - Date.now() - vsCodeState.lastUserModificationTime - ) - } - vsCodeState.lastUserModificationTime = Date.now() - /** - * Important: Doing this sleep(10) is to make sure - * 1. this event is processed by vs code first - * 2. editor.selection.active has been successfully updated by VS Code - * Then this event can be processed by our code. - */ - await sleep(CodeWhispererConstants.vsCodeCursorUpdateDelay) - if (!RecommendationHandler.instance.isSuggestionVisible()) { - await KeyStrokeHandler.instance.processKeyStroke(e, editor, client, await getConfigEntry()) - } - }), - // manual trigger - Commands.register({ id: 'aws.amazonq.invokeInlineCompletion', autoconnect: true }, async () => { - invokeRecommendation( - vscode.window.activeTextEditor as vscode.TextEditor, - client, - await getConfigEntry() - ).catch((e: Error) => { - getLogger().error('invokeRecommendation failed: %s', (e as Error).message) - }) - }) - ) - } -} diff --git a/packages/amazonq/src/app/inline/completion.ts b/packages/amazonq/src/app/inline/completion.ts deleted file mode 100644 index a7ba2760c09..00000000000 --- a/packages/amazonq/src/app/inline/completion.ts +++ /dev/null @@ -1,602 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' -import { - CancellationToken, - InlineCompletionContext, - InlineCompletionItem, - InlineCompletionItemProvider, - Position, - TextDocument, - commands, - languages, - Disposable, - window, - TextEditor, - InlineCompletionTriggerKind, - Range, -} from 'vscode' -import { BaseLanguageClient } from 'vscode-languageclient' -import { - InlineCompletionItemWithReferences, - LogInlineCompletionSessionResultsParams, -} from '@aws/language-server-runtimes/protocol' -import { SessionManager } from './sessionManager' -import { GetAllRecommendationsOptions, RecommendationService } from './recommendationService' -import { - CodeWhispererConstants, - ReferenceHoverProvider, - ReferenceLogViewProvider, - ImportAdderProvider, - CodeSuggestionsState, - vsCodeState, - noInlineSuggestionsMsg, - getDiagnosticsDifferences, - getDiagnosticsOfCurrentFile, - toIdeDiagnostics, - handleExtraBrackets, - InlineCompletionLoggingReason, -} from 'aws-core-vscode/codewhisperer' -import { LineTracker } from './stateTracker/lineTracker' -import { InlineTutorialAnnotation } from './tutorials/inlineTutorialAnnotation' -import { TelemetryHelper } from './telemetryHelper' -import { Experiments, getContext, getLogger, sleep } from 'aws-core-vscode/shared' -import { messageUtils } from 'aws-core-vscode/utils' -import { EditsSuggestionSvg } from './EditRendering/imageRenderer' -import { ICursorUpdateRecorder } from './cursorUpdateManager' -import { DocumentEventListener } from './documentEventListener' - -export class InlineCompletionManager implements Disposable { - private disposable: Disposable - private inlineCompletionProvider: AmazonQInlineCompletionItemProvider - private languageClient: BaseLanguageClient - private sessionManager: SessionManager - private recommendationService: RecommendationService - private lineTracker: LineTracker - - private inlineTutorialAnnotation: InlineTutorialAnnotation - private readonly logSessionResultMessageName = 'aws/logInlineCompletionSessionResults' - private documentEventListener: DocumentEventListener - - constructor( - languageClient: BaseLanguageClient, - sessionManager: SessionManager, - lineTracker: LineTracker, - inlineTutorialAnnotation: InlineTutorialAnnotation, - cursorUpdateRecorder?: ICursorUpdateRecorder - ) { - this.languageClient = languageClient - this.sessionManager = sessionManager - this.lineTracker = lineTracker - this.recommendationService = new RecommendationService(this.sessionManager, cursorUpdateRecorder) - this.inlineTutorialAnnotation = inlineTutorialAnnotation - this.documentEventListener = new DocumentEventListener() - this.inlineCompletionProvider = new AmazonQInlineCompletionItemProvider( - languageClient, - this.recommendationService, - this.sessionManager, - this.inlineTutorialAnnotation, - this.documentEventListener - ) - - this.disposable = languages.registerInlineCompletionItemProvider( - CodeWhispererConstants.platformLanguageIds, - this.inlineCompletionProvider - ) - this.lineTracker.ready() - } - - public getInlineCompletionProvider(): AmazonQInlineCompletionItemProvider { - return this.inlineCompletionProvider - } - - public dispose(): void { - if (this.disposable) { - this.disposable.dispose() - this.lineTracker.dispose() - } - if (this.documentEventListener) { - this.documentEventListener.dispose() - } - } - - public registerInlineCompletion() { - const onInlineAcceptance = async ( - sessionId: string, - item: InlineCompletionItemWithReferences, - editor: TextEditor, - requestStartTime: number, - position: vscode.Position, - firstCompletionDisplayLatency?: number - ) => { - try { - vsCodeState.isCodeWhispererEditing = true - const startLine = position.line - // TODO: also log the seen state for other suggestions in session - // Calculate timing metrics before diagnostic delay - const totalSessionDisplayTime = Date.now() - requestStartTime - await sleep(500) - const diagnosticDiff = getDiagnosticsDifferences( - this.sessionManager.getActiveSession()?.diagnosticsBeforeAccept, - getDiagnosticsOfCurrentFile() - ) - // try remove the extra } ) ' " if there is a new reported problem - // the extra } will cause syntax error - if (diagnosticDiff.added.length > 0) { - await handleExtraBrackets(editor, editor.selection.active, position) - } - const params: LogInlineCompletionSessionResultsParams = { - sessionId: sessionId, - completionSessionResult: { - [item.itemId]: { - seen: true, - accepted: true, - discarded: false, - }, - }, - totalSessionDisplayTime: totalSessionDisplayTime, - firstCompletionDisplayLatency: firstCompletionDisplayLatency, - addedDiagnostics: diagnosticDiff.added.map((it) => toIdeDiagnostics(it)), - removedDiagnostics: diagnosticDiff.removed.map((it) => toIdeDiagnostics(it)), - } - void this.languageClient.sendNotification(this.logSessionResultMessageName, params) - this.disposable.dispose() - this.disposable = languages.registerInlineCompletionItemProvider( - CodeWhispererConstants.platformLanguageIds, - this.inlineCompletionProvider - ) - if (item.references && item.references.length) { - const referenceLog = ReferenceLogViewProvider.getReferenceLog( - item.insertText as string, - item.references, - editor - ) - ReferenceLogViewProvider.instance.addReferenceLog(referenceLog) - ReferenceHoverProvider.instance.addCodeReferences(item.insertText as string, item.references) - } - if (item.mostRelevantMissingImports?.length) { - await ImportAdderProvider.instance.onAcceptRecommendation(editor, item, startLine) - } - this.sessionManager.incrementSuggestionCount() - // clear session manager states once accepted - this.sessionManager.clear() - } finally { - vsCodeState.isCodeWhispererEditing = false - } - } - commands.registerCommand('aws.amazonq.acceptInline', onInlineAcceptance) - - const onInlineRejection = async () => { - try { - vsCodeState.isCodeWhispererEditing = true - const session = this.sessionManager.getActiveSession() - if (session === undefined) { - return - } - const requestStartTime = session.requestStartTime - const totalSessionDisplayTime = Date.now() - requestStartTime - await commands.executeCommand('editor.action.inlineSuggest.hide') - // TODO: also log the seen state for other suggestions in session - this.disposable.dispose() - this.disposable = languages.registerInlineCompletionItemProvider( - CodeWhispererConstants.platformLanguageIds, - this.inlineCompletionProvider - ) - const sessionId = session.sessionId - const itemId = this.sessionManager.getActiveRecommendation()[0]?.itemId - if (!itemId) { - return - } - const params: LogInlineCompletionSessionResultsParams = { - sessionId: sessionId, - completionSessionResult: { - [itemId]: { - seen: true, - accepted: false, - discarded: false, - }, - }, - firstCompletionDisplayLatency: session.firstCompletionDisplayLatency, - totalSessionDisplayTime: totalSessionDisplayTime, - } - void this.languageClient.sendNotification(this.logSessionResultMessageName, params) - // clear session manager states once rejected - this.sessionManager.clear() - } finally { - vsCodeState.isCodeWhispererEditing = false - } - } - commands.registerCommand('aws.amazonq.rejectCodeSuggestion', onInlineRejection) - } -} - -export class AmazonQInlineCompletionItemProvider implements InlineCompletionItemProvider { - private logger = getLogger() - private pendingRequest: Promise | undefined - private lastEdit: EditsSuggestionSvg | undefined - - constructor( - private readonly languageClient: BaseLanguageClient, - private readonly recommendationService: RecommendationService, - private readonly sessionManager: SessionManager, - private readonly inlineTutorialAnnotation: InlineTutorialAnnotation, - private readonly documentEventListener: DocumentEventListener - ) {} - - private readonly logSessionResultMessageName = 'aws/logInlineCompletionSessionResults' - - // Ideally use this API handleDidShowCompletionItem - // https://github.com/microsoft/vscode/blob/main/src/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts#L83 - // we need this because the returned items of provideInlineCompletionItems may not be actually rendered on screen - // if VS Code believes the user is actively typing then it will not show such item - async checkWhetherInlineCompletionWasShown() { - // this line is to force VS Code to re-render the inline completion - // if it decides the inline completion can be shown - await vscode.commands.executeCommand('editor.action.inlineSuggest.trigger') - // yield event loop to let backend state transition finish plus wait for vsc to render - await sleep(10) - // run the command to detect if inline suggestion is really shown or not - await vscode.commands.executeCommand(`aws.amazonq.checkInlineSuggestionVisibility`) - } - - /** - * Check if a completion suggestion is currently active/displayed - */ - public async isCompletionActive(): Promise { - const session = this.sessionManager.getActiveSession() - if (session === undefined || !session.displayed || session.suggestions.some((item) => item.isInlineEdit)) { - return false - } - - // Use VS Code command to check if inline suggestion is actually visible on screen - // This command only executes when inlineSuggestionVisible context is true - await vscode.commands.executeCommand('aws.amazonq.checkInlineSuggestionVisibility') - const isInlineSuggestionVisible = Date.now() - session.lastVisibleTime < 50 - return isInlineSuggestionVisible - } - - /** - * Batch discard telemetry for completion suggestions when edit suggestion is active - */ - public batchDiscardTelemetryForEditSuggestion(items: any[], session: any): void { - // Emit DISCARD telemetry for completion suggestions that can't be shown due to active edit - const completionSessionResult: { - [key: string]: { seen: boolean; accepted: boolean; discarded: boolean } - } = {} - - for (const item of items) { - if (!item.isInlineEdit && item.itemId) { - completionSessionResult[item.itemId] = { - seen: false, - accepted: false, - discarded: true, - } - } - } - - // Send single telemetry event for all discarded items - if (Object.keys(completionSessionResult).length > 0) { - const params: LogInlineCompletionSessionResultsParams = { - sessionId: session.sessionId, - completionSessionResult, - firstCompletionDisplayLatency: session.firstCompletionDisplayLatency, - totalSessionDisplayTime: Date.now() - session.requestStartTime, - } - void this.languageClient.sendNotification(this.logSessionResultMessageName, params) - } - } - - // this method is automatically invoked by VS Code as user types - async provideInlineCompletionItems( - document: TextDocument, - position: Position, - context: InlineCompletionContext, - token: CancellationToken, - getAllRecommendationsOptions?: GetAllRecommendationsOptions - ): Promise { - getLogger().info('_provideInlineCompletionItems called with: %O', { - documentUri: document.uri.toString(), - position, - context, - triggerKind: context.triggerKind === InlineCompletionTriggerKind.Automatic ? 'Automatic' : 'Invoke', - options: JSON.stringify(getAllRecommendationsOptions), - }) - - // If there's already a pending request, wait for it to complete instead of starting a new one - // This prevents race conditions where multiple concurrent calls cause the later (empty) response - // to override the earlier (valid) response - if (this.pendingRequest) { - getLogger().info('Reusing pending inline completion request to avoid race condition') - try { - const result = await this.pendingRequest - // Check if THIS call's token was cancelled (not the original call's token) - if (token.isCancellationRequested) { - getLogger().info('Reused request completed but this call was cancelled') - return [] - } - return result - } catch (e) { - // If the pending request failed, continue with a new request - getLogger().info('Pending request failed, starting new request: %O', e) - } - } - - // Start a new request and track it - this.pendingRequest = this._provideInlineCompletionItemsImpl( - document, - position, - context, - token, - getAllRecommendationsOptions - ) - - try { - return await this.pendingRequest - } finally { - this.pendingRequest = undefined - } - } - - private async _provideInlineCompletionItemsImpl( - document: TextDocument, - position: Position, - context: InlineCompletionContext, - token: CancellationToken, - getAllRecommendationsOptions?: GetAllRecommendationsOptions - ): Promise { - if (vsCodeState.isCodeWhispererEditing) { - getLogger().info('Q is editing, returning empty') - return [] - } - - // Make edit suggestion blocking - if (getContext('aws.amazonq.editSuggestionActive') === true) { - return [] - } - - // there is a bug in VS Code, when hitting Enter, the context.triggerKind is Invoke (0) - // when hitting other keystrokes, the context.triggerKind is Automatic (1) - // we only mark option + C as manual trigger - // this is a workaround since the inlineSuggest.trigger command take no params - const isAutoTrigger = Date.now() - vsCodeState.lastManualTriggerTime > 50 - if (isAutoTrigger && !CodeSuggestionsState.instance.isSuggestionsEnabled()) { - // return early when suggestions are disabled with auto trigger - return [] - } - - // yield event loop to let the document listen catch updates - await sleep(1) - - let logstr = `GenerateCompletion activity:\n` - try { - const t0 = Date.now() - vsCodeState.isRecommendationsActive = true - // handling previous session - const prevSession = this.sessionManager.getActiveSession() - const prevSessionId = prevSession?.sessionId - const prevItemId = this.sessionManager.getActiveRecommendation()?.[0]?.itemId - const prevStartPosition = prevSession?.startPosition - const editsTriggerOnAcceptance = prevSession?.triggerOnAcceptance - if (editsTriggerOnAcceptance) { - getAllRecommendationsOptions = { - ...getAllRecommendationsOptions, - editsStreakToken: prevSession?.editsStreakPartialResultToken, - } - } - const editor = window.activeTextEditor - // Skip prefix matching for Edits suggestions that trigger on acceptance. - if (prevSession && prevSessionId && prevItemId && prevStartPosition && !editsTriggerOnAcceptance) { - const prefix = document.getText(new Range(prevStartPosition, position)) - const prevItemMatchingPrefix = [] - for (const item of this.sessionManager.getActiveRecommendation()) { - // if item is an Edit suggestion, insertText is a diff instead of new code contents, skip the logic to check for prefix. - if (item.isInlineEdit) { - continue - } - const text = typeof item.insertText === 'string' ? item.insertText : item.insertText.value - if (text.startsWith(prefix) && position.isAfterOrEqual(prevStartPosition)) { - item.command = { - command: 'aws.amazonq.acceptInline', - title: 'On acceptance', - arguments: [ - prevSessionId, - item, - editor, - prevSession?.requestStartTime, - position, - prevSession?.firstCompletionDisplayLatency, - ], - } - item.range = new Range(prevStartPosition, position) - prevItemMatchingPrefix.push(item as InlineCompletionItem) - } - } - // re-use previous suggestions as long as new typed prefix matches - if (prevItemMatchingPrefix.length > 0) { - logstr += `- not call LSP and reuse previous suggestions that match user typed characters - - duration between trigger to completion suggestion is displayed ${Date.now() - t0}` - void this.checkWhetherInlineCompletionWasShown() - return prevItemMatchingPrefix - } - - // if no such suggestions, report the previous suggestion as Reject or Discarded - const params: LogInlineCompletionSessionResultsParams = { - sessionId: prevSessionId, - completionSessionResult: { - [prevItemId]: { - seen: prevSession.displayed, - accepted: false, - discarded: !prevSession.displayed, - }, - }, - reason: InlineCompletionLoggingReason.IMPLICIT_REJECT, - firstCompletionDisplayLatency: prevSession.firstCompletionDisplayLatency, - totalSessionDisplayTime: Date.now() - prevSession.requestStartTime, - } - void this.languageClient.sendNotification(this.logSessionResultMessageName, params) - this.sessionManager.clear() - // Do not make auto trigger if user rejects a suggestion - // by typing characters that does not match - return [] - } - - // tell the tutorial that completions has been triggered - await this.inlineTutorialAnnotation.triggered(context.triggerKind) - - TelemetryHelper.instance.setInvokeSuggestionStartTime() - TelemetryHelper.instance.setTriggerType(context.triggerKind) - - const t1 = Date.now() - - await this.recommendationService.getAllRecommendations( - this.languageClient, - document, - position, - { - triggerKind: isAutoTrigger ? 1 : 0, - selectedCompletionInfo: context.selectedCompletionInfo, - }, - token, - isAutoTrigger, - this.documentEventListener, - getAllRecommendationsOptions - ) - // get active item from session for displaying - const items = this.sessionManager.getActiveRecommendation() - const itemId = this.sessionManager.getActiveRecommendation()?.[0]?.itemId - - // eslint-disable-next-line @typescript-eslint/no-base-to-string - const itemLog = items[0] ? `${items[0].insertText.toString()}` : `no suggestion` - - const t2 = Date.now() - - logstr += `- number of suggestions: ${items.length} -- sessionId: ${this.sessionManager.getActiveSession()?.sessionId} -- first suggestion content (next line): -${itemLog} -- duration between trigger to before sending LSP call: ${t1 - t0}ms -- duration between trigger to after receiving LSP response: ${t2 - t0}ms -- duration between before sending LSP call to after receving LSP response: ${t2 - t1}ms -` - const session = this.sessionManager.getActiveSession() - - // Show message to user when manual invoke fails to produce results. - if (items.length === 0 && context.triggerKind === InlineCompletionTriggerKind.Invoke) { - void messageUtils.showTimedMessage(noInlineSuggestionsMsg, 2000) - } - - if (!session || !items.length || !editor) { - logstr += `Failed to produce inline suggestion results. Received ${items.length} items from service` - return [] - } - - const cursorPosition = document.validatePosition(position) - - // Completion will not be rendered if users cursor moves to a position which is before the position when the service is invoked - if (items.length > 0 && !items[0].isInlineEdit) { - if (position.isAfter(editor.selection.active)) { - const params: LogInlineCompletionSessionResultsParams = { - sessionId: session.sessionId, - completionSessionResult: { - [itemId]: { - seen: false, - accepted: false, - discarded: true, - }, - }, - } - void this.languageClient.sendNotification(this.logSessionResultMessageName, params) - this.sessionManager.clear() - logstr += `- cursor moved behind trigger position. Discarding completion suggestion...` - return [] - } - } - - // delay the suggestion rendeing if user is actively typing - // see https://github.com/aws/aws-toolkit-vscode/commit/a537602a96f498f372ed61ec9d82cf8577a9d854 - for (let i = 0; i < 30; i++) { - const lastDocumentChange = this.documentEventListener.getLastDocumentChangeEvent(document.uri.fsPath) - if ( - lastDocumentChange && - Date.now() - lastDocumentChange.timestamp < CodeWhispererConstants.inlineSuggestionShowDelay - ) { - await sleep(CodeWhispererConstants.showRecommendationTimerPollPeriod) - } else { - break - } - } - - // the user typed characters from invoking suggestion cursor position to receiving suggestion position - const typeahead = document.getText(new Range(position, editor.selection.active)) - - const itemsMatchingTypeahead = [] - - for (const item of items) { - if (item.isInlineEdit) { - // Check if Next Edit Prediction feature flag is enabled - if (Experiments.instance.get('amazonqLSPNEP', true)) { - if (this.lastEdit) { - await this.lastEdit.dispose() - } - const e = new EditsSuggestionSvg(item, editor, this.languageClient, session, this) - await e.show() - this.lastEdit = e - logstr += `- duration between trigger to edits suggestion is displayed: ${Date.now() - t0}ms` - } - return [] - } - - item.insertText = typeof item.insertText === 'string' ? item.insertText : item.insertText.value - if (item.insertText.startsWith(typeahead)) { - item.command = { - command: 'aws.amazonq.acceptInline', - title: 'On acceptance', - arguments: [ - session.sessionId, - item, - editor, - session.requestStartTime, - cursorPosition, - session.firstCompletionDisplayLatency, - ], - } - item.range = new Range(cursorPosition, cursorPosition) - itemsMatchingTypeahead.push(item) - } - } - - // report discard if none of suggestions match typeahead - if (itemsMatchingTypeahead.length === 0) { - const params: LogInlineCompletionSessionResultsParams = { - sessionId: session.sessionId, - completionSessionResult: { - [itemId]: { - seen: false, - accepted: false, - discarded: true, - }, - }, - } - void this.languageClient.sendNotification(this.logSessionResultMessageName, params) - this.sessionManager.clear() - logstr += `- suggestion does not match user typeahead from insertion position. Discarding suggestion...` - return [] - } - - this.sessionManager.updateCodeReferenceAndImports() - // suggestions returned here will be displayed on screen - logstr += `- duration between trigger to completion suggestion is displayed: ${Date.now() - t0}ms` - void this.checkWhetherInlineCompletionWasShown() - return itemsMatchingTypeahead as InlineCompletionItem[] - } catch (e) { - getLogger('amazonqLsp').error('Failed to provide completion items: %O', e) - logstr += `- failed to provide completion items ${(e as Error).message}` - return [] - } finally { - vsCodeState.isRecommendationsActive = false - this.logger.info(logstr) - } - } -} diff --git a/packages/amazonq/src/app/inline/cursorUpdateManager.ts b/packages/amazonq/src/app/inline/cursorUpdateManager.ts deleted file mode 100644 index e06285d1f32..00000000000 --- a/packages/amazonq/src/app/inline/cursorUpdateManager.ts +++ /dev/null @@ -1,211 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { BaseLanguageClient } from 'vscode-languageclient' -import { getLogger } from 'aws-core-vscode/shared' -import { globals } from 'aws-core-vscode/shared' -import { AmazonQInlineCompletionItemProvider } from './completion' -import { CodeSuggestionsState } from 'aws-core-vscode/codewhisperer' - -// Configuration section for cursor updates -export const cursorUpdateConfigurationSection = 'aws.q.cursorUpdate' - -/** - * Interface for recording completion requests - */ -export interface ICursorUpdateRecorder { - recordCompletionRequest(): void -} - -/** - * Manages periodic cursor position updates for Next Edit Prediction - */ -export class CursorUpdateManager implements vscode.Disposable, ICursorUpdateRecorder { - private readonly logger = getLogger('amazonqLsp') - private updateIntervalMs = 250 - private updateTimer?: NodeJS.Timeout - private lastPosition?: vscode.Position - private lastDocumentUri?: string - private lastSentPosition?: vscode.Position - private lastSentDocumentUri?: string - private isActive = false - private lastRequestTime = 0 - private autotriggerStateDisposable?: vscode.Disposable - - constructor( - private readonly languageClient: BaseLanguageClient, - private readonly inlineCompletionProvider?: AmazonQInlineCompletionItemProvider - ) { - // Listen for autotrigger state changes to enable/disable the timer - this.autotriggerStateDisposable = CodeSuggestionsState.instance.onDidChangeState((isEnabled: boolean) => { - if (isEnabled && this.isActive) { - // If autotrigger is enabled and we're active, ensure timer is running - this.setupUpdateTimer() - } else { - // If autotrigger is disabled, clear the timer but keep isActive state - this.clearUpdateTimer() - } - }) - } - - /** - * Start tracking cursor positions and sending periodic updates - */ - public async start(): Promise { - if (this.isActive) { - return - } - - // Request configuration from server - try { - const config = await this.languageClient.sendRequest('aws/getConfigurationFromServer', { - section: cursorUpdateConfigurationSection, - }) - - if ( - config && - typeof config === 'object' && - 'intervalMs' in config && - typeof config.intervalMs === 'number' && - config.intervalMs > 0 - ) { - this.updateIntervalMs = config.intervalMs - } - } catch (error) { - this.logger.warn(`Failed to get cursor update configuration from server: ${error}`) - } - - this.isActive = true - if (CodeSuggestionsState.instance.isSuggestionsEnabled()) { - this.setupUpdateTimer() - } - } - - /** - * Stop tracking cursor positions and sending updates - */ - public stop(): void { - this.isActive = false - this.clearUpdateTimer() - } - - /** - * Update the current cursor position - */ - public updatePosition(position: vscode.Position, documentUri: string): void { - // If the document changed, set the last sent position to the current position - // This prevents triggering an immediate recommendation when switching tabs - if (this.lastDocumentUri !== documentUri) { - this.lastSentPosition = position.with() // Create a copy - this.lastSentDocumentUri = documentUri - } - - this.lastPosition = position.with() // Create a copy - this.lastDocumentUri = documentUri - } - - /** - * Record that a regular InlineCompletionWithReferences request was made - * This will prevent cursor updates from being sent for the update interval - */ - public recordCompletionRequest(): void { - this.lastRequestTime = globals.clock.Date.now() - } - - /** - * Set up the timer for periodic cursor position updates - */ - private setupUpdateTimer(): void { - this.clearUpdateTimer() - - this.updateTimer = globals.clock.setInterval(async () => { - await this.sendCursorUpdate() - }, this.updateIntervalMs) - } - - /** - * Clear the update timer - */ - private clearUpdateTimer(): void { - if (this.updateTimer) { - globals.clock.clearInterval(this.updateTimer) - this.updateTimer = undefined - } - } - - /** - * Creates a cancellation token source - * This method exists to make testing easier by allowing it to be stubbed - */ - private createCancellationTokenSource(): vscode.CancellationTokenSource { - return new vscode.CancellationTokenSource() - } - - /** - * Request LSP generate a completion for the current cursor position. - */ - private async sendCursorUpdate(): Promise { - // Don't send an update if a regular request was made recently - const now = globals.clock.Date.now() - if (now - this.lastRequestTime < this.updateIntervalMs) { - return - } - - const editor = vscode.window.activeTextEditor - if (!editor || editor.document.uri.toString() !== this.lastDocumentUri) { - return - } - - // Don't send an update if the position hasn't changed since the last update - if ( - this.lastSentPosition && - this.lastPosition && - this.lastSentDocumentUri === this.lastDocumentUri && - this.lastSentPosition.line === this.lastPosition.line && - this.lastSentPosition.character === this.lastPosition.character - ) { - return - } - - // Only proceed if we have a valid position and provider - if (this.lastPosition && this.inlineCompletionProvider) { - const position = this.lastPosition.with() // Create a copy - - // Call the inline completion provider instead of directly calling getAllRecommendations - try { - await this.inlineCompletionProvider.provideInlineCompletionItems( - editor.document, - position, - { - triggerKind: vscode.InlineCompletionTriggerKind.Automatic, - selectedCompletionInfo: undefined, - }, - this.createCancellationTokenSource().token, - { emitTelemetry: false, showUi: false } - ) - - // Only update the last sent position after successfully sending the request - this.lastSentPosition = position - this.lastSentDocumentUri = this.lastDocumentUri - } catch (error) { - this.logger.error(`Error sending cursor update: ${error}`) - } - } - } - - /** - * Dispose of resources - */ - public dispose(): void { - // Dispose of the autotrigger state change listener - if (this.autotriggerStateDisposable) { - this.autotriggerStateDisposable.dispose() - this.autotriggerStateDisposable = undefined - } - - this.stop() - } -} diff --git a/packages/amazonq/src/app/inline/documentEventListener.ts b/packages/amazonq/src/app/inline/documentEventListener.ts deleted file mode 100644 index 7af22a3015a..00000000000 --- a/packages/amazonq/src/app/inline/documentEventListener.ts +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' - -export interface DocumentChangeEvent { - event: vscode.TextDocumentChangeEvent - timestamp: number -} - -export class DocumentEventListener { - private lastDocumentChangeEventMap: Map = new Map() - private documentChangeListener: vscode.Disposable - private _maxDocument = 1000 - - constructor() { - this.documentChangeListener = vscode.workspace.onDidChangeTextDocument((e) => { - if (e.contentChanges.length > 0) { - if (this.lastDocumentChangeEventMap.size > this._maxDocument) { - this.lastDocumentChangeEventMap.clear() - } - this.lastDocumentChangeEventMap.set(e.document.uri.fsPath, { event: e, timestamp: Date.now() }) - // The VS Code provideInlineCompletionCallback may not trigger when Enter is pressed, especially in Python files - // manually make this trigger. In case of duplicate, the provideInlineCompletionCallback is already debounced - if (this.isEnter(e) && vscode.window.activeTextEditor) { - void vscode.commands.executeCommand('editor.action.inlineSuggest.trigger') - } - } - }) - } - - public isLastEventDeletion(filepath: string): boolean { - const result = this.lastDocumentChangeEventMap.get(filepath) - if (result) { - const event = result.event - const eventTime = result.timestamp - const isDelete = - (event && event.contentChanges.length === 1 && event.contentChanges[0].text === '') || false - const timeDiff = Math.abs(Date.now() - eventTime) - return timeDiff < 500 && isDelete - } - return false - } - - public getLastDocumentChangeEvent(filepath: string): DocumentChangeEvent | undefined { - return this.lastDocumentChangeEventMap.get(filepath) - } - - public dispose(): void { - if (this.documentChangeListener) { - this.documentChangeListener.dispose() - } - } - - private isEnter(e: vscode.TextDocumentChangeEvent): boolean { - if (e.contentChanges.length !== 1) { - return false - } - const str = e.contentChanges[0].text - if (str.length === 0) { - return false - } - return ( - (str.startsWith('\r\n') && str.substring(2).trim() === '') || - (str[0] === '\n' && str.substring(1).trim() === '') - ) - } -} diff --git a/packages/amazonq/src/app/inline/editSuggestionState.ts b/packages/amazonq/src/app/inline/editSuggestionState.ts deleted file mode 100644 index 61e4aebd142..00000000000 --- a/packages/amazonq/src/app/inline/editSuggestionState.ts +++ /dev/null @@ -1,27 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * Manages the state of edit suggestions to avoid circular dependencies - */ -export class EditSuggestionState { - private static isEditSuggestionCurrentlyActive = false - private static displayStartTime = Date.now() - - static setEditSuggestionActive(active: boolean): void { - this.isEditSuggestionCurrentlyActive = active - if (active) { - this.displayStartTime = Date.now() - } - } - - static isEditSuggestionActive(): boolean { - return this.isEditSuggestionCurrentlyActive - } - - static isEditSuggestionDisplayingOverOneSecond(): boolean { - return this.isEditSuggestionActive() && Date.now() - this.displayStartTime > 1000 - } -} diff --git a/packages/amazonq/src/app/inline/notebookUtil.ts b/packages/amazonq/src/app/inline/notebookUtil.ts deleted file mode 100644 index 928de1aad33..00000000000 --- a/packages/amazonq/src/app/inline/notebookUtil.ts +++ /dev/null @@ -1,98 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' - -import { CodeWhispererConstants, runtimeLanguageContext } from 'aws-core-vscode/codewhisperer' -import { InlineCompletionWithReferencesParams } from '@aws/language-server-runtimes/server-interface' - -function getEnclosingNotebook(document: vscode.TextDocument): vscode.NotebookDocument | undefined { - // For notebook cells, find the existing notebook with a cell that matches the current document. - return vscode.workspace.notebookDocuments.find( - (nb) => nb.notebookType === 'jupyter-notebook' && nb.getCells().some((cell) => cell.document === document) - ) -} - -export function getNotebookContext( - notebook: vscode.NotebookDocument, - document: vscode.TextDocument, - position: vscode.Position -) { - // Expand the context for a cell inside of a noteboo with whatever text fits from the preceding and subsequent cells - const allCells = notebook.getCells() - const cellIndex = allCells.findIndex((cell) => cell.document === document) - let caretLeftFileContext = '' - let caretRightFileContext = '' - - if (cellIndex >= 0 && cellIndex < allCells.length) { - // Add content from previous cells - for (let i = 0; i < cellIndex; i++) { - caretLeftFileContext += convertCellContent(allCells[i]) + '\n' - } - - // Add content from current cell up to cursor - caretLeftFileContext += allCells[cellIndex].document.getText( - new vscode.Range(new vscode.Position(0, 0), position) - ) - - // Add content from cursor to end of current cell - caretRightFileContext = allCells[cellIndex].document.getText( - new vscode.Range( - position, - allCells[cellIndex].document.positionAt(allCells[cellIndex].document.getText().length) - ) - ) - - // Add content from following cells - for (let i = cellIndex + 1; i < allCells.length; i++) { - caretRightFileContext += '\n' + convertCellContent(allCells[i]) - } - } - caretLeftFileContext = caretLeftFileContext.slice(-CodeWhispererConstants.charactersLimit) - caretRightFileContext = caretRightFileContext.slice(0, CodeWhispererConstants.charactersLimit) - return { caretLeftFileContext, caretRightFileContext } -} - -// Convert the markup cells into code with comments -export function convertCellContent(cell: vscode.NotebookCell) { - const cellText = cell.document.getText() - if (cell.kind === vscode.NotebookCellKind.Markup) { - const commentPrefix = runtimeLanguageContext.getSingleLineCommentPrefix( - runtimeLanguageContext.normalizeLanguage(cell.document.languageId) ?? cell.document.languageId - ) - if (commentPrefix === '') { - return cellText - } - return cell.document - .getText() - .split('\n') - .map((line) => `${commentPrefix}${line}`) - .join('\n') - } - return cellText -} - -export function extractFileContextInNotebooks( - document: vscode.TextDocument, - position: vscode.Position -): InlineCompletionWithReferencesParams['fileContextOverride'] | undefined { - let caretLeftFileContext = '' - let caretRightFileContext = '' - const languageName = runtimeLanguageContext.normalizeLanguage(document.languageId) ?? document.languageId - if (document.uri.scheme === 'vscode-notebook-cell') { - const notebook = getEnclosingNotebook(document) - if (notebook) { - ;({ caretLeftFileContext, caretRightFileContext } = getNotebookContext(notebook, document, position)) - return { - leftFileContent: caretLeftFileContext, - rightFileContent: caretRightFileContext, - filename: document.fileName, - fileUri: document.uri.toString(), - programmingLanguage: languageName, - } - } - } - return undefined -} diff --git a/packages/amazonq/src/app/inline/recommendationService.ts b/packages/amazonq/src/app/inline/recommendationService.ts deleted file mode 100644 index e866eb47a04..00000000000 --- a/packages/amazonq/src/app/inline/recommendationService.ts +++ /dev/null @@ -1,342 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import { - InlineCompletionListWithReferences, - InlineCompletionWithReferencesParams, - inlineCompletionWithReferencesRequestType, - TextDocumentContentChangeEvent, - editCompletionRequestType, - LogInlineCompletionSessionResultsParams, -} from '@aws/language-server-runtimes/protocol' -import { CancellationToken, InlineCompletionContext, Position, TextDocument, commands } from 'vscode' -import { BaseLanguageClient } from 'vscode-languageclient' -import { SessionManager } from './sessionManager' -import { - AuthUtil, - CodeWhispererConstants, - CodeWhispererStatusBarManager, - vsCodeState, -} from 'aws-core-vscode/codewhisperer' -import { TelemetryHelper } from './telemetryHelper' -import { ICursorUpdateRecorder } from './cursorUpdateManager' -import { getLogger } from 'aws-core-vscode/shared' -import { DocumentEventListener } from './documentEventListener' -import { getOpenFilesInWindow } from 'aws-core-vscode/utils' -import { asyncCallWithTimeout } from '../../util/timeoutUtil' -import { extractFileContextInNotebooks } from './notebookUtil' -import { EditSuggestionState } from './editSuggestionState' - -export interface GetAllRecommendationsOptions { - emitTelemetry?: boolean - showUi?: boolean - editsStreakToken?: number | string -} - -export class RecommendationService { - private logger = getLogger('inline') - - constructor( - private readonly sessionManager: SessionManager, - private cursorUpdateRecorder?: ICursorUpdateRecorder - ) {} - /** - * Set the recommendation service - */ - public setCursorUpdateRecorder(recorder: ICursorUpdateRecorder): void { - this.cursorUpdateRecorder = recorder - } - - async getRecommendationsWithTimeout( - languageClient: BaseLanguageClient, - request: InlineCompletionWithReferencesParams, - token: CancellationToken - ) { - const resultPromise: Promise = languageClient.sendRequest( - inlineCompletionWithReferencesRequestType.method, - request, - token - ) - return await asyncCallWithTimeout( - resultPromise, - `${inlineCompletionWithReferencesRequestType.method} time out`, - CodeWhispererConstants.promiseTimeoutLimit * 1000 - ) - } - - async getAllRecommendations( - languageClient: BaseLanguageClient, - document: TextDocument, - position: Position, - context: InlineCompletionContext, - token: CancellationToken, - isAutoTrigger: boolean, - documentEventListener: DocumentEventListener, - options: GetAllRecommendationsOptions = { emitTelemetry: true, showUi: true } - ) { - const documentChangeEvent = documentEventListener?.getLastDocumentChangeEvent(document.uri.fsPath)?.event - - // Record that a regular request is being made - this.cursorUpdateRecorder?.recordCompletionRequest() - const documentChangeParams = documentChangeEvent - ? { - textDocument: { - uri: document.uri.toString(), - version: document.version, - }, - contentChanges: documentChangeEvent.contentChanges.map((x) => x as TextDocumentContentChangeEvent), - } - : undefined - const openTabs = await getOpenFilesInWindow() - let request: InlineCompletionWithReferencesParams = { - textDocument: { - uri: document.uri.toString(), - }, - position, - context, - documentChangeParams: documentChangeParams, - openTabFilepaths: openTabs, - } - if (options.editsStreakToken) { - request = { ...request, partialResultToken: options.editsStreakToken } - } - if (document.uri.scheme === 'vscode-notebook-cell') { - request.fileContextOverride = extractFileContextInNotebooks(document, position) - } - const requestStartTime = Date.now() - const statusBar = CodeWhispererStatusBarManager.instance - - // Only track telemetry if enabled - TelemetryHelper.instance.setInvokeSuggestionStartTime() - TelemetryHelper.instance.setPreprocessEndTime() - TelemetryHelper.instance.setSdkApiCallStartTime() - - try { - // Show UI indicators only if UI is enabled - if (options.showUi) { - await statusBar.setLoading() - } - - // Handle first request - this.logger.info('Sending inline completion request: %O', { - method: inlineCompletionWithReferencesRequestType.method, - request: { - textDocument: request.textDocument, - position: request.position, - context: request.context, - nextToken: request.partialResultToken, - }, - }) - const t0 = Date.now() - - // Best effort estimate of deletion - const isTriggerByDeletion = documentEventListener.isLastEventDeletion(document.uri.fsPath) - - const ps: Promise[] = [] - /** - * IsTriggerByDeletion is to prevent user deletion invoking Completions. - * PartialResultToken is not a hack for now since only Edits suggestion use partialResultToken across different calls of [getAllRecommendations], - * Completions use PartialResultToken with single 1 call of [getAllRecommendations]. - * Edits leverage partialResultToken to achieve EditStreak such that clients can pull all continuous suggestions generated by the model within 1 EOS block. - */ - if (!isTriggerByDeletion && !request.partialResultToken && !EditSuggestionState.isEditSuggestionActive()) { - const completionPromise: Promise = languageClient.sendRequest( - inlineCompletionWithReferencesRequestType.method, - request, - token - ) - ps.push(completionPromise) - } - - /** - * Though Edit request is sent on keystrokes everytime, the language server will execute the request in a debounced manner so that it won't be immediately executed. - */ - const editPromise: Promise = languageClient.sendRequest( - editCompletionRequestType.method, - request, - token - ) - ps.push(editPromise) - - /** - * First come first serve, ideally we should simply return the first response returned. However there are some caviar here because either - * (1) promise might be returned early without going through service - * (2) some users are not enabled with edits suggestion, therefore service will return empty result without passing through the model - * With the scenarios listed above or others, it's possible that 1 promise will ALWAYS win the race and users will NOT get any suggestion back. - * This is the hack to return first "NON-EMPTY" response - */ - let result = await Promise.race(ps) - if (ps.length > 1 && result.items.length === 0) { - for (const p of ps) { - const r = await p - if (r.items.length > 0) { - result = r - } - } - } - - this.logger.info('Received inline completion response (page 0) from LSP: %O', { - sessionId: result.sessionId, - latency: Date.now() - t0, - itemCount: result.items?.length || 0, - items: result.items?.map((item) => ({ - itemId: item.itemId, - insertText: - (typeof item.insertText === 'string' ? item.insertText : String(item.insertText))?.substring( - 0, - 50 - ) + '...', - })), - nextToken: result.partialResultToken, - }) - - if (result.items.length > 0 && result.items[0].isInlineEdit === false) { - if (isTriggerByDeletion) { - this.logger.info(`Suggestions were discarded; reason: triggerByDeletion`) - return [] - } - // Completion will not be rendered if an edit suggestion has been active for longer than 1 second - if (EditSuggestionState.isEditSuggestionDisplayingOverOneSecond()) { - const session = this.sessionManager.getActiveSession() - if (!session) { - this.logger.error(`Suggestions were discarded; reason: undefined conflicting session`) - return [] - } - const params: LogInlineCompletionSessionResultsParams = { - sessionId: session.sessionId, - completionSessionResult: Object.fromEntries( - result.items.map((item) => [ - item.itemId, - { - seen: false, - accepted: false, - discarded: true, - }, - ]) - ), - } - void languageClient.sendNotification('aws/logInlineCompletionSessionResults', params) - this.sessionManager.clear() - this.logger.info( - 'Suggetions were discarded; reason: active edit suggestion displayed longer than 1 second' - ) - return [] - } else if (EditSuggestionState.isEditSuggestionActive()) { - // discard the current edit suggestion if its display time is less than 1 sec - await commands.executeCommand('aws.amazonq.inline.rejectEdit', true) - this.logger.info('Discarding active edit suggestion displaying less than 1 second') - } - } - - TelemetryHelper.instance.setSdkApiCallEndTime() - TelemetryHelper.instance.setSessionId(result.sessionId) - if (result.items.length > 0 && result.items[0].itemId !== undefined) { - TelemetryHelper.instance.setFirstResponseRequestId(result.items[0].itemId as string) - } - TelemetryHelper.instance.setFirstSuggestionShowTime() - - const firstCompletionDisplayLatency = Date.now() - requestStartTime - this.sessionManager.startSession( - result.sessionId, - result.items, - requestStartTime, - position, - document, - firstCompletionDisplayLatency - ) - - const isInlineEdit = result.items.some((item) => item.isInlineEdit) - - // TODO: question, is it possible that the first request returns empty suggestion but has non-empty next token? - if (result.partialResultToken) { - let logstr = `Found non null next token; ` - if (!isInlineEdit) { - // If the suggestion is COMPLETIONS and there are more results to fetch, handle them in the background - logstr += 'start pagination' - this.processRemainingRequests(languageClient, request, result, token) - .then(async (flag) => { - // Force vscode to reload suggestions - await commands.executeCommand('editor.action.inlineSuggest.hide') - await commands.executeCommand('editor.action.inlineSuggest.trigger') - - const logstr = `Done pagination; shouldUpdate=${flag}; updatedSuggestionCount=${this.sessionManager.getActiveRecommendation().length}` - this.logger.info(logstr) - }) - .catch((error) => { - languageClient.warn(`Error when getting suggestions: ${error}`) - }) - } else { - // Skip fetching for more items if the suggesion is EDITS. If it is EDITS suggestion, only fetching for more - // suggestions when the user start to accept a suggesion. - // Save editsStreakPartialResultToken for the next EDITS suggestion trigger if user accepts. - logstr += 'skip pagination as Edit doesnt support pagination' - this.sessionManager.updateActiveEditsStreakToken(result.partialResultToken) - } - - this.logger.info(logstr) - } - } catch (error: any) { - this.logger.error('Error getting recommendations: %O', error) - // bearer token expired - if (error.data && error.data.awsErrorCode === 'E_AMAZON_Q_CONNECTION_EXPIRED') { - // ref: https://github.com/aws/aws-toolkit-vscode/blob/amazonq/v1.74.0/packages/core/src/codewhisperer/service/inlineCompletionService.ts#L104 - // show re-auth once if connection expired - if (AuthUtil.instance.isConnectionExpired()) { - await AuthUtil.instance.notifyReauthenticate(isAutoTrigger) - } else { - // get a new bearer token, if this failed, the connection will be marked as expired. - // new tokens will be synced per 10 seconds in auth.startTokenRefreshInterval - await AuthUtil.instance.getBearerToken() - } - } - return [] - } finally { - // Remove all UI indicators if UI is enabled - if (options.showUi) { - void statusBar.refreshStatusBar() // effectively "stop loading" - } - } - } - - private async processRemainingRequests( - languageClient: BaseLanguageClient, - initialRequest: InlineCompletionWithReferencesParams, - firstResult: InlineCompletionListWithReferences, - token: CancellationToken - ): Promise { - let page = 1 - let logstr = `Pagination call is complete\n\tpage 0 has ${this.sessionManager.getActiveRecommendation().length} suggestions\n` - let nextToken = firstResult.partialResultToken - let shouldUpdateUi: boolean = false - while (nextToken) { - const request = { ...initialRequest, partialResultToken: nextToken } - - const result = await this.getRecommendationsWithTimeout(languageClient, request, token) - - logstr += `\tpage ${page} has ${result.items.length} suggestions\n` - - // when pagination is in progress, but user has already accepted or rejected an inline completion - // then stop pagination - if (this.sessionManager.getActiveSession() === undefined || vsCodeState.isCodeWhispererEditing) { - break - } - this.sessionManager.updateSessionSuggestions(result.items) - if (result.items.length > 0) { - shouldUpdateUi = true - } - nextToken = result.partialResultToken - page++ - } - - this.logger.info(logstr) - this.sessionManager.closeSession() - - // refresh inline completion items to render paginated responses - // All pagination requests completed - TelemetryHelper.instance.setAllPaginationEndTime() - TelemetryHelper.instance.tryRecordClientComponentLatency() - - return shouldUpdateUi - } -} diff --git a/packages/amazonq/src/app/inline/sessionManager.ts b/packages/amazonq/src/app/inline/sessionManager.ts deleted file mode 100644 index 85b83dd3997..00000000000 --- a/packages/amazonq/src/app/inline/sessionManager.ts +++ /dev/null @@ -1,186 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' -import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes-types' -import { - FileDiagnostic, - getDiagnosticsOfCurrentFile, - ImportAdderProvider, - ReferenceInlineProvider, -} from 'aws-core-vscode/codewhisperer' - -// TODO: add more needed data to the session interface -export interface CodeWhispererSession { - sessionId: string - suggestions: InlineCompletionItemWithReferences[] - // TODO: might need to convert to enum states - isRequestInProgress: boolean - requestStartTime: number - firstCompletionDisplayLatency?: number - startPosition: vscode.Position - diagnosticsBeforeAccept: FileDiagnostic | undefined - // partialResultToken for the next trigger if user accepts an EDITS suggestion - editsStreakPartialResultToken?: number | string - triggerOnAcceptance?: boolean - // whether any suggestion in this session was displayed on screen - displayed: boolean - // timestamp when the suggestion was last visible - lastVisibleTime: number - fileContent: string -} - -export class SessionManager { - private activeSession?: CodeWhispererSession - private _acceptedSuggestionCount: number = 0 - private _refreshedSessions = new Set() - private _currentSuggestionIndex = 0 - constructor() {} - - public startSession( - sessionId: string, - suggestions: InlineCompletionItemWithReferences[], - requestStartTime: number, - startPosition: vscode.Position, - document: vscode.TextDocument, - firstCompletionDisplayLatency?: number - ) { - const diagnosticsBeforeAccept = getDiagnosticsOfCurrentFile() - this.activeSession = { - sessionId, - suggestions, - isRequestInProgress: true, - requestStartTime, - startPosition, - firstCompletionDisplayLatency, - diagnosticsBeforeAccept, - displayed: false, - lastVisibleTime: 0, - fileContent: document.getText(), - } - this._currentSuggestionIndex = 0 - } - - public closeSession() { - if (!this.activeSession) { - return - } - this.activeSession.isRequestInProgress = false - } - - public getActiveSession() { - return this.activeSession - } - - public updateSessionSuggestions(suggestions: InlineCompletionItemWithReferences[]) { - if (!this.activeSession) { - return - } - this.activeSession.suggestions = [...this.activeSession.suggestions, ...suggestions] - } - - public getActiveRecommendation(): InlineCompletionItemWithReferences[] { - return this.activeSession?.suggestions ?? [] - } - - public get acceptedSuggestionCount(): number { - return this._acceptedSuggestionCount - } - - public incrementSuggestionCount() { - this._acceptedSuggestionCount += 1 - } - - public updateActiveEditsStreakToken(partialResultToken: number | string) { - if (!this.activeSession) { - return - } - this.activeSession.editsStreakPartialResultToken = partialResultToken - } - - public clear() { - this.activeSession = undefined - this._currentSuggestionIndex = 0 - this.clearReferenceInlineHintsAndImportHints() - } - - // re-render the session ghost text to display paginated responses once per completed session - public async maybeRefreshSessionUx() { - if ( - this.activeSession && - !this.activeSession.isRequestInProgress && - !this._refreshedSessions.has(this.activeSession.sessionId) - ) { - await vscode.commands.executeCommand('editor.action.inlineSuggest.hide') - await vscode.commands.executeCommand('editor.action.inlineSuggest.trigger') - if (this._refreshedSessions.size > 1000) { - this._refreshedSessions.clear() - } - this._refreshedSessions.add(this.activeSession.sessionId) - } - } - - public onNextSuggestion() { - if (this.activeSession?.suggestions && this.activeSession?.suggestions.length > 0) { - this._currentSuggestionIndex = (this._currentSuggestionIndex + 1) % this.activeSession.suggestions.length - this.updateCodeReferenceAndImports() - } - } - - public onPrevSuggestion() { - if (this.activeSession?.suggestions && this.activeSession.suggestions.length > 0) { - this._currentSuggestionIndex = - (this._currentSuggestionIndex - 1 + this.activeSession.suggestions.length) % - this.activeSession.suggestions.length - this.updateCodeReferenceAndImports() - } - } - - public checkInlineSuggestionVisibility() { - if (this.activeSession) { - this.activeSession.displayed = true - this.activeSession.lastVisibleTime = Date.now() - } - } - - private clearReferenceInlineHintsAndImportHints() { - ReferenceInlineProvider.instance.removeInlineReference() - ImportAdderProvider.instance.clear() - } - - // Ideally use this API handleDidShowCompletionItem - // https://github.com/microsoft/vscode/blob/main/src/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts#L83 - updateCodeReferenceAndImports() { - try { - this.clearReferenceInlineHintsAndImportHints() - if ( - this.activeSession?.suggestions && - this.activeSession.suggestions[this._currentSuggestionIndex] && - this.activeSession.suggestions.length > 0 - ) { - const reference = this.activeSession.suggestions[this._currentSuggestionIndex].references - const insertText = this.activeSession.suggestions[this._currentSuggestionIndex].insertText - if (reference && reference.length > 0) { - const insertTextStr = - typeof insertText === 'string' ? insertText : (insertText.value ?? String(insertText)) - - ReferenceInlineProvider.instance.setInlineReference( - this.activeSession.startPosition.line, - insertTextStr, - reference - ) - } - if (vscode.window.activeTextEditor) { - ImportAdderProvider.instance.onShowRecommendation( - vscode.window.activeTextEditor.document, - this.activeSession.startPosition.line, - this.activeSession.suggestions[this._currentSuggestionIndex] - ) - } - } - } catch { - // do nothing as this is not critical path - } - } -} diff --git a/packages/amazonq/src/app/inline/stateTracker/lineTracker.ts b/packages/amazonq/src/app/inline/stateTracker/lineTracker.ts deleted file mode 100644 index 58bee329a40..00000000000 --- a/packages/amazonq/src/app/inline/stateTracker/lineTracker.ts +++ /dev/null @@ -1,178 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { editorUtilities, setContext } from 'aws-core-vscode/shared' - -export interface LineSelection { - anchor: number - active: number -} - -export interface LinesChangeEvent { - readonly editor: vscode.TextEditor | undefined - readonly selections: LineSelection[] | undefined - - readonly reason: 'editor' | 'selection' | 'content' -} - -/** - * This class providees a single interface to manage and access users' "line" selections - * Callers could use it by subscribing onDidChangeActiveLines to do UI updates or logic needed to be executed when line selections get changed - */ -export class LineTracker implements vscode.Disposable { - private _onDidChangeActiveLines = new vscode.EventEmitter() - get onDidChangeActiveLines(): vscode.Event { - return this._onDidChangeActiveLines.event - } - - private _editor: vscode.TextEditor | undefined - private _disposable: vscode.Disposable | undefined - - private _selections: LineSelection[] | undefined - get selections(): LineSelection[] | undefined { - return this._selections - } - - private _onReady: vscode.EventEmitter = new vscode.EventEmitter() - get onReady(): vscode.Event { - return this._onReady.event - } - - private _ready: boolean = false - get isReady() { - return this._ready - } - - constructor() { - this._disposable = vscode.Disposable.from( - vscode.window.onDidChangeActiveTextEditor(async (e) => { - await this.onActiveTextEditorChanged(e) - }), - vscode.window.onDidChangeTextEditorSelection(async (e) => { - await this.onTextEditorSelectionChanged(e) - }), - vscode.workspace.onDidChangeTextDocument((e) => { - this.onContentChanged(e) - }) - ) - - queueMicrotask(async () => await this.onActiveTextEditorChanged(vscode.window.activeTextEditor)) - } - - dispose() { - this._disposable?.dispose() - } - - ready() { - if (this._ready) { - throw new Error('Linetracker is already activated') - } - - this._ready = true - queueMicrotask(() => this._onReady.fire()) - } - - // @VisibleForTesting - async onActiveTextEditorChanged(editor: vscode.TextEditor | undefined) { - if (editor === this._editor) { - return - } - - this._editor = editor - this._selections = toLineSelections(editor?.selections) - if (this._selections && this._selections[0]) { - const s = this._selections.map((item) => item.active + 1) - await setContext('codewhisperer.activeLine', s) - } - - this.notifyLinesChanged('editor') - } - - // @VisibleForTesting - async onTextEditorSelectionChanged(e: vscode.TextEditorSelectionChangeEvent) { - // If this isn't for our cached editor and its not a real editor -- kick out - if (this._editor !== e.textEditor && !editorUtilities.isTextEditor(e.textEditor)) { - return - } - - const selections = toLineSelections(e.selections) - if (this._editor === e.textEditor && this.includes(selections)) { - return - } - - this._editor = e.textEditor - this._selections = selections - if (this._selections && this._selections[0]) { - const s = this._selections.map((item) => item.active + 1) - await setContext('codewhisperer.activeLine', s) - } - - this.notifyLinesChanged('selection') - } - - // @VisibleForTesting - onContentChanged(e: vscode.TextDocumentChangeEvent) { - const editor = vscode.window.activeTextEditor - if (e.document === editor?.document && e.contentChanges.length > 0 && editorUtilities.isTextEditor(editor)) { - this._editor = editor - this._selections = toLineSelections(this._editor?.selections) - - this.notifyLinesChanged('content') - } - } - - notifyLinesChanged(reason: 'editor' | 'selection' | 'content') { - const e: LinesChangeEvent = { editor: this._editor, selections: this.selections, reason: reason } - this._onDidChangeActiveLines.fire(e) - } - - includes(selections: LineSelection[]): boolean - includes(line: number, options?: { activeOnly: boolean }): boolean - includes(lineOrSelections: number | LineSelection[], options?: { activeOnly: boolean }): boolean { - if (typeof lineOrSelections !== 'number') { - return isIncluded(lineOrSelections, this._selections) - } - - if (this._selections === undefined || this._selections.length === 0) { - return false - } - - const line = lineOrSelections - const activeOnly = options?.activeOnly ?? true - - for (const selection of this._selections) { - if ( - line === selection.active || - (!activeOnly && - ((selection.anchor >= line && line >= selection.active) || - (selection.active >= line && line >= selection.anchor))) - ) { - return true - } - } - return false - } -} - -function isIncluded(selections: LineSelection[] | undefined, within: LineSelection[] | undefined): boolean { - if (selections === undefined && within === undefined) { - return true - } - if (selections === undefined || within === undefined || selections.length !== within.length) { - return false - } - - return selections.every((s, i) => { - const match = within[i] - return s.active === match.active && s.anchor === match.anchor - }) -} - -function toLineSelections(selections: readonly vscode.Selection[]): LineSelection[] -function toLineSelections(selections: readonly vscode.Selection[] | undefined): LineSelection[] | undefined -function toLineSelections(selections: readonly vscode.Selection[] | undefined) { - return selections?.map((s) => ({ active: s.active.line, anchor: s.anchor.line })) -} diff --git a/packages/amazonq/src/app/inline/telemetryHelper.ts b/packages/amazonq/src/app/inline/telemetryHelper.ts deleted file mode 100644 index 41db4c7469a..00000000000 --- a/packages/amazonq/src/app/inline/telemetryHelper.ts +++ /dev/null @@ -1,162 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { AuthUtil, getSelectedCustomization } from 'aws-core-vscode/codewhisperer' -import { CodewhispererLanguage } from 'aws-core-vscode/shared' -import { CodewhispererTriggerType, telemetry } from 'aws-core-vscode/telemetry' -import { InlineCompletionTriggerKind } from 'vscode' - -export class TelemetryHelper { - // Variables needed for client component latency - private _invokeSuggestionStartTime = 0 - private _preprocessEndTime = 0 - private _sdkApiCallStartTime = 0 - private _sdkApiCallEndTime = 0 - private _allPaginationEndTime = 0 - private _firstSuggestionShowTime = 0 - private _firstResponseRequestId = '' - private _sessionId = '' - private _language: CodewhispererLanguage = 'java' - private _triggerType: CodewhispererTriggerType = 'OnDemand' - - constructor() {} - - static #instance: TelemetryHelper - - public static get instance() { - return (this.#instance ??= new this()) - } - - public resetClientComponentLatencyTime() { - this._invokeSuggestionStartTime = 0 - this._preprocessEndTime = 0 - this._sdkApiCallStartTime = 0 - this._sdkApiCallEndTime = 0 - this._firstSuggestionShowTime = 0 - this._allPaginationEndTime = 0 - this._firstResponseRequestId = '' - } - - public setInvokeSuggestionStartTime() { - this.resetClientComponentLatencyTime() - this._invokeSuggestionStartTime = Date.now() - } - - get invokeSuggestionStartTime(): number { - return this._invokeSuggestionStartTime - } - - public setPreprocessEndTime() { - this._preprocessEndTime = Date.now() - } - - get preprocessEndTime(): number { - return this._preprocessEndTime - } - - public setSdkApiCallStartTime() { - if (this._sdkApiCallStartTime === 0) { - this._sdkApiCallStartTime = Date.now() - } - } - - get sdkApiCallStartTime(): number { - return this._sdkApiCallStartTime - } - - public setSdkApiCallEndTime() { - if (this._sdkApiCallEndTime === 0 && this._sdkApiCallStartTime !== 0) { - this._sdkApiCallEndTime = Date.now() - } - } - - get sdkApiCallEndTime(): number { - return this._sdkApiCallEndTime - } - - public setAllPaginationEndTime() { - if (this._allPaginationEndTime === 0 && this._sdkApiCallEndTime !== 0) { - this._allPaginationEndTime = Date.now() - } - } - - get allPaginationEndTime(): number { - return this._allPaginationEndTime - } - - public setFirstSuggestionShowTime() { - if (this._firstSuggestionShowTime === 0 && this._sdkApiCallEndTime !== 0) { - this._firstSuggestionShowTime = Date.now() - } - } - - get firstSuggestionShowTime(): number { - return this._firstSuggestionShowTime - } - - public setFirstResponseRequestId(requestId: string) { - if (this._firstResponseRequestId === '') { - this._firstResponseRequestId = requestId - } - } - - get firstResponseRequestId(): string { - return this._firstResponseRequestId - } - - public setSessionId(sessionId: string) { - if (this._sessionId === '') { - this._sessionId = sessionId - } - } - - get sessionId(): string { - return this._sessionId - } - - public setLanguage(language: CodewhispererLanguage) { - this._language = language - } - - get language(): CodewhispererLanguage { - return this._language - } - - public setTriggerType(triggerType: InlineCompletionTriggerKind) { - if (triggerType === InlineCompletionTriggerKind.Invoke) { - this._triggerType = 'OnDemand' - } else if (triggerType === InlineCompletionTriggerKind.Automatic) { - this._triggerType = 'AutoTrigger' - } - } - - get triggerType(): string { - return this._triggerType - } - - // report client component latency after all pagination call finish - // and at least one suggestion is shown to the user - public tryRecordClientComponentLatency() { - if (this._firstSuggestionShowTime === 0 || this._allPaginationEndTime === 0) { - return - } - telemetry.codewhisperer_clientComponentLatency.emit({ - codewhispererAllCompletionsLatency: this._allPaginationEndTime - this._sdkApiCallStartTime, - codewhispererCompletionType: 'Line', - codewhispererCredentialFetchingLatency: 0, // no longer relevant, because we don't re-build the sdk. Flare already has that set - codewhispererCustomizationArn: getSelectedCustomization().arn, - codewhispererEndToEndLatency: this._firstSuggestionShowTime - this._invokeSuggestionStartTime, - codewhispererFirstCompletionLatency: this._sdkApiCallEndTime - this._sdkApiCallStartTime, - codewhispererLanguage: this._language, - codewhispererPostprocessingLatency: this._firstSuggestionShowTime - this._sdkApiCallEndTime, - codewhispererPreprocessingLatency: this._preprocessEndTime - this._invokeSuggestionStartTime, - codewhispererRequestId: this._firstResponseRequestId, - codewhispererSessionId: this._sessionId, - codewhispererTriggerType: this._triggerType, - credentialStartUrl: AuthUtil.instance.startUrl, - result: 'Succeeded', - }) - } -} diff --git a/packages/amazonq/src/app/inline/tutorials/inlineChatTutorialAnnotation.ts b/packages/amazonq/src/app/inline/tutorials/inlineChatTutorialAnnotation.ts deleted file mode 100644 index 1208b4766af..00000000000 --- a/packages/amazonq/src/app/inline/tutorials/inlineChatTutorialAnnotation.ts +++ /dev/null @@ -1,58 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { InlineTutorialAnnotation } from './inlineTutorialAnnotation' -import { globals } from 'aws-core-vscode/shared' - -export class InlineChatTutorialAnnotation { - private enabled: boolean = true - - constructor(private readonly inlineTutorialAnnotation: InlineTutorialAnnotation) { - globals.context.subscriptions.push( - vscode.window.onDidChangeTextEditorSelection(async ({ selections, textEditor }) => { - let showShow = false - - if (this.enabled) { - for (const selection of selections) { - if (selection.end.line === selection.start.line + 1 && selection.end.character === 0) { - // dont show if the selection is just a newline - } else if (selection.start.line !== selection.end.line) { - showShow = true - break - } - } - } - - await this.setVisible(textEditor, showShow) - }, this) - ) - } - - private async setVisible(editor: vscode.TextEditor, visible: boolean) { - let needsRefresh: boolean - if (visible) { - needsRefresh = await this.inlineTutorialAnnotation.tryShowInlineHint() - } else { - needsRefresh = await this.inlineTutorialAnnotation.tryHideInlineHint() - } - if (needsRefresh) { - await this.inlineTutorialAnnotation.refresh(editor, 'codewhisperer') - } - } - - async hide(editor: vscode.TextEditor) { - await this.setVisible(editor, false) - } - - enable() { - this.enabled = true - } - - async disable(editor: vscode.TextEditor) { - this.enabled = false - await this.setVisible(editor, false) - } -} diff --git a/packages/amazonq/src/app/inline/tutorials/inlineTutorialAnnotation.ts b/packages/amazonq/src/app/inline/tutorials/inlineTutorialAnnotation.ts deleted file mode 100644 index ad0807df94c..00000000000 --- a/packages/amazonq/src/app/inline/tutorials/inlineTutorialAnnotation.ts +++ /dev/null @@ -1,519 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import * as os from 'os' -import { AnnotationChangeSource, AuthUtil, inlinehintKey, runtimeLanguageContext } from 'aws-core-vscode/codewhisperer' -import { editorUtilities, getLogger, globals, setContext, vscodeUtilities } from 'aws-core-vscode/shared' -import { LinesChangeEvent, LineSelection, LineTracker } from '../stateTracker/lineTracker' -import { telemetry } from 'aws-core-vscode/telemetry' -import { cancellableDebounce } from 'aws-core-vscode/utils' -import { SessionManager } from '../sessionManager' - -const case3TimeWindow = 30000 // 30 seconds - -const maxSmallIntegerV8 = 2 ** 30 // Max number that can be stored in V8's smis (small integers) - -function fromId(id: string | undefined, sessionManager: SessionManager): AnnotationState | undefined { - switch (id) { - case AutotriggerState.id: - return new AutotriggerState(sessionManager) - case PressTabState.id: - return new AutotriggerState(sessionManager) - case ManualtriggerState.id: - return new ManualtriggerState() - case TryMoreExState.id: - return new TryMoreExState() - case EndState.id: - return new EndState() - case InlineChatState.id: - return new InlineChatState() - default: - return undefined - } -} - -interface AnnotationState { - id: string - suppressWhileRunning: boolean - decorationRenderOptions?: vscode.ThemableDecorationAttachmentRenderOptions - - text: () => string - updateState(changeSource: AnnotationChangeSource, force: boolean): AnnotationState | undefined - isNextState(state: AnnotationState | undefined): boolean -} - -/** - * case 1: How Cwspr triggers - * Trigger Criteria: - * User opens an editor file && - * CW is not providing a suggestion && - * User has not accepted any suggestion - * - * Exit criteria: - * User accepts 1 suggestion - * - */ -export class AutotriggerState implements AnnotationState { - static id = 'codewhisperer_learnmore_case_1' - id = AutotriggerState.id - - suppressWhileRunning = true - text = () => 'Amazon Q Tip 1/3: Start typing to get suggestions ([ESC] to exit)' - static acceptedCount = 0 - - constructor(private readonly sessionManager: SessionManager) {} - - updateState(changeSource: AnnotationChangeSource, force: boolean): AnnotationState | undefined { - if (AutotriggerState.acceptedCount < this.sessionManager.acceptedSuggestionCount) { - return new ManualtriggerState() - } else if (this.sessionManager.getActiveRecommendation().length > 0) { - return new PressTabState(this.sessionManager) - } else { - return this - } - } - - isNextState(state: AnnotationState | undefined): boolean { - return state instanceof ManualtriggerState - } -} - -/** - * case 1-a: Tab to accept - * Trigger Criteria: - * Case 1 && - * Inline suggestion is being shown - * - * Exit criteria: - * User accepts 1 suggestion - */ -export class PressTabState implements AnnotationState { - static id = 'codewhisperer_learnmore_case_1a' - id = PressTabState.id - - suppressWhileRunning = false - - text = () => 'Amazon Q Tip 1/3: Press [TAB] to accept ([ESC] to exit)' - - constructor(private readonly sessionManager: SessionManager) {} - - updateState(changeSource: AnnotationChangeSource, force: boolean): AnnotationState | undefined { - return new AutotriggerState(this.sessionManager).updateState(changeSource, force) - } - - isNextState(state: AnnotationState | undefined): boolean { - return state instanceof ManualtriggerState - } -} - -/** - * case 2: Manual trigger - * Trigger Criteria: - * User exists case 1 && - * User navigates to a new line - * - * Exit criteria: - * User inokes manual trigger shortcut - */ -export class ManualtriggerState implements AnnotationState { - static id = 'codewhisperer_learnmore_case_2' - id = ManualtriggerState.id - - suppressWhileRunning = true - - text = () => { - if (os.platform() === 'win32') { - return 'Amazon Q Tip 2/3: Invoke suggestions with [Alt] + [C] ([ESC] to exit)' - } - - return 'Amazon Q Tip 2/3: Invoke suggestions with [Option] + [C] ([ESC] to exit)' - } - hasManualTrigger: boolean = false - hasValidResponse: boolean = false - - updateState(changeSource: AnnotationChangeSource, force: boolean): AnnotationState | undefined { - if (this.hasManualTrigger && this.hasValidResponse) { - if (changeSource !== 'codewhisperer') { - return new TryMoreExState() - } else { - return undefined - } - } else { - return this - } - } - - isNextState(state: AnnotationState | undefined): boolean { - return state instanceof TryMoreExState - } -} - -/** - * case 3: Learn more - * Trigger Criteria: - * User exists case 2 && - * User navigates to a new line - * - * Exit criteria: - * User accepts or rejects the suggestion - */ -export class TryMoreExState implements AnnotationState { - static id = 'codewhisperer_learnmore_case_3' - id = TryMoreExState.id - - suppressWhileRunning = true - - text = () => 'Amazon Q Tip 3/3: For settings, open the Amazon Q menu from the status bar ([ESC] to exit)' - updateState(changeSource: AnnotationChangeSource, force: boolean): AnnotationState { - if (force) { - return new EndState() - } - return this - } - - isNextState(state: AnnotationState | undefined): boolean { - return state instanceof EndState - } - - static learnmoeCount: number = 0 -} - -export class EndState implements AnnotationState { - static id = 'codewhisperer_learnmore_end' - id = EndState.id - - suppressWhileRunning = true - text = () => '' - updateState(changeSource: AnnotationChangeSource, force: boolean): AnnotationState { - return this - } - isNextState(state: AnnotationState): boolean { - return false - } -} - -export class InlineChatState implements AnnotationState { - static id = 'amazonq_annotation_inline_chat' - id = InlineChatState.id - suppressWhileRunning = false - - text = () => { - if (os.platform() === 'darwin') { - return 'Amazon Q: Edit \u2318I' - } - return 'Amazon Q: Edit (Ctrl+I)' - } - updateState(_changeSource: AnnotationChangeSource, _force: boolean): AnnotationState { - return this - } - isNextState(_state: AnnotationState | undefined): boolean { - return false - } -} - -/** - * There are - * - existing users - * - new users - * -- new users who has not seen tutorial - * -- new users who has seen tutorial - * - * "existing users" should have the context key "CODEWHISPERER_AUTO_TRIGGER_ENABLED" - * "new users who has seen tutorial" should have the context key "inlineKey" and "CODEWHISPERER_AUTO_TRIGGER_ENABLED" - * the remaining grouop of users should belong to "new users who has not seen tutorial" - */ -export class InlineTutorialAnnotation implements vscode.Disposable { - private readonly _disposable: vscode.Disposable - private _editor: vscode.TextEditor | undefined - - private _currentState: AnnotationState - - private readonly cwLineHintDecoration: vscode.TextEditorDecorationType = - vscode.window.createTextEditorDecorationType({ - after: { - margin: '0 0 0 3em', - // "borderRadius" and "padding" are not available on "after" type of decoration, this is a hack to inject these css prop to "after" content. Refer to https://github.com/microsoft/vscode/issues/68845 - textDecoration: ';border-radius:0.25rem;padding:0rem 0.5rem;', - width: 'fit-content', - }, - rangeBehavior: vscode.DecorationRangeBehavior.OpenOpen, - }) - - constructor( - private readonly lineTracker: LineTracker, - private readonly sessionManager: SessionManager - ) { - const cachedState = fromId(globals.globalState.get(inlinehintKey), sessionManager) - const cachedAutotriggerEnabled = globals.globalState.get('CODEWHISPERER_AUTO_TRIGGER_ENABLED') - - // new users (has or has not seen tutorial) - if (cachedAutotriggerEnabled === undefined || cachedState !== undefined) { - this._currentState = cachedState ?? new AutotriggerState(this.sessionManager) - getLogger().debug( - `codewhisperer: new user login, activating inline tutorial. (autotriggerEnabled=${cachedAutotriggerEnabled}; inlineState=${cachedState?.id})` - ) - } else { - this._currentState = new EndState() - getLogger().debug(`codewhisperer: existing user login, disabling inline tutorial.`) - } - - this._disposable = vscode.Disposable.from( - vscodeUtilities.subscribeOnce(this.lineTracker.onReady)(async (_) => { - await this.onReady() - }), - this.lineTracker.onDidChangeActiveLines(async (e) => { - await this.onActiveLinesChanged(e) - }), - AuthUtil.instance.auth.onDidChangeConnectionState(async (e) => { - if (e.state !== 'authenticating') { - await this.refresh(vscode.window.activeTextEditor, 'editor') - } - }), - AuthUtil.instance.secondaryAuth.onDidChangeActiveConnection(async () => { - await this.refresh(vscode.window.activeTextEditor, 'editor') - }) - ) - } - - dispose() { - this._disposable.dispose() - } - - private _isReady: boolean = false - - private async onReady(): Promise { - this._isReady = !(this._currentState instanceof EndState) - await this._refresh(vscode.window.activeTextEditor, 'editor') - } - - async triggered(triggerType: vscode.InlineCompletionTriggerKind): Promise { - // TODO: this logic will take ~200ms each trigger, need to root cause and re-enable once it's fixed, or it should only be invoked when the tutorial is actually needed - // await telemetry.withTraceId(async () => { - // if (!this._isReady) { - // return - // } - // if (this._currentState instanceof ManualtriggerState) { - // if ( - // triggerType === vscode.InlineCompletionTriggerKind.Invoke && - // this._currentState.hasManualTrigger === false - // ) { - // this._currentState.hasManualTrigger = true - // } - // if ( - // this.sessionManager.getActiveRecommendation().length > 0 && - // this._currentState.hasValidResponse === false - // ) { - // this._currentState.hasValidResponse = true - // } - // } - // await this.refresh(vscode.window.activeTextEditor, 'codewhisperer') - // }, TelemetryHelper.instance.traceId) - } - - isTutorialDone(): boolean { - return this._currentState.id === new EndState().id - } - - isInlineChatHint(): boolean { - return this._currentState.id === new InlineChatState().id - } - - async dismissTutorial() { - this._currentState = new EndState() - await setContext('aws.codewhisperer.tutorial.workInProgress', false) - await globals.globalState.update(inlinehintKey, this._currentState.id) - } - - /** - * Trys to show the inline hint, if the tutorial is not finished it will not be shown - */ - async tryShowInlineHint(): Promise { - if (this.isTutorialDone()) { - this._isReady = true - this._currentState = new InlineChatState() - return true - } - return false - } - - async tryHideInlineHint(): Promise { - if (this._currentState instanceof InlineChatState) { - this._currentState = new EndState() - return true - } - return false - } - - private async onActiveLinesChanged(e: LinesChangeEvent) { - if (!this._isReady) { - return - } - - this.clear() - - await this.refresh(e.editor, e.reason) - } - - clear() { - this._editor?.setDecorations(this.cwLineHintDecoration, []) - } - - async refresh(editor: vscode.TextEditor | undefined, source: AnnotationChangeSource, force?: boolean) { - if (force) { - this.refreshDebounced.cancel() - await this._refresh(editor, source, true) - } else { - await this.refreshDebounced.promise(editor, source) - } - } - - private readonly refreshDebounced = cancellableDebounce( - async (editor: vscode.TextEditor | undefined, source: AnnotationChangeSource, force?: boolean) => { - await this._refresh(editor, source, force) - }, - 250 - ) - - private async _refresh(editor: vscode.TextEditor | undefined, source: AnnotationChangeSource, force?: boolean) { - if (!this._isReady) { - this.clear() - return - } - - if (this.isTutorialDone()) { - this.clear() - return - } - - if (editor === undefined && this._editor === undefined) { - this.clear() - return - } - - const selections = this.lineTracker.selections - if (editor === undefined || selections === undefined || !editorUtilities.isTextEditor(editor)) { - this.clear() - return - } - - if (this._editor !== editor) { - // Clear any annotations on the previously active editor - this.clear() - this._editor = editor - } - - // Make sure the editor hasn't died since the await above and that we are still on the same line(s) - if (editor.document === undefined || !this.lineTracker.includes(selections)) { - this.clear() - return - } - - if (!AuthUtil.instance.isConnectionValid()) { - this.clear() - return - } - - // Disable Tips when language is not supported by Amazon Q. - if (!runtimeLanguageContext.isLanguageSupported(editor.document)) { - return - } - - await this.updateDecorations(editor, selections, source, force) - } - - private async updateDecorations( - editor: vscode.TextEditor, - lines: LineSelection[], - source: AnnotationChangeSource, - force?: boolean - ) { - const range = editor.document.validateRange( - new vscode.Range(lines[0].active, maxSmallIntegerV8, lines[0].active, maxSmallIntegerV8) - ) - - const decorationOptions = this.getInlineDecoration(editor, lines, source, force) as - | vscode.DecorationOptions - | undefined - - if (decorationOptions === undefined) { - this.clear() - await setContext('aws.codewhisperer.tutorial.workInProgress', false) - return - } else if (this.isTutorialDone()) { - // special case - // Endstate is meaningless and doesnt need to be rendered - this.clear() - await this.dismissTutorial() - return - } else if (decorationOptions.renderOptions?.after?.contentText === new TryMoreExState().text()) { - // special case - // case 3 exit criteria is to fade away in 30s - setTimeout(async () => { - await this.refresh(editor, source, true) - }, case3TimeWindow) - } - - decorationOptions.range = range - - await globals.globalState.update(inlinehintKey, this._currentState.id) - if (!this.isInlineChatHint()) { - await setContext('aws.codewhisperer.tutorial.workInProgress', true) - } - editor.setDecorations(this.cwLineHintDecoration, [decorationOptions]) - } - - getInlineDecoration( - editor: vscode.TextEditor, - lines: LineSelection[], - source: AnnotationChangeSource, - force?: boolean - ): Partial | undefined { - const isCWRunning = this.sessionManager.getActiveSession()?.isRequestInProgress ?? false - - const textOptions: vscode.ThemableDecorationAttachmentRenderOptions = { - contentText: '', - fontWeight: 'normal', - fontStyle: 'normal', - textDecoration: 'none', - color: 'var(--vscode-editor-background)', - backgroundColor: 'var(--vscode-foreground)', - } - - if (isCWRunning && this._currentState.suppressWhileRunning) { - return undefined - } - - const updatedState: AnnotationState | undefined = this._currentState.updateState(source, force ?? false) - - if (updatedState === undefined) { - return undefined - } - - if (this._currentState.isNextState(updatedState)) { - // special case because PressTabState is part of case_1 (1a) which possibly jumps directly from case_1a to case_2 and miss case_1 - if (this._currentState instanceof PressTabState) { - telemetry.ui_click.emit({ elementId: AutotriggerState.id, passive: true }) - } - telemetry.ui_click.emit({ elementId: this._currentState.id, passive: true }) - } - - // update state - this._currentState = updatedState - - // take snapshot of accepted session so that we can compre if there is delta -> users accept 1 suggestion after seeing this state - AutotriggerState.acceptedCount = this.sessionManager.acceptedSuggestionCount - - textOptions.contentText = this._currentState.text() - - return { - renderOptions: { after: textOptions }, - } - } - - public get currentState(): AnnotationState { - return this._currentState - } -} diff --git a/packages/amazonq/src/app/inline/webViewPanel.ts b/packages/amazonq/src/app/inline/webViewPanel.ts deleted file mode 100644 index 2effa94429c..00000000000 --- a/packages/amazonq/src/app/inline/webViewPanel.ts +++ /dev/null @@ -1,450 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -/* eslint-disable no-restricted-imports */ -import fs from 'fs' -import { getLogger } from 'aws-core-vscode/shared' - -/** - * Interface for JSON request log data - */ -interface RequestLogEntry { - timestamp: string - request: string - response: string - endpoint: string - error: string - requestId: string - responseCode: number - applicationLogs?: { - rts?: string[] - ceo?: string[] - [key: string]: string[] | undefined - } - latency?: number - latencyBreakdown?: { - rts?: number - ceo?: number - [key: string]: number | undefined - } - miscellaneous?: any -} - -/** - * Manages the webview panel for displaying insert text content and request logs - */ -export class NextEditPredictionPanel implements vscode.Disposable { - public static readonly viewType = 'nextEditPrediction' - - private static instance: NextEditPredictionPanel | undefined - private panel: vscode.WebviewPanel | undefined - private disposables: vscode.Disposable[] = [] - private statusBarItem: vscode.StatusBarItem - private isVisible = false - private fileWatcher: vscode.FileSystemWatcher | undefined - private requestLogs: RequestLogEntry[] = [] - private logFilePath = '/tmp/request_log.jsonl' - private fileReadTimeout: NodeJS.Timeout | undefined - - private constructor() { - // Create status bar item - higher priority (1) to ensure visibility - this.statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 1) - this.statusBarItem.text = '$(eye) NEP' // Add icon for better visibility - this.statusBarItem.tooltip = 'Toggle Next Edit Prediction Panel' - this.statusBarItem.command = 'aws.amazonq.toggleNextEditPredictionPanel' - this.statusBarItem.show() - - // Register command for toggling the panel - this.disposables.push( - vscode.commands.registerCommand('aws.amazonq.toggleNextEditPredictionPanel', () => { - this.toggle() - }) - ) - } - - /** - * Get or create the NextEditPredictionPanel instance - */ - public static getInstance(): NextEditPredictionPanel { - if (!NextEditPredictionPanel.instance) { - NextEditPredictionPanel.instance = new NextEditPredictionPanel() - } - return NextEditPredictionPanel.instance - } - - /** - * Setup file watcher to monitor the request log file - */ - private setupFileWatcher(): void { - if (this.fileWatcher) { - return - } - - try { - // Create the watcher for the specific file - this.fileWatcher = vscode.workspace.createFileSystemWatcher(this.logFilePath) - - // When file is changed, read it after a delay - this.fileWatcher.onDidChange(() => { - this.scheduleFileRead() - }) - - // When file is created, read it after a delay - this.fileWatcher.onDidCreate(() => { - this.scheduleFileRead() - }) - - this.disposables.push(this.fileWatcher) - - // Initial read of the file if it exists - if (fs.existsSync(this.logFilePath)) { - this.scheduleFileRead() - } - - getLogger('nextEditPrediction').info(`File watcher set up for ${this.logFilePath}`) - } catch (error) { - getLogger('nextEditPrediction').error(`Error setting up file watcher: ${error}`) - } - } - - /** - * Schedule file read with a delay to ensure file is fully written - */ - private scheduleFileRead(): void { - // Clear any existing timeout - if (this.fileReadTimeout) { - clearTimeout(this.fileReadTimeout) - } - - // Schedule new read after 1 second delay - this.fileReadTimeout = setTimeout(() => { - this.readRequestLogFile() - }, 1000) - } - - /** - * Read the request log file and update the panel content - */ - private readRequestLogFile(): void { - getLogger('nextEditPrediction').info(`Attempting to read log file: ${this.logFilePath}`) - try { - if (!fs.existsSync(this.logFilePath)) { - getLogger('nextEditPrediction').info(`Log file does not exist: ${this.logFilePath}`) - return - } - - const content = fs.readFileSync(this.logFilePath, 'utf8') - this.requestLogs = [] - - // Process JSONL format (one JSON object per line) - const lines = content.split('\n').filter((line: string) => line.trim() !== '') - for (let i = 0; i < lines.length; i++) { - const line = lines[i].trim() - try { - // Try to parse the JSON, handling potential trailing characters - let jsonString = line - - // Find the last valid JSON by looking for the last closing brace/bracket - const lastClosingBrace = line.lastIndexOf('}') - const lastClosingBracket = line.lastIndexOf(']') - const lastValidChar = Math.max(lastClosingBrace, lastClosingBracket) - - if (lastValidChar > 0 && lastValidChar < line.length - 1) { - // If there are characters after the last valid JSON ending, trim them - jsonString = line.substring(0, lastValidChar + 1) - getLogger('nextEditPrediction').info(`Trimmed extra characters from line ${i + 1}`) - } - - // Step 1: Parse the JSON string to get an object - const parsed = JSON.parse(jsonString) - // Step 2: Stringify the object to normalize it - const normalized = JSON.stringify(parsed) - // Step 3: Parse the normalized string back to an object - const logEntry = JSON.parse(normalized) as RequestLogEntry - - // Parse request and response fields if they're JSON stringss - if (typeof logEntry.request === 'string') { - try { - // Apply the same double-parse technique to nested JSON - const requestObj = JSON.parse(logEntry.request) - const requestNormalized = JSON.stringify(requestObj) - logEntry.request = JSON.parse(requestNormalized) - } catch (e) { - // Keep as string if it's not valid JSON - getLogger('nextEditPrediction').info(`Could not parse request as JSON: ${e}`) - } - } - - if (typeof logEntry.response === 'string') { - try { - // Apply the same double-parse technique to nested JSON - const responseObj = JSON.parse(logEntry.response) - const responseNormalized = JSON.stringify(responseObj) - logEntry.response = JSON.parse(responseNormalized) - } catch (e) { - // Keep as string if it's not valid JSON - getLogger('nextEditPrediction').info(`Could not parse response as JSON: ${e}`) - } - } - - this.requestLogs.push(logEntry) - } catch (e) { - getLogger('nextEditPrediction').error(`Error parsing log entry ${i + 1}: ${e}`) - getLogger('nextEditPrediction').error( - `Problematic line: ${line.length > 100 ? line.substring(0, 100) + '...' : line}` - ) - } - } - - if (this.isVisible && this.panel) { - this.updateRequestLogsView() - } - - getLogger('nextEditPrediction').info(`Read ${this.requestLogs.length} log entries`) - } catch (error) { - getLogger('nextEditPrediction').error(`Error reading log file: ${error}`) - } - } - - /** - * Update the panel with request logs data - */ - private updateRequestLogsView(): void { - if (this.panel) { - this.panel.webview.html = this.getWebviewContent() - getLogger('nextEditPrediction').info('Webview panel updated with request logs') - } - } - - /** - * Toggle the panel visibility - */ - public toggle(): void { - if (this.isVisible) { - this.hide() - } else { - this.show() - } - } - - /** - * Show the panel - */ - public show(): void { - if (!this.panel) { - // Create the webview panel - this.panel = vscode.window.createWebviewPanel( - NextEditPredictionPanel.viewType, - 'Next Edit Prediction', - vscode.ViewColumn.Beside, - { - enableScripts: true, - retainContextWhenHidden: true, - } - ) - - // Set initial content - this.panel.webview.html = this.getWebviewContent() - - // Handle panel disposal - this.panel.onDidDispose( - () => { - this.panel = undefined - this.isVisible = false - this.updateStatusBarItem() - }, - undefined, - this.disposables - ) - - // Handle webview messages - this.panel.webview.onDidReceiveMessage( - (message) => { - switch (message.command) { - case 'refresh': - getLogger('nextEditPrediction').info(`Refresh button clicked`) - this.readRequestLogFile() - break - case 'clear': - getLogger('nextEditPrediction').info(`Clear logs button clicked`) - this.clearLogFile() - break - } - }, - undefined, - this.disposables - ) - } else { - this.panel.reveal() - } - - this.isVisible = true - this.updateStatusBarItem() - - // Setup file watcher when panel is shown - this.setupFileWatcher() - - // If we already have logs, update the view - if (this.requestLogs.length > 0) { - this.updateRequestLogsView() - } else { - // Try to read the log file - this.scheduleFileRead() - } - } - - /** - * Hide the panel - */ - private hide(): void { - if (this.panel) { - this.panel.dispose() - this.panel = undefined - this.isVisible = false - this.updateStatusBarItem() - } - } - - /** - * Update the status bar item appearance based on panel state - */ - private updateStatusBarItem(): void { - if (this.isVisible) { - this.statusBarItem.backgroundColor = new vscode.ThemeColor('statusBarItem.warningBackground') - } else { - this.statusBarItem.backgroundColor = undefined - } - } - - /** - * Update the panel content with new text - */ - public updateContent(text: string): void { - if (this.panel) { - try { - // Store the text for display in a separate section - const customContent = text - - // Update the panel with both the custom content and the request logs - this.panel.webview.html = this.getWebviewContent(customContent) - getLogger('nextEditPrediction').info('Webview panel content updated') - } catch (error) { - getLogger('nextEditPrediction').error(`Error updating webview: ${error}`) - } - } - } - - /** - * Generate HTML content for the webview - */ - private getWebviewContent(customContent?: string): string { - // Path to the debug.html file - const debugHtmlPath = vscode.Uri.file( - vscode.Uri.joinPath( - vscode.Uri.file(__dirname), - '..', - '..', - '..', - 'app', - 'inline', - 'EditRendering', - 'debug.html' - ).fsPath - ) - - // Read the HTML file content - try { - const htmlContent = fs.readFileSync(debugHtmlPath.fsPath, 'utf8') - getLogger('nextEditPrediction').info(`Successfully loaded debug.html from ${debugHtmlPath.fsPath}`) - - // Modify the HTML to add vscode API initialization - return htmlContent.replace( - '', - ` - - ` - ) - } catch (error) { - getLogger('nextEditPrediction').error(`Error loading debug.html: ${error}`) - return ` - - -

Error loading visualization

-

Failed to load debug.html file: ${error}

- - - ` - } - } - - /** - * Clear the log file and update the panel - */ - private clearLogFile(): void { - try { - getLogger('nextEditPrediction').info(`Clearing log file: ${this.logFilePath}`) - - // Write an empty string to clear the file - fs.writeFileSync(this.logFilePath, '') - - // Clear the in-memory logs - this.requestLogs = [] - - // Update the view - if (this.isVisible && this.panel) { - this.updateRequestLogsView() - } - - getLogger('nextEditPrediction').info(`Log file cleared successfully`) - } catch (error) { - getLogger('nextEditPrediction').error(`Error clearing log file: ${error}`) - } - } - - /** - * Dispose of resources - */ - public dispose(): void { - if (this.panel) { - this.panel.dispose() - } - - if (this.fileWatcher) { - this.fileWatcher.dispose() - } - - if (this.fileReadTimeout) { - clearTimeout(this.fileReadTimeout) - } - - this.statusBarItem.dispose() - - for (const d of this.disposables) { - d.dispose() - } - this.disposables = [] - - NextEditPredictionPanel.instance = undefined - } -} diff --git a/packages/amazonq/src/commands.ts b/packages/amazonq/src/commands.ts deleted file mode 100644 index 494a3f6a3b7..00000000000 --- a/packages/amazonq/src/commands.ts +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * Amazon Q extension commands and implementations. - */ -import * as vscode from 'vscode' -import { Auth } from 'aws-core-vscode/auth' -import { Commands } from 'aws-core-vscode/shared' -import { clearCacheDeclaration } from './util/clearCache' - -export function registerCommands(context: vscode.ExtensionContext) { - context.subscriptions.push( - Commands.register('_aws.amazonq.auth.autoConnect', Auth.instance.tryAutoConnect), - clearCacheDeclaration.register() - ) -} diff --git a/packages/amazonq/src/extension.ts b/packages/amazonq/src/extension.ts deleted file mode 100644 index 9b83695205c..00000000000 --- a/packages/amazonq/src/extension.ts +++ /dev/null @@ -1,202 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { AuthUtils, CredentialsStore, LoginManager, initializeAuth } from 'aws-core-vscode/auth' -import { activate as activateCodeWhisperer, shutdown as shutdownCodeWhisperer } from 'aws-core-vscode/codewhisperer' -import { makeEndpointsProvider, registerGenericCommands } from 'aws-core-vscode' -import { CommonAuthWebview } from 'aws-core-vscode/login' -import { - amazonQDiffScheme, - DefaultAWSClientBuilder, - DefaultAwsContext, - ExtContext, - RegionProvider, - Settings, - VirtualFileSystem, - VirtualMemoryFile, - activateLogger, - activateTelemetry, - env, - errors, - fs, - getLogger, - getMachineId, - globals, - initialize, - initializeComputeRegion, - messages, - placeholder, - setContext, - setupUninstallHandler, - maybeShowMinVscodeWarning, - Experiments, - isSageMaker, - isAmazonLinux2, - ProxyUtil, -} from 'aws-core-vscode/shared' -import { ExtStartUpSources } from 'aws-core-vscode/telemetry' -import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' -import { join } from 'path' -import * as semver from 'semver' -import * as vscode from 'vscode' -import { registerCommands } from './commands' -import { focusAmazonQPanel } from 'aws-core-vscode/codewhispererChat' -import { activate as activateAmazonqLsp } from './lsp/activation' -import { hasGlibcPatch } from './lsp/client' -import { activateAutoDebug } from './lsp/chat/autoDebug/activation' - -export const amazonQContextPrefix = 'amazonq' - -/** - * Activation code for Amazon Q that will we want in all environments (eg Node.js, web mode) - */ -export async function activateAmazonQCommon(context: vscode.ExtensionContext, isWeb: boolean) { - initialize(context, isWeb) - const homeDirLogs = await fs.init(context, (homeDir) => { - void messages.showViewLogsMessage(`Invalid home directory (check $HOME): "${homeDir}"`) - }) - errors.init(fs.getUsername(), env.isAutomation()) - await initializeComputeRegion() - - globals.contextPrefix = 'amazonq.' // todo: disconnect from above line - - // Avoid activation if older toolkit is installed - // Amazon Q is only compatible with AWS Toolkit >= 3.0.0 - // Or AWS Toolkit with a development version. Example: 2.19.0-3413gv - const toolkit = vscode.extensions.getExtension(VSCODE_EXTENSION_ID.awstoolkit) - if (toolkit) { - const toolkitVersion = semver.coerce(toolkit.packageJSON.version) - // XXX: can't use `SemVer.prerelease` because Toolkit "prerelease" (git sha) is not a valid - // semver prerelease: it may start with a number. - const isDevVersion = toolkit.packageJSON.version.toString().includes('-') - if (toolkitVersion && toolkitVersion.major < 3 && !isDevVersion) { - await vscode.commands - .executeCommand('workbench.extensions.installExtension', VSCODE_EXTENSION_ID.awstoolkit) - .then( - () => - vscode.window - .showInformationMessage( - `The Amazon Q extension is incompatible with AWS Toolkit ${ - toolkitVersion as any - } and older. Your AWS Toolkit was updated to version 3.0 or later.`, - 'Reload Now' - ) - .then(async (resp) => { - if (resp === 'Reload Now') { - await vscode.commands.executeCommand('workbench.action.reloadWindow') - } - }), - (reason) => { - getLogger().error('workbench.extensions.installExtension failed: %O', reason) - } - ) - return - } - } - - void maybeShowMinVscodeWarning('1.83.0') - - globals.machineId = await getMachineId() - globals.awsContext = new DefaultAwsContext() - globals.sdkClientBuilder = new DefaultAWSClientBuilder(globals.awsContext) - globals.manifestPaths.endpoints = context.asAbsolutePath(join('resources', 'endpoints.json')) - globals.regionProvider = RegionProvider.fromEndpointsProvider(makeEndpointsProvider()) - - const qLogChannel = vscode.window.createOutputChannel('Amazon Q Logs', { log: true }) - await activateLogger(context, amazonQContextPrefix, qLogChannel) - globals.logOutputChannel = qLogChannel - globals.loginManager = new LoginManager(globals.awsContext, new CredentialsStore()) - - if (homeDirLogs.length > 0) { - getLogger().error('fs.init: invalid env vars found: %O', homeDirLogs) - } - - await activateTelemetry(context, globals.awsContext, Settings.instance, 'Amazon Q For VS Code') - - await initializeAuth(globals.loginManager) - - const extContext = { - extensionContext: context, - } - - // Configure proxy settings early - await ProxyUtil.configureProxyForLanguageServer() - - // This contains every lsp agnostic things (auth, security scan, code scan) - await activateCodeWhisperer(extContext as ExtContext) - - if (!isAmazonLinux2() || hasGlibcPatch()) { - // Activate Amazon Q LSP for everyone unless they're using AL2 without the glibc patch - await activateAmazonqLsp(context) - } - - // Activate AutoDebug feature at extension level - try { - const autoDebugFeature = await activateAutoDebug(context) - context.subscriptions.push(autoDebugFeature) - } catch (error) { - getLogger().error('Failed to activate AutoDebug feature at extension level: %s', error) - } - - // Generic extension commands - registerGenericCommands(context, amazonQContextPrefix) - - // Amazon Q specific commands - registerCommands(context) - - // Handle Amazon Q Extension un-installation. - setupUninstallHandler(VSCODE_EXTENSION_ID.amazonq, context.extension.packageJSON.version, context) - - const vfs = new VirtualFileSystem() - - // Register an empty file that's used when a to open a diff - vfs.registerProvider( - vscode.Uri.from({ scheme: amazonQDiffScheme, path: 'empty' }), - new VirtualMemoryFile(new Uint8Array()) - ) - - // Hide the Amazon Q tree in toolkit explorer - await setContext('aws.toolkit.amazonq.dismissed', true) - - // set context var to check if its SageMaker AI or not - await setContext('aws.isSageMaker', isSageMaker()) - - // set context var to check if its SageMaker Unified Studio or not - await setContext('aws.isSageMakerUnifiedStudio', isSageMaker('SMUS')) - - // reload webviews - await vscode.commands.executeCommand('workbench.action.webview.reloadWebviewAction') - - if (AuthUtils.ExtensionUse.instance.isFirstUse()) { - // Give time for the extension to finish initializing. - globals.clock.setTimeout(async () => { - CommonAuthWebview.authSource = ExtStartUpSources.firstStartUp - focusAmazonQPanel.execute(placeholder, ExtStartUpSources.firstStartUp).catch((e) => { - getLogger().error('focusAmazonQPanel failed: %s', e) - }) - }, 1000) - } - - context.subscriptions.push( - Experiments.instance.onDidChange(async (event) => { - if (event.key === 'amazonqLSP' || event.key === 'amazonqChatLSP' || event.key === 'amazonqLSPInline') { - await vscode.window - .showInformationMessage( - 'Amazon Q LSP setting has changed. Reload VS Code for the changes to take effect.', - 'Reload Now' - ) - .then(async (selection) => { - if (selection === 'Reload Now') { - await vscode.commands.executeCommand('workbench.action.reloadWindow') - } - }) - } - }) - ) -} - -export async function deactivateCommon() { - await shutdownCodeWhisperer() -} diff --git a/packages/amazonq/src/extensionNode.ts b/packages/amazonq/src/extensionNode.ts deleted file mode 100644 index d42fafea058..00000000000 --- a/packages/amazonq/src/extensionNode.ts +++ /dev/null @@ -1,185 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { activateAmazonQCommon, amazonQContextPrefix, deactivateCommon } from './extension' -import { DefaultAmazonQAppInitContext, AmazonQChatViewProvider } from 'aws-core-vscode/amazonq' -import { activate as activateTransformationHub } from 'aws-core-vscode/amazonqGumby' -import { - ExtContext, - globals, - CrashMonitoring, - getLogger, - isNetworkError, - isSageMaker, - Experiments, -} from 'aws-core-vscode/shared' -import { filetypes, SchemaService } from 'aws-core-vscode/sharedNode' -import { updateDevMode } from 'aws-core-vscode/dev' -import { CommonAuthViewProvider } from 'aws-core-vscode/login' -import { isExtensionActive, VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' -import { registerSubmitFeedback } from 'aws-core-vscode/feedback' -import { DevOptions } from 'aws-core-vscode/dev' -import { Auth, AuthUtils, getTelemetryMetadataForConn, isAnySsoConnection } from 'aws-core-vscode/auth' -import api from './api' -import { activate as activateCWChat } from './app/chat/activation' -import { beta } from 'aws-core-vscode/dev' -import { activate as activateNotifications, NotificationsController } from 'aws-core-vscode/notifications' -import { AuthState, AuthUtil } from 'aws-core-vscode/codewhisperer' -import { telemetry, AuthUserState } from 'aws-core-vscode/telemetry' -import { activateAgents } from './app/chat/node/activateAgents' - -export async function activate(context: vscode.ExtensionContext) { - // IMPORTANT: No other code should be added to this function. Place it in one of the following 2 functions where appropriate. - await activateAmazonQCommon(context, false) - await activateAmazonQNode(context) - - return api -} - -/** - * The code in this function is not common, implying it only works in Node.js and not web. - * The goal should be for this to not exist and that all code is "common". So if possible make - * the code compatible with web and move it to {@link activateAmazonQCommon}. - */ -async function activateAmazonQNode(context: vscode.ExtensionContext) { - // Intentionally do not await since this is slow and non-critical - void (await CrashMonitoring.instance())?.start() - - const extContext = { - extensionContext: context, - } - - if (!Experiments.instance.get('amazonqChatLSP', true)) { - const appInitContext = DefaultAmazonQAppInitContext.instance - const provider = new AmazonQChatViewProvider( - context, - appInitContext.getWebViewToAppsMessagePublishers(), - appInitContext.getAppsToWebViewMessageListener(), - appInitContext.onDidChangeAmazonQVisibility - ) - context.subscriptions.push( - vscode.window.registerWebviewViewProvider(AmazonQChatViewProvider.viewType, provider, { - webviewOptions: { - retainContextWhenHidden: true, - }, - }) - ) - // this is registered inside of lsp/chat/activation.ts when the chat experiment is enabled - await activateCWChat(context) - } - activateAgents() - await activateTransformationHub(extContext as ExtContext) - - const authProvider = new CommonAuthViewProvider( - context, - amazonQContextPrefix, - DefaultAmazonQAppInitContext.instance.onDidChangeAmazonQVisibility - ) - context.subscriptions.push( - vscode.window.registerWebviewViewProvider(authProvider.viewType, authProvider, { - webviewOptions: { - retainContextWhenHidden: true, - }, - }), - registerSubmitFeedback(context, 'Amazon Q', amazonQContextPrefix) - ) - - globals.schemaService = new SchemaService() - filetypes.activate() - - await setupDevMode(context) - await beta.activate(context) - - // TODO: Should probably emit for web as well. - // Will the web metric look the same? - telemetry.auth_userState.emit({ - passive: true, - result: 'Succeeded', - source: AuthUtils.ExtensionUse.instance.sourceForTelemetry(), - ...(await getAuthState()), - }) - - void activateNotifications(context, getAuthState) -} - -async function getAuthState(): Promise> { - let authState: AuthState = 'disconnected' - try { - // May call connection validate functions that try to refresh the token. - // This could result in network errors. - authState = (await AuthUtil.instance._getChatAuthState(false)).codewhispererChat - } catch (err) { - if ( - isNetworkError(err) && - AuthUtil.instance.conn && - AuthUtil.instance.auth.getConnectionState(AuthUtil.instance.conn) === 'valid' - ) { - authState = 'connectedWithNetworkError' - } else { - throw err - } - } - const currConn = AuthUtil.instance.conn - if (currConn !== undefined && !(isAnySsoConnection(currConn) || isSageMaker())) { - getLogger().error(`Current Amazon Q connection is not SSO, type is: %s`, currConn?.type) - } - - // Pending profile selection state means users already log in with Sso service - if (authState === 'pendingProfileSelection') { - authState = 'connected' - } - - return { - authStatus: - authState === 'connected' || authState === 'expired' || authState === 'connectedWithNetworkError' - ? authState - : 'notConnected', - authEnabledConnections: AuthUtils.getAuthFormIdsFromConnection(currConn).join(','), - ...(await getTelemetryMetadataForConn(currConn)), - } -} - -/** - * Some parts of this do not work in Web mode so we need to set Dev Mode up here. - * - * TODO: Get the following working in web mode as well and then move this function. - */ -async function setupDevMode(context: vscode.ExtensionContext) { - // At some point this imports CodeCatalyst code which breaks in web mode. - // TODO: Make this work in web mode and move it to extensionCommon.ts - await updateDevMode() - - const devOptions: DevOptions = { - context, - auth: () => Auth.instance, - notificationsController: () => NotificationsController.instance, - menuOptions: [ - 'editStorage', - 'resetState', - 'showEnvVars', - 'deleteSsoConnections', - 'expireSsoConnections', - 'editAuthConnections', - 'notificationsSend', - 'forceIdeCrash', - ], - } - - context.subscriptions.push( - vscode.commands.registerCommand('amazonq.dev.openMenu', async () => { - if (!isExtensionActive(VSCODE_EXTENSION_ID.awstoolkit)) { - void vscode.window.showErrorMessage('AWS Toolkit must be installed to access the Developer Menu.') - return - } - await vscode.commands.executeCommand('_aws.dev.invokeMenu', devOptions) - }) - ) -} - -export async function deactivate() { - // Run concurrently to speed up execution. stop() does not throw so it is safe - await Promise.all([(await CrashMonitoring.instance())?.shutdown(), deactivateCommon()]) -} diff --git a/packages/amazonq/src/extensionWeb.ts b/packages/amazonq/src/extensionWeb.ts deleted file mode 100644 index 3091cda2da8..00000000000 --- a/packages/amazonq/src/extensionWeb.ts +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import type { ExtensionContext } from 'vscode' -import { activateWebShared } from 'aws-core-vscode/webShared' -import { activateAmazonQCommon, deactivateCommon } from './extension' - -export async function activate(context: ExtensionContext) { - await activateWebShared(context) - await activateAmazonQCommon(context, true) -} - -export async function deactivate() { - await deactivateCommon() -} diff --git a/packages/amazonq/src/inlineChat/activation.ts b/packages/amazonq/src/inlineChat/activation.ts deleted file mode 100644 index 52c826abb61..00000000000 --- a/packages/amazonq/src/inlineChat/activation.ts +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' -import { InlineChatController } from './controller/inlineChatController' -import { registerInlineCommands } from './command/registerInlineCommands' -import { BaseLanguageClient } from 'vscode-languageclient' -import { InlineChatTutorialAnnotation } from '../app/inline/tutorials/inlineChatTutorialAnnotation' - -export function activate( - context: vscode.ExtensionContext, - client: BaseLanguageClient, - encryptionKey: Buffer, - inlineChatTutorialAnnotation: InlineChatTutorialAnnotation -) { - const inlineChatController = new InlineChatController(context, client, encryptionKey, inlineChatTutorialAnnotation) - registerInlineCommands(context, inlineChatController) -} diff --git a/packages/amazonq/src/inlineChat/codeLenses/codeLenseProvider.ts b/packages/amazonq/src/inlineChat/codeLenses/codeLenseProvider.ts deleted file mode 100644 index 34a85e10b38..00000000000 --- a/packages/amazonq/src/inlineChat/codeLenses/codeLenseProvider.ts +++ /dev/null @@ -1,76 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import * as os from 'os' -import { InlineTask, TaskState } from '../controller/inlineTask' - -export class CodelensProvider implements vscode.CodeLensProvider { - private codeLenses: vscode.CodeLens[] = [] - private _onDidChangeCodeLenses: vscode.EventEmitter = new vscode.EventEmitter() - public readonly onDidChangeCodeLenses: vscode.Event = this._onDidChangeCodeLenses.event - - constructor(context: vscode.ExtensionContext) { - context.subscriptions.push(vscode.languages.registerCodeLensProvider('*', this)) - this.provideCodeLenses = this.provideCodeLenses.bind(this) - } - - public provideCodeLenses(_document: vscode.TextDocument, _token: vscode.CancellationToken): vscode.CodeLens[] { - return this.codeLenses - } - - public updateLenses(task: InlineTask): void { - if (task.state === TaskState.Complete) { - this.codeLenses = [] - this._onDidChangeCodeLenses.fire() - return - } - switch (task.state) { - case TaskState.InProgress: { - this.codeLenses = [] - this.codeLenses.push( - new vscode.CodeLens(new vscode.Range(task.selectedRange.start, task.selectedRange.start), { - title: 'Amazon Q is generating...', - command: '', - }) - ) - break - } - case TaskState.WaitingForDecision: { - let acceptTitle: string - let rejectTitle: string - if (os.platform() === 'darwin') { - acceptTitle = 'Accept ($(newline))' - rejectTitle = `Reject ( \u238B )` - } else { - acceptTitle = 'Accept (Enter)' - rejectTitle = `Reject (Esc)` - } - - this.codeLenses = [] - this.codeLenses.push( - new vscode.CodeLens(new vscode.Range(task.selectedRange.start, task.selectedRange.start), { - title: acceptTitle, - command: 'aws.amazonq.inline.waitForUserDecisionAcceptAll', - arguments: [task], - }) - ) - this.codeLenses.push( - new vscode.CodeLens(new vscode.Range(task.selectedRange.start, task.selectedRange.start), { - title: rejectTitle, - command: 'aws.amazonq.inline.waitForUserDecisionRejectAll', - arguments: [task], - }) - ) - break - } - default: { - this.codeLenses = [] - break - } - } - this._onDidChangeCodeLenses.fire() - } -} diff --git a/packages/amazonq/src/inlineChat/command/registerInlineCommands.ts b/packages/amazonq/src/inlineChat/command/registerInlineCommands.ts deleted file mode 100644 index 48b1fbf5145..00000000000 --- a/packages/amazonq/src/inlineChat/command/registerInlineCommands.ts +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import vscode from 'vscode' -import { InlineChatController } from '../controller/inlineChatController' -import { InlineTask } from '../controller/inlineTask' - -export function registerInlineCommands(context: vscode.ExtensionContext, inlineChatController: InlineChatController) { - context.subscriptions.push( - vscode.commands.registerCommand('aws.amazonq.inline.invokeChat', async () => { - await inlineChatController.inlineQuickPick() - }), - vscode.commands.registerCommand('aws.amazonq.inline.waitForUserDecisionAcceptAll', async (task: InlineTask) => { - await inlineChatController.acceptAllChanges(task, true) - }), - vscode.commands.registerCommand('aws.amazonq.inline.waitForUserDecisionRejectAll', async (task: InlineTask) => { - await inlineChatController.rejectAllChanges(task, true) - }) - ) -} diff --git a/packages/amazonq/src/inlineChat/controller/inlineChatController.ts b/packages/amazonq/src/inlineChat/controller/inlineChatController.ts deleted file mode 100644 index 472591039f3..00000000000 --- a/packages/amazonq/src/inlineChat/controller/inlineChatController.ts +++ /dev/null @@ -1,466 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import { randomUUID } from 'crypto' -import * as vscode from 'vscode' -import { InlineDecorator } from '../decorations/inlineDecorator' -import { InlineChatProvider } from '../provider/inlineChatProvider' -import { InlineTask, TaskState, TextDiff } from './inlineTask' -import { responseTransformer } from '../output/responseTransformer' -import { adjustTextDiffForEditing, computeDiff } from '../output/computeDiff' -import { computeDecorations } from '../decorations/computeDecorations' -import { CodelensProvider } from '../codeLenses/codeLenseProvider' -import { PromptMessage, ReferenceLogController } from 'aws-core-vscode/codewhispererChat' -import { CodeWhispererSettings } from 'aws-core-vscode/codewhisperer' -import { UserWrittenCodeTracker } from 'aws-core-vscode/codewhisperer' -import { BaseLanguageClient } from 'vscode-languageclient' -import { - codicon, - getIcon, - getLogger, - messages, - setContext, - Timeout, - textDocumentUtil, - isSageMaker, - Experiments, -} from 'aws-core-vscode/shared' -import { InlineChatTutorialAnnotation } from '../../app/inline/tutorials/inlineChatTutorialAnnotation' - -export class InlineChatController { - private task: InlineTask | undefined - private readonly decorator = new InlineDecorator() - private readonly inlineChatProvider: InlineChatProvider - private readonly codeLenseProvider: CodelensProvider - private readonly referenceLogController = new ReferenceLogController() - private readonly inlineChatTutorialAnnotation: InlineChatTutorialAnnotation - private readonly computeDiffAndRenderOnEditor: (query: string) => Promise - private userQuery: string | undefined - private listeners: vscode.Disposable[] = [] - - constructor( - context: vscode.ExtensionContext, - client: BaseLanguageClient, - encryptionKey: Buffer, - inlineChatTutorialAnnotation: InlineChatTutorialAnnotation - ) { - this.inlineChatProvider = new InlineChatProvider(client, encryptionKey) - this.inlineChatProvider.onErrorOccured(() => this.handleError()) - this.codeLenseProvider = new CodelensProvider(context) - this.inlineChatTutorialAnnotation = inlineChatTutorialAnnotation - this.computeDiffAndRenderOnEditor = Experiments.instance.get('amazonqLSPInlineChat', false) - ? this.computeDiffAndRenderOnEditorLSP.bind(this) - : this.computeDiffAndRenderOnEditorLocal.bind(this) - } - - public async createTask( - query: string, - document: vscode.TextDocument, - selectionRange: vscode.Selection - ): Promise { - const inlineTask = new InlineTask(query, document, selectionRange) - return inlineTask - } - - public async acceptAllChanges(task = this.task, userInvoked: boolean): Promise { - if (!task) { - return - } - const editor = vscode.window.visibleTextEditors.find( - (editor) => editor.document.uri.toString() === task.document.uri.toString() - ) - if (!editor) { - return - } - if (userInvoked) { - this.inlineChatProvider.sendTelemetryEvent( - { - userDecision: 'ACCEPT', - }, - this.task - ) - } - const deletions = task.diff.filter((diff) => diff.type === 'deletion') - await editor.edit( - (editBuilder) => { - for (const deletion of deletions) { - editBuilder.delete(deletion.range) - } - }, - { undoStopAfter: false, undoStopBefore: false } - ) - task.diff = [] - task.updateDecorations() - this.decorator.applyDecorations(task) - await this.updateTaskAndLenses(task) - this.referenceLogController.addReferenceLog(task.codeReferences, task.replacement ? task.replacement : '') - await this.reset() - UserWrittenCodeTracker.instance.onQFinishesEdits() - } - - public async rejectAllChanges(task = this.task, userInvoked: boolean): Promise { - if (!task) { - return - } - const editor = vscode.window.visibleTextEditors.find( - (editor) => editor.document.uri.toString() === task.document.uri.toString() - ) - if (!editor) { - return - } - if (userInvoked) { - this.inlineChatProvider.sendTelemetryEvent( - { - userDecision: 'REJECT', - }, - this.task - ) - } - const insertions = task.diff.filter((diff) => diff.type === 'insertion') - await editor.edit( - (editBuilder) => { - for (const insertion of insertions) { - editBuilder.delete(insertion.range) - } - }, - { undoStopAfter: false, undoStopBefore: false } - ) - task.diff = [] - task.updateDecorations() - this.decorator.applyDecorations(task) - await this.updateTaskAndLenses(task) - this.referenceLogController.addReferenceLog(task.codeReferences, task.replacement ? task.replacement : '') - await this.reset() - } - - public async updateTaskAndLenses(task?: InlineTask, taskState?: TaskState) { - if (!task) { - return - } - if (taskState) { - task.state = taskState - } else if (!task.diff || task.diff.length === 0) { - // If the previous state was waiting for a decision and the code diff is clean, then we mark the task as completed - if (task.state === TaskState.WaitingForDecision) { - task.state = TaskState.Complete - } - } - this.codeLenseProvider.updateLenses(task) - if (task.state === TaskState.InProgress) { - if (vscode.window.activeTextEditor) { - await this.inlineChatTutorialAnnotation.hide(vscode.window.activeTextEditor) - } - } - await this.refreshCodeLenses(task) - if (task.state === TaskState.Complete) { - await this.reset() - } - } - - private async handleError() { - if (!this.task) { - return - } - this.task.state = TaskState.Error - this.codeLenseProvider.updateLenses(this.task) - await this.refreshCodeLenses(this.task) - await this.reset() - } - - private async reset() { - for (const listener of this.listeners) { - listener.dispose() - } - this.listeners = [] - - this.task = undefined - this.inlineChatTutorialAnnotation.enable() - await setContext('amazonq.inline.codelensShortcutEnabled', undefined) - } - - private async refreshCodeLenses(task: InlineTask): Promise { - await vscode.commands.executeCommand('vscode.executeCodeLensProvider', task.document.uri) - } - - public async inlineQuickPick(previouseQuery?: string) { - const editor = vscode.window.activeTextEditor - if (!editor) { - return - } - - if (isSageMaker()) { - void vscode.window.showWarningMessage('Amazon Q: Inline chat is not supported in Sagemaker') - return - } - - if (this.task && this.task.isActiveState()) { - void vscode.window.showWarningMessage( - 'Amazon Q: Reject or Accept the current suggestion before creating a new one' - ) - return - } - - await vscode.window - .showInputBox({ - value: previouseQuery ?? '', - placeHolder: 'Enter instructions for Q', - prompt: codicon`${getIcon('aws-amazonq-q-white')} Edit code`, - }) - .then(async (query) => { - if (!query || query.trim() === '') { - getLogger().info('inlineQuickPick query is empty') - return - } - UserWrittenCodeTracker.instance.onQStartsMakingEdits() - this.userQuery = query - await textDocumentUtil.addEofNewline(editor) - this.task = await this.createTask(query, editor.document, editor.selection) - await this.inlineChatTutorialAnnotation.disable(editor) - await this.computeDiffAndRenderOnEditor(query).catch(async (err) => { - getLogger().error('computeDiffAndRenderOnEditor error: %s', (err as Error)?.message) - if (err instanceof Error) { - void vscode.window.showErrorMessage(`Amazon Q: ${err.message}`) - } else { - void vscode.window.showErrorMessage('Amazon Q encountered an error') - } - await this.handleError() - }) - }) - } - - private async computeDiffAndRenderOnEditorLSP(query: string) { - if (!this.task) { - return - } - - await this.updateTaskAndLenses(this.task, TaskState.InProgress) - getLogger().info(`inline chat query:\n${query}`) - const uuid = randomUUID() - const message: PromptMessage = { - message: query, - messageId: uuid, - command: undefined, - userIntent: undefined, - tabID: uuid, - } - - const response = await this.inlineChatProvider.processPromptMessageLSP(message) - - // TODO: add tests for this case. - if (!response.body) { - getLogger().warn('Empty body in inline chat response') - await this.handleError() - return - } - - // Update inline diff view - const textDiff = computeDiff(response.body, this.task, false) - const decorations = computeDecorations(this.task) - this.task.decorations = decorations - await this.applyDiff(this.task, textDiff ?? []) - this.decorator.applyDecorations(this.task) - - // Update Codelenses - await this.updateTaskAndLenses(this.task, TaskState.WaitingForDecision) - await setContext('amazonq.inline.codelensShortcutEnabled', true) - this.undoListener(this.task) - } - - // TODO: remove this implementation in favor of LSP - private async computeDiffAndRenderOnEditorLocal(query: string) { - if (!this.task) { - return - } - - await this.updateTaskAndLenses(this.task, TaskState.InProgress) - getLogger().info(`inline chat query:\n${query}`) - const uuid = randomUUID() - const message: PromptMessage = { - message: query, - messageId: uuid, - command: undefined, - userIntent: undefined, - tabID: uuid, - } - - const requestStart = performance.now() - let responseStartLatency: number | undefined - - const response = await this.inlineChatProvider.processPromptMessage(message) - this.task.requestId = response?.$metadata.requestId - - // Deselect all code - const editor = vscode.window.activeTextEditor - if (editor) { - const selection = editor.selection - if (!selection.isEmpty) { - const cursor = selection.active - const newSelection = new vscode.Selection(cursor, cursor) - editor.selection = newSelection - } - } - - if (response) { - let qSuggestedCodeResponse = '' - for await (const chatEvent of response.generateAssistantResponseResponse!) { - if ( - chatEvent.assistantResponseEvent?.content !== undefined && - chatEvent.assistantResponseEvent.content.length > 0 - ) { - if (responseStartLatency === undefined) { - responseStartLatency = performance.now() - requestStart - } - - qSuggestedCodeResponse += chatEvent.assistantResponseEvent.content - - const transformedResponse = responseTransformer(qSuggestedCodeResponse, this.task, false) - if (transformedResponse) { - const textDiff = computeDiff(transformedResponse, this.task, true) - const decorations = computeDecorations(this.task) - this.task.decorations = decorations - await this.applyDiff(this.task!, textDiff ?? [], { - undoStopBefore: false, - undoStopAfter: false, - }) - this.decorator.applyDecorations(this.task) - this.task.previouseDiff = textDiff - } - } - if ( - chatEvent.codeReferenceEvent?.references !== undefined && - chatEvent.codeReferenceEvent.references.length > 0 - ) { - this.task.codeReferences = this.task.codeReferences.concat(chatEvent.codeReferenceEvent?.references) - // clear diff if user settings is off for code reference - if (!CodeWhispererSettings.instance.isSuggestionsWithCodeReferencesEnabled()) { - await this.rejectAllChanges(this.task, false) - void vscode.window.showInformationMessage( - 'Your settings do not allow code generation with references.' - ) - await this.updateTaskAndLenses(this.task, TaskState.Complete) - return - } - } - if (chatEvent.error) { - getLogger().error('generateAssistantResponse stream error: %s', chatEvent.error) - await this.rejectAllChanges(this.task, false) - void vscode.window.showErrorMessage(`Amazon Q: ${chatEvent.error.message}`) - await this.updateTaskAndLenses(this.task, TaskState.Complete) - return - } - } - - if (this.task) { - // Unclear why we need to check if task is defined, but occasionally an error occurs otherwise - this.task.responseStartLatency = responseStartLatency - this.task.responseEndLatency = performance.now() - requestStart - } - getLogger().info(`qSuggestedCodeResponse:\n${qSuggestedCodeResponse}`) - const transformedResponse = responseTransformer(qSuggestedCodeResponse, this.task, true) - if (transformedResponse) { - const textDiff = computeDiff(transformedResponse, this.task, false) - const decorations = computeDecorations(this.task) - this.task.decorations = decorations - await this.applyDiff(this.task, textDiff ?? []) - this.decorator.applyDecorations(this.task) - await this.updateTaskAndLenses(this.task, TaskState.WaitingForDecision) - await setContext('amazonq.inline.codelensShortcutEnabled', true) - this.undoListener(this.task) - } else { - void messages.showMessageWithCancel( - 'No suggestions from Q, please try different instructions.', - new Timeout(5000) - ) - await this.updateTaskAndLenses(this.task, TaskState.Complete) - await this.inlineQuickPick(this.userQuery) - await this.handleError() - } - } - } - - private async applyDiff( - task: InlineTask, - textDiff: TextDiff[], - undoOption?: { undoStopBefore: boolean; undoStopAfter: boolean } - ) { - const adjustedTextDiff = adjustTextDiffForEditing(textDiff) - const visibleEditor = vscode.window.visibleTextEditors.find( - (editor) => editor.document.uri === task.document.uri - ) - const previousDiff = task.previouseDiff?.filter((diff) => diff.type === 'insertion') - - if (visibleEditor) { - if (previousDiff) { - await visibleEditor.edit( - (editBuilder) => { - for (const insertion of previousDiff) { - editBuilder.delete(insertion.range) - } - }, - { undoStopAfter: false, undoStopBefore: false } - ) - } - await visibleEditor.edit( - (editBuilder) => { - for (const change of adjustedTextDiff) { - if (change.type === 'insertion') { - editBuilder.insert(change.range.start, change.replacementText) - } - } - }, - undoOption ?? { undoStopBefore: true, undoStopAfter: false } - ) - } else { - if (previousDiff) { - const edit = new vscode.WorkspaceEdit() - for (const insertion of previousDiff) { - edit.delete(task.document.uri, insertion.range) - } - await vscode.workspace.applyEdit(edit) - } - const edit = new vscode.WorkspaceEdit() - for (const change of textDiff) { - if (change.type === 'insertion') { - edit.insert(task.document.uri, change.range.start, change.replacementText) - } - } - await vscode.workspace.applyEdit(edit) - } - } - - private undoListener(task: InlineTask) { - const listener: vscode.Disposable = vscode.workspace.onDidChangeTextDocument(async (event) => { - const { document, contentChanges } = event - - if (document.uri.toString() !== task.document.uri.toString()) { - return - } - - const changeIntersectsRange = contentChanges.some((change) => { - const { range } = change - if (task.selectedRange) { - return !( - range.end.isBefore(task.selectedRange.start) || range.start.isAfter(task.selectedRange.end) - ) - } - }) - - if (!changeIntersectsRange) { - return - } - - const updatedSelectedText = document.getText(task.selectedRange) - - if (updatedSelectedText.trim() === task.selectedText.trim()) { - task.diff = [] - await this.updateTaskAndLenses(task) - task.updateDecorations() - this.decorator.applyDecorations(task) - listener.dispose() - } - }) - - this.listeners.push(listener) - } -} diff --git a/packages/amazonq/src/inlineChat/controller/inlineTask.ts b/packages/amazonq/src/inlineChat/controller/inlineTask.ts deleted file mode 100644 index a6a169ad58c..00000000000 --- a/packages/amazonq/src/inlineChat/controller/inlineTask.ts +++ /dev/null @@ -1,160 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' -import type { CodeReference } from 'aws-core-vscode/amazonq' -import type { InlineChatEvent } from 'aws-core-vscode/codewhisperer' -import type { Decorations } from '../decorations/inlineDecorator' -import { computeDecorations } from '../decorations/computeDecorations' -import { extractLanguageNameFromFile } from 'aws-core-vscode/codewhispererChat' -import { textDocumentUtil } from 'aws-core-vscode/shared' - -interface TextToInsert { - type: 'insertion' - replacementText: string - range: vscode.Range -} - -interface TextToDelete { - type: 'deletion' - originalText: string - range: vscode.Range -} - -interface DiffBlock { - originalText: string - replacementText: string - range: vscode.Range -} - -export type TextDiff = TextToInsert | TextToDelete - -export enum TaskState { - Idle = 'Idle', - InProgress = 'InProgress', - WaitingForDecision = 'WaitingForDecision', - Complete = 'Complete', - Error = 'Error', -} - -export class InlineTask { - public state: TaskState = TaskState.Idle - public diff: TextDiff[] = [] - public decorations: Decorations | undefined - public diffBlock: DiffBlock[] = [] - public codeReferences: CodeReference[] = [] - public selectedText: string - public languageName: string | undefined - - public partialSelectedText: string | undefined - public partialSelectedTextRight: string | undefined - - public previouseDiff: TextDiff[] | undefined - public selectedRange: vscode.Range - public inProgressReplacement: string | undefined - public replacement: string | undefined - - // Telemetry fields - public requestId?: string - public responseStartLatency?: number - public responseEndLatency?: number - - constructor( - public query: string, - public document: vscode.TextDocument, - selection: vscode.Selection - ) { - this.selectedRange = textDocumentUtil.expandSelectionToFullLines(document, selection) - this.selectedText = document.getText(this.selectedRange) - this.languageName = extractLanguageNameFromFile(document) - } - - public revertDiff(): void { - this.diff = [] - this.decorations = { - linesAdded: [], - linesRemoved: [], - } - } - - public removeDiffChangeByRange(range: vscode.Range): void { - if (this.diff) { - this.diff = this.diff.filter((change) => !change.range.isEqual(range)) - } - } - - public updateDecorations(): void { - const isEmpty = - !this.decorations || - (this.decorations?.linesAdded?.length === 0 && this.decorations?.linesRemoved?.length === 0) - - if (isEmpty) { - return - } - const updatedDecorations = computeDecorations(this) - this.decorations = updatedDecorations - } - - public updateDiff(affectedRange: vscode.Range, deletedLines: number) { - const diffsAfter = this.diff.filter((edit) => edit.range.start.isAfter(affectedRange.end)) - for (const diff of diffsAfter) { - diff.range = new vscode.Range( - diff.range.start.translate(-deletedLines), - diff.range.end.translate(-deletedLines) - ) - } - } - - // Telemetry methods - public get numSelectedLines() { - return this.selectedText.split('\n').length - } - - public get inputLength() { - return this.query.length - } - - public inlineChatEventBase() { - let numSuggestionAddChars = 0 - let numSuggestionAddLines = 0 - let numSuggestionDelChars = 0 - let numSuggestionDelLines = 0 - - for (const diff of this.diff) { - if (diff.type === 'insertion') { - numSuggestionAddChars += diff.replacementText.length - numSuggestionAddLines += diff.range.end.line - diff.range.start.line + 1 - } else { - numSuggestionDelChars += diff.originalText.length - numSuggestionDelLines += diff.range.end.line - diff.range.start.line + 1 - } - } - - const programmingLanguage = this.languageName - ? { - languageName: this.languageName, - } - : undefined - - const event: Partial = { - requestId: this.requestId, - timestamp: new Date(), - inputLength: this.inputLength, - numSelectedLines: this.numSelectedLines, - codeIntent: true, - responseStartLatency: this.responseStartLatency, - responseEndLatency: this.responseEndLatency, - numSuggestionAddChars, - numSuggestionAddLines, - numSuggestionDelChars, - numSuggestionDelLines, - programmingLanguage, - } - return event - } - - public isActiveState() { - return !(this.state === TaskState.Complete || this.state === TaskState.Error) - } -} diff --git a/packages/amazonq/src/inlineChat/decorations/computeDecorations.ts b/packages/amazonq/src/inlineChat/decorations/computeDecorations.ts deleted file mode 100644 index fb289494b3f..00000000000 --- a/packages/amazonq/src/inlineChat/decorations/computeDecorations.ts +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' -import { InlineTask } from '../controller/inlineTask' -import { Decorations } from './inlineDecorator' - -export function computeDecorations(task: InlineTask): Decorations | undefined { - if (!task.diff) { - return - } - - const decorations: Decorations = { - linesAdded: [], - linesRemoved: [], - } - - for (const edit of task.diff) { - const countChanged = edit.range.end.line - edit.range.start.line - 1 - if (edit.type === 'deletion') { - decorations.linesRemoved.push({ - range: new vscode.Range(edit.range.start.line, 0, edit.range.start.line + countChanged, 0), - }) - } else if (edit.type === 'insertion') { - decorations.linesAdded.push({ - range: new vscode.Range(edit.range.start.line, 0, edit.range.start.line + countChanged, 0), - }) - } - } - return decorations -} diff --git a/packages/amazonq/src/inlineChat/decorations/inlineDecorator.ts b/packages/amazonq/src/inlineChat/decorations/inlineDecorator.ts deleted file mode 100644 index 3c4e3899e13..00000000000 --- a/packages/amazonq/src/inlineChat/decorations/inlineDecorator.ts +++ /dev/null @@ -1,38 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { InlineTask } from '../controller/inlineTask' - -export interface Decorations { - linesAdded: vscode.DecorationOptions[] - linesRemoved: vscode.DecorationOptions[] -} - -const removedTextDecorationType = vscode.window.createTextEditorDecorationType({ - backgroundColor: 'rgba(255, 0, 0, 0.1)', - isWholeLine: true, -}) - -const AddedTextDecorationType = vscode.window.createTextEditorDecorationType({ - backgroundColor: 'rgba(0, 255, 0, 0.1)', - isWholeLine: true, -}) - -export class InlineDecorator { - public applyDecorations(task: InlineTask): void { - const decorations = task.decorations - if (!decorations) { - return - } - const editors = vscode.window.visibleTextEditors.filter( - (editor) => editor.document.uri.toString() === task.document.uri.toString() - ) - for (const editor of editors) { - editor.setDecorations(AddedTextDecorationType, decorations.linesAdded ?? []) - editor.setDecorations(removedTextDecorationType, decorations.linesRemoved ?? []) - } - } -} diff --git a/packages/amazonq/src/inlineChat/output/computeDiff.ts b/packages/amazonq/src/inlineChat/output/computeDiff.ts deleted file mode 100644 index a17a7914cf6..00000000000 --- a/packages/amazonq/src/inlineChat/output/computeDiff.ts +++ /dev/null @@ -1,115 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import { type LinesOptions, diffLines } from 'diff' -import * as vscode from 'vscode' -import { InlineTask, TextDiff } from '../controller/inlineTask' - -export function computeDiff(response: string, inlineTask: InlineTask, isPartialDiff: boolean): TextDiff[] | undefined { - if (!response) { - return - } - const selectedRange = inlineTask.selectedRange - const partialSelectedText = inlineTask.partialSelectedText ?? '' - const selectedText = isPartialDiff ? partialSelectedText : inlineTask.selectedText - - const normalizedResponse = - getLeadingWhitespace(selectedText) + response.trim() + getTrailingWhitespace(selectedText) - - const diffs = diffLines(selectedText, normalizedResponse, { - stripTrailingCr: true, - ignoreNewlineAtEof: true, - } as LinesOptions) - - const textDiff: TextDiff[] = [] - let startLine = selectedRange.start.line - for (const part of diffs) { - const count = part.count ?? 0 - if (part.removed) { - if (part.value !== '\n') { - textDiff.push({ - type: 'deletion', - originalText: part.value, - range: new vscode.Range(startLine, 0, startLine + count, 0), - }) - } - } else if (part.added) { - if (part.value !== '\n') { - // The partial response sometimes doesn't have the correct ending newline character (\n), so we ensure that every insertion respects the code formatting. - if (isPartialDiff && !part.value.endsWith('\n')) { - part.value += '\n' - } - textDiff.push({ - type: 'insertion', - replacementText: part.value, - range: new vscode.Range(startLine, 0, startLine + count, 0), - }) - } - } - startLine += count - } - inlineTask.diff = textDiff - return textDiff -} - -export function adjustTextDiffForEditing(textDiff: TextDiff[]): TextDiff[] { - let linesAdded = 0 - const adjustedDiff: TextDiff[] = [] - - for (const edit of textDiff) { - const { range, type } = edit - const { start, end } = range - const linesChanged = end.line - start.line - - const adjustedRange = new vscode.Range( - new vscode.Position(start.line - linesAdded, start.character), - new vscode.Position(end.line - linesAdded, end.character) - ) - - adjustedDiff.push({ - ...edit, - range: adjustedRange, - }) - - if (type === 'insertion') { - linesAdded += linesChanged - } - } - - return adjustedDiff -} - -export function getDiffBlocks(inlineTask: InlineTask): vscode.Range[] { - const diff = inlineTask.diff - - if (!diff || diff.length === 0) { - return [] - } - - const diffBlocks: vscode.Range[] = [] - let currentRange: vscode.Range | undefined - - for (const change of diff) { - const { range } = change - if (!currentRange || range.start.line !== currentRange.end.line) { - currentRange = range - diffBlocks.push(range) - } else { - currentRange = new vscode.Range(currentRange.start, range.end) - diffBlocks[diffBlocks.length - 1] = currentRange - } - } - - return diffBlocks -} - -function getLeadingWhitespace(str: string): string { - const match = str.match(/^\s*/) - return match ? match[0] : '' -} - -function getTrailingWhitespace(str: string): string { - const match = str.match(/\s*$/) - return match ? match[0] : '' -} diff --git a/packages/amazonq/src/inlineChat/output/responseTransformer.ts b/packages/amazonq/src/inlineChat/output/responseTransformer.ts deleted file mode 100644 index b965ced519e..00000000000 --- a/packages/amazonq/src/inlineChat/output/responseTransformer.ts +++ /dev/null @@ -1,55 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { getLogger } from 'aws-core-vscode/shared' -import { decode } from 'he' -import { InlineTask } from '../controller/inlineTask' - -/** - * Transforms the response from the INLINE_CHAT GenerateAssistantResponse call. - * - * @param response - The raw response string from GenerateAssistantResponse. - * @param inlineTask - The inline task object containing information about the current task. - * @param isWholeResponse - A boolean indicating whether this is a complete response or a partial one. - * @returns The decoded response string, or undefined if an error occurs. - */ -export function responseTransformer( - response: string, - inlineTask: InlineTask, - isWholeResponse: boolean -): string | undefined { - try { - const decodedResponse = decode(response) - if (!isWholeResponse) { - const [partialSelectedCode, right] = extractPartialCode(decodedResponse, inlineTask) - inlineTask.partialSelectedText = partialSelectedCode - inlineTask.partialSelectedTextRight = right - return decodedResponse - } else { - return decodedResponse - } - } catch (err) { - getLogger().error('An unknown error occurred: %s', (err as Error).message) - return undefined - } -} - -/** - * This function is used to handle partial responses in inline tasks. It divides - * the selected text into two parts: - * 1. The "left" part, which contains the same number of lines as the response. - * 2. The "right" part, which contains the remaining lines. - * - * @param response - The response string from the assistant. - * @param inlineTask - The inline task object containing the full selected text. - * @returns A tuple with two strings: [leftPart, rightPart]. - */ -function extractPartialCode(response: string, inlineTask: InlineTask): [string, string] { - const lineCount = response.split('\n').length - const splitLines = inlineTask.selectedText.split('\n') - const left = splitLines.slice(0, lineCount).join('\n') - const right = splitLines.slice(lineCount).join('\n') - return [left, right] -} diff --git a/packages/amazonq/src/inlineChat/provider/inlineChatProvider.ts b/packages/amazonq/src/inlineChat/provider/inlineChatProvider.ts deleted file mode 100644 index c2dc94de36f..00000000000 --- a/packages/amazonq/src/inlineChat/provider/inlineChatProvider.ts +++ /dev/null @@ -1,249 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { - CodeWhispererStreamingServiceException, - GenerateAssistantResponseCommandOutput, -} from '@amzn/codewhisperer-streaming' -import { BaseLanguageClient } from 'vscode-languageclient' -import { inlineChatRequestType } from '@aws/language-server-runtimes/protocol' -import { AuthUtil, getSelectedCustomization } from 'aws-core-vscode/codewhisperer' -import { - ChatSessionStorage, - ChatTriggerType, - EditorContextExtractor, - PromptMessage, - TriggerEventsStorage, - TriggerPayload, - triggerPayloadToChatRequest, - UserIntentRecognizer, -} from 'aws-core-vscode/codewhispererChat' -import { AwsClientResponseError, getLogger, isAwsError, ToolkitError } from 'aws-core-vscode/shared' -import { randomUUID } from 'crypto' -import { codeWhispererClient } from 'aws-core-vscode/codewhisperer' -import type { InlineChatEvent } from 'aws-core-vscode/codewhisperer' -import { InlineTask } from '../controller/inlineTask' -import { extractAuthFollowUp } from 'aws-core-vscode/amazonq' -import { InlineChatParams, InlineChatResult } from '@aws/language-server-runtimes-types' -import { decryptResponse, encryptRequest } from '../../lsp/encryption' -import { getCursorState } from '../../lsp/utils' - -export class InlineChatProvider { - private readonly editorContextExtractor: EditorContextExtractor - private readonly userIntentRecognizer: UserIntentRecognizer - private readonly sessionStorage: ChatSessionStorage - private readonly triggerEventsStorage: TriggerEventsStorage - private errorEmitter = new vscode.EventEmitter() - public onErrorOccured = this.errorEmitter.event - - public constructor( - private readonly client: BaseLanguageClient, - private readonly encryptionKey: Buffer - ) { - this.editorContextExtractor = new EditorContextExtractor() - this.userIntentRecognizer = new UserIntentRecognizer() - this.sessionStorage = new ChatSessionStorage() - this.triggerEventsStorage = new TriggerEventsStorage() - } - - private getCurrentEditorParams(prompt: string): InlineChatParams { - const editor = vscode.window.activeTextEditor - if (!editor) { - throw new ToolkitError('No active editor') - } - - const documentUri = editor.document.uri.toString() - const cursorState = getCursorState(editor.selections) - return { - prompt: { - prompt, - }, - cursorState, - textDocument: { - uri: documentUri, - }, - } - } - - public async processPromptMessageLSP(message: PromptMessage): Promise { - // TODO: handle partial responses. - getLogger().info('Making inline chat request with message %O', message) - const params = this.getCurrentEditorParams(message.message ?? '') - - const inlineChatRequest = await encryptRequest(params, this.encryptionKey) - const response = await this.client.sendRequest(inlineChatRequestType.method, inlineChatRequest) - const inlineChatResponse = await decryptResponse(response, this.encryptionKey) - this.client.info(`Logging response for inline chat ${JSON.stringify(inlineChatResponse)}`) - - return inlineChatResponse - } - - // TODO: remove in favor of LSP implementation. - public async processPromptMessage(message: PromptMessage) { - return this.editorContextExtractor - .extractContextForTrigger('ChatMessage') - .then((context) => { - const triggerID = randomUUID() - this.triggerEventsStorage.addTriggerEvent({ - id: triggerID, - tabID: message.tabID, - message: message.message, - type: 'inline_chat', - context, - }) - return this.generateResponse( - { - message: message.message ?? '', - trigger: ChatTriggerType.InlineChatMessage, - query: message.message, - codeSelection: context?.focusAreaContext?.selectionInsideExtendedCodeBlock, - fileText: context?.focusAreaContext?.extendedCodeBlock ?? '', - fileLanguage: context?.activeFileContext?.fileLanguage, - filePath: context?.activeFileContext?.filePath, - matchPolicy: context?.activeFileContext?.matchPolicy, - codeQuery: context?.focusAreaContext?.names, - userIntent: this.userIntentRecognizer.getFromPromptChatMessage(message), - customization: getSelectedCustomization(), - profile: AuthUtil.instance.regionProfileManager.activeRegionProfile, - context: [], - relevantTextDocuments: [], - additionalContents: [], - documentReferences: [], - useRelevantDocuments: false, - contextLengths: { - additionalContextLengths: { - fileContextLength: 0, - promptContextLength: 0, - ruleContextLength: 0, - }, - truncatedAdditionalContextLengths: { - fileContextLength: 0, - promptContextLength: 0, - ruleContextLength: 0, - }, - workspaceContextLength: 0, - truncatedWorkspaceContextLength: 0, - userInputContextLength: 0, - truncatedUserInputContextLength: 0, - focusFileContextLength: 0, - truncatedFocusFileContextLength: 0, - }, - }, - triggerID - ) - }) - .catch((e) => { - this.processException(e, message.tabID) - }) - } - - private async generateResponse( - triggerPayload: TriggerPayload & { projectContextQueryLatencyMs?: number }, - triggerID: string - ) { - const triggerEvent = this.triggerEventsStorage.getTriggerEvent(triggerID) - if (triggerEvent === undefined) { - return - } - - if (triggerEvent.tabID === 'no-available-tabs') { - return - } - - if (triggerEvent.tabID === undefined) { - setTimeout(() => { - this.generateResponse(triggerPayload, triggerID).catch((e) => { - getLogger().error('generateResponse failed: %s', (e as Error).message) - }) - }, 20) - return - } - - const tabID = triggerEvent.tabID - - const credentialsState = await AuthUtil.instance.getChatAuthState() - if ( - !(credentialsState.codewhispererChat === 'connected' && credentialsState.codewhispererCore === 'connected') - ) { - const { message } = extractAuthFollowUp(credentialsState) - this.errorEmitter.fire() - throw new ToolkitError(message) - } - triggerPayload.useRelevantDocuments = false - - const request = triggerPayloadToChatRequest(triggerPayload) - const session = this.sessionStorage.getSession(tabID) - getLogger().debug( - `request from tab: ${tabID} conversationID: ${session.sessionIdentifier} request: %O`, - request - ) - - let response: GenerateAssistantResponseCommandOutput | undefined = undefined - session.createNewTokenSource() - try { - response = await session.chatSso(request) - getLogger().info( - `response to tab: ${tabID} conversationID: ${session.sessionIdentifier} requestID: ${response.$metadata.requestId} metadata: %O`, - response.$metadata - ) - } catch (e: any) { - this.processException(e, tabID) - } - - return response - } - - private processException(e: any, tabID: string) { - let errorMessage: string | undefined - let requestID: string | undefined - if (typeof e === 'string') { - errorMessage = e.toUpperCase() - } else if (e instanceof SyntaxError) { - // Workaround to handle case when LB returns web-page with error and our client doesn't return proper exception - errorMessage = AwsClientResponseError.tryExtractReasonFromSyntaxError(e) - } else if (e instanceof CodeWhispererStreamingServiceException) { - errorMessage = e.message - requestID = e.$metadata.requestId - } else if (e instanceof Error) { - errorMessage = e.message - } - - this.errorEmitter.fire() - this.sessionStorage.deleteSession(tabID) - - throw ToolkitError.chain(e, errorMessage ?? 'Failed to get response', { - details: { - tabID, - requestID, - }, - }) - } - - public sendTelemetryEvent(inlineChatEvent: InlineChatEvent, currentTask?: InlineTask) { - codeWhispererClient - .sendTelemetryEvent({ - telemetryEvent: { - inlineChatEvent: { - ...inlineChatEvent, - ...(currentTask?.inlineChatEventBase() ?? {}), - }, - }, - }) - .then() - .catch((error) => { - let requestId: string | undefined - if (isAwsError(error)) { - requestId = error.requestId - } - - getLogger().debug( - `Failed to sendTelemetryEvent to CodeWhisperer, requestId: ${ - requestId ?? '' - }, message: ${error.message}` - ) - }) - } -} diff --git a/packages/amazonq/src/lsp/activation.ts b/packages/amazonq/src/lsp/activation.ts deleted file mode 100644 index e2c1b6899d9..00000000000 --- a/packages/amazonq/src/lsp/activation.ts +++ /dev/null @@ -1,30 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import vscode from 'vscode' -import { startLanguageServer } from './client' -import { AmazonQLspInstaller, getBundledResourcePaths } from './lspInstaller' -import { lspSetupStage, ToolkitError, messages, getLogger } from 'aws-core-vscode/shared' - -export async function activate(ctx: vscode.ExtensionContext): Promise { - try { - await lspSetupStage('all', async () => { - const installResult = await new AmazonQLspInstaller().resolve() - await lspSetupStage('launch', async () => await startLanguageServer(ctx, installResult.resourcePaths)) - }) - } catch (err) { - const e = err as ToolkitError - getLogger('amazonqLsp').warn(`Failed to start downloaded LSP, falling back to bundled LSP: ${e.message}`) - try { - await lspSetupStage('all', async () => { - await lspSetupStage('launch', async () => await startLanguageServer(ctx, getBundledResourcePaths(ctx))) - }) - } catch (error) { - void messages.showViewLogsMessage( - `Failed to launch Amazon Q language server: ${(error as ToolkitError).message}` - ) - } - } -} diff --git a/packages/amazonq/src/lsp/auth.ts b/packages/amazonq/src/lsp/auth.ts deleted file mode 100644 index b4093362004..00000000000 --- a/packages/amazonq/src/lsp/auth.ts +++ /dev/null @@ -1,180 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - bearerCredentialsUpdateRequestType, - iamCredentialsUpdateRequestType, - ConnectionMetadata, - NotificationType, - RequestType, - ResponseMessage, - UpdateCredentialsParams, -} from '@aws/language-server-runtimes/protocol' -import * as jose from 'jose' -import * as crypto from 'crypto' -import { BaseLanguageClient } from 'vscode-languageclient' -import { AuthUtil } from 'aws-core-vscode/codewhisperer' -import { Writable } from 'stream' -import { onceChanged, onceChangedWithComparator } from 'aws-core-vscode/utils' -import { getLogger, oneMinute, isSageMaker } from 'aws-core-vscode/shared' -import { isSsoConnection, isIamConnection, areCredentialsEqual } from 'aws-core-vscode/auth' - -export const encryptionKey = crypto.randomBytes(32) - -/** - * Sends a json payload to the language server, who is waiting to know what the encryption key is. - * Code reference: https://github.com/aws/language-servers/blob/7da212185a5da75a72ce49a1a7982983f438651a/client/vscode/src/credentialsActivation.ts#L77 - */ -export function writeEncryptionInit(stream: Writable): void { - const request = { - version: '1.0', - mode: 'JWT', - key: encryptionKey.toString('base64'), - } - stream.write(JSON.stringify(request)) - stream.write('\n') -} - -/** - * Request for custom notifications that Update Credentials and tokens. - * See core\aws-lsp-core\src\credentials\updateCredentialsRequest.ts for details - */ -export interface UpdateCredentialsRequest { - /** - * Encrypted token (JWT or PASETO) - * The token's contents differ whether IAM or Bearer token is sent - */ - data: string - /** - * Used by the runtime based language servers. - * Signals that this client will encrypt its credentials payloads. - */ - encrypted: boolean -} - -export const notificationTypes = { - updateBearerToken: new RequestType( - 'aws/credentials/token/update' - ), - deleteBearerToken: new NotificationType('aws/credentials/token/delete'), - getConnectionMetadata: new RequestType( - 'aws/credentials/getConnectionMetadata' - ), -} - -/** - * Facade over our VSCode Auth that does crud operations on the language server auth - */ -export class AmazonQLspAuth { - #logErrorIfChanged = onceChanged((s) => getLogger('amazonqLsp').error(s)) - constructor( - private readonly client: BaseLanguageClient, - private readonly authUtil: AuthUtil = AuthUtil.instance - ) {} - - /** - * @param force bypass memoization, and forcefully update the bearer token - */ - async refreshConnection(force: boolean = false) { - const activeConnection = this.authUtil.conn - if (this.authUtil.isConnectionValid()) { - if (isSsoConnection(activeConnection)) { - // Existing SSO path - const token = await this.authUtil.getBearerToken() - await (force ? this._updateBearerToken(token) : this.updateBearerToken(token)) - } else if (isSageMaker() && isIamConnection(activeConnection)) { - // New SageMaker IAM path - const credentials = await this.authUtil.getCredentials() - await (force ? this._updateIamCredentials(credentials) : this.updateIamCredentials(credentials)) - } - } - } - - async logRefreshError(e: unknown) { - const err = e as Error - this.#logErrorIfChanged(`Unable to update bearer token: ${err.name}:${err.message}`) - } - - public updateBearerToken = onceChanged(this._updateBearerToken.bind(this)) - private async _updateBearerToken(token: string) { - const request = await this.createUpdateBearerCredentialsRequest(token) - - // "aws/credentials/token/update" - // https://github.com/aws/language-servers/blob/44d81f0b5754747d77bda60b40cc70950413a737/core/aws-lsp-core/src/credentials/credentialsProvider.ts#L27 - await this.client.sendRequest(bearerCredentialsUpdateRequestType.method, request) - - this.client.info(`UpdateBearerToken: ${JSON.stringify(request)}`) - } - - public updateIamCredentials = onceChangedWithComparator( - this._updateIamCredentials.bind(this), - ([prevCreds], [currentCreds]) => areCredentialsEqual(prevCreds, currentCreds) - ) - private async _updateIamCredentials(credentials: any) { - getLogger().info( - `[SageMaker Debug] Updating IAM credentials - credentials received: ${credentials ? 'YES' : 'NO'}` - ) - if (credentials) { - getLogger().info( - `[SageMaker Debug] IAM credentials structure: accessKeyId=${credentials.accessKeyId ? 'present' : 'missing'}, secretAccessKey=${credentials.secretAccessKey ? 'present' : 'missing'}, sessionToken=${credentials.sessionToken ? 'present' : 'missing'}, expiration=${credentials.expiration ? 'present' : 'missing'}` - ) - } - - const request = await this.createUpdateIamCredentialsRequest(credentials) - - // "aws/credentials/iam/update" - await this.client.sendRequest(iamCredentialsUpdateRequestType.method, request) - - this.client.info(`UpdateIamCredentials: ${JSON.stringify(request)}`) - getLogger().info(`[SageMaker Debug] IAM credentials update request sent successfully`) - } - - public startTokenRefreshInterval(pollingTime: number = oneMinute / 2) { - const interval = setInterval(async () => { - await this.refreshConnection().catch((e) => this.logRefreshError(e)) - }, pollingTime) - return interval - } - - private async createUpdateBearerCredentialsRequest(token: string): Promise { - const bearerCredentials = { token } - const payload = new TextEncoder().encode(JSON.stringify({ data: bearerCredentials })) - - const jwt = await new jose.CompactEncrypt(payload) - .setProtectedHeader({ alg: 'dir', enc: 'A256GCM' }) - .encrypt(encryptionKey) - - return { - data: jwt, - metadata: { - sso: { - startUrl: AuthUtil.instance.startUrl, - }, - }, - encrypted: true, - } - } - - private async createUpdateIamCredentialsRequest(credentials: any): Promise { - // Extract IAM credentials structure - const iamCredentials = { - accessKeyId: credentials.accessKeyId, - secretAccessKey: credentials.secretAccessKey, - sessionToken: credentials.sessionToken, - expiration: credentials.expiration, - } - const payload = new TextEncoder().encode(JSON.stringify({ data: iamCredentials })) - - const jwt = await new jose.CompactEncrypt(payload) - .setProtectedHeader({ alg: 'dir', enc: 'A256GCM' }) - .encrypt(encryptionKey) - - return { - data: jwt, - // Omit metadata for IAM credentials since startUrl is undefined for non-SSO connections - encrypted: true, - } - } -} diff --git a/packages/amazonq/src/lsp/chat/activation.ts b/packages/amazonq/src/lsp/chat/activation.ts deleted file mode 100644 index 93f4d68cf2a..00000000000 --- a/packages/amazonq/src/lsp/chat/activation.ts +++ /dev/null @@ -1,104 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { window } from 'vscode' -import { BaseLanguageClient } from 'vscode-languageclient' -import { AmazonQChatViewProvider } from './webviewProvider' -import { focusAmazonQPanel, registerCommands } from './commands' -import { - registerActiveEditorChangeListener, - registerLanguageServerEventListener, - registerMessageListeners, -} from './messages' -import { Commands, getLogger, globals, undefinedIfEmpty } from 'aws-core-vscode/shared' -import { activate as registerLegacyChatListeners } from '../../app/chat/activation' -import { DefaultAmazonQAppInitContext } from 'aws-core-vscode/amazonq' -import { AuthUtil, getSelectedCustomization } from 'aws-core-vscode/codewhisperer' -import { pushConfigUpdate } from '../config' -import { AutoDebugLspClient } from './autoDebug/lsp/autoDebugLspClient' - -export async function activate(languageClient: BaseLanguageClient, encryptionKey: Buffer, mynahUIPath: string) { - const disposables = globals.context.subscriptions - - const provider = new AmazonQChatViewProvider(mynahUIPath, languageClient) - - // Set the chat view provider for AutoDebug to use - AutoDebugLspClient.setChatViewProvider(provider) - - disposables.push( - window.registerWebviewViewProvider(AmazonQChatViewProvider.viewType, provider, { - webviewOptions: { - retainContextWhenHidden: true, - }, - }) - ) - - /** - * Commands are registered independent of the webview being open because when they're executed - * they focus the webview - **/ - registerCommands(provider) - registerLanguageServerEventListener(languageClient, provider) - registerActiveEditorChangeListener(languageClient) - - provider.onDidResolveWebview(() => { - const disposable = DefaultAmazonQAppInitContext.instance.getAppsToWebViewMessageListener().onMessage((msg) => { - /** - * codewhispers app handler is still registered because the activation flow hasn't been refactored. - * We need to explicitly deny events like restoreTabMessage, otherwise they will be forwarded to the frontend - * - */ - if (msg.sender === 'CWChat' && ['restoreTabMessage', 'contextCommandData'].includes(msg.type)) { - return - } - provider.webview?.postMessage(msg).then(undefined, (e) => { - getLogger().error('webView.postMessage failed: %s', (e as Error).message) - }) - }) - - if (provider.webviewView) { - disposables.push( - provider.webviewView.onDidDispose(() => { - disposable.dispose() - }) - ) - } - - registerMessageListeners(languageClient, provider, encryptionKey) - }) - - // register event listeners from the legacy agent flow - await registerLegacyChatListeners(globals.context) - - disposables.push( - AuthUtil.instance.regionProfileManager.onDidChangeRegionProfile(async () => { - await provider.refreshWebview() - }), - Commands.register('aws.amazonq.updateCustomizations', () => { - void pushConfigUpdate(languageClient, { - type: 'customization', - customization: undefinedIfEmpty(getSelectedCustomization().arn), - }) - }), - Commands.register('aws.amazonq.manageSubscription', () => { - focusAmazonQPanel().catch((e: Error) => languageClient.error(`[VSCode Client] focusAmazonQPanel() failed`)) - - languageClient - .sendRequest('workspace/executeCommand', { - command: 'aws/chat/manageSubscription', - // arguments: [], - }) - .catch((e: Error) => { - getLogger('amazonqLsp').error('failed request: aws/chat/manageSubscription: %O', e) - }) - }), - globals.logOutputChannel.onDidChangeLogLevel((logLevel) => { - getLogger('amazonqLsp').info(`Local log level changed to ${logLevel}, notifying LSP`) - void pushConfigUpdate(languageClient, { - type: 'logLevel', - }) - }) - ) -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/activation.ts b/packages/amazonq/src/lsp/chat/autoDebug/activation.ts deleted file mode 100644 index f18c82c237a..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/activation.ts +++ /dev/null @@ -1,78 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { getLogger } from 'aws-core-vscode/shared' -import { AutoDebugCommands } from './commands' -import { AutoDebugCodeActionsProvider } from './codeActionsProvider' -import { AutoDebugController } from './controller' - -/** - * Auto Debug feature activation for Amazon Q - * This handles the complete lifecycle of the auto debug feature - */ -export class AutoDebugFeature implements vscode.Disposable { - private readonly logger = getLogger() - private readonly disposables: vscode.Disposable[] = [] - - private autoDebugCommands?: AutoDebugCommands - private codeActionsProvider?: AutoDebugCodeActionsProvider - private controller?: AutoDebugController - - constructor(private readonly context: vscode.ExtensionContext) {} - - /** - * Activate the auto debug feature - */ - async activate(): Promise { - try { - // Initialize the controller first - this.controller = new AutoDebugController() - - // Initialize commands and register them with the controller - this.autoDebugCommands = new AutoDebugCommands() - this.autoDebugCommands.registerCommands(this.context, this.controller) - - // Initialize code actions provider - this.codeActionsProvider = new AutoDebugCodeActionsProvider() - this.context.subscriptions.push(this.codeActionsProvider) - - // Add all to disposables - this.disposables.push(this.controller, this.autoDebugCommands, this.codeActionsProvider) - } catch (error) { - this.logger.error('AutoDebugFeature: Failed to activate auto debug feature: %s', error) - throw error - } - } - - /** - * Get the auto debug controller instance - */ - getController(): AutoDebugController | undefined { - return this.controller - } - - /** - * Dispose of all resources - */ - dispose(): void { - vscode.Disposable.from(...this.disposables).dispose() - } -} - -/** - * Factory function to activate auto debug feature with LSP client - * This is the main entry point for activating auto debug - */ -export async function activateAutoDebug( - context: vscode.ExtensionContext, - client?: any, - encryptionKey?: Buffer -): Promise { - const feature = new AutoDebugFeature(context) - await feature.activate() - - return feature -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/codeActionsProvider.ts b/packages/amazonq/src/lsp/chat/autoDebug/codeActionsProvider.ts deleted file mode 100644 index aed926eaacf..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/codeActionsProvider.ts +++ /dev/null @@ -1,119 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' - -/** - * Provides code actions for Amazon Q Auto Debug features. - * Integrates with VS Code's quick fix system to offer debugging assistance. - */ -export class AutoDebugCodeActionsProvider implements vscode.CodeActionProvider, vscode.Disposable { - private readonly disposables: vscode.Disposable[] = [] - - public static readonly providedCodeActionKinds = [vscode.CodeActionKind.QuickFix, vscode.CodeActionKind.Refactor] - - constructor() { - this.registerProvider() - } - - private registerProvider(): void { - // Register for all file types - const selector: vscode.DocumentSelector = [{ scheme: 'file' }] - - this.disposables.push( - vscode.languages.registerCodeActionsProvider(selector, this, { - providedCodeActionKinds: AutoDebugCodeActionsProvider.providedCodeActionKinds, - }) - ) - } - - /** - * Provides code actions for the given document and range - */ - public provideCodeActions( - document: vscode.TextDocument, - range: vscode.Range | vscode.Selection, - context: vscode.CodeActionContext, - token: vscode.CancellationToken - ): vscode.ProviderResult<(vscode.CodeAction | vscode.Command)[]> { - if (token.isCancellationRequested) { - return [] - } - - const actions: vscode.CodeAction[] = [] - - // Get diagnostics for the current range - const diagnostics = context.diagnostics.filter( - (diagnostic) => diagnostic.range.intersection(range) !== undefined - ) - - if (diagnostics.length > 0) { - // Add "Fix with Amazon Q" action - actions.push(this.createFixWithQAction(document, range, diagnostics)) - - // Add "Fix All with Amazon Q" action - actions.push(this.createFixAllWithQAction(document)) - - // Add "Explain Problem" action - actions.push(this.createExplainProblemAction(document, range, diagnostics)) - } - return actions - } - - private createFixWithQAction( - document: vscode.TextDocument, - range: vscode.Range, - diagnostics: vscode.Diagnostic[] - ): vscode.CodeAction { - const action = new vscode.CodeAction( - `Amazon Q: Fix Problem (${diagnostics.length} issue${diagnostics.length !== 1 ? 's' : ''})`, - vscode.CodeActionKind.QuickFix - ) - - action.command = { - command: 'amazonq.01.fixWithQ', - title: 'Amazon Q: Fix Problem', - arguments: [range, diagnostics], - } - - action.diagnostics = diagnostics - action.isPreferred = true // Make this the preferred quick fix - - return action - } - - private createFixAllWithQAction(document: vscode.TextDocument): vscode.CodeAction { - const action = new vscode.CodeAction('Amazon Q: Fix All Errors', vscode.CodeActionKind.QuickFix) - - action.command = { - command: 'amazonq.02.fixAllWithQ', - title: 'Amazon Q: Fix All Errors', - } - - return action - } - - private createExplainProblemAction( - document: vscode.TextDocument, - range: vscode.Range, - diagnostics: vscode.Diagnostic[] - ): vscode.CodeAction { - const action = new vscode.CodeAction('Amazon Q: Explain Problem', vscode.CodeActionKind.QuickFix) - - action.command = { - command: 'amazonq.03.explainProblem', - title: 'Amazon Q: Explain Problem', - arguments: [range, diagnostics], - } - - action.diagnostics = diagnostics - - return action - } - - public dispose(): void { - vscode.Disposable.from(...this.disposables).dispose() - } -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/commands.ts b/packages/amazonq/src/lsp/chat/autoDebug/commands.ts deleted file mode 100644 index ecdbf80d1e0..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/commands.ts +++ /dev/null @@ -1,177 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { Commands, getLogger, messages } from 'aws-core-vscode/shared' -import { AutoDebugController } from './controller' -import { autoDebugTelemetry } from './telemetry' - -/** - * Auto Debug commands for Amazon Q - * Handles all command registrations and implementations - */ -export class AutoDebugCommands implements vscode.Disposable { - private readonly logger = getLogger() - private readonly disposables: vscode.Disposable[] = [] - private controller!: AutoDebugController - - /** - * Register all auto debug commands - */ - registerCommands(context: vscode.ExtensionContext, controller: AutoDebugController): void { - this.controller = controller - this.disposables.push( - // Fix with Amazon Q command - Commands.register( - { - id: 'amazonq.01.fixWithQ', - name: 'Amazon Q: Fix Problem', - }, - async (range?: vscode.Range, diagnostics?: vscode.Diagnostic[]) => { - await this.fixWithAmazonQ(range, diagnostics) - } - ), - - // Fix All with Amazon Q command - Commands.register( - { - id: 'amazonq.02.fixAllWithQ', - name: 'Amazon Q: Fix All Errors', - }, - async () => { - await this.fixAllWithAmazonQ() - } - ), - - // Explain Problem with Amazon Q command - Commands.register( - { - id: 'amazonq.03.explainProblem', - name: 'Amazon Q: Explain Problem', - }, - async (range?: vscode.Range, diagnostics?: vscode.Diagnostic[]) => { - await this.explainProblem(range, diagnostics) - } - ) - ) - - // Add all disposables to context - context.subscriptions.push(...this.disposables) - } - - /** - * Generic error handling wrapper for command execution - */ - private async executeWithErrorHandling( - action: () => Promise, - errorMessage: string, - logContext: string - ): Promise { - try { - return await action() - } catch (error) { - this.logger.error(`AutoDebugCommands: Error in ${logContext}: %s`, error) - - // Record telemetry failure based on context - const commandType = - logContext === 'fixWithAmazonQ' - ? 'fixWithQ' - : logContext === 'fixAllWithAmazonQ' - ? 'fixAllWithQ' - : 'explainProblem' - autoDebugTelemetry.recordCommandFailure(commandType, String(error)) - - void messages.showMessage('error', 'Amazon Q was not able to fix or explain the problem. Try again shortly') - } - } - - /** - * Check if there's an active editor and log warning if not - */ - private checkActiveEditor(): vscode.TextEditor | undefined { - const editor = vscode.window.activeTextEditor - if (!editor) { - this.logger.warn('AutoDebugCommands: No active editor found') - } - return editor - } - - /** - * Fix with Amazon Q - fixes only the specific issues the user selected - */ - private async fixWithAmazonQ(range?: vscode.Range, diagnostics?: vscode.Diagnostic[]): Promise { - const problemCount = diagnostics?.length - autoDebugTelemetry.recordCommandInvocation('fixWithQ', problemCount) - - await this.executeWithErrorHandling( - async () => { - const editor = this.checkActiveEditor() - if (!editor) { - return - } - const saved = await editor.document.save() - if (!saved) { - throw new Error('Failed to save document') - } - await this.controller.fixSpecificProblems(range, diagnostics) - autoDebugTelemetry.recordCommandSuccess('fixWithQ', problemCount) - }, - 'Fix with Amazon Q', - 'fixWithAmazonQ' - ) - } - - /** - * Fix All with Amazon Q - processes all errors in the current file - */ - private async fixAllWithAmazonQ(): Promise { - autoDebugTelemetry.recordCommandInvocation('fixAllWithQ') - - await this.executeWithErrorHandling( - async () => { - const editor = this.checkActiveEditor() - if (!editor) { - return - } - const saved = await editor.document.save() - if (!saved) { - throw new Error('Failed to save document') - } - const problemCount = await this.controller.fixAllProblemsInFile(10) // 10 errors per batch - autoDebugTelemetry.recordCommandSuccess('fixAllWithQ', problemCount) - }, - 'Fix All with Amazon Q', - 'fixAllWithAmazonQ' - ) - } - - /** - * Explains the problem using Amazon Q - */ - private async explainProblem(range?: vscode.Range, diagnostics?: vscode.Diagnostic[]): Promise { - const problemCount = diagnostics?.length - autoDebugTelemetry.recordCommandInvocation('explainProblem', problemCount) - - await this.executeWithErrorHandling( - async () => { - const editor = this.checkActiveEditor() - if (!editor) { - return - } - await this.controller.explainProblems(range, diagnostics) - autoDebugTelemetry.recordCommandSuccess('explainProblem', problemCount) - }, - 'Explain Problem', - 'explainProblem' - ) - } - - /** - * Dispose of all resources - */ - dispose(): void { - vscode.Disposable.from(...this.disposables).dispose() - } -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/controller.ts b/packages/amazonq/src/lsp/chat/autoDebug/controller.ts deleted file mode 100644 index 66dcc83b21d..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/controller.ts +++ /dev/null @@ -1,206 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { getLogger, randomUUID, messages } from 'aws-core-vscode/shared' -import { AutoDebugLspClient } from './lsp/autoDebugLspClient' -import { mapDiagnosticSeverity } from './shared/diagnosticUtils' -import { ErrorContextFormatter } from './diagnostics/errorContext' -import { Problem } from './diagnostics/problemDetector' -export interface AutoDebugConfig { - readonly enabled: boolean - readonly excludedSources: string[] - readonly severityFilter: ('error' | 'warning' | 'info' | 'hint')[] -} - -/** - * Simplified controller for Amazon Q Auto Debug system. - * Focuses on context menu and quick fix functionality without workspace-wide monitoring. - */ -export class AutoDebugController implements vscode.Disposable { - private readonly logger = getLogger() - private readonly lspClient: AutoDebugLspClient - private readonly errorFormatter: ErrorContextFormatter - private readonly disposables: vscode.Disposable[] = [] - - private config: AutoDebugConfig - - constructor(config?: Partial) { - this.config = { - enabled: true, - excludedSources: [], // No default exclusions - let users configure as needed - severityFilter: ['error'], // Only auto-fix errors, not warnings - ...config, - } - - this.lspClient = new AutoDebugLspClient() - this.errorFormatter = new ErrorContextFormatter() - } - - /** - * Extract common logic for getting problems from diagnostics - */ - private async getProblemsFromDiagnostics( - range?: vscode.Range, - diagnostics?: vscode.Diagnostic[] - ): Promise<{ editor: vscode.TextEditor; problems: Problem[] } | undefined> { - const editor = vscode.window.activeTextEditor - if (!editor) { - throw new Error('No active editor found') - } - - // Use provided diagnostics or get diagnostics for the range - let targetDiagnostics = diagnostics - if (!targetDiagnostics && range) { - const allDiagnostics = vscode.languages.getDiagnostics(editor.document.uri) - targetDiagnostics = allDiagnostics.filter((d) => d.range.intersection(range) !== undefined) - } - - if (!targetDiagnostics || targetDiagnostics.length === 0) { - return undefined - } - - // Convert diagnostics to problems - const problems = targetDiagnostics.map((diagnostic) => ({ - uri: editor.document.uri, - diagnostic, - severity: mapDiagnosticSeverity(diagnostic.severity), - source: diagnostic.source || 'unknown', - isNew: false, - })) - - return { editor, problems } - } - - /** - * Filter diagnostics to only errors and apply source filtering - */ - private filterErrorDiagnostics(diagnostics: vscode.Diagnostic[]): vscode.Diagnostic[] { - return diagnostics.filter((d) => { - if (d.severity !== vscode.DiagnosticSeverity.Error) { - return false - } - // Apply source filtering - if (this.config.excludedSources.length > 0 && d.source) { - return !this.config.excludedSources.includes(d.source) - } - return true - }) - } - - /** - * Fix specific problems in the code - */ - async fixSpecificProblems(range?: vscode.Range, diagnostics?: vscode.Diagnostic[]): Promise { - try { - const result = await this.getProblemsFromDiagnostics(range, diagnostics) - if (!result) { - return - } - const fixMessage = this.createFixMessage(result.editor.document.uri.fsPath, result.problems) - await this.sendMessageToChat(fixMessage) - } catch (error) { - this.logger.error('AutoDebugController: Error fixing specific problems: %s', error) - throw error - } - } - - /** - * Fix with Amazon Q - sends up to 15 error messages one time when user clicks the button - */ - public async fixAllProblemsInFile(maxProblems: number = 15): Promise { - try { - const editor = vscode.window.activeTextEditor - if (!editor) { - void messages.showMessage('warn', 'No active editor found') - return 0 - } - - // Get all diagnostics for the current file - const allDiagnostics = vscode.languages.getDiagnostics(editor.document.uri) - const errorDiagnostics = this.filterErrorDiagnostics(allDiagnostics) - if (errorDiagnostics.length === 0) { - return 0 - } - - // Take up to maxProblems errors (15 by default) - const diagnosticsToFix = errorDiagnostics.slice(0, maxProblems) - const result = await this.getProblemsFromDiagnostics(undefined, diagnosticsToFix) - if (!result) { - return 0 - } - - const fixMessage = this.createFixMessage(result.editor.document.uri.fsPath, result.problems) - await this.sendMessageToChat(fixMessage) - return result.problems.length - } catch (error) { - this.logger.error('AutoDebugController: Error in fix process: %s', error) - throw error - } - } - - /** - * Explain problems using Amazon Q - */ - async explainProblems(range?: vscode.Range, diagnostics?: vscode.Diagnostic[]): Promise { - try { - const result = await this.getProblemsFromDiagnostics(range, diagnostics) - if (!result) { - return - } - const explainMessage = this.createExplainMessage(result.editor.document.uri.fsPath, result.problems) - await this.sendMessageToChat(explainMessage) - } catch (error) { - this.logger.error('AutoDebugController: Error explaining problems: %s', error) - throw error - } - } - - private createFixMessage(filePath: string, problems: Problem[]): string { - const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath || '' - const formattedProblems = this.errorFormatter.formatProblemsString(problems, workspaceRoot) - - return `Please help me fix the following errors in ${filePath}:${formattedProblems}` - } - - private createExplainMessage(filePath: string, problems: Problem[]): string { - const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath || '' - const formattedProblems = this.errorFormatter.formatProblemsString(problems, workspaceRoot) - - return `Please explain the following problems in ${filePath}. DO NOT edit files. ONLY provide explanation:${formattedProblems}` - } - - /** - * Sends message directly to language server bypassing webview connectors - * This ensures messages go through the proper LSP chat system - */ - private async sendMessageToChat(message: string): Promise { - const triggerID = randomUUID() - try { - const success = await this.lspClient.sendChatMessage({ - message: message, - triggerType: 'autoDebug', - eventId: triggerID, - }) - - if (success) { - this.logger.debug('AutoDebugController: Chat message sent successfully through LSP client') - } else { - this.logger.error('AutoDebugController: Failed to send chat message through LSP client') - throw new Error('Failed to send message through LSP client') - } - } catch (error) { - this.logger.error( - 'AutoDebugController: Error sending message through LSP client with triggerID %s: %s', - triggerID, - error - ) - } - } - - public dispose(): void { - vscode.Disposable.from(...this.disposables).dispose() - } -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/diagnosticsMonitor.ts b/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/diagnosticsMonitor.ts deleted file mode 100644 index 8f4000bf217..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/diagnosticsMonitor.ts +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' - -export interface DiagnosticCollection { - readonly diagnostics: [vscode.Uri, vscode.Diagnostic[]][] - readonly timestamp: number -} - -export interface DiagnosticSnapshot { - readonly diagnostics: DiagnosticCollection - readonly captureTime: number - readonly id: string -} - -export interface FileDiagnostics { - readonly uri: vscode.Uri - readonly diagnostics: vscode.Diagnostic[] -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/errorContext.ts b/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/errorContext.ts deleted file mode 100644 index dee7bc0565a..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/errorContext.ts +++ /dev/null @@ -1,75 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import * as path from 'path' -import { Problem } from './problemDetector' - -export interface ErrorContext { - readonly source: string - readonly severity: 'error' | 'warning' | 'info' | 'hint' - readonly location: { - readonly file: string - readonly line: number - readonly column: number - readonly range?: vscode.Range - } - readonly message: string - readonly code?: string | number - readonly relatedInformation?: vscode.DiagnosticRelatedInformation[] - readonly suggestedFixes?: vscode.CodeAction[] - readonly surroundingCode?: string -} - -export interface FormattedErrorReport { - readonly summary: string - readonly details: string - readonly contextualCode: string - readonly suggestions: string -} - -/** - * Formats diagnostic errors into contextual information for AI debugging assistance. - */ -export class ErrorContextFormatter { - /** - * Creates a problems string with Markdown formatting for better readability - */ - public formatProblemsString(problems: Problem[], cwd: string): string { - let result = '' - const fileGroups = this.groupProblemsByFile(problems) - - for (const [filePath, fileProblems] of fileGroups.entries()) { - if (fileProblems.length > 0) { - result += `\n\n**${path.relative(cwd, filePath)}**\n\n` - - // Group problems into a code block for better formatting - result += '```\n' - for (const problem of fileProblems) { - const line = problem.diagnostic.range.start.line + 1 - const source = problem.source ? `${problem.source}` : 'Unknown' - result += `[${source}] Line ${line}: ${problem.diagnostic.message}\n` - } - result += '```' - } - } - - return result.trim() - } - - private groupProblemsByFile(problems: Problem[]): Map { - const groups = new Map() - - for (const problem of problems) { - const filePath = problem.uri.fsPath - if (!groups.has(filePath)) { - groups.set(filePath, []) - } - groups.get(filePath)!.push(problem) - } - - return groups - } -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/problemDetector.ts b/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/problemDetector.ts deleted file mode 100644 index 44d00b55ca1..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/diagnostics/problemDetector.ts +++ /dev/null @@ -1,21 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' - -export interface Problem { - readonly uri: vscode.Uri - readonly diagnostic: vscode.Diagnostic - readonly severity: 'error' | 'warning' | 'info' | 'hint' - readonly source: string - readonly isNew: boolean -} - -export interface CategorizedProblems { - readonly errors: Problem[] - readonly warnings: Problem[] - readonly info: Problem[] - readonly hints: Problem[] -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/index.ts b/packages/amazonq/src/lsp/chat/autoDebug/index.ts deleted file mode 100644 index 4819835066b..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * Auto Debug feature for Amazon Q - * - * This module provides auto debug functionality including: - * - Command registration for fixing problems with Amazon Q - * - Code actions provider for quick fixes - * - Integration with VSCode's diagnostic system - */ - -export { AutoDebugFeature, activateAutoDebug } from './activation' -export { AutoDebugCommands } from './commands' -export { AutoDebugCodeActionsProvider } from './codeActionsProvider' -export { AutoDebugController } from './controller' diff --git a/packages/amazonq/src/lsp/chat/autoDebug/lsp/autoDebugLspClient.ts b/packages/amazonq/src/lsp/chat/autoDebug/lsp/autoDebugLspClient.ts deleted file mode 100644 index 2d2d0ca3664..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/lsp/autoDebugLspClient.ts +++ /dev/null @@ -1,75 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import { getLogger, placeholder } from 'aws-core-vscode/shared' -import { focusAmazonQPanel } from 'aws-core-vscode/codewhispererChat' - -export class AutoDebugLspClient { - private readonly logger = getLogger() - private static chatViewProvider: any // AmazonQChatViewProvider instance - - /** - * Sets the chat view provider instance - */ - public static setChatViewProvider(provider: any): void { - AutoDebugLspClient.chatViewProvider = provider - } - - public async sendChatMessage(params: { message: string; triggerType: string; eventId: string }): Promise { - try { - // Ensure the chat view provider and webview are available - await this.ensureWebviewReady() - - // Get the webview provider from the static reference - const amazonQChatViewProvider = AutoDebugLspClient.chatViewProvider - - if (!amazonQChatViewProvider?.webview) { - this.logger.error( - 'AutoDebugLspClient: Amazon Q Chat View Provider webview not available after initialization' - ) - return false - } - - // Focus Amazon Q panel first using the imported function - await focusAmazonQPanel.execute(placeholder, 'autoDebug') - - // Wait for panel to focus - await new Promise((resolve) => setTimeout(resolve, 200)) - await amazonQChatViewProvider.webview.postMessage({ - command: 'sendToPrompt', - params: { - selection: '', - triggerType: 'autoDebug', - prompt: { - prompt: params.message, // what gets sent to the user - escapedPrompt: params.message, // what gets sent to the backend - }, - autoSubmit: true, // Automatically submit the message - }, - }) - return true - } catch (error) { - this.logger.error('AutoDebugLspClient: Error sending message via webview: %s', error) - return false - } - } - - /** - * Ensures that the chat view provider and its webview are ready for use - */ - private async ensureWebviewReady(): Promise { - if (!AutoDebugLspClient.chatViewProvider) { - await focusAmazonQPanel.execute(placeholder, 'autoDebug') - // wait 1 second for focusAmazonQPanel to finish - await new Promise((resolve) => setTimeout(resolve, 500)) - } - - // Now ensure the webview is created - if (!AutoDebugLspClient.chatViewProvider.webview) { - await focusAmazonQPanel.execute(placeholder, 'autoDebug') - // wait 1 second for webview to be created - await new Promise((resolve) => setTimeout(resolve, 500)) - } - } -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/shared/diagnosticUtils.ts b/packages/amazonq/src/lsp/chat/autoDebug/shared/diagnosticUtils.ts deleted file mode 100644 index bf466168347..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/shared/diagnosticUtils.ts +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import { toIdeDiagnostics } from 'aws-core-vscode/codewhisperer' - -/** - * Maps VSCode DiagnosticSeverity to string representation - * Reuses the existing toIdeDiagnostics logic but returns lowercase format expected by Problem interface - */ -export function mapDiagnosticSeverity(severity: vscode.DiagnosticSeverity): 'error' | 'warning' | 'info' | 'hint' { - // Create a minimal diagnostic to use with toIdeDiagnostics - const tempDiagnostic: vscode.Diagnostic = { - range: new vscode.Range(0, 0, 0, 0), - message: '', - severity: severity, - } - - const ideDiagnostic = toIdeDiagnostics(tempDiagnostic) - // Convert uppercase severity to lowercase format expected by Problem interface - switch (ideDiagnostic.severity) { - case 'ERROR': - return 'error' - case 'WARNING': - return 'warning' - case 'INFORMATION': - return 'info' - case 'HINT': - return 'hint' - default: - return 'error' - } -} diff --git a/packages/amazonq/src/lsp/chat/autoDebug/telemetry.ts b/packages/amazonq/src/lsp/chat/autoDebug/telemetry.ts deleted file mode 100644 index dec3f424c5a..00000000000 --- a/packages/amazonq/src/lsp/chat/autoDebug/telemetry.ts +++ /dev/null @@ -1,71 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { telemetry } from 'aws-core-vscode/telemetry' - -/** - * Auto Debug command types for telemetry tracking - */ -export type AutoDebugCommandType = 'fixWithQ' | 'fixAllWithQ' | 'explainProblem' - -/** - * Telemetry interface for Auto Debug feature - * Tracks usage counts and success rates for the three main commands - */ -export interface AutoDebugTelemetry { - /** - * Record when an auto debug command is invoked - */ - recordCommandInvocation(commandType: AutoDebugCommandType, problemCount?: number): void - - /** - * Record when an auto debug command succeeds - */ - recordCommandSuccess(commandType: AutoDebugCommandType, problemCount?: number): void - - /** - * Record when an auto debug command fails - */ - recordCommandFailure(commandType: AutoDebugCommandType, error?: string, problemCount?: number): void -} - -/** - * Implementation of Auto Debug telemetry tracking - */ -export class AutoDebugTelemetryImpl implements AutoDebugTelemetry { - recordCommandInvocation(commandType: AutoDebugCommandType, problemCount?: number): void { - telemetry.amazonq_autoDebugCommand.emit({ - amazonqAutoDebugCommandType: commandType, - amazonqAutoDebugAction: 'invoked', - amazonqAutoDebugProblemCount: problemCount, - result: 'Succeeded', - }) - } - - recordCommandSuccess(commandType: AutoDebugCommandType, problemCount?: number): void { - telemetry.amazonq_autoDebugCommand.emit({ - amazonqAutoDebugCommandType: commandType, - amazonqAutoDebugAction: 'completed', - amazonqAutoDebugProblemCount: problemCount, - result: 'Succeeded', - }) - } - - recordCommandFailure(commandType: AutoDebugCommandType, error?: string, problemCount?: number): void { - telemetry.amazonq_autoDebugCommand.emit({ - amazonqAutoDebugCommandType: commandType, - amazonqAutoDebugAction: 'completed', - amazonqAutoDebugProblemCount: problemCount, - result: 'Failed', - reason: error ? 'Error' : 'Unknown', - reasonDesc: error?.substring(0, 200), // Truncate to 200 chars as recommended - }) - } -} - -/** - * Global instance of auto debug telemetry - */ -export const autoDebugTelemetry: AutoDebugTelemetry = new AutoDebugTelemetryImpl() diff --git a/packages/amazonq/src/lsp/chat/commands.ts b/packages/amazonq/src/lsp/chat/commands.ts deleted file mode 100644 index 6e4f928f5f1..00000000000 --- a/packages/amazonq/src/lsp/chat/commands.ts +++ /dev/null @@ -1,186 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { Commands, globals } from 'aws-core-vscode/shared' -import { window } from 'vscode' -import { AmazonQChatViewProvider } from './webviewProvider' -import { CodeScanIssue, AuthUtil } from 'aws-core-vscode/codewhisperer' -import { getLogger } from 'aws-core-vscode/shared' -import * as vscode from 'vscode' -import * as path from 'path' -import { telemetry, AmazonqCodeReviewTool } from 'aws-core-vscode/telemetry' - -/** - * TODO: Re-enable these once we can figure out which path they're going to live in - * In hybrid chat mode they were being registered twice causing a registration error - */ -export function registerCommands(provider: AmazonQChatViewProvider) { - globals.context.subscriptions.push( - registerGenericCommand('aws.amazonq.explainCode', 'Explain', provider), - registerGenericCommand('aws.amazonq.refactorCode', 'Refactor', provider), - registerGenericCommand('aws.amazonq.fixCode', 'Fix', provider), - registerGenericCommand('aws.amazonq.optimizeCode', 'Optimize', provider), - registerGenericCommand('aws.amazonq.generateUnitTests', 'Generate Tests', provider), - - Commands.register('aws.amazonq.explainIssue', (issue: CodeScanIssue, filePath: string) => - handleIssueCommand( - issue, - filePath, - 'Explain', - 'Provide a small description of the issue. You must not attempt to fix the issue. You should only give a small summary of it to the user. You must start with the information stored in the recommendation.text field if it is present.', - provider, - 'explainIssue' - ) - ), - Commands.register('aws.amazonq.generateFix', (issue: CodeScanIssue, filePath: string) => - handleIssueCommand( - issue, - filePath, - 'Fix', - 'Generate a fix for the following code issue. You must not explain the issue, just generate and explain the fix. The user should have the option to accept or reject the fix before any code is changed.', - provider, - 'applyFix' - ) - ), - Commands.register('aws.amazonq.sendToPrompt', (data) => { - const triggerType = getCommandTriggerType(data) - const selection = getSelectedText() - - void focusAmazonQPanel().then(() => { - void provider.webview?.postMessage({ - command: 'sendToPrompt', - params: { selection: selection, triggerType }, - }) - }) - }), - Commands.register('aws.amazonq.openTab', () => { - void focusAmazonQPanel().then(() => { - void provider.webview?.postMessage({ - command: 'aws/chat/openTab', - params: {}, - }) - }) - }), - registerShellCommandShortCut('aws.amazonq.runCmdExecution', 'run-shell-command', provider), - registerShellCommandShortCut('aws.amazonq.rejectCmdExecution', 'reject-shell-command', provider), - registerShellCommandShortCut('aws.amazonq.stopCmdExecution', 'stop-shell-command', provider) - ) -} - -async function handleIssueCommand( - issue: CodeScanIssue, - filePath: string, - action: string, - contextPrompt: string, - provider: AmazonQChatViewProvider, - metricName: string -) { - await focusAmazonQPanel() - - if (issue && filePath) { - await openFileWithSelection(issue, filePath) - } - - const lineRange = createLineRangeText(issue) - const visibleMessageInChat = `_${action} **${issue.title}** issue in **${path.basename(filePath)}** at \`${lineRange}\`_` - const contextMessage = `${contextPrompt} Code issue - ${JSON.stringify(issue)}` - - void provider.webview?.postMessage({ - command: 'sendToPrompt', - params: { - selection: '', - triggerType: 'contextMenu', - prompt: { - prompt: visibleMessageInChat, - escapedPrompt: contextMessage, - }, - autoSubmit: true, - }, - }) - - telemetry.amazonq_codeReviewTool.emit({ - findingId: issue.findingId, - detectorId: issue.detectorId, - ruleId: issue.ruleId, - credentialStartUrl: AuthUtil.instance.startUrl, - autoDetected: issue.autoDetected, - result: 'Succeeded', - reason: metricName, - } as AmazonqCodeReviewTool) -} - -async function openFileWithSelection(issue: CodeScanIssue, filePath: string) { - try { - const range = new vscode.Range(issue.startLine, 0, issue.endLine, 0) - const doc = await vscode.workspace.openTextDocument(filePath) - await vscode.window.showTextDocument(doc, { - selection: range, - viewColumn: vscode.ViewColumn.One, - preview: true, - }) - } catch (e) { - getLogger().error('openFileWithSelection: Failed to open file %s with selection: %O', filePath, e) - void vscode.window.showInformationMessage('Failed to display file with issue.') - } -} - -function createLineRangeText(issue: CodeScanIssue): string { - return issue.startLine === issue.endLine - 1 - ? `[${issue.startLine + 1}]` - : `[${issue.startLine + 1}, ${issue.endLine}]` -} - -function getSelectedText(): string { - const editor = window.activeTextEditor - if (editor) { - const selection = editor.selection - const selectedText = editor.document.getText(selection) - return selectedText - } - - return ' ' -} - -function getCommandTriggerType(data: any): string { - // data is undefined when commands triggered from keybinding or command palette. Currently no - // way to differentiate keybinding and command palette, so both interactions are recorded as keybinding - return data === undefined ? 'hotkeys' : 'contextMenu' -} - -function registerGenericCommand(commandName: string, genericCommand: string, provider: AmazonQChatViewProvider) { - return Commands.register(commandName, (data) => { - const triggerType = getCommandTriggerType(data) - const selection = getSelectedText() - - void focusAmazonQPanel().then(() => { - void provider.webview?.postMessage({ - command: 'genericCommand', - params: { genericCommand, selection, triggerType }, - }) - }) - }) -} - -/** - * Importing focusAmazonQPanel from aws-core-vscode/amazonq leads to several dependencies down the chain not resolving since AmazonQ chat - * is currently only activated on node, but the language server is activated on both web and node. - * - * Instead, we just create our own as a temporary solution - */ -export async function focusAmazonQPanel() { - await Commands.tryExecute('aws.amazonq.AmazonQChatView.focus') - await Commands.tryExecute('aws.amazonq.AmazonCommonAuth.focus') -} - -function registerShellCommandShortCut(commandName: string, buttonId: string, provider: AmazonQChatViewProvider) { - return Commands.register(commandName, async () => { - void focusAmazonQPanel().then(() => { - void provider.webview?.postMessage({ - command: 'aws/chat/executeShellCommandShortCut', - params: { id: buttonId }, - }) - }) - }) -} diff --git a/packages/amazonq/src/lsp/chat/error.ts b/packages/amazonq/src/lsp/chat/error.ts deleted file mode 100644 index fc2e0211b0f..00000000000 --- a/packages/amazonq/src/lsp/chat/error.ts +++ /dev/null @@ -1,23 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import { ChatResult } from '@aws/language-server-runtimes/protocol' -import { ResponseError } from '@aws/language-server-runtimes/protocol' -/** - * Perform a sanity check that the error we got from the LSP can be safely cast to the expected type. - * @param error - * @returns - */ -export function isValidResponseError(error: unknown): error is ResponseError & { data: ChatResult } { - return ( - typeof error === 'object' && - error !== null && - 'code' in error && - typeof error.code === 'number' && - 'message' in error && - typeof error.message === 'string' && - 'data' in error && - error.data !== undefined - ) -} diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts deleted file mode 100644 index 1541e60b9c5..00000000000 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ /dev/null @@ -1,856 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - isValidAuthFollowUpType, - INSERT_TO_CURSOR_POSITION, - AUTH_FOLLOW_UP_CLICKED, - CHAT_OPTIONS, - COPY_TO_CLIPBOARD, - AuthFollowUpType, - DISCLAIMER_ACKNOWLEDGED, - UiMessageResultParams, - CHAT_PROMPT_OPTION_ACKNOWLEDGED, - ChatPromptOptionAcknowledgedMessage, - STOP_CHAT_RESPONSE, - StopChatResponseMessage, - OPEN_FILE_DIALOG, -} from '@aws/chat-client-ui-types' -import { - ChatResult, - chatRequestType, - ChatParams, - followUpClickNotificationType, - quickActionRequestType, - QuickActionResult, - QuickActionParams, - insertToCursorPositionNotificationType, - ErrorCodes, - ResponseError, - openTabRequestType, - getSerializedChatRequestType, - listConversationsRequestType, - conversationClickRequestType, - listMcpServersRequestType, - mcpServerClickRequestType, - ShowSaveFileDialogRequestType, - ShowSaveFileDialogParams, - LSPErrorCodes, - tabBarActionRequestType, - ShowDocumentParams, - ShowDocumentResult, - ShowDocumentRequest, - contextCommandsNotificationType, - ContextCommandParams, - openFileDiffNotificationType, - OpenFileDiffParams, - LINK_CLICK_NOTIFICATION_METHOD, - LinkClickParams, - INFO_LINK_CLICK_NOTIFICATION_METHOD, - READY_NOTIFICATION_METHOD, - buttonClickRequestType, - ButtonClickResult, - CancellationTokenSource, - chatUpdateNotificationType, - ChatUpdateParams, - chatOptionsUpdateType, - ChatOptionsUpdateParams, - listRulesRequestType, - ruleClickRequestType, - pinnedContextNotificationType, - activeEditorChangedNotificationType, - listAvailableModelsRequestType, - ShowOpenDialogRequestType, - ShowOpenDialogParams, - openFileDialogRequestType, - OpenFileDialogResult, -} from '@aws/language-server-runtimes/protocol' -import { v4 as uuidv4 } from 'uuid' -import * as vscode from 'vscode' -import * as path from 'path' -import { Disposable, BaseLanguageClient, Position, TextDocumentIdentifier } from 'vscode-languageclient' -import { AmazonQChatViewProvider } from './webviewProvider' -import { - AggregatedCodeScanIssue, - AuthUtil, - CodeAnalysisScope, - CodeWhispererSettings, - initSecurityScanRender, - ReferenceLogViewProvider, - SecurityIssueTreeViewProvider, - CodeWhispererConstants, -} from 'aws-core-vscode/codewhisperer' -import { AmazonQPromptSettings, messages, openUrl, isTextEditor, globals, setContext } from 'aws-core-vscode/shared' -import { DefaultAmazonQAppInitContext, messageDispatcher, referenceLogText } from 'aws-core-vscode/amazonq' -import { telemetry } from 'aws-core-vscode/telemetry' -import { isValidResponseError } from './error' -import { decryptResponse, encryptRequest } from '../encryption' -import { getCursorState } from '../utils' -import { focusAmazonQPanel } from './commands' -import { ChatMessage } from '@aws/language-server-runtimes/server-interface' -import { CommentUtils } from 'aws-core-vscode/utils' - -export function registerActiveEditorChangeListener(languageClient: BaseLanguageClient) { - let debounceTimer: NodeJS.Timeout | undefined - vscode.window.onDidChangeActiveTextEditor((editor) => { - if (debounceTimer) { - clearTimeout(debounceTimer) - } - debounceTimer = setTimeout(() => { - let textDocument = undefined - let cursorState = undefined - if (editor) { - textDocument = { - uri: editor.document.uri.toString(), - } - cursorState = getCursorState(editor.selections) - } - void languageClient.sendNotification(activeEditorChangedNotificationType.method, { - textDocument, - cursorState, - }) - }, 100) - }) -} - -export function registerLanguageServerEventListener( - languageClient: BaseLanguageClient, - provider: AmazonQChatViewProvider -) { - languageClient.info( - 'Language client received initializeResult from server:', - JSON.stringify(languageClient.initializeResult) - ) - - const chatOptions = languageClient.initializeResult?.awsServerCapabilities?.chatOptions - - // overide the quick action commands provided by flare server initialization, which doesn't provide the group header - if (chatOptions?.quickActions?.quickActionsCommandGroups?.[0]) { - chatOptions.quickActions.quickActionsCommandGroups[0].groupName = 'Quick Actions' - } - - // This passes through metric data from LSP events to Toolkit telemetry with all fields from the LSP server - languageClient.onTelemetry((e: any) => { - const telemetryName: string = e.name - languageClient.info(`[VSCode Telemetry] Emitting ${telemetryName} telemetry: ${JSON.stringify(e.data)}`) - try { - // Flare is now the source of truth for metrics instead of depending on each IDE client and toolkit-common - const metric = (telemetry as any).getMetric(telemetryName) - metric?.emit(e.data) - } catch (error) { - languageClient.warn(`[VSCode Telemetry] Failed to emit ${telemetryName}: ${error}`) - } - }) -} - -export function registerMessageListeners( - languageClient: BaseLanguageClient, - provider: AmazonQChatViewProvider, - encryptionKey: Buffer -) { - const chatStreamTokens = new Map() // tab id -> token - - // Keep track of pending chat options to send when webview UI is ready - const pendingChatOptions = languageClient.initializeResult?.awsServerCapabilities?.chatOptions - - provider.webview?.onDidReceiveMessage(async (message) => { - languageClient.info(`[VSCode Client] Received ${JSON.stringify(message)} from chat`) - - if ((message.tabType && message.tabType !== 'cwc') || messageDispatcher.isLegacyEvent(message.command)) { - // handle the mynah ui -> agent legacy flow - messageDispatcher.handleWebviewEvent( - message, - DefaultAmazonQAppInitContext.instance.getWebViewToAppsMessagePublishers() - ) - return - } - - const webview = provider.webview - - switch (message.command) { - // Handle "aws/chat/ready" event - case READY_NOTIFICATION_METHOD: - languageClient.info(`[VSCode Client] "aws/chat/ready" event is received, sending chat options`) - if (webview && pendingChatOptions) { - try { - await webview.postMessage({ - command: CHAT_OPTIONS, - params: pendingChatOptions, - }) - - // Display a more readable representation of quick actions - const quickActionCommands = - pendingChatOptions?.quickActions?.quickActionsCommandGroups?.[0]?.commands || [] - const quickActionsDisplay = quickActionCommands.map((cmd: any) => cmd.command).join(', ') - languageClient.info( - `[VSCode Client] Chat options flags: mcpServers=${pendingChatOptions?.mcpServers}, history=${pendingChatOptions?.history}, export=${pendingChatOptions?.export}, quickActions=[${quickActionsDisplay}]` - ) - void languageClient.sendNotification(message.command, message.params) - } catch (err) { - languageClient.error( - `[VSCode Client] Failed to send CHAT_OPTIONS after "aws/chat/ready" event: ${(err as Error).message}` - ) - } - } - break - case COPY_TO_CLIPBOARD: - languageClient.info('[VSCode Client] Copy to clipboard event received') - try { - await messages.copyToClipboard(message.params.code) - } catch (e: unknown) { - languageClient.error(`[VSCode Client] Failed to copy to clipboard: ${(e as Error).message}`) - } - break - case INSERT_TO_CURSOR_POSITION: { - const editor = vscode.window.activeTextEditor - let textDocument: TextDocumentIdentifier | undefined = undefined - let cursorPosition: Position | undefined = undefined - if (editor) { - cursorPosition = editor.selection.active - textDocument = { uri: editor.document.uri.toString() } - } - - void languageClient.sendNotification(insertToCursorPositionNotificationType.method, { - ...message.params, - cursorPosition, - textDocument, - }) - break - } - case AUTH_FOLLOW_UP_CLICKED: { - languageClient.info('[VSCode Client] AuthFollowUp clicked') - const authType = message.params.authFollowupType - const reAuthTypes: AuthFollowUpType[] = ['re-auth', 'missing_scopes'] - const fullAuthTypes: AuthFollowUpType[] = ['full-auth', 'use-supported-auth'] - - if (reAuthTypes.includes(authType)) { - try { - await AuthUtil.instance.reauthenticate() - } catch (e) { - languageClient.error( - `[VSCode Client] Failed to re-authenticate after AUTH_FOLLOW_UP_CLICKED: ${(e as Error).message}` - ) - } - } - - if (fullAuthTypes.includes(authType)) { - try { - await AuthUtil.instance.secondaryAuth.deleteConnection() - } catch (e) { - languageClient.error( - `[VSCode Client] Failed to authenticate after AUTH_FOLLOW_UP_CLICKED: ${(e as Error).message}` - ) - } - } - break - } - case DISCLAIMER_ACKNOWLEDGED: { - void AmazonQPromptSettings.instance.update('amazonQChatDisclaimer', true) - break - } - case CHAT_PROMPT_OPTION_ACKNOWLEDGED: { - const acknowledgedMessage = message as ChatPromptOptionAcknowledgedMessage - switch (acknowledgedMessage.params.messageId) { - case 'programmerModeCardId': { - void AmazonQPromptSettings.instance.disablePrompt('amazonQChatPairProgramming') - } - } - break - } - case INFO_LINK_CLICK_NOTIFICATION_METHOD: - case LINK_CLICK_NOTIFICATION_METHOD: { - const linkParams = message.params as LinkClickParams - void openUrl(vscode.Uri.parse(linkParams.link)) - break - } - case STOP_CHAT_RESPONSE: { - const tabId = (message as StopChatResponseMessage).params.tabId - const token = chatStreamTokens.get(tabId) - token?.cancel() - token?.dispose() - chatStreamTokens.delete(tabId) - break - } - case chatRequestType.method: { - const chatParams: ChatParams = { ...message.params } - const partialResultToken = uuidv4() - let lastPartialResult: ChatResult | undefined - const cancellationToken = new CancellationTokenSource() - chatStreamTokens.set(chatParams.tabId, cancellationToken) - - const chatDisposable = languageClient.onProgress( - chatRequestType, - partialResultToken, - (partialResult: any) => - handlePartialResult(partialResult, encryptionKey, provider, chatParams.tabId).then( - (result) => { - lastPartialResult = result - } - ) - ) - - const editor = - vscode.window.activeTextEditor || - vscode.window.visibleTextEditors.find((editor) => editor.document.languageId !== 'Log') - if (editor) { - chatParams.cursorState = getCursorState(editor.selections) - chatParams.textDocument = { uri: editor.document.uri.toString() } - } - - const chatRequest = await encryptRequest(chatParams, encryptionKey) - - // Add detailed logging for SageMaker debugging - if (process.env.USE_IAM_AUTH === 'true') { - languageClient.info(`[SageMaker Debug] Making chat request with IAM auth`) - languageClient.info(`[SageMaker Debug] Chat request method: ${chatRequestType.method}`) - languageClient.info( - `[SageMaker Debug] Original chat params: ${JSON.stringify( - { - tabId: chatParams.tabId, - prompt: chatParams.prompt, - // Don't log full textDocument content, just metadata - textDocument: chatParams.textDocument - ? { uri: chatParams.textDocument.uri } - : undefined, - context: chatParams.context ? `${chatParams.context.length} context items` : undefined, - }, - undefined, - 2 - )}` - ) - languageClient.info( - `[SageMaker Debug] Environment context: USE_IAM_AUTH=${process.env.USE_IAM_AUTH}, AWS_REGION=${process.env.AWS_REGION}` - ) - } - - try { - const chatResult = await languageClient.sendRequest( - chatRequestType.method, - { - ...chatRequest, - partialResultToken, - }, - cancellationToken.token - ) - - // Add response content logging for SageMaker debugging - if (process.env.USE_IAM_AUTH === 'true') { - languageClient.info(`[SageMaker Debug] Chat response received - type: ${typeof chatResult}`) - if (typeof chatResult === 'string') { - languageClient.info( - `[SageMaker Debug] Chat response (string): ${chatResult.substring(0, 200)}...` - ) - } else if (chatResult && typeof chatResult === 'object') { - languageClient.info( - `[SageMaker Debug] Chat response (object keys): ${Object.keys(chatResult)}` - ) - if ('message' in chatResult) { - languageClient.info( - `[SageMaker Debug] Chat response message: ${JSON.stringify(chatResult.message).substring(0, 200)}...` - ) - } - } - } - - await handleCompleteResult( - chatResult, - encryptionKey, - provider, - chatParams.tabId, - chatDisposable, - languageClient - ) - } catch (e) { - const errorMsg = `Error occurred during chat request: ${e}` - languageClient.info(errorMsg) - languageClient.info( - `Last result from langauge server: ${JSON.stringify(lastPartialResult, undefined, 2)}` - ) - if (!isValidResponseError(e)) { - throw e - } - await handleCompleteResult( - e.data, - encryptionKey, - provider, - chatParams.tabId, - chatDisposable, - languageClient - ) - } finally { - chatStreamTokens.delete(chatParams.tabId) - } - break - } - case OPEN_FILE_DIALOG: { - // openFileDialog is the event emitted from webView to open - // file system - const result = await languageClient.sendRequest( - openFileDialogRequestType.method, - message.params - ) - void provider.webview?.postMessage({ - command: openFileDialogRequestType.method, - params: result, - }) - break - } - case quickActionRequestType.method: { - const quickActionPartialResultToken = uuidv4() - const quickActionDisposable = languageClient.onProgress( - quickActionRequestType, - quickActionPartialResultToken, - (partialResult: any) => - handlePartialResult( - partialResult, - encryptionKey, - provider, - message.params.tabId - ) - ) - - const quickActionRequest = await encryptRequest(message.params, encryptionKey) - const quickActionResult = (await languageClient.sendRequest(quickActionRequestType.method, { - ...quickActionRequest, - partialResultToken: quickActionPartialResultToken, - })) as string | ChatResult - void handleCompleteResult( - quickActionResult, - encryptionKey, - provider, - message.params.tabId, - quickActionDisposable, - languageClient - ) - break - } - case listRulesRequestType.method: - case ruleClickRequestType.method: - case listConversationsRequestType.method: - case conversationClickRequestType.method: - case listMcpServersRequestType.method: - case mcpServerClickRequestType.method: - case tabBarActionRequestType.method: - // handling for show_logs button - if (message.params.action === 'show_logs') { - languageClient.info('[VSCode Client] Received show_logs action, showing disclaimer') - - // Show warning message without buttons - just informational - void vscode.window.showWarningMessage( - 'Log files may contain sensitive information such as account IDs, resource names, and other data. Be careful when sharing these logs.' - ) - - // Get the log directory path - const logFolderPath = globals.context.logUri?.fsPath - const result = { ...message.params, success: false } - - if (logFolderPath) { - // Open the log directory in the OS file explorer directly - languageClient.info('[VSCode Client] Opening logs directory') - const path = require('path') - const logFilePath = path.join(logFolderPath, 'Amazon Q Logs.log') - await vscode.commands.executeCommand('revealFileInOS', vscode.Uri.file(logFilePath)) - result.success = true - } else { - // Fallback: show error if log path is not available - void vscode.window.showErrorMessage('Log location not available.') - languageClient.error('[VSCode Client] Log location not available') - } - - void webview?.postMessage({ - command: message.command, - params: result, - }) - - break - } - // eslint-disable-next-line no-fallthrough - case listAvailableModelsRequestType.method: - await resolveChatResponse(message.command, message.params, languageClient, webview) - break - case followUpClickNotificationType.method: - if (!isValidAuthFollowUpType(message.params.followUp.type)) { - void languageClient.sendNotification(followUpClickNotificationType.method, message.params) - } - break - case buttonClickRequestType.method: { - const buttonResult = await languageClient.sendRequest( - buttonClickRequestType.method, - message.params - ) - if (!buttonResult.success) { - languageClient.error( - `[VSCode Client] Failed to execute button action: ${buttonResult.failureReason}` - ) - } - break - } - default: - if (isServerEvent(message.command)) { - if (enterFocus(message.params)) { - await setContext('aws.amazonq.amazonqChatLSP.isFocus', true) - } else if (exitFocus(message.params)) { - await setContext('aws.amazonq.amazonqChatLSP.isFocus', false) - } - void languageClient.sendNotification(message.command, message.params) - } - break - } - }, undefined) - - const registerHandlerWithResponseRouter = (command: string) => { - const handler = async (params: any, _: any) => { - const mapErrorType = (type: string | undefined): number => { - switch (type) { - case 'InvalidRequest': - return ErrorCodes.InvalidRequest - case 'InternalError': - return ErrorCodes.InternalError - case 'UnknownError': - default: - return ErrorCodes.UnknownErrorCode - } - } - const requestId = uuidv4() - - void provider.webview?.postMessage({ - requestId: requestId, - command: command, - params: params, - }) - const responsePromise = new Promise((resolve, reject) => { - const timeout = setTimeout(() => { - disposable?.dispose() - reject(new Error('Request timed out')) - }, 30000) - - const disposable = provider.webview?.onDidReceiveMessage((message: any) => { - if (message.requestId === requestId) { - clearTimeout(timeout) - disposable?.dispose() - resolve(message.params) - } - }) - }) - - const result = await responsePromise - - if (result?.success) { - return result.result - } else { - return new ResponseError( - mapErrorType(result?.error.type), - result?.error.message ?? 'No response from client' - ) - } - } - - languageClient.onRequest(command, handler) - } - - registerHandlerWithResponseRouter(openTabRequestType.method) - registerHandlerWithResponseRouter(getSerializedChatRequestType.method) - - languageClient.onRequest(ShowSaveFileDialogRequestType.method, async (params: ShowSaveFileDialogParams) => { - const filters: Record = {} - const formatMappings = [ - { format: 'markdown', key: 'Markdown', extensions: ['md'] }, - { format: 'html', key: 'HTML', extensions: ['html'] }, - ] - - for (const format of params.supportedFormats ?? []) { - const mapping = formatMappings.find((m) => m.format === format) - if (mapping) { - filters[mapping.key] = mapping.extensions - } - } - - const saveAtUri = params.defaultUri ? vscode.Uri.parse(params.defaultUri) : vscode.Uri.file('export-chat.md') - const targetUri = await vscode.window.showSaveDialog({ - filters, - defaultUri: saveAtUri, - title: 'Export', - }) - - if (!targetUri) { - return new ResponseError(LSPErrorCodes.RequestFailed, 'Export failed') - } - - return { - targetUri: targetUri.toString(), - } - }) - - languageClient.onRequest(ShowOpenDialogRequestType.method, async (params: ShowOpenDialogParams) => { - try { - const uris = await vscode.window.showOpenDialog({ - canSelectFiles: params.canSelectFiles ?? true, - canSelectFolders: params.canSelectFolders ?? false, - canSelectMany: params.canSelectMany ?? false, - filters: params.filters, - defaultUri: params.defaultUri ? vscode.Uri.parse(params.defaultUri, false) : undefined, - title: params.title, - }) - const urisString = uris?.map((uri) => uri.fsPath) - return { uris: urisString || [] } - } catch (err) { - languageClient.error(`[VSCode Client] Failed to open file dialog: ${(err as Error).message}`) - return { uris: [] } - } - }) - - languageClient.onRequest( - ShowDocumentRequest.method, - async (params: ShowDocumentParams): Promise> => { - focusAmazonQPanel().catch((e: Error) => languageClient.error(`[VSCode Client] focusAmazonQPanel() failed`)) - - try { - const uri = vscode.Uri.parse(params.uri) - - if (params.external) { - // Note: Not using openUrl() because we probably don't want telemetry for these URLs. - // Also it doesn't yet support the required HACK below. - - // HACK: workaround vscode bug: https://github.com/microsoft/vscode/issues/85930 - vscode.env.openExternal(params.uri as any).then(undefined, (e) => { - // TODO: getLogger('?').error('failed vscode.env.openExternal: %O', e) - vscode.env.openExternal(uri).then(undefined, (e) => { - // TODO: getLogger('?').error('failed vscode.env.openExternal: %O', e) - }) - }) - return params - } - - const doc = await vscode.workspace.openTextDocument(uri) - await vscode.window.showTextDocument(doc, { preview: false }) - return params - } catch (e) { - return new ResponseError( - LSPErrorCodes.RequestFailed, - `Failed to open document: ${(e as Error).message}` - ) - } - } - ) - - languageClient.onNotification(contextCommandsNotificationType.method, (params: ContextCommandParams) => { - void provider.webview?.postMessage({ - command: contextCommandsNotificationType.method, - params: params, - }) - }) - languageClient.onNotification( - pinnedContextNotificationType.method, - (params: ContextCommandParams & { tabId: string; textDocument?: TextDocumentIdentifier }) => { - const editor = vscode.window.activeTextEditor - let textDocument = undefined - if (editor && isTextEditor(editor)) { - textDocument = { uri: vscode.workspace.asRelativePath(editor.document.uri) } - } - void provider.webview?.postMessage({ - command: pinnedContextNotificationType.method, - params: { ...params, textDocument }, - }) - } - ) - - languageClient.onNotification(openFileDiffNotificationType.method, async (params: OpenFileDiffParams) => { - // Handle both file:// URIs and raw file paths, ensuring proper Windows path handling - let currentFileUri: vscode.Uri - - // Check if it's already a proper file:// URI - if (params.originalFileUri.startsWith('file://')) { - currentFileUri = vscode.Uri.parse(params.originalFileUri) - } else { - // Decode URL-encoded characters and treat as file path - const decodedPath = decodeURIComponent(params.originalFileUri) - currentFileUri = vscode.Uri.file(decodedPath) - } - - const originalContent = params.originalFileContent ?? '' - const fileName = path.basename(currentFileUri.fsPath) - - // Use custom scheme to avoid adding to recent files - const originalFileUri = vscode.Uri.parse(`amazonq-diff:${fileName}_original_${Date.now()}`) - - // Register content provider for the custom scheme - const disposable = vscode.workspace.registerTextDocumentContentProvider('amazonq-diff', { - provideTextDocumentContent: () => originalContent, - }) - - try { - // Open diff view with custom scheme URI (left) vs current file (right) - await vscode.commands.executeCommand( - 'vscode.diff', - originalFileUri, - currentFileUri, - `${vscode.workspace.asRelativePath(currentFileUri)} (Original ↔ Current, Editable)`, - { preview: false } - ) - - // Clean up content provider when diff view is closed - const cleanupDisposable = vscode.window.onDidChangeVisibleTextEditors(() => { - const isDiffViewOpen = vscode.window.visibleTextEditors.some( - (editor) => editor.document.uri.toString() === originalFileUri.toString() - ) - if (!isDiffViewOpen) { - disposable.dispose() - cleanupDisposable.dispose() - } - }) - } catch (error) { - disposable.dispose() - languageClient.error(`[VSCode Client] Failed to open diff view: ${error}`) - } - }) - - languageClient.onNotification(chatUpdateNotificationType.method, (params: ChatUpdateParams) => { - void provider.webview?.postMessage({ - command: chatUpdateNotificationType.method, - params: params, - }) - }) - - languageClient.onNotification(chatOptionsUpdateType.method, (params: ChatOptionsUpdateParams) => { - void provider.webview?.postMessage({ - command: chatOptionsUpdateType.method, - params: params, - }) - }) -} - -function isServerEvent(command: string) { - return command.startsWith('aws/chat/') || command === 'telemetry/event' -} - -function enterFocus(params: any) { - return params.name === 'enterFocus' -} - -function exitFocus(params: any) { - return params.name === 'exitFocus' -} - -/** - * Decodes partial chat responses from the language server before sending them to mynah UI - */ -async function handlePartialResult( - partialResult: string | T, - encryptionKey: Buffer | undefined, - provider: AmazonQChatViewProvider, - tabId: string -) { - const decryptedMessage = await decryptResponse(partialResult, encryptionKey) - - // This is to filter out the message containing findings from CodeReview tool to update CodeIssues panel - decryptedMessage.additionalMessages = decryptedMessage.additionalMessages?.filter( - (message) => - !( - message.messageId !== undefined && - (message.messageId.endsWith(CodeWhispererConstants.codeReviewFindingsSuffix) || - message.messageId.endsWith(CodeWhispererConstants.displayFindingsSuffix)) - ) - ) - - if (decryptedMessage.body !== undefined) { - void provider.webview?.postMessage({ - command: chatRequestType.method, - params: decryptedMessage, - isPartialResult: true, - tabId: tabId, - }) - } - return decryptedMessage -} - -/** - * Decodes the final chat responses from the language server before sending it to mynah UI. - * Once this is called the answer response is finished - */ -async function handleCompleteResult( - result: string | T, - encryptionKey: Buffer | undefined, - provider: AmazonQChatViewProvider, - tabId: string, - disposable: Disposable, - languageClient: BaseLanguageClient -) { - const decryptedMessage = await decryptResponse(result, encryptionKey) - - await handleSecurityFindings(decryptedMessage, languageClient) - - void provider.webview?.postMessage({ - command: chatRequestType.method, - params: decryptedMessage, - tabId: tabId, - }) - - // only add the reference log once the request is complete, otherwise we will get duplicate log items - for (const ref of decryptedMessage.codeReference ?? []) { - ReferenceLogViewProvider.instance.addReferenceLog(referenceLogText(ref)) - } - disposable.dispose() -} - -async function handleSecurityFindings( - decryptedMessage: { additionalMessages?: ChatMessage[] }, - languageClient: BaseLanguageClient -): Promise { - if (decryptedMessage.additionalMessages === undefined || decryptedMessage.additionalMessages.length === 0) { - return - } - for (let i = decryptedMessage.additionalMessages.length - 1; i >= 0; i--) { - const message = decryptedMessage.additionalMessages[i] - if ( - message.messageId !== undefined && - (message.messageId.endsWith(CodeWhispererConstants.codeReviewFindingsSuffix) || - message.messageId.endsWith(CodeWhispererConstants.displayFindingsSuffix)) - ) { - if (message.body !== undefined) { - try { - const aggregatedCodeScanIssues: AggregatedCodeScanIssue[] = JSON.parse(message.body) - for (const aggregatedCodeScanIssue of aggregatedCodeScanIssues) { - const document = await vscode.workspace.openTextDocument(aggregatedCodeScanIssue.filePath) - for (const issue of aggregatedCodeScanIssue.issues) { - const isIssueTitleIgnored = CodeWhispererSettings.instance - .getIgnoredSecurityIssues() - .includes(issue.title) - const isSingleIssueIgnored = CommentUtils.detectCommentAboveLine( - document, - issue.startLine, - CodeWhispererConstants.amazonqIgnoreNextLine - ) - - issue.visible = !isIssueTitleIgnored && !isSingleIssueIgnored - } - } - initSecurityScanRender( - aggregatedCodeScanIssues, - undefined, - CodeAnalysisScope.AGENTIC, - message.messageId.endsWith(CodeWhispererConstants.codeReviewFindingsSuffix) - ) - SecurityIssueTreeViewProvider.focus() - } catch (e) { - languageClient.info('Failed to parse findings') - } - } - decryptedMessage.additionalMessages.splice(i, 1) - } - } -} - -async function resolveChatResponse( - requestMethod: string, - params: any, - languageClient: BaseLanguageClient, - webview: vscode.Webview | undefined -) { - const result = await languageClient.sendRequest(requestMethod, params) - void webview?.postMessage({ - command: requestMethod, - params: result, - }) -} diff --git a/packages/amazonq/src/lsp/chat/webviewProvider.ts b/packages/amazonq/src/lsp/chat/webviewProvider.ts deleted file mode 100644 index b0e0bddc195..00000000000 --- a/packages/amazonq/src/lsp/chat/webviewProvider.ts +++ /dev/null @@ -1,186 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { - EventEmitter, - CancellationToken, - WebviewView, - WebviewViewProvider, - WebviewViewResolveContext, - Uri, - Webview, -} from 'vscode' -import * as path from 'path' -import * as os from 'os' -import { - globals, - isSageMaker, - AmazonQPromptSettings, - LanguageServerResolver, - amazonqMark, - getLogger, -} from 'aws-core-vscode/shared' -import { AuthUtil, RegionProfile } from 'aws-core-vscode/codewhisperer' -import { featureConfig } from 'aws-core-vscode/amazonq' -import { getAmazonQLspConfig } from '../config' -import { BaseLanguageClient } from 'vscode-languageclient' - -export class AmazonQChatViewProvider implements WebviewViewProvider { - public static readonly viewType = 'aws.amazonq.AmazonQChatView' - private readonly onDidResolveWebviewEmitter = new EventEmitter() - public readonly onDidResolveWebview = this.onDidResolveWebviewEmitter.event - - webviewView?: WebviewView - webview?: Webview - - connectorAdapterPath?: string - uiPath?: string - - constructor( - private readonly mynahUIPath: string, - private readonly languageClient: BaseLanguageClient - ) {} - - public async resolveWebviewView( - webviewView: WebviewView, - context: WebviewViewResolveContext, - _token: CancellationToken - ) { - const lspDir = Uri.file(LanguageServerResolver.defaultDir()) - const dist = Uri.joinPath(globals.context.extensionUri, 'dist') - const bundledResources = Uri.joinPath(globals.context.extensionUri, 'resources/language-server') - let resourcesRoots = [lspDir, dist] - if (this.mynahUIPath?.startsWith(globals.context.extensionUri.fsPath)) { - getLogger('amazonqLsp').info(`Using bundled webview resources ${bundledResources.fsPath}`) - resourcesRoots = [bundledResources, dist] - } - /** - * if the mynah chat client is defined, then make sure to add it to the resource roots, otherwise - * it will 401 when trying to load - */ - const mynahUIPath = getAmazonQLspConfig().ui - if (process.env.WEBPACK_DEVELOPER_SERVER && mynahUIPath) { - const dir = path.dirname(mynahUIPath) - resourcesRoots.push(Uri.file(dir)) - } - - webviewView.webview.options = { - enableScripts: true, - enableCommandUris: true, - localResourceRoots: resourcesRoots, - } - - const source = 'vue/src/amazonq/webview/ui/amazonq-ui-connector-adapter.js' // Sent to dist/vue folder in webpack. - const serverHostname = process.env.WEBPACK_DEVELOPER_SERVER - - this.connectorAdapterPath = - serverHostname !== undefined - ? `${serverHostname}/${source}` - : webviewView.webview.asWebviewUri(Uri.joinPath(dist, source)).toString() - this.uiPath = webviewView.webview.asWebviewUri(Uri.file(this.mynahUIPath)).toString() - - webviewView.webview.html = await this.getWebviewContent() - - this.webviewView = webviewView - this.webview = this.webviewView.webview - - this.onDidResolveWebviewEmitter.fire() - performance.mark(amazonqMark.open) - } - - private async getWebviewContent() { - const featureConfigData = await featureConfig.getFeatureConfigs() - - const isSM = isSageMaker('SMAI') - const isSMUS = isSageMaker('SMUS') - const disabledCommands = isSM ? `['/dev', '/transform', '/test', '/review', '/doc']` : '[]' - const disclaimerAcknowledged = !AmazonQPromptSettings.instance.isPromptEnabled('amazonQChatDisclaimer') - const pairProgrammingAcknowledged = - !AmazonQPromptSettings.instance.isPromptEnabled('amazonQChatPairProgramming') - const welcomeCount = globals.globalState.tryGet('aws.amazonq.welcomeChatShowCount', Number, 0) - const modelSelectionEnabled = - this.languageClient.initializeResult?.awsServerCapabilities?.chatOptions?.modelSelection ?? false - - // only show profile card when the two conditions - // 1. profile count >= 2 - // 2. not default (fallback) which has empty arn - let regionProfile: RegionProfile | undefined = AuthUtil.instance.regionProfileManager.activeRegionProfile - if (AuthUtil.instance.regionProfileManager.profiles.length === 1) { - regionProfile = undefined - } - - const regionProfileString: string = JSON.stringify(regionProfile) - - const entrypoint = process.env.WEBPACK_DEVELOPER_SERVER - ? 'http://localhost:8080' - : 'https://file+.vscode-resource.vscode-cdn.net' - - const contentPolicy = `default-src ${entrypoint} data: blob: 'unsafe-inline'; - script-src ${entrypoint} filesystem: file: vscode-resource: https: ws: wss: 'unsafe-inline';` - - return ` - - - - - - - Chat - - - - - - - - ` - } - - async refreshWebview() { - if (this.webview) { - // post a message to the webview telling it to reload - void this.webview?.postMessage({ - command: 'reload', - }) - } - } -} diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts deleted file mode 100644 index 2255fb80fee..00000000000 --- a/packages/amazonq/src/lsp/client.ts +++ /dev/null @@ -1,552 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import vscode, { version } from 'vscode' -import * as nls from 'vscode-nls' -import { BaseLanguageClient, LanguageClientOptions, RequestType, State } from 'vscode-languageclient' -import { LanguageClient } from 'vscode-languageclient/node' -import { InlineCompletionManager } from '../app/inline/completion' -import { AmazonQLspAuth, encryptionKey, notificationTypes } from './auth' -import { - CreateFilesParams, - DeleteFilesParams, - DidChangeWorkspaceFoldersParams, - GetConfigurationFromServerParams, - RenameFilesParams, - ResponseMessage, - WorkspaceFolder, - ConnectionMetadata, -} from '@aws/language-server-runtimes/protocol' -import { - AuthUtil, - CodeWhispererSettings, - FeatureConfigProvider, - getSelectedCustomization, - TelemetryHelper, - vsCodeState, -} from 'aws-core-vscode/codewhisperer' -import { - Settings, - createServerOptions, - globals, - Experiments, - Commands, - oneSecond, - validateNodeExe, - getLogger, - undefinedIfEmpty, - getOptOutPreference, - isAmazonLinux2, - getClientId, - getClientName, - extensionVersion, - isSageMaker, - DevSettings, -} from 'aws-core-vscode/shared' -import { processUtils } from 'aws-core-vscode/shared' -import { activate } from './chat/activation' -import { activate as activateInline } from '../app/inline/activation' -import { AmazonQResourcePaths } from './lspInstaller' -import { ConfigSection, isValidConfigSection, pushConfigUpdate, toAmazonQLSPLogLevel } from './config' -import { activate as activateInlineChat } from '../inlineChat/activation' -import { telemetry } from 'aws-core-vscode/telemetry' -import { SessionManager } from '../app/inline/sessionManager' -import { LineTracker } from '../app/inline/stateTracker/lineTracker' -import { InlineTutorialAnnotation } from '../app/inline/tutorials/inlineTutorialAnnotation' -import { InlineChatTutorialAnnotation } from '../app/inline/tutorials/inlineChatTutorialAnnotation' -import { codeReviewInChat } from '../app/amazonqScan/models/constants' - -const localize = nls.loadMessageBundle() -const logger = getLogger('amazonqLsp.lspClient') - -export function hasGlibcPatch(): boolean { - // Skip GLIBC patching for SageMaker environments - if (isSageMaker()) { - getLogger('amazonqLsp').info('SageMaker environment detected in hasGlibcPatch, skipping GLIBC patching') - return false // Return false to ensure SageMaker doesn't try to use GLIBC patching - } - - // Check for environment variables (for CDM) - const glibcLinker = process.env.VSCODE_SERVER_CUSTOM_GLIBC_LINKER || '' - const glibcPath = process.env.VSCODE_SERVER_CUSTOM_GLIBC_PATH || '' - - if (glibcLinker.length > 0 && glibcPath.length > 0) { - getLogger('amazonqLsp').info('GLIBC patching environment variables detected') - return true - } - - // No environment variables, no patching needed - return false -} - -export async function startLanguageServer( - extensionContext: vscode.ExtensionContext, - resourcePaths: AmazonQResourcePaths -) { - const toDispose = extensionContext.subscriptions - - const serverModule = resourcePaths.lsp - - const argv = [ - '--nolazy', - '--preserve-symlinks', - '--stdio', - '--pre-init-encryption', - '--set-credentials-encryption-key', - ] - - const documentSelector = [{ scheme: 'file', language: '*' }] - - const clientId = 'amazonq' - const traceServerEnabled = Settings.instance.isSet(`${clientId}.trace.server`) - let executable: string[] = [] - // apply the GLIBC 2.28 path to node js runtime binary - if (isSageMaker()) { - // SageMaker doesn't need GLIBC patching - getLogger('amazonqLsp').info('SageMaker environment detected, skipping GLIBC patching') - executable = [resourcePaths.node] - } else if (isAmazonLinux2() && hasGlibcPatch()) { - // Use environment variables if available (for CDM) - if (process.env.VSCODE_SERVER_CUSTOM_GLIBC_LINKER && process.env.VSCODE_SERVER_CUSTOM_GLIBC_PATH) { - executable = [ - process.env.VSCODE_SERVER_CUSTOM_GLIBC_LINKER, - '--library-path', - process.env.VSCODE_SERVER_CUSTOM_GLIBC_PATH, - resourcePaths.node, - ] - getLogger('amazonqLsp').info(`Patched node runtime with GLIBC using env vars to ${executable}`) - } else { - // No environment variables, use the node executable directly - executable = [resourcePaths.node] - } - } else { - executable = [resourcePaths.node] - } - - const memoryWarnThreshold = 1024 * processUtils.oneMB - const serverOptions = createServerOptions({ - encryptionKey, - executable: executable, - serverModule, - execArgv: argv, - warnThresholds: { memory: memoryWarnThreshold }, - }) - - await validateNodeExe(executable, resourcePaths.lsp, argv, logger) - - const endpointOverride = DevSettings.instance.get('codewhispererService', {}).endpoint ?? undefined - const textDocSection = { - inlineEditSupport: Experiments.instance.get('amazonqLSPNEP', true), - } as any - - if (endpointOverride) { - textDocSection.endpointOverride = endpointOverride - } - - // Options to control the language client - const clientOptions: LanguageClientOptions = { - // Register the server for json documents - documentSelector, - middleware: { - workspace: { - /** - * Convert VSCode settings format to be compatible with flare's configs - */ - configuration: async (params, token, next) => { - const config = await next(params, token) - const section = params.items[0].section - if (!isValidConfigSection(section)) { - return config - } - return getConfigSection(section) - }, - }, - }, - initializationOptions: { - aws: { - clientInfo: { - name: getClientName(), - version: version, - extension: { - name: 'AmazonQ-For-VSCode', - version: extensionVersion, - }, - clientId: getClientId(globals.globalState), - }, - awsClientCapabilities: { - q: { - developerProfiles: true, - pinnedContextEnabled: true, - imageContextEnabled: true, - mcp: true, - shortcut: true, - reroute: true, - modelSelection: true, - workspaceFilePath: vscode.workspace.workspaceFile?.fsPath, - codeReviewInChat: codeReviewInChat, - // feature flag for displaying findings found not through CodeReview in the Code Issues Panel - displayFindings: true, - }, - window: { - notifications: true, - showSaveFileDialog: true, - showLogs: isSageMaker() ? false : true, - }, - textDocument: { - inlineCompletionWithReferences: textDocSection, - }, - }, - contextConfiguration: { - workspaceIdentifier: extensionContext.storageUri?.path, - }, - logLevel: isSageMaker() ? 'debug' : toAmazonQLSPLogLevel(globals.logOutputChannel.logLevel), - }, - credentials: { - providesBearerToken: true, - providesIam: isSageMaker(), // Enable IAM credentials for SageMaker environments - }, - }, - /** - * When the trace server is enabled it outputs a ton of log messages so: - * When trace server is enabled, logs go to a seperate "Amazon Q Language Server" output. - * Otherwise, logs go to the regular "Amazon Q Logs" channel. - */ - ...(traceServerEnabled - ? {} - : { - outputChannel: globals.logOutputChannel, - }), - } - - const client = new LanguageClient( - clientId, - localize('amazonq.server.name', 'Amazon Q Language Server'), - serverOptions, - clientOptions - ) - - await client.start() - - // Set up connection metadata handler - client.onRequest(notificationTypes.getConnectionMetadata.method, () => { - // For IAM auth, provide a default startUrl - if (process.env.USE_IAM_AUTH === 'true') { - getLogger().info( - `[SageMaker Debug] Connection metadata requested - returning hardcoded startUrl for IAM auth` - ) - return { - sso: { - // TODO P261194666 Replace with correct startUrl once identified - startUrl: 'https://amzn.awsapps.com/start', // Default for IAM auth - }, - } - } - - // For SSO auth, use the actual startUrl - getLogger().info( - `[SageMaker Debug] Connection metadata requested - returning actual startUrl for SSO auth: ${AuthUtil.instance.auth.startUrl}` - ) - return { - sso: { - startUrl: AuthUtil.instance.auth.startUrl, - }, - } - }) - - const auth = await initializeAuth(client) - - await onLanguageServerReady(extensionContext, auth, client, resourcePaths, toDispose) - - return client -} - -async function initializeAuth(client: BaseLanguageClient): Promise { - const auth = new AmazonQLspAuth(client) - await auth.refreshConnection(true) - return auth -} - -// jscpd:ignore-start -async function initializeLanguageServerConfiguration(client: BaseLanguageClient, context: string = 'startup') { - const logger = getLogger('amazonqLsp') - - if (AuthUtil.instance.isConnectionValid()) { - logger.info(`[${context}] Initializing language server configuration`) - // jscpd:ignore-end - - try { - // Send profile configuration - logger.debug(`[${context}] Sending profile configuration to language server`) - await sendProfileToLsp(client) - logger.debug(`[${context}] Profile configuration sent successfully`) - - // Send customization configuration - logger.debug(`[${context}] Sending customization configuration to language server`) - await pushConfigUpdate(client, { - type: 'customization', - customization: getSelectedCustomization(), - }) - logger.debug(`[${context}] Customization configuration sent successfully`) - - logger.info(`[${context}] Language server configuration completed successfully`) - } catch (error) { - logger.error(`[${context}] Failed to initialize language server configuration: ${error}`) - throw error - } - } else { - logger.warn( - `[${context}] Connection invalid, skipping language server configuration - this will cause authentication failures` - ) - const activeConnection = AuthUtil.instance.auth.activeConnection - const connectionState = activeConnection - ? AuthUtil.instance.auth.getConnectionState(activeConnection) - : 'no-connection' - logger.warn(`[${context}] Connection state: ${connectionState}`) - } -} - -async function sendProfileToLsp(client: BaseLanguageClient) { - const logger = getLogger('amazonqLsp') - const profileArn = AuthUtil.instance.regionProfileManager.activeRegionProfile?.arn - - logger.debug(`Sending profile to LSP: ${profileArn || 'undefined'}`) - - await pushConfigUpdate(client, { - type: 'profile', - profileArn: profileArn, - }) - - logger.debug(`Profile sent to LSP successfully`) -} - -async function onLanguageServerReady( - extensionContext: vscode.ExtensionContext, - auth: AmazonQLspAuth, - client: BaseLanguageClient, - resourcePaths: AmazonQResourcePaths, - toDispose: vscode.Disposable[] -) { - const sessionManager = new SessionManager() - - // keeps track of the line changes - const lineTracker = new LineTracker() - - // tutorial for inline suggestions - const inlineTutorialAnnotation = new InlineTutorialAnnotation(lineTracker, sessionManager) - - // tutorial for inline chat - const inlineChatTutorialAnnotation = new InlineChatTutorialAnnotation(inlineTutorialAnnotation) - - const enableInlineRollback = FeatureConfigProvider.instance.getPreFlareRollbackGroup() === 'treatment' - if (enableInlineRollback) { - // use VSC inline - getLogger().info('Entering preflare logic') - await activateInline(client) - } else { - // use language server for inline completion - getLogger().info('Entering postflare logic') - const inlineManager = new InlineCompletionManager(client, sessionManager, lineTracker, inlineTutorialAnnotation) - inlineManager.registerInlineCompletion() - toDispose.push( - inlineManager, - Commands.register('aws.amazonq.showPrev', async () => { - await sessionManager.maybeRefreshSessionUx() - await vscode.commands.executeCommand('editor.action.inlineSuggest.showPrevious') - sessionManager.onPrevSuggestion() - }), - Commands.register('aws.amazonq.showNext', async () => { - await sessionManager.maybeRefreshSessionUx() - await vscode.commands.executeCommand('editor.action.inlineSuggest.showNext') - sessionManager.onNextSuggestion() - }), - // this is a workaround since handleDidShowCompletionItem is not public API - Commands.register('aws.amazonq.checkInlineSuggestionVisibility', async () => { - sessionManager.checkInlineSuggestionVisibility() - }), - Commands.register({ id: 'aws.amazonq.invokeInlineCompletion', autoconnect: true }, async () => { - vsCodeState.lastManualTriggerTime = performance.now() - await vscode.commands.executeCommand('editor.action.inlineSuggest.trigger') - }), - vscode.workspace.onDidCloseTextDocument(async () => { - await vscode.commands.executeCommand('aws.amazonq.rejectCodeSuggestion') - }) - ) - } - - activateInlineChat(extensionContext, client, encryptionKey, inlineChatTutorialAnnotation) - - if (Experiments.instance.get('amazonqChatLSP', true)) { - await activate(client, encryptionKey, resourcePaths.ui) - } - - const refreshInterval = auth.startTokenRefreshInterval(10 * oneSecond) - - // We manually push the cached values the first time since event handlers, which should push, may not have been setup yet. - // Execution order is weird and should be fixed in the flare implementation. - // TODO: Revisit if we need this if we setup the event handlers properly - await initializeLanguageServerConfiguration(client, 'startup') - - toDispose.push( - Commands.register('aws.amazonq.refreshAnnotation', async (forceProceed: boolean) => { - telemetry.record({ - traceId: TelemetryHelper.instance.traceId, - }) - - const editor = vscode.window.activeTextEditor - if (editor) { - if (forceProceed) { - await inlineTutorialAnnotation.refresh(editor, 'codewhisperer', true) - } else { - await inlineTutorialAnnotation.refresh(editor, 'codewhisperer') - } - } - }), - Commands.register('aws.amazonq.dismissTutorial', async () => { - const editor = vscode.window.activeTextEditor - if (editor) { - inlineTutorialAnnotation.clear() - try { - telemetry.ui_click.emit({ elementId: `dismiss_${inlineTutorialAnnotation.currentState.id}` }) - } catch (_) {} - await inlineTutorialAnnotation.dismissTutorial() - getLogger().debug(`codewhisperer: user dismiss tutorial.`) - } - }), - AuthUtil.instance.auth.onDidChangeActiveConnection(async () => { - await auth.refreshConnection() - }), - AuthUtil.instance.auth.onDidDeleteConnection(async () => { - void client.sendNotification(notificationTypes.deleteBearerToken.method) - }), - AuthUtil.instance.regionProfileManager.onDidChangeRegionProfile(() => sendProfileToLsp(client)), - vscode.commands.registerCommand('aws.amazonq.getWorkspaceId', async () => { - const requestType = new RequestType( - 'aws/getConfigurationFromServer' - ) - const workspaceIdResp = await client.sendRequest(requestType.method, { - section: 'aws.q.workspaceContext', - }) - return workspaceIdResp - }), - vscode.workspace.onDidCreateFiles((e) => { - void client.sendNotification('workspace/didCreateFiles', { - files: e.files.map((it) => { - return { uri: it.fsPath } - }), - } as CreateFilesParams) - }), - vscode.workspace.onDidDeleteFiles((e) => { - void client.sendNotification('workspace/didDeleteFiles', { - files: e.files.map((it) => { - return { uri: it.fsPath } - }), - } as DeleteFilesParams) - }), - vscode.workspace.onDidRenameFiles((e) => { - void client.sendNotification('workspace/didRenameFiles', { - files: e.files.map((it) => { - return { oldUri: it.oldUri.fsPath, newUri: it.newUri.fsPath } - }), - } as RenameFilesParams) - }), - vscode.workspace.onDidChangeWorkspaceFolders((e) => { - void client.sendNotification('workspace/didChangeWorkspaceFolder', { - event: { - added: e.added.map((it) => { - return { - name: it.name, - uri: it.uri.fsPath, - } as WorkspaceFolder - }), - removed: e.removed.map((it) => { - return { - name: it.name, - uri: it.uri.fsPath, - } as WorkspaceFolder - }), - }, - } as DidChangeWorkspaceFoldersParams) - }), - { dispose: () => clearInterval(refreshInterval) }, - // Set this inside onReady so that it only triggers on subsequent language server starts (not the first) - onServerRestartHandler(client, auth) - ) -} - -/** - * When the server restarts (likely due to a crash, then the LanguageClient automatically starts it again) - * we need to run some server intialization again. - */ -function onServerRestartHandler(client: BaseLanguageClient, auth: AmazonQLspAuth) { - return client.onDidChangeState(async (e) => { - // Ensure we are in a "restart" state - if (!(e.oldState === State.Starting && e.newState === State.Running)) { - return - } - - // Emit telemetry that a crash was detected. - // It is not guaranteed to 100% be a crash since somehow the server may have been intentionally restarted, - // but most of the time it probably will have been due to a crash. - // TODO: Port this metric override to common definitions - telemetry.languageServer_crash.emit({ id: 'AmazonQ' }) - - const logger = getLogger('amazonqLsp') - logger.info('[crash-recovery] Language server crash detected, reinitializing authentication') - - try { - // Send bearer token - logger.debug('[crash-recovery] Refreshing connection and sending bearer token') - await auth.refreshConnection(true) - logger.debug('[crash-recovery] Bearer token sent successfully') - - // Send profile and customization configuration - await initializeLanguageServerConfiguration(client, 'crash-recovery') - logger.info('[crash-recovery] Authentication reinitialized successfully') - } catch (error) { - logger.error(`[crash-recovery] Failed to reinitialize after crash: ${error}`) - } - }) -} - -function getConfigSection(section: ConfigSection) { - getLogger('amazonqLsp').debug('Fetching config section %s for language server', section) - switch (section) { - case 'aws.q': - /** - * IMPORTANT: This object is parsed by the following code in the language server, **so - * it must match that expected shape**. - * https://github.com/aws/language-servers/blob/1d2ca018f2248106690438b860d40a7ee67ac728/server/aws-lsp-codewhisperer/src/shared/amazonQServiceManager/configurationUtils.ts#L114 - */ - return [ - { - customization: undefinedIfEmpty(getSelectedCustomization().arn), - optOutTelemetry: getOptOutPreference() === 'OPTOUT', - projectContext: { - enableLocalIndexing: CodeWhispererSettings.instance.isLocalIndexEnabled(), - enableGpuAcceleration: CodeWhispererSettings.instance.isLocalIndexGPUEnabled(), - indexWorkerThreads: CodeWhispererSettings.instance.getIndexWorkerThreads(), - localIndexing: { - ignoreFilePatterns: CodeWhispererSettings.instance.getIndexIgnoreFilePatterns(), - maxFileSizeMB: CodeWhispererSettings.instance.getMaxIndexFileSize(), - maxIndexSizeMB: CodeWhispererSettings.instance.getMaxIndexSize(), - indexCacheDirPath: CodeWhispererSettings.instance.getIndexCacheDirPath(), - }, - }, - }, - ] - case 'aws.codeWhisperer': - return [ - { - includeSuggestionsWithCodeReferences: - CodeWhispererSettings.instance.isSuggestionsWithCodeReferencesEnabled(), - shareCodeWhispererContentWithAWS: !CodeWhispererSettings.instance.isOptoutEnabled(), - includeImportsWithSuggestions: CodeWhispererSettings.instance.isImportRecommendationEnabled(), - sendUserWrittenCodeMetrics: true, - }, - ] - case 'aws.logLevel': - return [toAmazonQLSPLogLevel(globals.logOutputChannel.logLevel)] - } -} diff --git a/packages/amazonq/src/lsp/config.ts b/packages/amazonq/src/lsp/config.ts deleted file mode 100644 index d33f58d6988..00000000000 --- a/packages/amazonq/src/lsp/config.ts +++ /dev/null @@ -1,110 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' -import { DevSettings, getServiceEnvVarConfig, BaseLspInstaller, getLogger } from 'aws-core-vscode/shared' -import { BaseLanguageClient } from 'vscode-languageclient' -import { - DidChangeConfigurationNotification, - updateConfigurationRequestType, -} from '@aws/language-server-runtimes/protocol' - -export interface ExtendedAmazonQLSPConfig extends BaseLspInstaller.LspConfig { - ui?: string -} - -// Taken from language server runtimes since they are not exported: -// https://github.com/aws/language-server-runtimes/blob/eae85672c345d8adaf4c8cbd741260b8a59750c4/runtimes/runtimes/util/loggingUtil.ts#L4-L10 -const validLspLogLevels = ['error', 'warn', 'info', 'log', 'debug'] as const -export type LspLogLevel = (typeof validLspLogLevels)[number] -const lspLogLevelMapping: Map = new Map([ - [vscode.LogLevel.Error, 'error'], - [vscode.LogLevel.Warning, 'warn'], - [vscode.LogLevel.Info, 'info'], - [vscode.LogLevel.Debug, 'log'], - [vscode.LogLevel.Trace, 'debug'], - [vscode.LogLevel.Off, 'error'], // TODO: once the language server supports a no-log setting, we can map to that. -]) - -const configSections = ['aws.q', 'aws.codeWhisperer', 'aws.logLevel'] as const -export type ConfigSection = (typeof configSections)[number] - -export function isValidConfigSection(section: unknown): section is ConfigSection { - return typeof section === 'string' && configSections.includes(section as ConfigSection) -} - -export const defaultAmazonQLspConfig: ExtendedAmazonQLSPConfig = { - manifestUrl: 'https://aws-toolkit-language-servers.amazonaws.com/qAgenticChatServer/0/manifest.json', - supportedVersions: '1.*.*', - id: 'AmazonQ', // used across IDEs for identifying global storage/local disk locations. Do not change. - suppressPromptPrefix: 'amazonQ', - path: undefined, - ui: undefined, -} - -export function getAmazonQLspConfig(): ExtendedAmazonQLSPConfig { - return { - ...defaultAmazonQLspConfig, - ...(DevSettings.instance.getServiceConfig('amazonqLsp', {}) as ExtendedAmazonQLSPConfig), - ...getServiceEnvVarConfig('amazonqLsp', Object.keys(defaultAmazonQLspConfig)), - } -} -/** - * The language server logging levels do not directly match those used in VSC. Therefore, we must perform a mapping defined by {@link lspLogLevelMapping} - * @param logLevel vscode log level (0-5) - * @returns language server log level - */ -export function toAmazonQLSPLogLevel(logLevel: vscode.LogLevel): LspLogLevel { - return lspLogLevelMapping.get(logLevel) ?? 'info' -} - -/** - * Request/Notify a config value to the language server, effectively updating it with the - * latest configuration from the client. - * - * The issue is we need to push certain configs to different places, since there are - * different handlers for specific configs. So this determines the correct place to - * push the given config. - */ -export async function pushConfigUpdate(client: BaseLanguageClient, config: QConfigs) { - const logger = getLogger('amazonqLsp') - - switch (config.type) { - case 'profile': - logger.debug(`Pushing profile configuration: ${config.profileArn || 'undefined'}`) - await client.sendRequest(updateConfigurationRequestType.method, { - section: 'aws.q', - settings: { profileArn: config.profileArn }, - }) - logger.debug(`Profile configuration pushed successfully`) - break - case 'customization': - logger.debug(`Pushing customization configuration: ${config.customization || 'undefined'}`) - void client.sendNotification(DidChangeConfigurationNotification.type.method, { - section: 'aws.q', - settings: { customization: config.customization }, - }) - logger.debug(`Customization configuration pushed successfully`) - break - case 'logLevel': - logger.debug(`Pushing log level configuration`) - void client.sendNotification(DidChangeConfigurationNotification.type.method, { - section: 'aws.logLevel', - }) - logger.debug(`Log level configuration pushed successfully`) - break - } -} -type ProfileConfig = { - type: 'profile' - profileArn: string | undefined -} -type CustomizationConfig = { - type: 'customization' - customization: string | undefined -} -type LogLevelConfig = { - type: 'logLevel' -} -type QConfigs = ProfileConfig | CustomizationConfig | LogLevelConfig diff --git a/packages/amazonq/src/lsp/encryption.ts b/packages/amazonq/src/lsp/encryption.ts deleted file mode 100644 index 246c64f476b..00000000000 --- a/packages/amazonq/src/lsp/encryption.ts +++ /dev/null @@ -1,34 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as jose from 'jose' - -export async function encryptRequest(params: T, encryptionKey: Buffer): Promise<{ message: string } | T> { - const payload = new TextEncoder().encode(JSON.stringify(params)) - - const encryptedMessage = await new jose.CompactEncrypt(payload) - .setProtectedHeader({ alg: 'dir', enc: 'A256GCM' }) - .encrypt(encryptionKey) - - return { message: encryptedMessage } -} - -export async function decryptResponse(response: unknown, key: Buffer | undefined) { - // Note that casts are required since language client requests return 'unknown' type. - // If we can't decrypt, return original response casted. - if (typeof response !== 'string' || key === undefined) { - return response as T - } - - const result = await jose.jwtDecrypt(response, key, { - clockTolerance: 60, // Allow up to 60 seconds to account for clock differences - contentEncryptionAlgorithms: ['A256GCM'], - keyManagementAlgorithms: ['dir'], - }) - - if (!result.payload) { - throw new Error('JWT payload not found') - } - return result.payload as T -} diff --git a/packages/amazonq/src/lsp/lspInstaller.ts b/packages/amazonq/src/lsp/lspInstaller.ts deleted file mode 100644 index 9ac19601fe7..00000000000 --- a/packages/amazonq/src/lsp/lspInstaller.ts +++ /dev/null @@ -1,67 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import vscode from 'vscode' -import { fs, getNodeExecutableName, getRgExecutableName, BaseLspInstaller, ResourcePaths } from 'aws-core-vscode/shared' -import path from 'path' -import { ExtendedAmazonQLSPConfig, getAmazonQLspConfig } from './config' - -export interface AmazonQResourcePaths extends ResourcePaths { - ui: string - /** - * Path to `rg` (or `rg.exe`) executable/binary. - * Example: `"/aws/toolkits/language-servers/AmazonQ/3.3.0/servers/rg"` - */ - ripGrep: string -} - -export class AmazonQLspInstaller extends BaseLspInstaller.BaseLspInstaller< - AmazonQResourcePaths, - ExtendedAmazonQLSPConfig -> { - constructor(lspConfig: ExtendedAmazonQLSPConfig = getAmazonQLspConfig()) { - super(lspConfig, 'amazonqLsp') - } - - protected override async postInstall(assetDirectory: string): Promise { - const resourcePaths = this.resourcePaths(assetDirectory) - await fs.chmod(resourcePaths.node, 0o755) - if (await fs.exists(resourcePaths.ripGrep)) { - await fs.chmod(resourcePaths.ripGrep, 0o755) - } - } - - protected override resourcePaths(assetDirectory?: string): AmazonQResourcePaths { - if (!assetDirectory) { - return { - lsp: this.config.path ?? '', - node: getNodeExecutableName(), - ripGrep: `ripgrep/${getRgExecutableName()}`, - ui: this.config.ui ?? '', - } - } - - const nodePath = path.join(assetDirectory, `servers/${getNodeExecutableName()}`) - const rgPath = path.join(assetDirectory, `servers/ripgrep/${getRgExecutableName()}`) - return { - lsp: path.join(assetDirectory, 'servers/aws-lsp-codewhisperer.js'), - node: nodePath, - ripGrep: rgPath, - ui: path.join(assetDirectory, 'clients/amazonq-ui.js'), - } - } - - protected override downloadMessageOverride: string | undefined = 'Updating Amazon Q plugin' -} - -export function getBundledResourcePaths(ctx: vscode.ExtensionContext): AmazonQResourcePaths { - const assetDirectory = vscode.Uri.joinPath(ctx.extensionUri, 'resources', 'language-server').fsPath - return { - lsp: path.join(assetDirectory, 'servers', 'aws-lsp-codewhisperer.js'), - node: process.execPath, - ripGrep: '', - ui: path.join(assetDirectory, 'clients', 'amazonq-ui.js'), - } -} diff --git a/packages/amazonq/src/lsp/utils.ts b/packages/amazonq/src/lsp/utils.ts deleted file mode 100644 index f5b010c536b..00000000000 --- a/packages/amazonq/src/lsp/utils.ts +++ /dev/null @@ -1,26 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' -import { CursorState } from '@aws/language-server-runtimes-types' - -/** - * Convert from vscode selection type to the general CursorState expected by the AmazonQLSP. - * @param selection - * @returns - */ -export function getCursorState(selection: readonly vscode.Selection[]): CursorState[] { - return selection.map((s) => ({ - range: { - start: { - line: s.start.line, - character: s.start.character, - }, - end: { - line: s.end.line, - character: s.end.character, - }, - }, - })) -} diff --git a/packages/amazonq/src/util/clearCache.ts b/packages/amazonq/src/util/clearCache.ts deleted file mode 100644 index 8c93b35ac12..00000000000 --- a/packages/amazonq/src/util/clearCache.ts +++ /dev/null @@ -1,49 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { AuthUtil } from 'aws-core-vscode/codewhisperer' -import { Commands, fs, globals, LanguageServerResolver } from 'aws-core-vscode/shared' -import vscode from 'vscode' - -/** - * The purpose of this module is to provide a util to clear all extension cache so that it has a clean state - */ - -/** - * Clears "all" cache of the extension, effectively putting the user in a "net new" state. - * - * NOTE: This is a best attempt. There may be state like a file in the filesystem which is not deleted. - * We should aim to add all state clearing in to this method. - */ -async function clearCache() { - // Check a final time if they want to clear their cache - const doContinue = await vscode.window - .showInformationMessage( - 'This will wipe your Amazon Q extension state, then reload your VS Code window. This operation is not dangerous. ', - { modal: true }, - 'Continue' - ) - .then((value) => { - return value === 'Continue' - }) - if (!doContinue) { - return - } - - // SSO cache persists on disk, this should indirectly delete it - const conn = AuthUtil.instance.conn - if (conn) { - await AuthUtil.instance.auth.deleteConnection(conn) - } - - await globals.globalState.clear() - - // Clear the Language Server Cache - await fs.delete(LanguageServerResolver.defaultDir(), { recursive: true, force: true }) - - // Make the IDE reload so all new changes take effect - void vscode.commands.executeCommand('workbench.action.reloadWindow') -} -export const clearCacheDeclaration = Commands.declare({ id: 'aws.amazonq.clearCache' }, () => clearCache) diff --git a/packages/amazonq/src/util/timeoutUtil.ts b/packages/amazonq/src/util/timeoutUtil.ts deleted file mode 100644 index c42d1e3be01..00000000000 --- a/packages/amazonq/src/util/timeoutUtil.ts +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -export function asyncCallWithTimeout(asyncPromise: Promise, message: string, timeLimit: number): Promise { - let timeoutHandle: NodeJS.Timeout - const timeoutPromise = new Promise((_resolve, reject) => { - timeoutHandle = setTimeout(() => reject(new Error(message)), timeLimit) - }) - return Promise.race([asyncPromise, timeoutPromise]).then((result) => { - clearTimeout(timeoutHandle) - return result as T - }) -} diff --git a/packages/amazonq/test/e2e/amazonq/assert.ts b/packages/amazonq/test/e2e/amazonq/assert.ts deleted file mode 100644 index 5bcec3fc0b4..00000000000 --- a/packages/amazonq/test/e2e/amazonq/assert.ts +++ /dev/null @@ -1,41 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import { Messenger } from './framework/messenger' - -export function assertQuickActions(tab: Messenger, commands: string[]) { - const commandGroup = tab - .getCommands() - .map((groups) => groups.commands) - .flat() - if (!commandGroup) { - assert.fail(`Could not find commands for ${tab.tabID}`) - } - - const commandNames = commandGroup.map((cmd) => cmd.command) - - const missingCommands = [] - for (const command of commands) { - if (!commandNames.includes(command)) { - missingCommands.push(command) - } - } - - if (missingCommands.length > 0) { - assert.fail(`Could not find commands: ${missingCommands.join(', ')} for ${tab.tabID}`) - } -} - -export function assertContextCommands(tab: Messenger, contextCommands: string[]) { - assert.deepStrictEqual( - tab - .getStore() - .contextCommands?.map((x) => x.commands) - .flat() - .map((x) => x.command), - contextCommands - ) -} diff --git a/packages/amazonq/test/e2e/amazonq/chat.test.ts b/packages/amazonq/test/e2e/amazonq/chat.test.ts deleted file mode 100644 index c4f74c51376..00000000000 --- a/packages/amazonq/test/e2e/amazonq/chat.test.ts +++ /dev/null @@ -1,86 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import { qTestingFramework } from './framework/framework' -import sinon from 'sinon' -import { Messenger } from './framework/messenger' -import { MynahUIDataModel } from '@aws/mynah-ui' -import { assertContextCommands, assertQuickActions } from './assert' -import { registerAuthHook, using } from 'aws-core-vscode/test' -import { loginToIdC } from './utils/setup' -import { webviewConstants, webviewTabConstants } from 'aws-core-vscode/amazonq' - -describe('Amazon Q Chat', function () { - this.retries(3) - let framework: qTestingFramework - let tab: Messenger - let store: MynahUIDataModel - - const availableCommands: string[] = ['/dev', '/test', '/review', '/doc', '/transform'] - - before(async function () { - /** - * Login to the amazonq-test-account. When running in CI this has unlimited - * calls to the backend api - */ - await using(registerAuthHook('amazonq-test-account'), async () => { - await loginToIdC() - }) - }) - - // jscpd:ignore-start - beforeEach(() => { - // Make sure you're logged in before every test - registerAuthHook('amazonq-test-account') - framework = new qTestingFramework('cwc', true, []) - tab = framework.createTab() - store = tab.getStore() - }) - - afterEach(() => { - framework.removeTab(tab.tabID) - framework.dispose() - sinon.restore() - }) - - it(`Shows quick actions: ${availableCommands.join(', ')}`, async () => { - assertQuickActions(tab, availableCommands) - }) - - it('Shows @workspace', () => { - assertContextCommands(tab, ['@workspace']) - }) - - // jscpd:ignore-end - - it('Shows title', () => { - assert.deepStrictEqual(store.tabTitle, 'Chat') - }) - - it('Shows placeholder', () => { - assert.deepStrictEqual(store.promptInputPlaceholder, webviewTabConstants.commonTabData.placeholder) - }) - - it('Sends message', async () => { - tab.addChatMessage({ - prompt: 'What is a lambda', - }) - await tab.waitForChatFinishesLoading() - const chatItems = tab.getChatItems() - // the last item should be an answer - assert.deepStrictEqual(chatItems[4].type, 'answer') - }) - - describe('Clicks examples', () => { - it('Click help', async () => { - tab.clickButton('help') - await tab.waitForText(webviewConstants.helpMessage) - const chatItems = tab.getChatItems() - assert.deepStrictEqual(chatItems[4].type, 'answer') - assert.deepStrictEqual(chatItems[4].body, webviewConstants.helpMessage) - }) - }) -}) diff --git a/packages/amazonq/test/e2e/amazonq/framework/framework.ts b/packages/amazonq/test/e2e/amazonq/framework/framework.ts deleted file mode 100644 index 0cc9a9298ee..00000000000 --- a/packages/amazonq/test/e2e/amazonq/framework/framework.ts +++ /dev/null @@ -1,136 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { injectJSDOM } from './jsdomInjector' - -// This needs to be ran before all other imports so that mynah ui gets loaded inside of jsdom -injectJSDOM() - -import assert from 'assert' -import * as vscode from 'vscode' -import { MynahUI, MynahUIProps } from '@aws/mynah-ui' -import { DefaultAmazonQAppInitContext, TabType, createMynahUI } from 'aws-core-vscode/amazonq' -import { Messenger, MessengerOptions } from './messenger' -import { FeatureContext } from 'aws-core-vscode/shared' - -/** - * Abstraction over Amazon Q to make e2e testing easier - */ -export class qTestingFramework { - private readonly mynahUI: MynahUI - private readonly mynahUIProps: MynahUIProps - private disposables: vscode.Disposable[] = [] - - lastEventId: string = '' - - constructor( - featureName: TabType, - amazonQEnabled: boolean, - featureConfigsSerialized: [string, FeatureContext][], - welcomeCount = Number.MAX_VALUE // by default don't show the welcome page - ) { - /** - * Instantiate the UI and override the postMessage to publish using the app message - * publishers directly. - * - * The postMessage function implements the MynahUI -> VSCode flow - */ - const ui = createMynahUI( - { - postMessage: (message: string) => { - const appMessagePublisher = DefaultAmazonQAppInitContext.instance - .getWebViewToAppsMessagePublishers() - .get(featureName) - if (appMessagePublisher === undefined) { - return - } - appMessagePublisher.publish(message) - }, - }, - amazonQEnabled, - featureConfigsSerialized, - welcomeCount - ) - this.mynahUI = ui.mynahUI - this.mynahUIProps = (this.mynahUI as any).props - - /** - * In order to successfully remove tabs we need the last event id - */ - const originalOnTabAdd = this.mynahUIProps.onTabAdd - this.mynahUIProps.onTabAdd = (tabId, eventId) => { - this.lastEventId = eventId ?? this.lastEventId - originalOnTabAdd && originalOnTabAdd(tabId) - } - - /** - * Listen to incoming events coming from VSCode and redirect them to MynahUI - * - * This implements the VSCode -> Mynah UI flow - */ - this.disposables.push( - DefaultAmazonQAppInitContext.instance.getAppsToWebViewMessageListener().onMessage(async (message) => { - // Emulate the json format of postMessage - const event = { - data: JSON.stringify(message), - } as any - await ui.messageReceiver(event) - }) - ) - - /** - * We need to manually indicate that the UI is ready since we are using a custom mynah UI event routing - * implementation instead of routing events through the real webview - **/ - DefaultAmazonQAppInitContext.instance.getAppsToWebViewMessagePublisher().setUiReady() - } - - /** - * Create a new tab and then return a new encapsulated tab messenger that makes it easier to directly call - * functionality against a specific tab - */ - public createTab(options?: MessengerOptions) { - const oldTabs = Object.keys(this.mynahUI.getAllTabs()) - - // simulate pressing the new tab button - ;(document.querySelectorAll('.mynah-nav-tabs-wrapper > button.mynah-button')[0] as HTMLButtonElement).click() - const newTabs = Object.keys(this.mynahUI.getAllTabs()) - - const newTabID = newTabs.find((tab) => !oldTabs.includes(tab)) - if (!newTabID) { - assert.fail('Could not find new tab') - } - - return new Messenger(newTabID, this.mynahUIProps, this.mynahUI, options) - } - - public getTabs() { - const tabs = this.mynahUI.getAllTabs() - return Object.entries(tabs).map(([tabId]) => new Messenger(tabId, this.mynahUIProps, this.mynahUI)) - } - - public getSelectedTab() { - const selectedTabId = this.mynahUI.getSelectedTabId() - const selectedTab = this.getTabs().find((tab) => tab.tabID === selectedTabId) - - if (!selectedTab) { - assert.fail('Selected tab not found') - } - return selectedTab - } - - public findTab(title: string) { - return Object.values(this.getTabs()).find((tab) => tab.getStore().tabTitle === title) - } - - public removeTab(tabId: string) { - this.mynahUI.removeTab(tabId, this.lastEventId) - } - - public dispose() { - vscode.Disposable.from(...this.disposables).dispose() - this.mynahUI.destroy() - } -} diff --git a/packages/amazonq/test/e2e/amazonq/framework/jsdomInjector.ts b/packages/amazonq/test/e2e/amazonq/framework/jsdomInjector.ts deleted file mode 100644 index 24e2d361640..00000000000 --- a/packages/amazonq/test/e2e/amazonq/framework/jsdomInjector.ts +++ /dev/null @@ -1,63 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { JSDOM, VirtualConsole } from 'jsdom' - -/** - * JSDOM is used to help hoist MynahUI to running in a node environment vs in the browser (which is what it's made for) - */ -export function injectJSDOM() { - const virtualConsole = new VirtualConsole() - virtualConsole.on('error', (error) => { - // JSDOM can't load scss from mynah UI, just skip it - if (!error.includes('Could not parse CSS stylesheet')) { - console.error(error) - } - }) - - const dom = new JSDOM(undefined, { - pretendToBeVisual: true, - includeNodeLocations: true, - virtualConsole, - }) - global.window = dom.window as unknown as Window & typeof globalThis - global.document = dom.window.document - global.self = dom.window as unknown as Window & typeof globalThis - global.Element = dom.window.Element - global.HTMLElement = dom.window.HTMLElement - global.Node = dom.window.Node - - global.ResizeObserver = class ResizeObserver { - observe() {} - unobserve() {} - disconnect() {} - } - - // jsdom doesn't have support for innerText: https://github.com/jsdom/jsdom/issues/1245 which mynah ui uses - Object.defineProperty(global.Element.prototype, 'innerText', { - get() { - return this.textContent - }, - set(value) { - this.textContent = value - }, - }) - - // jsdom doesn't have support for structuredClone. See https://github.com/jsdom/jsdom/issues/3363 - global.structuredClone = (val: any) => JSON.parse(JSON.stringify(val)) - - global.IntersectionObserver = class IntersectionObserver { - observe() {} - unobserve() {} - disconnect() {} - takeRecords() { - return [] - } - // eslint-disable-next-line unicorn/no-null - root = null - rootMargin = '' - thresholds = [] - } -} diff --git a/packages/amazonq/test/e2e/amazonq/framework/messenger.ts b/packages/amazonq/test/e2e/amazonq/framework/messenger.ts deleted file mode 100644 index 231e93b35be..00000000000 --- a/packages/amazonq/test/e2e/amazonq/framework/messenger.ts +++ /dev/null @@ -1,219 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import { MynahUI, MynahUIProps, MynahUIDataModel } from '@aws/mynah-ui' -import { waitUntil } from 'aws-core-vscode/shared' -import { FollowUpTypes } from 'aws-core-vscode/amazonq' - -export interface MessengerOptions { - waitIntervalInMs?: number - waitTimeoutInMs?: number -} - -/** - * Abstraction over tabIds to make it easier to send messages to specific tabs - */ -export class Messenger { - private defaultWaitIntervalInMs = 5000 - private defaultWaitTimeoutInMs = 600000 - - private waitIntervalInMs: number - private waitTimeoutInMs: number - - constructor( - public readonly tabID: string, - private readonly mynahUIProps: MynahUIProps, - private readonly mynahUI: MynahUI, - options?: MessengerOptions - ) { - this.waitIntervalInMs = options?.waitIntervalInMs ?? this.defaultWaitIntervalInMs - this.waitTimeoutInMs = options?.waitTimeoutInMs ?? this.defaultWaitTimeoutInMs - } - - addChatMessage({ prompt, command }: { prompt?: string; command?: string }) { - if (!this.mynahUIProps.onChatPrompt) { - assert.fail('onChatPrompt must be defined to use it in the tests') - } - - this.mynahUIProps.onChatPrompt(this.tabID, { - prompt, - escapedPrompt: prompt, - command, - }) - } - - clickButton(type: string) { - if (!this.mynahUIProps.onFollowUpClicked) { - assert.fail('onFollowUpClicked must be defined to use it in the tests') - } - - const lastChatItem = this.getChatItems().pop() - const followupOption = lastChatItem?.followUp?.options?.filter((option) => option.type === type) - if (followupOption && followupOption.length > 0) { - this.mynahUIProps.onFollowUpClicked(this.tabID, lastChatItem?.messageId ?? '', followupOption[0]) - return - } - - assert.fail(`Could not find a button with id ${type} on tabID: ${this.tabID}`) - } - - clickInBodyButton(type: string) { - if (!this.mynahUIProps.onInBodyButtonClicked) { - assert.fail('onInBodyButtonClicked must be defined to use it in the tests') - } - - const lastChatItem = this.getChatItems().pop() - const followupButton = lastChatItem?.buttons?.filter((option) => option.id === type) - if (followupButton && followupButton.length > 0) { - this.mynahUIProps.onInBodyButtonClicked(this.tabID, lastChatItem?.messageId ?? '', followupButton[0]) - return - } - - assert.fail(`Could not find a button with id ${type} on tabID: ${this.tabID}`) - } - - clickCustomFormButton(action: { id: string; text?: string; formItemValues?: Record }) { - if (!this.mynahUIProps.onCustomFormAction) { - assert.fail('onCustomFormAction must be defined to use it in the tests') - } - - this.mynahUIProps.onCustomFormAction(this.tabID, action) - } - - clickFileActionButton(filePath: string, actionName: string) { - if (!this.mynahUIProps.onFileActionClick) { - assert.fail('onFileActionClick must be defined to use it in the tests') - } - - this.mynahUIProps.onFileActionClick(this.tabID, this.getFileListMessageId(), filePath, actionName) - } - - findCommand(command: string) { - return this.getCommands() - .map((groups) => groups.commands) - .flat() - .filter((commands) => commands.command === command) - } - - getCommands() { - return [...(this.getStore().quickActionCommands ?? [])] - } - - getChatItems() { - return [...(this.getStore().chatItems ?? [])] - } - - getPlaceholder() { - return this.getStore().promptInputPlaceholder - } - - getFollowUpButton(type: FollowUpTypes) { - const followUpButton = this.getChatItems() - .pop() - ?.followUp?.options?.find((action) => action.type === type) - if (!followUpButton) { - assert.fail(`Could not find follow up button with type ${type}`) - } - return followUpButton - } - - getFileList() { - const chatItems = this.getChatItems() - const fileList = chatItems.find((item) => 'fileList' in item) - if (!fileList) { - assert.fail('Could not find file list') - } - return fileList - } - - getFileListMessageId() { - const fileList = this.getFileList() - const messageId = fileList?.messageId - if (!messageId) { - assert.fail('Could not find file list message id') - } - return messageId - } - - getFilePaths() { - const fileList = this.getFileList() - const filePaths = fileList?.fileList?.filePaths - if (!filePaths) { - assert.fail('Could not find file paths') - } - if (filePaths.length === 0) { - assert.fail('File paths list is empty') - } - return filePaths - } - - getActionsByFilePath(filePath: string) { - const fileList = this.getFileList() - const actions = fileList?.fileList?.actions - return actions?.[filePath] ?? [] - } - - hasButton(type: FollowUpTypes) { - return ( - this.getChatItems() - .pop() - ?.followUp?.options?.map((opt) => opt.type) - .includes(type) ?? false - ) - } - - hasAction(filePath: string, actionName: string) { - return this.getActionsByFilePath(filePath).some((action) => action.name === actionName) - } - - async waitForText(text: string, waitOverrides?: MessengerOptions) { - await this.waitForEvent(() => { - return this.getChatItems().some((chatItem) => chatItem.body === text) - }, waitOverrides) - } - - async waitForButtons(buttons: FollowUpTypes[]) { - return this.waitForEvent(() => { - return buttons.every((value) => this.hasButton(value)) - }) - } - - async waitForChatFinishesLoading() { - return this.waitForEvent(() => this.getStore().loadingChat === false || this.hasButton(FollowUpTypes.Retry)) - } - - async waitForEvent(event: () => boolean, waitOverrides?: MessengerOptions) { - /** - * Wait until the chat has finished loading. This happens when a backend request - * has finished and responded in the chat - */ - const ok = await waitUntil( - async () => { - return event() - }, - { - interval: waitOverrides ? waitOverrides.waitIntervalInMs : this.waitIntervalInMs, - timeout: waitOverrides ? waitOverrides.waitTimeoutInMs : this.waitTimeoutInMs, - truthy: true, - } - ) - - // Do another check just in case the waitUntil time'd out - if (!ok) { - assert.fail( - `Event has not finished loading in: ${waitOverrides ? waitOverrides.waitTimeoutInMs : this.waitTimeoutInMs} ms` - ) - } - } - - getStore(): MynahUIDataModel { - const store = this.mynahUI.getAllTabs()[this.tabID].store - if (!store) { - assert.fail(`${this.tabID} does not have a store`) - } - return store - } -} diff --git a/packages/amazonq/test/e2e/amazonq/framework/text.ts b/packages/amazonq/test/e2e/amazonq/framework/text.ts deleted file mode 100644 index 020792c6835..00000000000 --- a/packages/amazonq/test/e2e/amazonq/framework/text.ts +++ /dev/null @@ -1,29 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as assert from 'assert' -import { ChatItem } from '@aws/mynah-ui' - -/** - * Verify that the text items in expectedText appears in the exact same order in chatItems - * @param chatItems An array of chat items in mynah UI - * @param expectedText An array of expected text items in order - * @returns true if the items in expectedText are found in the correct order in chatItems otherwise false - */ -export function verifyTextOrder(chatItems: ChatItem[], expectedText: RegExp[]) { - let currInd = 0 - for (const item of chatItems) { - const currentExpected = expectedText[currInd] - if (currentExpected && item.body?.match(currentExpected)) { - currInd++ - } - } - - if (currInd !== expectedText.length) { - const chatItemBodies = chatItems.filter((item) => item !== undefined).map((item) => item.body) - const expected = expectedText.join(', ') - assert.fail(`Items did not appear in expected order. Found ${chatItemBodies} but expected ${expected}`) - } -} diff --git a/packages/amazonq/test/e2e/amazonq/review.test.ts b/packages/amazonq/test/e2e/amazonq/review.test.ts deleted file mode 100644 index 5914e3eaa29..00000000000 --- a/packages/amazonq/test/e2e/amazonq/review.test.ts +++ /dev/null @@ -1,611 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - * Zuo - */ - -import assert from 'assert' -import * as vscode from 'vscode' -import { qTestingFramework } from './framework/framework' -import sinon from 'sinon' -import { Messenger } from './framework/messenger' -import { registerAuthHook, using, closeAllEditors } from 'aws-core-vscode/test' -import { loginToIdC } from './utils/setup' -import { - codewhispererDiagnosticSourceLabel, - invalidFileTypeChatMessage, - CodeAnalysisScope, - SecurityScanStep, - amazonqCodeIssueDetailsTabTitle, - CodeWhispererConstants, - CodeScanIssue, -} from 'aws-core-vscode/codewhisperer' -import path from 'path' -import { ScanAction, scanProgressMessage } from '../../../src/app/amazonqScan/models/constants' -import { SecurityIssueProvider } from 'aws-core-vscode/codewhisperer' -import { fs, waitUntil, processUtils } from 'aws-core-vscode/shared' - -function getWorkspaceFolder(): string { - return vscode.workspace.workspaceFolders![0].uri.fsPath -} - -describe('Amazon Q Code Review', function () { - let framework: qTestingFramework - let tab: Messenger - - function extractAndValidateIssues(reviewString: string): Record { - const issueRegex = /- (\w+): `(\d+) issues?`/g - const issues: Record = { - Critical: 0, - High: 0, - Medium: 0, - Low: 0, - Info: 0, - } - const foundCategories = new Set() - - let match - while ((match = issueRegex.exec(reviewString)) !== null) { - const [, severity, count] = match - if (severity in issues) { - issues[severity] = parseInt(count, 10) - foundCategories.add(severity) - } - } - - const expectedCategories = Object.keys(issues) - const missingCategories = expectedCategories.filter((category) => !foundCategories.has(category)) - - assert.deepStrictEqual( - missingCategories.length, - 0, - `Output chat issue format is not correct or it does not have these categories: ${missingCategories.join(', ')}` - ) - return issues - } - - function matchingSecurityDiagnosticCount(diagnostics: vscode.Diagnostic[], message: string, lineNumber?: number) { - const matchingDiagnostics = diagnostics.filter((diagnostic) => { - let matches = diagnostic.message === message - - // Only filter by startLine if it's provided - if (lineNumber !== undefined) { - matches = - matches && diagnostic.range.start.line <= lineNumber && diagnostic.range.end.line >= lineNumber - } - - return matches - }) - - return matchingDiagnostics.length - } - - async function waitForChatItems(index: number, waitTimeoutInMs: number = 5000, waitIntervalInMs: number = 1000) { - await tab.waitForEvent(() => tab.getChatItems().length > index, { - waitTimeoutInMs: waitTimeoutInMs, - waitIntervalInMs: waitIntervalInMs, - }) - } - - async function validateInitialChatMessage() { - tab.addChatMessage({ command: '/review' }) - await waitForChatItems(4) - const fileOrWorkspaceMessage = tab.getChatItems()[4] - assert.deepStrictEqual(fileOrWorkspaceMessage.type, 'ai-prompt') - } - - async function waitForReviewResults(tab: Messenger): Promise { - await waitForChatItems(7, 600_000, 10_000) - const scanResultsMessage = tab.getChatItems()[7] - assert.deepStrictEqual(scanResultsMessage.type, 'answer') - - const scanResultBody = scanResultsMessage.body ?? '' - assert.notDeepStrictEqual(scanResultBody, '') - return scanResultBody - } - - before(async function () { - await using(registerAuthHook('amazonq-test-account'), async () => { - await loginToIdC() - }) - }) - - beforeEach(async () => { - registerAuthHook('amazonq-test-account') - framework = new qTestingFramework('review', true, []) - tab = framework.createTab() - }) - - afterEach(async () => { - await closeAllEditors() - framework.removeTab(tab.tabID) - framework.dispose() - sinon.restore() - }) - - describe('Quick action availability', () => { - it('Shows /review when code review is enabled', async () => { - const command = tab.findCommand('/review') - if (!command.length) { - assert.fail('Could not find command') - } - if (command.length > 1) { - assert.fail('Found too many commands with the name /review') - } - }) - - it('Does NOT show /review when code review is NOT enabled', () => { - framework.dispose() - framework = new qTestingFramework('review', false, []) - const tab = framework.createTab() - const command = tab.findCommand('/review') - if (command.length > 0) { - assert.fail('Found command when it should not have been found') - } - }) - }) - - describe('/review initial chat output', () => { - it('Shows appropriate message when /review is entered', async () => { - tab.addChatMessage({ command: '/review' }) - - await waitForChatItems(4) - const fileOrWorkspaceMessage = tab.getChatItems()[4] - - assert.deepStrictEqual(fileOrWorkspaceMessage.type, 'ai-prompt') - assert.deepStrictEqual( - fileOrWorkspaceMessage.body, - 'Would you like to review your active file or the workspace you have open?' - ) - }) - }) - - describe('/review entry', () => { - describe('No file open when review active file', () => { - it('Shows appropriate message when no file is open', async () => { - await validateInitialChatMessage() - - tab.clickButton(ScanAction.RUN_FILE_SCAN) - - await waitForChatItems(5) - const noFileMessage = tab.getChatItems()[5] - assert.deepStrictEqual(noFileMessage.type, 'answer') - assert.deepStrictEqual(noFileMessage.body, invalidFileTypeChatMessage) - }) - }) - - describe('review insecure file and then fix file', async () => { - it('/review file gives correct critical and high security issues, clicks on view details, generate fix, verify diff, apply fix', async () => { - const testFolder = path.join(getWorkspaceFolder(), 'QCAFolder') - const fileName = 'ProblematicCode.java' - const filePath = path.join(testFolder, fileName) - - await validateInitialChatMessage() - const document = await vscode.workspace.openTextDocument(filePath) - const originalContent = document.getText() - await vscode.window.showTextDocument(document) - - tab.clickButton(ScanAction.RUN_FILE_SCAN) - - await waitForChatItems(6) - const scanningInProgressMessage = tab.getChatItems()[6] - assert.deepStrictEqual( - scanningInProgressMessage.body, - scanProgressMessage(SecurityScanStep.CREATE_SCAN_JOB, CodeAnalysisScope.FILE_ON_DEMAND, fileName) - ) - - const scanResultBody = await waitForReviewResults(tab) - - const issues = extractAndValidateIssues(scanResultBody) - assert.deepStrictEqual( - issues.Critical >= 1, - true, - `critical issue ${issues.Critical} is not larger or equal to 1` - ) - - const uri = vscode.Uri.file(filePath) - const securityDiagnostics = vscode.languages - .getDiagnostics(uri) - .filter((diagnostic) => diagnostic.source === codewhispererDiagnosticSourceLabel) - - assert.ok(securityDiagnostics.length > 0, 'No security diagnostics found') - - // at least 1 exact critical issue matches - assert.ok( - matchingSecurityDiagnosticCount(securityDiagnostics, 'CWE-798 - Hardcoded credentials', 21) >= 1 - ) - - // Find one diagnostic - const sampleDiagnostic = securityDiagnostics[0] - assert.ok(sampleDiagnostic, 'Could not find critical issue diagnostic') - - const range = new vscode.Range(sampleDiagnostic.range.start, sampleDiagnostic.range.end) - - const codeActions = await vscode.commands.executeCommand( - 'vscode.executeCodeActionProvider', - uri, - range - ) - - await new Promise((resolve) => setTimeout(resolve, 1000)) - - // Find the "View details" code action - const viewDetailsAction = codeActions?.find((action) => action.title.includes('View details')) - assert.ok(viewDetailsAction, 'Could not find View details code action') - - // Execute the view details command - if (viewDetailsAction?.command) { - await vscode.commands.executeCommand( - viewDetailsAction.command.command, - ...viewDetailsAction.command.arguments! - ) - } - - // Wait for the webview panel to open with polling - const webviewPanel = await waitUntil( - async () => { - const panels = vscode.window.tabGroups.all - .flatMap((group) => group.tabs) - .filter((tab) => tab.label === amazonqCodeIssueDetailsTabTitle) - .map((tab) => tab.input) - .filter((input): input is vscode.WebviewPanel => input !== undefined) - - return panels.length > 0 ? panels[0] : undefined - }, - { - timeout: 20_000, - interval: 1000, - truthy: false, - } - ) - - await new Promise((resolve) => setTimeout(resolve, 1000)) - - assert.ok(webviewPanel, 'Security issue webview panel did not open after waiting') - - // Wait until viewDetailsAction.command is defined - const viewDetailsActionDefined = await waitUntil( - async () => { - return viewDetailsAction.command?.arguments !== undefined - ? viewDetailsAction.command - : undefined - }, - { - timeout: 10_000, - interval: 500, - truthy: true, - } - ) - await new Promise((resolve) => setTimeout(resolve, 1000)) - - assert.ok(viewDetailsActionDefined, 'viewDetailsAction.command was not defined after waiting') - - const issue = viewDetailsActionDefined.arguments?.[0] as CodeScanIssue - console.log('issue', issue) - - // Wait for the fix to be generated with polling - const updatedIssue = await waitUntil( - async () => { - const foundIssue = SecurityIssueProvider.instance.issues - .flatMap(({ issues }) => issues) - .find((i) => i.findingId === issue.findingId) - - return foundIssue?.suggestedFixes?.length !== undefined && - foundIssue?.suggestedFixes?.length > 0 - ? foundIssue - : undefined - }, - { - timeout: CodeWhispererConstants.codeFixJobTimeoutMs + 20_000, - interval: CodeWhispererConstants.codeFixJobPollingIntervalMs, - truthy: true, - } - ) - - await new Promise((resolve) => setTimeout(resolve, 1000)) - - console.log('updated issue', updatedIssue) - console.log('original issue', issue) - - // Verify the fix was generated by checking if the issue has suggestedFixes - assert.ok(updatedIssue, 'Could not find updated issue') - assert.ok(updatedIssue.suggestedFixes.length > 0, 'No suggested fixes were generated') - - // Get the suggested fix and verify it contains diff markers - const suggestedFix = updatedIssue.suggestedFixes[0] - const suggestedFixDiff = suggestedFix.code - assert.ok(suggestedFixDiff, 'No suggested fix code was found') - assert.ok( - suggestedFixDiff.includes('-') && suggestedFixDiff.includes('+'), - 'Suggested fix does not contain diff markers' - ) - - // Parse the diff to extract removed and added lines - const diffLines = suggestedFixDiff.split('\n') - const removedLines = diffLines - .filter((line) => line.startsWith('-') && !line.startsWith('---')) - .map((line) => line.substring(1).trim()) - const addedLines = diffLines - .filter((line) => line.startsWith('+') && !line.startsWith('+++')) - .map((line) => line.substring(1).trim()) - - // Make sure we found some changes in the diff - assert.ok(addedLines.length + removedLines.length > 0, 'No added or deleted lines found in the diff') - - // Apply the fix - await vscode.commands.executeCommand('aws.amazonq.applySecurityFix', updatedIssue, filePath, 'webview') - - // Wait for the fix to be applied - await new Promise((resolve) => setTimeout(resolve, 1000)) - - // Verify the fix was applied to the file - const updatedDocument = await vscode.workspace.openTextDocument(filePath) - const updatedContent = updatedDocument.getText() - - // Check that the content has changed - assert.notStrictEqual( - updatedContent, - originalContent, - 'File content did not change after applying the fix' - ) - - // Count occurrences of each line in original and updated content - const countOccurrences = (text: string, line: string): number => { - const regex = new RegExp(`^\\s*${line.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*$`, 'gm') - const matches = text.match(regex) - return matches ? matches.length : 0 - } - - // Create a dictionary to track expected line count changes - const lineCountChanges: Record = {} - - // Process removed lines (decrement count) - for (const removedLine of removedLines) { - if (removedLine.trim()) { - // Skip empty lines - const trimmedLine = removedLine.trim() - lineCountChanges[trimmedLine] = (lineCountChanges[trimmedLine] || 0) - 1 - } - } - - // Process added lines (increment count) - for (const addedLine of addedLines) { - if (addedLine.trim()) { - // Skip empty lines - const trimmedLine = addedLine.trim() - lineCountChanges[trimmedLine] = (lineCountChanges[trimmedLine] || 0) + 1 - } - } - - // Verify all line count changes match expectations - for (const [line, expectedChange] of Object.entries(lineCountChanges)) { - const originalCount = countOccurrences(originalContent, line) - const updatedCount = countOccurrences(updatedContent, line) - const actualChange = updatedCount - originalCount - - assert.strictEqual( - actualChange, - expectedChange, - `Line "${line}" count change mismatch: expected ${expectedChange}, got ${actualChange} (original: ${originalCount}, updated: ${updatedCount})` - ) - } - - // Revert the changes - await fs.writeFile(uri, originalContent) - - // Wait a moment for the file system to update - await new Promise((resolve) => setTimeout(resolve, 1000)) - - // Verify the file was reverted - const revertedDocument = await vscode.workspace.openTextDocument(filePath) - const revertedContent = revertedDocument.getText() - - assert.deepStrictEqual(revertedContent, originalContent, 'File content was not properly reverted') - }) - }) - - describe('/review file and project scans should respect ignored line findings', async () => { - const testFolder = path.join(getWorkspaceFolder(), 'QCAFolder') - const fileName = 'ProblematicCode.java' - const filePath = path.join(testFolder, fileName) - let document: vscode.TextDocument - - beforeEach(async () => { - await validateInitialChatMessage() - - document = await vscode.workspace.openTextDocument(filePath) - await vscode.window.showTextDocument(document) - - const editor = vscode.window.activeTextEditor - - if (editor) { - const position = new vscode.Position(20, 0) - await editor.edit((editBuilder) => { - editBuilder.insert(position, '// amazonq-ignore-next-line\n') - }) - await document.save() - } - }) - - it('/review file respect ignored line findings', async () => { - tab.clickButton(ScanAction.RUN_FILE_SCAN) - }) - - it('/review project respect ignored line findings', async () => { - tab.clickButton(ScanAction.RUN_PROJECT_SCAN) - }) - - afterEach(async () => { - await waitForReviewResults(tab) - - const uri = vscode.Uri.file(filePath) - const securityDiagnostics: vscode.Diagnostic[] = vscode.languages - .getDiagnostics(uri) - .filter((diagnostic) => diagnostic.source === codewhispererDiagnosticSourceLabel) - - // cannot find this ignored issue - assert.equal( - matchingSecurityDiagnosticCount(securityDiagnostics, 'CWE-798 - Hardcoded credentials', 22), - 0 - ) - - const editor = vscode.window.activeTextEditor - if (editor) { - await editor.edit((editBuilder) => { - const lineRange = editor.document.lineAt(20).rangeIncludingLineBreak - editBuilder.delete(lineRange) - }) - await document.save() - } - }) - }) - - describe('Project and file scans should return at least 1 LLM findings', async () => { - const testFolder = path.join(getWorkspaceFolder(), 'QCAFolder') - const fileName = 'RLinker.java' - const filePath = path.join(testFolder, fileName) - let document: vscode.TextDocument - - function assertAtLeastOneLLMFindings(securityDiagnostics: vscode.Diagnostic[]) { - const readabilityIssuesCount = matchingSecurityDiagnosticCount( - securityDiagnostics, - 'Readability and maintainability issues detected.' - ) - const performanceIssuesCount = matchingSecurityDiagnosticCount( - securityDiagnostics, - 'Performance inefficiencies detected in code.' - ) - const errorHandlingIssuesCount = matchingSecurityDiagnosticCount( - securityDiagnostics, - 'Inadequate error handling detected.' - ) - const namingIssuesCount = matchingSecurityDiagnosticCount( - securityDiagnostics, - 'Inconsistent or unclear naming detected.' - ) - const loggingIssuesCount = matchingSecurityDiagnosticCount( - securityDiagnostics, - 'Insufficient or improper logging found.' - ) - assert.ok( - readabilityIssuesCount + - performanceIssuesCount + - errorHandlingIssuesCount + - namingIssuesCount + - loggingIssuesCount > - 0, - 'No LLM findings were found' - ) - } - - beforeEach(async () => { - await validateInitialChatMessage() - }) - - it('file scan returns at least 1 LLM findings', async () => { - document = await vscode.workspace.openTextDocument(filePath) - await vscode.window.showTextDocument(document) - - tab.clickButton(ScanAction.RUN_FILE_SCAN) - - await waitForChatItems(6) - const scanningInProgressMessage = tab.getChatItems()[6] - assert.deepStrictEqual( - scanningInProgressMessage.body, - scanProgressMessage(SecurityScanStep.CREATE_SCAN_JOB, CodeAnalysisScope.FILE_ON_DEMAND, fileName) - ) - - const scanResultBody = await waitForReviewResults(tab) - - const issues = extractAndValidateIssues(scanResultBody) - - assert.deepStrictEqual( - issues.Critical + issues.High + issues.Medium + issues.Low + issues.Info >= 1, - true, - `There are no issues detected when there should be at least 1` - ) - - const uri = vscode.Uri.file(filePath) - const securityDiagnostics: vscode.Diagnostic[] = vscode.languages - .getDiagnostics(uri) - .filter((diagnostic) => diagnostic.source === codewhispererDiagnosticSourceLabel) - - assertAtLeastOneLLMFindings(securityDiagnostics) - }) - - it('project scan returns at least 1 LLM findings', async () => { - const fileDir = path.join(getWorkspaceFolder()) - - try { - // Initialize git repository to make RLinker.java appear in git diff - await processUtils.ChildProcess.run('git', ['init'], { spawnOptions: { cwd: fileDir } }) - await processUtils.ChildProcess.run('git', ['add', 'QCAFolder/RLinker.java'], { - spawnOptions: { cwd: fileDir }, - }) - await processUtils.ChildProcess.run('git', ['config', 'user.name', 'Test'], { - spawnOptions: { cwd: fileDir }, - }) - await processUtils.ChildProcess.run('git', ['config', 'user.email', 'test@example.com'], { - spawnOptions: { cwd: fileDir }, - }) - await processUtils.ChildProcess.run('git', ['commit', '-m', 'Initial commit'], { - spawnOptions: { cwd: fileDir }, - }) - - document = await vscode.workspace.openTextDocument(filePath) - await vscode.window.showTextDocument(document) - - const editor = vscode.window.activeTextEditor - - if (editor) { - const position = new vscode.Position(20, 0) - await editor.edit((editBuilder) => { - editBuilder.insert(position, '\n') - }) - // save file - await document.save() - } - - // Run the project scan - tab.clickButton(ScanAction.RUN_PROJECT_SCAN) - - await waitForChatItems(6) - const scanningInProgressMessage = tab.getChatItems()[6] - assert.deepStrictEqual( - scanningInProgressMessage.body, - scanProgressMessage(SecurityScanStep.CREATE_SCAN_JOB, CodeAnalysisScope.PROJECT) - ) - - const scanResultBody = await waitForReviewResults(tab) - - const issues = extractAndValidateIssues(scanResultBody) - - assert.deepStrictEqual( - issues.Critical + issues.High + issues.Medium + issues.Low + issues.Info >= 1, - true, - `There are no issues detected when there should be at least 1` - ) - - const uri = vscode.Uri.file(filePath) - const securityDiagnostics: vscode.Diagnostic[] = vscode.languages - .getDiagnostics(uri) - .filter((diagnostic) => diagnostic.source === codewhispererDiagnosticSourceLabel) - - assertAtLeastOneLLMFindings(securityDiagnostics) - - const editor2 = vscode.window.activeTextEditor - if (editor2) { - await editor2.edit((editBuilder) => { - const lineRange = editor2.document.lineAt(20).rangeIncludingLineBreak - editBuilder.delete(lineRange) - }) - await document.save() - } - } finally { - // Clean up git repository - await fs.delete(path.join(fileDir, '.git'), { recursive: true }) - } - }) - }) - }) -}) diff --git a/packages/amazonq/test/e2e/amazonq/template.test.ts b/packages/amazonq/test/e2e/amazonq/template.test.ts deleted file mode 100644 index 42857575583..00000000000 --- a/packages/amazonq/test/e2e/amazonq/template.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -// jscpd:ignore-start -import assert from 'assert' -import { qTestingFramework } from './framework/framework' -import sinon from 'sinon' -import { Messenger } from './framework/messenger' -import { MynahUIDataModel } from '@aws/mynah-ui' -import { assertQuickActions } from './assert' -import { registerAuthHook, using } from 'aws-core-vscode/test' -import { loginToIdC } from './utils/setup' - -describe.skip('Amazon Q Test Template', function () { - let framework: qTestingFramework - let tab: Messenger - let store: MynahUIDataModel - - const availableCommands: string[] = [] - - before(async function () { - /** - * Login to the amazonq-test-account. When running in CI this has unlimited - * calls to the backend api - */ - await using(registerAuthHook('amazonq-test-account'), async () => { - await loginToIdC() - }) - }) - - beforeEach(() => { - // Make sure you're logged in before every test - registerAuthHook('amazonq-test-account') - - // TODO change unknown to the tab type you want to test - framework = new qTestingFramework('unknown', true, []) - tab = framework.getTabs()[0] // use the default tab that gets created - framework.createTab() // alternatively you can create a new tab - store = tab.getStore() - }) - - afterEach(() => { - framework.removeTab(tab.tabID) - framework.dispose() - sinon.restore() - }) - - it(`Shows quick actions: ${availableCommands.join(', ')}`, async () => { - assertQuickActions(tab, availableCommands) - }) - - it('Shows title', () => { - assert.deepStrictEqual(store.tabTitle, '') - }) - - it('Shows placeholder', () => { - assert.deepStrictEqual(store.promptInputPlaceholder, '') - }) - - describe('clicks examples', () => {}) - - describe('sends message', async () => {}) -}) - -// jscpd:ignore-end diff --git a/packages/amazonq/test/e2e/amazonq/transformByQ.test.ts b/packages/amazonq/test/e2e/amazonq/transformByQ.test.ts deleted file mode 100644 index 7a9273a1e84..00000000000 --- a/packages/amazonq/test/e2e/amazonq/transformByQ.test.ts +++ /dev/null @@ -1,407 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import { qTestingFramework } from './framework/framework' -import sinon from 'sinon' -import { Messenger } from './framework/messenger' -import { - CodeWhispererConstants, - JDKVersion, - TransformationType, - transformByQState, -} from 'aws-core-vscode/codewhisperer' -import { GumbyController, setMaven, startTransformByQ, TabsStorage } from 'aws-core-vscode/amazonqGumby' -import { using, registerAuthHook, TestFolder } from 'aws-core-vscode/test' -import { loginToIdC } from './utils/setup' -import { fs } from 'aws-core-vscode/shared' -import path from 'path' - -describe('Amazon Q Code Transformation', function () { - let framework: qTestingFramework - let tab: Messenger - - before(async function () { - await using(registerAuthHook('amazonq-test-account'), async () => { - await loginToIdC() - }) - }) - - beforeEach(() => { - registerAuthHook('amazonq-test-account') - framework = new qTestingFramework('gumby', true, []) - tab = framework.createTab() - }) - - afterEach(() => { - framework.removeTab(tab.tabID) - framework.dispose() - sinon.restore() - }) - - describe('Quick action availability', () => { - it('Can invoke /transform when QCT is enabled', async () => { - const command = tab.findCommand('/transform') - if (!command) { - assert.fail('Could not find command') - } - - if (command.length > 1) { - assert.fail('Found too many commands with the name /transform') - } - }) - - it('CANNOT invoke /transform when QCT is NOT enabled', () => { - framework.dispose() - framework = new qTestingFramework('gumby', false, []) - const tab = framework.createTab() - const command = tab.findCommand('/transform') - if (command.length > 0) { - assert.fail('Found command when it should not have been found') - } - }) - }) - - describe('Starting a transformation from chat', () => { - it('Can click through all user input forms for a Java upgrade', async () => { - sinon.stub(startTransformByQ, 'getValidSQLConversionCandidateProjects').resolves([]) - sinon.stub(GumbyController.prototype, 'validateLanguageUpgradeProjects' as keyof GumbyController).resolves([ - { - name: 'qct-sample-java-8-app-main', - path: '/Users/alias/Desktop/qct-sample-java-8-app-main', - JDKVersion: JDKVersion.JDK8, - }, - ]) - - transformByQState.setSourceJDKVersion(JDKVersion.JDK8) - transformByQState.setTargetJDKVersion(JDKVersion.JDK17) - - tab.addChatMessage({ command: '/transform' }) - - // wait for /transform to respond with some intro messages and the first user input form - await tab.waitForEvent(() => tab.getChatItems().length > 3, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const projectForm = tab.getChatItems().pop() - assert.strictEqual(projectForm?.formItems?.[0]?.id ?? undefined, 'GumbyTransformLanguageUpgradeProjectForm') - - const projectFormItemValues = { - GumbyTransformLanguageUpgradeProjectForm: '/Users/alias/Desktop/qct-sample-java-8-app-main', - GumbyTransformJdkFromForm: '8', - GumbyTransformJdkToForm: '17', - } - const projectFormValues: Record = { ...projectFormItemValues } - // TODO: instead of stubbing, can we create a tab in qTestingFramework with tabType passed in? - // Mynah-UI updates tab type like this: this.tabsStorage.updateTabTypeFromUnknown(affectedTabId, 'gumby') - sinon - .stub(TabsStorage.prototype, 'getTab') - .returns({ id: tab.tabID, status: 'free', type: 'gumby', isSelected: true }) - tab.clickCustomFormButton({ - id: 'gumbyLanguageUpgradeTransformFormConfirm', - text: 'Confirm', - formItemValues: projectFormValues, - }) - - // 3 additional chat messages (including message with 2nd form) get sent after 1st form submitted; wait for all of them - await tab.waitForEvent(() => tab.getChatItems().length > 6, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const skipTestsForm = tab.getChatItems().pop() - assert.strictEqual(skipTestsForm?.formItems?.[0]?.id ?? undefined, 'GumbyTransformSkipTestsForm') - - const skipTestsFormItemValues = { - GumbyTransformSkipTestsForm: 'Run unit tests', - } - const skipTestsFormValues: Record = { ...skipTestsFormItemValues } - tab.clickCustomFormButton({ - id: 'gumbyTransformSkipTestsFormConfirm', - text: 'Confirm', - formItemValues: skipTestsFormValues, - }) - - // 2 additional chat messages get sent after 3rd form submitted; wait for both of them - await tab.waitForEvent(() => tab.getChatItems().length > 8, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - - const customDependencyVersionPrompt = tab.getChatItems().pop() - assert.strictEqual( - customDependencyVersionPrompt?.body?.includes('You can optionally upload a YAML file'), - true - ) - tab.clickCustomFormButton({ id: 'gumbyTransformFormContinue' }) - - // 2 additional chat messages get sent after Continue button clicked; wait for both of them - await tab.waitForEvent(() => tab.getChatItems().length > 10, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - - const sourceJdkPathPrompt = tab.getChatItems().pop() - assert.strictEqual(sourceJdkPathPrompt?.body?.includes('Enter the path to JDK 8'), true) - - tab.addChatMessage({ prompt: '/dummy/path/to/jdk8' }) - - // 2 additional chat messages get sent after JDK path submitted; wait for both of them - await tab.waitForEvent(() => tab.getChatItems().length > 12, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const jdkPathResponse = tab.getChatItems().pop() - // this 'Sorry' message is OK - just making sure that the UI components are working correctly - assert.strictEqual(jdkPathResponse?.body?.includes("Sorry, I couldn't locate your Java installation"), true) - - const tmpDir = (await TestFolder.create()).path - - transformByQState.setSummaryFilePath(path.join(tmpDir, 'summary.md')) - transformByQState.setToPartiallySucceeded() - - transformByQState - .getChatMessenger() - ?.sendJobFinishedMessage(tab.tabID, CodeWhispererConstants.viewProposedChangesChatMessage) - - tab.clickCustomFormButton({ - id: 'gumbyViewSummary', - text: 'View summary', - }) - - await tab.waitForEvent(() => tab.getChatItems().length > 13, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - - const viewSummaryChatItem = tab.getChatItems().pop() - assert.strictEqual(viewSummaryChatItem?.body?.includes('view a summary'), true) - }) - - it('CANNOT do a Java 21 to Java 17 transformation', async () => { - sinon.stub(startTransformByQ, 'getValidSQLConversionCandidateProjects').resolves([]) - sinon.stub(GumbyController.prototype, 'validateLanguageUpgradeProjects' as keyof GumbyController).resolves([ - { - name: 'qct-sample-java-8-app-main', - path: '/Users/alias/Desktop/qct-sample-java-8-app-main', - JDKVersion: JDKVersion.JDK21, - }, - ]) - tab.addChatMessage({ command: '/transform' }) - await tab.waitForEvent(() => tab.getChatItems().length > 3, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const projectForm = tab.getChatItems().pop() - assert.strictEqual(projectForm?.formItems?.[0]?.id ?? undefined, 'GumbyTransformLanguageUpgradeProjectForm') - - const projectFormItemValues = { - GumbyTransformLanguageUpgradeProjectForm: '/Users/alias/Desktop/qct-sample-java-8-app-main', - GumbyTransformJdkFromForm: '21', - GumbyTransformJdkToForm: '17', - } - const projectFormValues: Record = { ...projectFormItemValues } - tab.clickCustomFormButton({ - id: 'gumbyLanguageUpgradeTransformFormConfirm', - text: 'Confirm', - formItemValues: projectFormValues, - }) - await tab.waitForEvent(() => tab.getChatItems().length > 4, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const errorMessage = tab.getChatItems().pop() - assert.strictEqual(errorMessage?.body, CodeWhispererConstants.invalidFromToJdkChatMessage) - }) - - it('Can provide metadata file for a SQL conversion', async () => { - sinon.stub(startTransformByQ, 'getValidSQLConversionCandidateProjects').resolves([ - { - name: 'OracleExample', - path: '/Users/alias/Desktop/OracleExample', - JDKVersion: JDKVersion.JDK17, - }, - ]) - sinon.stub(startTransformByQ, 'getValidLanguageUpgradeCandidateProjects').resolves([]) - sinon.stub(GumbyController.prototype, 'validateSQLConversionProjects' as keyof GumbyController).resolves([ - { - name: 'OracleExample', - path: '/Users/alias/Desktop/OracleExample', - JDKVersion: JDKVersion.JDK17, - }, - ]) - - tab.addChatMessage({ command: '/transform' }) - - // wait for /transform to respond with some intro messages and the first user input message - await tab.waitForEvent(() => tab.getChatItems().length > 3, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const selectMetadataMessage = tab.getChatItems().pop() - assert.strictEqual( - selectMetadataMessage?.body?.includes('I can convert the embedded SQL') ?? undefined, - true - ) - - // verify that we processed the metadata file - const processMetadataFileStub = sinon.stub( - GumbyController.prototype, - 'processMetadataFile' as keyof GumbyController - ) - tab.clickCustomFormButton({ - id: 'gumbySQLConversionMetadataTransformFormConfirm', - text: 'Select metadata file', - }) - sinon.assert.calledOnce(processMetadataFileStub) - }) - - it('Can choose "language upgrade" when eligible for a Java upgrade AND SQL conversion', async () => { - sinon.stub(startTransformByQ, 'getValidSQLConversionCandidateProjects').resolves([ - { - name: 'OracleExample', - path: '/Users/alias/Desktop/OracleExample', - JDKVersion: JDKVersion.JDK17, - }, - ]) - sinon.stub(startTransformByQ, 'getValidLanguageUpgradeCandidateProjects').resolves([ - { - name: 'qct-sample-java-8-app-main', - path: '/Users/alias/Desktop/qct-sample-java-8-app-main', - JDKVersion: JDKVersion.JDK8, - }, - ]) - - tab.addChatMessage({ command: '/transform' }) - - // wait for /transform to respond with some intro messages and a prompt asking user what they want to do - await tab.waitForEvent(() => tab.getChatItems().length > 2, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const prompt = tab.getChatItems().pop() - assert.strictEqual( - prompt?.body?.includes('You can enter "language upgrade" or "sql conversion"') ?? undefined, - true - ) - - // 3 additional chat messages get sent after user enters a choice; wait for all of them - tab.addChatMessage({ prompt: 'language upgrade' }) - await tab.waitForEvent(() => tab.getChatItems().length > 5, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const projectForm = tab.getChatItems().pop() - assert.strictEqual(projectForm?.formItems?.[0]?.id ?? undefined, 'GumbyTransformLanguageUpgradeProjectForm') - }) - - it('Can choose "sql conversion" when eligible for a Java upgrade AND SQL conversion', async () => { - sinon.stub(startTransformByQ, 'getValidSQLConversionCandidateProjects').resolves([ - { - name: 'OracleExample', - path: '/Users/alias/Desktop/OracleExample', - JDKVersion: JDKVersion.JDK17, - }, - ]) - sinon.stub(startTransformByQ, 'getValidLanguageUpgradeCandidateProjects').resolves([ - { - name: 'qct-sample-java-8-app-main', - path: '/Users/alias/Desktop/qct-sample-java-8-app-main', - JDKVersion: JDKVersion.JDK8, - }, - ]) - - tab.addChatMessage({ command: '/transform' }) - - // wait for /transform to respond with some intro messages and a prompt asking user what they want to do - await tab.waitForEvent(() => tab.getChatItems().length > 2, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const prompt = tab.getChatItems().pop() - assert.strictEqual( - prompt?.body?.includes('You can enter "language upgrade" or "sql conversion"') ?? undefined, - true - ) - - // 3 additional chat messages get sent after user enters a choice; wait for all of them - tab.addChatMessage({ prompt: 'sql conversion' }) - await tab.waitForEvent(() => tab.getChatItems().length > 5, { - waitTimeoutInMs: 5000, - waitIntervalInMs: 1000, - }) - const selectMetadataMessage = tab.getChatItems().pop() - assert.strictEqual( - selectMetadataMessage?.body?.includes('I can convert the embedded SQL') ?? undefined, - true - ) - }) - }) - - // TODO: enable when we no longer get throttled on CreateUploadUrl and other APIs - describe.skip('Running a Java upgrade from start to finish', async function () { - let tempDir = '' - let tempFileName = '' - let tempFilePath = '' - - const javaFileContents = `public class MyApp { - public static void main(String[] args) { - Integer temp = new Integer("1234"); - } - }` - - const pomXmlContents = ` - - 4.0.0 - - com.example - basic-java-app - 1.0-SNAPSHOT - - - 1.8 - 1.8 - UTF-8 - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 1.8 - 1.8 - - - - - ` - - before(async function () { - tempDir = path.join((await TestFolder.create()).path, 'qct-java-upgrade-test') - tempFileName = 'MyApp.java' - tempFilePath = path.join(tempDir, tempFileName) - await fs.writeFile(tempFilePath, javaFileContents) - tempFileName = 'pom.xml' - tempFilePath = path.join(tempDir, tempFileName) - await fs.writeFile(tempFilePath, pomXmlContents) - }) - - after(async function () { - await fs.delete(tempDir, { recursive: true }) - }) - - it('WHEN transforming a Java 8 project E2E THEN job is successful', async function () { - transformByQState.setTransformationType(TransformationType.LANGUAGE_UPGRADE) - setMaven() - await startTransformByQ.processLanguageUpgradeTransformFormInput(tempDir, JDKVersion.JDK8, JDKVersion.JDK17) - await startTransformByQ.startTransformByQ() - assert.strictEqual(transformByQState.getPolledJobStatus(), 'COMPLETED') - }) - }) -}) diff --git a/packages/amazonq/test/e2e/amazonq/utils/setup.ts b/packages/amazonq/test/e2e/amazonq/utils/setup.ts deleted file mode 100644 index dd82b1f0b19..00000000000 --- a/packages/amazonq/test/e2e/amazonq/utils/setup.ts +++ /dev/null @@ -1,26 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import { AuthUtil } from 'aws-core-vscode/codewhisperer' - -export async function loginToIdC() { - const authState = await AuthUtil.instance.getChatAuthState() - if (process.env['AWS_TOOLKIT_AUTOMATION'] === 'local') { - if (authState.amazonQ !== 'connected') { - throw new Error('You will need to login manually before running tests.') - } - return - } - - const startUrl = process.env['TEST_SSO_STARTURL'] - const region = process.env['TEST_SSO_REGION'] - - if (!startUrl || !region) { - throw new Error( - 'TEST_SSO_STARTURL and TEST_SSO_REGION are required environment variables when running Amazon Q E2E tests' - ) - } - - await AuthUtil.instance.connectToEnterpriseSso(startUrl, region) -} diff --git a/packages/amazonq/test/e2e/amazonq/welcome.test.ts b/packages/amazonq/test/e2e/amazonq/welcome.test.ts deleted file mode 100644 index d9f0ccd66bf..00000000000 --- a/packages/amazonq/test/e2e/amazonq/welcome.test.ts +++ /dev/null @@ -1,103 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import { qTestingFramework } from './framework/framework' -import sinon from 'sinon' -import { Messenger } from './framework/messenger' -import { MynahUIDataModel } from '@aws/mynah-ui' -import { FeatureContext } from 'aws-core-vscode/shared' -import { assertContextCommands, assertQuickActions } from './assert' - -describe('Amazon Q Welcome page', function () { - let framework: qTestingFramework - let tab: Messenger - let store: MynahUIDataModel - - const availableCommands = ['/dev', '/test', '/review', '/doc', '/transform'] - - const highlightCommand: FeatureContext = { - name: 'highlightCommand', - value: { - stringValue: '@highlight', - }, - variation: 'highlight command desc', - } - beforeEach(() => { - framework = new qTestingFramework('welcome', true, [['highlightCommand', highlightCommand]], 0) - tab = framework.getTabs()[0] // use the default tab that gets created - store = tab.getStore() - }) - - afterEach(() => { - framework.removeTab(tab.tabID) - framework.dispose() - sinon.restore() - }) - - it(`Shows quick actions: ${availableCommands.join(', ')}`, async () => { - assertQuickActions(tab, availableCommands) - }) - - it('Shows context commands', async () => { - assertContextCommands(tab, ['@workspace', '@highlight']) - }) - - describe('shows 3 times', async () => { - it('new tabs', () => { - framework.createTab() - framework.createTab() - framework.createTab() - framework.createTab() - - let welcomeCount = 0 - for (const tab of framework.getTabs()) { - if (tab.getStore().tabTitle === 'Welcome to Q') { - welcomeCount++ - } - } - // 3 welcome tabs - assert.deepStrictEqual(welcomeCount, 3) - - // 2 normal tabs - assert.deepStrictEqual(framework.getTabs().length - welcomeCount, 2) - }) - - it('new windows', () => { - // check the initial window - assert.deepStrictEqual(store.tabTitle, 'Welcome to Q') - framework.dispose() - - // check when theres already been two welcome tabs shown - framework = new qTestingFramework('welcome', true, [], 2) - const secondStore = framework.getTabs()[0].getStore() - assert.deepStrictEqual(secondStore.tabTitle, 'Welcome to Q') - framework.dispose() - - // check when theres already been three welcome tabs shown - framework = new qTestingFramework('welcome', true, [], 3) - const thirdStore = framework.getTabs()[0].getStore() - assert.deepStrictEqual(thirdStore.tabTitle, 'Chat') - framework.dispose() - }) - }) - - describe('Welcome actions', () => { - it('explore', () => { - tab.clickInBodyButton('explore') - - // explore opens in a new tab - const exploreTabStore = framework.findTab('Explore')?.getStore() - assert.strictEqual(exploreTabStore?.tabTitle, 'Explore') - }) - - it('quick-start', async () => { - tab.clickInBodyButton('quick-start') - - // clicking quick start opens in the current tab and changes the compact mode - assert.deepStrictEqual(tab.getStore().compactMode, false) - }) - }) -}) diff --git a/packages/amazonq/test/e2e/index.ts b/packages/amazonq/test/e2e/index.ts deleted file mode 100644 index 065a2cd8bc8..00000000000 --- a/packages/amazonq/test/e2e/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { runTests } from 'aws-core-vscode/test' -import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' - -export function run(): Promise { - return runTests(process.env.TEST_DIR ?? 'test/e2e', VSCODE_EXTENSION_ID.amazonq, [ - '../../core/dist/src/testInteg/globalSetup.test.ts', - ]) -} diff --git a/packages/amazonq/test/e2e/inline/inline.test.ts b/packages/amazonq/test/e2e/inline/inline.test.ts deleted file mode 100644 index 43a9f67ab73..00000000000 --- a/packages/amazonq/test/e2e/inline/inline.test.ts +++ /dev/null @@ -1,244 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import assert from 'assert' -import { - closeAllEditors, - getTestWindow, - registerAuthHook, - resetCodeWhispererGlobalVariables, - TestFolder, - toTextEditor, - using, -} from 'aws-core-vscode/test' -import { RecommendationHandler, RecommendationService, session } from 'aws-core-vscode/codewhisperer' -import { Commands, globals, sleep, waitUntil, collectionUtil } from 'aws-core-vscode/shared' -import { loginToIdC } from '../amazonq/utils/setup' - -describe('Amazon Q Inline', async function () { - const retries = 3 - this.retries(retries) - - let tempFolder: string - const waitOptions = { - interval: 500, - timeout: 10000, - retryOnFail: false, - } - - before(async function () { - await using(registerAuthHook('amazonq-test-account'), async () => { - await loginToIdC() - }) - }) - - beforeEach(async function () { - registerAuthHook('amazonq-test-account') - const folder = await TestFolder.create() - tempFolder = folder.path - await closeAllEditors() - await resetCodeWhispererGlobalVariables() - }) - - afterEach(async function () { - await closeAllEditors() - if (this.currentTest?.state === undefined || this.currentTest?.isFailed() || this.currentTest?.isPending()) { - logUserDecisionStatus() - } - }) - - function logUserDecisionStatus() { - const events = getUserTriggerDecision() - console.table({ - 'telemetry events': JSON.stringify(events), - 'recommendation service status': RecommendationService.instance.isRunning, - }) - } - - async function setupEditor({ name, contents }: { name?: string; contents?: string } = {}) { - const fileName = name ?? 'test.ts' - const textContents = - contents ?? - `function fib() { - - -}` - await toTextEditor(textContents, fileName, tempFolder, { - selection: new vscode.Range(new vscode.Position(1, 4), new vscode.Position(1, 4)), - }) - } - - async function waitForRecommendations() { - const suggestionShown = await waitUntil(async () => session.getSuggestionState(0) === 'Showed', waitOptions) - if (!suggestionShown) { - throw new Error(`Suggestion did not show. Suggestion States: ${JSON.stringify(session.suggestionStates)}`) - } - const suggestionVisible = await waitUntil( - async () => RecommendationHandler.instance.isSuggestionVisible(), - waitOptions - ) - if (!suggestionVisible) { - throw new Error( - `Suggestions failed to become visible. Suggestion States: ${JSON.stringify(session.suggestionStates)}` - ) - } - console.table({ - 'suggestions states': JSON.stringify(session.suggestionStates), - 'valid recommendation': RecommendationHandler.instance.isValidResponse(), - 'recommendation service status': RecommendationService.instance.isRunning, - recommendations: session.recommendations, - }) - if (!RecommendationHandler.instance.isValidResponse()) { - throw new Error('Did not find a valid response') - } - } - - /** - * Waits for a specific telemetry event to be emitted with the expected suggestion state. - * It looks like there might be a potential race condition in codewhisperer causing telemetry - * events to be emitted in different orders - */ - async function waitForTelemetry(metricName: string, suggestionState: string) { - const ok = await waitUntil(async () => { - const events = globals.telemetry.logger.query({ - metricName, - }) - return events.some((event) => event.codewhispererSuggestionState === suggestionState) - }, waitOptions) - if (!ok) { - assert.fail(`Telemetry for ${metricName} with suggestionState ${suggestionState} was not emitted`) - } - const events = getUserTriggerDecision() - if (events.length > 1 && events[events.length - 1].codewhispererSuggestionState !== suggestionState) { - assert.fail(`Telemetry events were emitted in the wrong order`) - } - } - - function getUserTriggerDecision() { - return globals.telemetry.logger - .query({ - metricName: 'codewhisperer_userTriggerDecision', - }) - .map((e) => collectionUtil.partialClone(e, 3, ['credentialStartUrl'], { replacement: '[omitted]' })) - } - - for (const [name, invokeCompletion] of [ - ['automatic', async () => await vscode.commands.executeCommand('type', { text: '\n' })], - ['manual', async () => Commands.tryExecute('aws.amazonq.invokeInlineCompletion')], - ] as const) { - describe(`${name} invoke`, async function () { - let originalEditorContents: string | undefined - - describe('supported filetypes', () => { - async function setup() { - await setupEditor() - - /** - * Allow some time between when the editor is opened and when we start typing. - * If we don't do this then the time between the initial editor selection - * and invoking the "type" command is too low, causing completion to never - * activate. AFAICT there isn't anything we can use waitUntil on here. - * - * note: this number is entirely arbitrary - **/ - await sleep(1000) - - await invokeCompletion() - originalEditorContents = vscode.window.activeTextEditor?.document.getText() - - // wait until the ghost text appears - await waitForRecommendations() - } - - beforeEach(async () => { - /** - * Every once and a while the backend won't respond with any recommendations. - * In those cases, re-try the setup up-to ${retries} times - */ - let attempt = 0 - while (attempt < retries) { - try { - await setup() - console.log(`test run ${attempt} succeeded`) - logUserDecisionStatus() - break - } catch (e) { - console.log(`test run ${attempt} failed`) - console.log(e) - logUserDecisionStatus() - attempt++ - await resetCodeWhispererGlobalVariables() - } - } - if (attempt === retries) { - assert.fail(`Failed to invoke ${name} tests after ${attempt} attempts`) - } - }) - - it(`${name} invoke accept`, async function () { - /** - * keep accepting the suggestion until the text contents change - * this is required because we have no access to the inlineSuggest panel - **/ - const suggestionAccepted = await waitUntil(async () => { - // Accept the suggestion - await vscode.commands.executeCommand('editor.action.inlineSuggest.commit') - return vscode.window.activeTextEditor?.document.getText() !== originalEditorContents - }, waitOptions) - - assert.ok(suggestionAccepted, 'Editor contents should have changed') - - await waitForTelemetry('codewhisperer_userTriggerDecision', 'Accept') - }) - - it(`${name} invoke reject`, async function () { - // Reject the suggestion - await vscode.commands.executeCommand('aws.amazonq.rejectCodeSuggestion') - - // Contents haven't changed - assert.deepStrictEqual(vscode.window.activeTextEditor?.document.getText(), originalEditorContents) - await waitForTelemetry('codewhisperer_userTriggerDecision', 'Reject') - }) - - it(`${name} invoke discard`, async function () { - // Discard the suggestion by moving it back to the original position - const position = new vscode.Position(1, 4) - const editor = vscode.window.activeTextEditor - if (!editor) { - assert.fail('Could not find text editor') - } - editor.selection = new vscode.Selection(position, position) - - // Contents are the same - assert.deepStrictEqual(vscode.window.activeTextEditor?.document.getText(), originalEditorContents) - }) - }) - - it(`${name} invoke on unsupported filetype`, async function () { - await setupEditor({ - name: 'test.zig', - contents: `fn doSomething() void { - - }`, - }) - - /** - * Add delay between editor loading and invoking completion - * @see beforeEach in supported filetypes for more information - */ - await sleep(1000) - await invokeCompletion() - - if (name === 'automatic') { - // It should never get triggered since its not a supported file type - assert.deepStrictEqual(RecommendationService.instance.isRunning, false) - } else { - await getTestWindow().waitForMessage('currently not supported by Amazon Q inline suggestions') - } - }) - }) - } -}) diff --git a/packages/amazonq/test/e2e/lsp/amazonqLsp.test.ts b/packages/amazonq/test/e2e/lsp/amazonqLsp.test.ts deleted file mode 100644 index f4a60ff282b..00000000000 --- a/packages/amazonq/test/e2e/lsp/amazonqLsp.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { AmazonQLspInstaller } from '../../../src/lsp/lspInstaller' -import { defaultAmazonQLspConfig } from '../../../src/lsp/config' -import { createLspInstallerTests } from './lspInstallerUtil' -import { BaseLspInstaller } from 'aws-core-vscode/shared' - -describe('AmazonQLSP', () => { - createLspInstallerTests({ - suiteName: 'AmazonQLSPInstaller', - lspConfig: defaultAmazonQLspConfig, - createInstaller: (lspConfig?: BaseLspInstaller.LspConfig) => new AmazonQLspInstaller(lspConfig), - targetContents: [ - { - bytes: 0, - filename: 'servers.zip', - hashes: [], - url: 'http://fakeurl', - }, - ], - setEnv: (path: string) => { - process.env.__AMAZONQLSP_PATH = path - }, - resetEnv: () => { - delete process.env.__AMAZONQLSP_PATH - }, - }) -}) diff --git a/packages/amazonq/test/e2e/lsp/lspInstallerUtil.ts b/packages/amazonq/test/e2e/lsp/lspInstallerUtil.ts deleted file mode 100644 index d4251959756..00000000000 --- a/packages/amazonq/test/e2e/lsp/lspInstallerUtil.ts +++ /dev/null @@ -1,307 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import sinon from 'sinon' -import { - BaseLspInstaller, - DevSettings, - fs, - LanguageServerResolver, - makeTemporaryToolkitFolder, - ManifestResolver, - request, - TargetContent, - ToolkitError, -} from 'aws-core-vscode/shared' -import * as semver from 'semver' -import { assertTelemetry } from 'aws-core-vscode/test' -import { LanguageServerSetup } from 'aws-core-vscode/telemetry' - -function createVersion(version: string, contents: TargetContent[]) { - return { - isDelisted: false, - serverVersion: version, - targets: [ - { - arch: process.arch, - platform: process.platform, - contents, - }, - ], - } -} - -export function createLspInstallerTests({ - suiteName, - lspConfig, - createInstaller, - targetContents, - setEnv, - resetEnv, -}: { - suiteName: string - lspConfig: BaseLspInstaller.LspConfig - createInstaller: (lspConfig?: BaseLspInstaller.LspConfig) => BaseLspInstaller.BaseLspInstaller - targetContents: TargetContent[] - setEnv: (path: string) => void - resetEnv: () => void -}) { - describe(suiteName, () => { - let installer: BaseLspInstaller.BaseLspInstaller - let sandbox: sinon.SinonSandbox - let tempDir: string - - beforeEach(async () => { - sandbox = sinon.createSandbox() - installer = createInstaller() - tempDir = await makeTemporaryToolkitFolder() - sandbox.stub(LanguageServerResolver.prototype, 'defaultDownloadFolder').returns(tempDir) - }) - - afterEach(async () => { - resetEnv() - sandbox.restore() - await fs.delete(tempDir, { - recursive: true, - }) - }) - - describe('resolve()', () => { - it('uses dev setting override', async () => { - const path = '/custom/path/to/lsp' - sandbox.stub(DevSettings.instance, 'getServiceConfig').returns({ - path, - }) - /** - * The installer pre-evaluates the config, so if we want to override the config - * we need to stub then re-create it - */ - const result = await createInstaller().resolve() - - assert.strictEqual(result.assetDirectory, path) - assert.strictEqual(result.location, 'override') - assert.strictEqual(result.version, '0.0.0') - }) - - it('uses environment variable override', async () => { - const overridePath = '/custom/path/to/lsp' - setEnv(overridePath) - - /** - * The installer pre-evaluates the config, so if we want to override the environment variables - * we need to override the env then re-create it - */ - const result = await createInstaller().resolve() - - assert.strictEqual(result.assetDirectory, overridePath) - assert.strictEqual(result.location, 'override') - assert.strictEqual(result.version, '0.0.0') - }) - - it('resolves', async () => { - // First try - should download the file - const download = await installer.resolve() - - assert.ok(download.assetDirectory.startsWith(tempDir)) - assert.deepStrictEqual(download.location, 'remote') - assert.ok(semver.satisfies(download.version, lspConfig.supportedVersions)) - - // Second try - Should see the contents in the cache - const cache = await installer.resolve() - - assert.ok(cache.assetDirectory.startsWith(tempDir)) - assert.deepStrictEqual(cache.location, 'cache') - assert.ok(semver.satisfies(cache.version, lspConfig.supportedVersions)) - - /** - * Always make sure the latest version is one patch higher. This stops a problem - * where the fallback can't be used because the latest compatible version - * is equal to the min version, so if the cache isn't valid, then there - * would be no fallback location - * - * Instead, increasing the latest compatible lsp version means we can just - * use the one we downloaded earlier in the test as the fallback - */ - const nextVer = semver.inc(cache.version, 'patch', true) - if (!nextVer) { - throw new Error('Could not increment version') - } - sandbox.stub(ManifestResolver.prototype, 'resolve').resolves({ - manifestSchemaVersion: '0.0.0', - artifactId: 'foo', - artifactDescription: 'foo', - isManifestDeprecated: false, - versions: [createVersion(nextVer, targetContents), createVersion(cache.version, targetContents)], - }) - - // fail the next http request for the language server - sandbox.stub(request, 'fetch').returns({ - response: Promise.resolve({ - ok: false, - }), - } as any) - - const config = { - ...lspConfig, - // contains the old version thats actually on disk + the new version - supportedVersions: `${cache.version} || ${nextVer}`, - } - - // Third try - Cache doesn't exist and we couldn't download from the internet, fallback to a local version - const fallback = await createInstaller(config).resolve() - - assert.ok(fallback.assetDirectory.startsWith(tempDir)) - assert.deepStrictEqual(fallback.location, 'fallback') - assert.ok(semver.satisfies(fallback.version, lspConfig.supportedVersions)) - - /* First Try Telemetry - getManifest: remote succeeds - getServer: cache fails then remote succeeds. - validate: succeeds. - */ - const firstTryTelemetry: Partial[] = [ - { - id: lspConfig.id, - manifestLocation: 'remote', - languageServerSetupStage: 'getManifest', - result: 'Succeeded', - }, - { - id: lspConfig.id, - languageServerLocation: 'cache', - languageServerSetupStage: 'getServer', - result: 'Failed', - }, - { - id: lspConfig.id, - languageServerLocation: 'remote', - languageServerSetupStage: 'validate', - result: 'Succeeded', - }, - { - id: lspConfig.id, - languageServerLocation: 'remote', - languageServerSetupStage: 'getServer', - result: 'Succeeded', - }, - ] - - /* Second Try Telemetry - getManifest: remote fails, then cache succeeds. - getServer: cache succeeds - validate: doesn't run since its cached. - */ - const secondTryTelemetry: Partial[] = [ - { - id: lspConfig.id, - manifestLocation: 'remote', - languageServerSetupStage: 'getManifest', - result: 'Succeeded', - }, - { - id: lspConfig.id, - languageServerLocation: 'cache', - languageServerSetupStage: 'getServer', - result: 'Succeeded', - }, - ] - - /* Third Try Telemetry - getManifest: (stubbed to fail, no telemetry) - getServer: remote and cache fail - validate: no validation since not remote. - */ - const thirdTryTelemetry: Partial[] = [ - { - id: lspConfig.id, - languageServerLocation: 'cache', - languageServerSetupStage: 'getServer', - result: 'Failed', - }, - { - id: lspConfig.id, - languageServerLocation: 'remote', - languageServerSetupStage: 'getServer', - result: 'Failed', - }, - { - id: lspConfig.id, - languageServerLocation: 'fallback', - languageServerSetupStage: 'getServer', - result: 'Succeeded', - }, - ] - - const expectedTelemetry = firstTryTelemetry.concat(secondTryTelemetry, thirdTryTelemetry) - - assertTelemetry('languageServer_setup', expectedTelemetry) - }) - - it('resolves release candidiates', async () => { - const original = new ManifestResolver(lspConfig.manifestUrl, lspConfig.id, '').resolve() - sandbox.stub(ManifestResolver.prototype, 'resolve').callsFake(async () => { - const originalManifest = await original - - const latestVersion = originalManifest.versions.reduce((latest, current) => { - return semver.gt(current.serverVersion, latest.serverVersion) ? current : latest - }, originalManifest.versions[0]) - - // These convert something like 3.1.1 to 3.1.2-rc.0 - const incrementedVersion = semver.inc(latestVersion.serverVersion, 'patch') - if (!incrementedVersion) { - assert.fail('Failed to increment minor version') - } - - const prereleaseVersion = semver.inc(incrementedVersion, 'prerelease', 'rc') - if (!prereleaseVersion) { - assert.fail('Failed to create pre-release version') - } - - const newVersion = { - ...latestVersion, - serverVersion: prereleaseVersion, - } - - originalManifest.versions = [newVersion, ...originalManifest.versions] - return originalManifest - }) - - const version = lspConfig.supportedVersions - lspConfig.supportedVersions = version.startsWith('^') ? version : `^${version}` - const download = await createInstaller(lspConfig).resolve() - assert.ok(download.assetDirectory.endsWith('-rc.0')) - }) - - it('throws on firewall error', async () => { - // Stub the manifest resolver to return a valid manifest - sandbox.stub(ManifestResolver.prototype, 'resolve').resolves({ - manifestSchemaVersion: '0.0.0', - artifactId: 'foo', - artifactDescription: 'foo', - isManifestDeprecated: false, - versions: [createVersion('1.0.0', targetContents)], - }) - - // Fail all HTTP requests for the language server - sandbox.stub(request, 'fetch').returns({ - response: Promise.resolve({ - ok: false, - }), - } as any) - - // This should now throw a NetworkConnectivityError - await assert.rejects( - async () => await installer.resolve(), - (err: ToolkitError) => { - assert.strictEqual(err.code, 'NetworkConnectivityError') - assert.ok(err.message.includes('Unable to download dependencies')) - return true - } - ) - }) - }) - }) -} diff --git a/packages/amazonq/test/unit/amazonq/apps/initContext.test.ts b/packages/amazonq/test/unit/amazonq/apps/initContext.test.ts deleted file mode 100644 index 71aa82d7818..00000000000 --- a/packages/amazonq/test/unit/amazonq/apps/initContext.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { EventEmitter } from 'vscode' -import { DefaultAmazonQAppInitContext, MessagePublisher } from 'aws-core-vscode/amazonq' -import assert from 'assert' - -describe('DefaultAmazonQAppInitContext', () => { - let context: DefaultAmazonQAppInitContext - - beforeEach(() => { - context = new DefaultAmazonQAppInitContext() - }) - - describe('registerWebViewToAppMessagePublisher', () => { - it('should add the publisher to the map', () => { - const publisher = new MessagePublisher(new EventEmitter()) - context.registerWebViewToAppMessagePublisher(publisher, 'unknown') - assert.strictEqual(context.getWebViewToAppsMessagePublishers().get('unknown'), publisher) - }) - }) - - describe('getAppsToWebViewMessagePublisher', () => { - it('should return the publisher', () => { - assert.notDeepStrictEqual(context.getAppsToWebViewMessagePublisher(), undefined) - }) - }) - - describe('getAppsToWebViewMessageListener', () => { - it('should return the listener', () => { - assert.notDeepStrictEqual(context.getAppsToWebViewMessageListener(), undefined) - }) - }) - - describe('onDidChangeAmazonQVisibility', () => { - it('should be an EventEmitter', () => { - assert.strictEqual(context.onDidChangeAmazonQVisibility instanceof EventEmitter, true) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/apps/inline/EditRendering/stringUtils.test.ts b/packages/amazonq/test/unit/amazonq/apps/inline/EditRendering/stringUtils.test.ts deleted file mode 100644 index 09c33fb0c80..00000000000 --- a/packages/amazonq/test/unit/amazonq/apps/inline/EditRendering/stringUtils.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import assert from 'assert' -import { stripCommonIndentation } from '../../../../../../src/app/inline/EditRendering/stringUtils' - -describe('stripCommonIndentation', () => { - it('should strip common leading whitespace', () => { - const input = [' line1 ', ' line2 ', ' line3 '] - const expected = ['line1 ', 'line2 ', ' line3 '] - assert.deepStrictEqual(stripCommonIndentation(input), expected) - }) - - it('should handle HTML tags', () => { - const input = [ - ' line2 ', - ] - const expected = ['line2 '] - assert.deepStrictEqual(stripCommonIndentation(input), expected) - }) - - it('should handle mixed indentation', () => { - const input = [' line1', ' line2', ' line3'] - const expected = ['line1', ' line2', ' line3'] - assert.deepStrictEqual(stripCommonIndentation(input), expected) - }) - - it('should handle empty lines', () => { - const input = [' line1', '', ' line2'] - const expected = [' line1', '', ' line2'] - assert.deepStrictEqual(stripCommonIndentation(input), expected) - }) - - it('should handle no indentation', () => { - const input = ['line1', 'line2'] - const expected = ['line1', 'line2'] - assert.deepStrictEqual(stripCommonIndentation(input), expected) - }) - - it('should handle single line', () => { - const input = [' single line'] - const expected = ['single line'] - assert.deepStrictEqual(stripCommonIndentation(input), expected) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/apps/inline/completion.test.ts b/packages/amazonq/test/unit/amazonq/apps/inline/completion.test.ts deleted file mode 100644 index 6cf875917ba..00000000000 --- a/packages/amazonq/test/unit/amazonq/apps/inline/completion.test.ts +++ /dev/null @@ -1,428 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import sinon from 'sinon' -import { - CancellationToken, - commands, - InlineCompletionItem, - languages, - Position, - window, - Range, - InlineCompletionTriggerKind, -} from 'vscode' -import assert from 'assert' -import { BaseLanguageClient } from 'vscode-languageclient' -import { StringValue } from 'vscode-languageserver-types' -import { AmazonQInlineCompletionItemProvider, InlineCompletionManager } from '../../../../../src/app/inline/completion' -import { RecommendationService } from '../../../../../src/app/inline/recommendationService' -import { SessionManager } from '../../../../../src/app/inline/sessionManager' -import { createMockDocument, createMockTextEditor, getTestWindow, installFakeClock } from 'aws-core-vscode/test' -import { - noInlineSuggestionsMsg, - ReferenceHoverProvider, - ReferenceLogViewProvider, - vsCodeState, -} from 'aws-core-vscode/codewhisperer' -import { LineTracker } from '../../../../../src/app/inline/stateTracker/lineTracker' -import { InlineTutorialAnnotation } from '../../../../../src/app/inline/tutorials/inlineTutorialAnnotation' -import { DocumentEventListener } from '../../../../../src/app/inline/documentEventListener' -import { setContext } from 'aws-core-vscode/shared' - -describe('InlineCompletionManager', () => { - let manager: InlineCompletionManager - let languageClient: BaseLanguageClient - let sendNotificationStub: sinon.SinonStub - let registerProviderStub: sinon.SinonStub - let registerCommandStub: sinon.SinonStub - let executeCommandStub: sinon.SinonStub - let disposableStub: sinon.SinonStub - let sandbox: sinon.SinonSandbox - let getActiveSessionStub: sinon.SinonStub - let getActiveRecommendationStub: sinon.SinonStub - let logReferenceStub: sinon.SinonStub - let getReferenceStub: sinon.SinonStub - let hoverReferenceStub: sinon.SinonStub - const mockDocument = createMockDocument() - const mockEditor = createMockTextEditor() - const mockPosition = new Position(0, 0) - const mockContext = { triggerKind: 1, selectedCompletionInfo: undefined } - const mockToken = { isCancellationRequested: false } as CancellationToken - const fakeReferences = [ - { - message: '', - licenseName: 'TEST_LICENSE', - repository: 'TEST_REPO', - recommendationContentSpan: { - start: 0, - end: 10, - }, - }, - ] - const mockSuggestions = [ - { - itemId: 'test-item', - insertText: 'test', - references: fakeReferences, - }, - { - itemId: 'test-item2', - insertText: 'import math\ndef two_sum(nums, target):\n', - references: fakeReferences, - }, - ] - - beforeEach(() => { - sandbox = sinon.createSandbox() - - registerProviderStub = sandbox.stub(languages, 'registerInlineCompletionItemProvider') - registerCommandStub = sandbox.stub(commands, 'registerCommand') - executeCommandStub = sandbox.stub(commands, 'executeCommand') - sendNotificationStub = sandbox.stub() - - const mockDisposable = { - dispose: sandbox.stub(), - } - disposableStub = mockDisposable.dispose - registerProviderStub.returns(mockDisposable) - - languageClient = { - sendNotification: sendNotificationStub, - } as unknown as BaseLanguageClient - - const sessionManager = new SessionManager() - const lineTracker = new LineTracker() - const inlineTutorialAnnotation = new InlineTutorialAnnotation(lineTracker, sessionManager) - manager = new InlineCompletionManager(languageClient, sessionManager, lineTracker, inlineTutorialAnnotation) - getActiveSessionStub = sandbox.stub(manager['sessionManager'], 'getActiveSession') - getActiveRecommendationStub = sandbox.stub(manager['sessionManager'], 'getActiveRecommendation') - getReferenceStub = sandbox.stub(ReferenceLogViewProvider, 'getReferenceLog') - logReferenceStub = sandbox.stub(ReferenceLogViewProvider.instance, 'addReferenceLog') - hoverReferenceStub = sandbox.stub(ReferenceHoverProvider.instance, 'addCodeReferences') - }) - - afterEach(() => { - sandbox.restore() - }) - - describe('registerInlineCompletion', () => { - beforeEach(() => { - manager.registerInlineCompletion() - }) - - it('should register accept and reject commands', () => { - assert(registerCommandStub.calledWith('aws.amazonq.acceptInline')) - assert(registerCommandStub.calledWith('aws.amazonq.rejectCodeSuggestion')) - }) - - describe('onInlineAcceptance', () => { - it('should send notification and re-register provider on acceptance', async () => { - // Get the acceptance handler - const acceptanceHandler = registerCommandStub - .getCalls() - ?.find((call) => call.args[0] === 'aws.amazonq.acceptInline')?.args[1] - - const sessionId = 'test-session' - const requestStartTime = Date.now() - 1000 - const firstCompletionDisplayLatency = 500 - - await acceptanceHandler( - sessionId, - mockSuggestions[0], - mockEditor, - requestStartTime, - firstCompletionDisplayLatency - ) - - assert(sendNotificationStub.calledOnce) - assert( - sendNotificationStub.calledWith( - 'aws/logInlineCompletionSessionResults', - sinon.match({ - sessionId, - completionSessionResult: { - [mockSuggestions[0].itemId]: { - seen: true, - accepted: true, - discarded: false, - }, - }, - }) - ) - ) - - assert(disposableStub.calledOnce) - assert(registerProviderStub.calledTwice) // Once in constructor, once after acceptance - }) - - it('should log reference if there is any', async () => { - const acceptanceHandler = registerCommandStub - .getCalls() - ?.find((call) => call.args[0] === 'aws.amazonq.acceptInline')?.args[1] - - const sessionId = 'test-session' - const requestStartTime = Date.now() - 1000 - const firstCompletionDisplayLatency = 500 - const mockReferenceLog = 'test reference log' - getReferenceStub.returns(mockReferenceLog) - - await acceptanceHandler( - sessionId, - mockSuggestions[0], - mockEditor, - requestStartTime, - firstCompletionDisplayLatency - ) - - assert(getReferenceStub.calledOnce) - assert( - getReferenceStub.calledWith( - mockSuggestions[0].insertText, - mockSuggestions[0].references, - mockEditor - ) - ) - assert(logReferenceStub.calledOnce) - assert(logReferenceStub.calledWith(mockReferenceLog)) - assert(hoverReferenceStub.calledOnce) - assert(hoverReferenceStub.calledWith(mockSuggestions[0].insertText, mockSuggestions[0].references)) - }) - }) - - describe('onInlineRejection', () => { - it('should hide suggestion and send notification on rejection', async () => { - // Get the rejection handler - const rejectionHandler = registerCommandStub - .getCalls() - .find((call) => call.args[0] === 'aws.amazonq.rejectCodeSuggestion')?.args[1] - - const sessionId = 'test-session' - const itemId = 'test-item' - const mockSuggestion = { - itemId, - insertText: 'test', - } - - getActiveSessionStub.returns({ - sessionId: 'test-session', - suggestions: [mockSuggestion], - isRequestInProgress: false, - requestStartTime: Date.now(), - }) - getActiveRecommendationStub.returns([mockSuggestion]) - await rejectionHandler() - - assert(executeCommandStub.calledWith('editor.action.inlineSuggest.hide')) - assert(sendNotificationStub.calledOnce) - assert( - sendNotificationStub.calledWith( - 'aws/logInlineCompletionSessionResults', - sinon.match({ - sessionId, - completionSessionResult: { - [itemId]: { - seen: true, - accepted: false, - discarded: false, - }, - }, - }) - ) - ) - - assert(disposableStub.calledOnce) - assert(registerProviderStub.calledTwice) // Once in constructor, once after rejection - }) - }) - }) - - describe('AmazonQInlineCompletionItemProvider', () => { - describe('provideInlineCompletionItems', () => { - let mockSessionManager: SessionManager - let provider: AmazonQInlineCompletionItemProvider - let getAllRecommendationsStub: sinon.SinonStub - let recommendationService: RecommendationService - let inlineTutorialAnnotation: InlineTutorialAnnotation - let documentEventListener: DocumentEventListener - - beforeEach(async () => { - const lineTracker = new LineTracker() - inlineTutorialAnnotation = new InlineTutorialAnnotation(lineTracker, mockSessionManager) - recommendationService = new RecommendationService(mockSessionManager) - documentEventListener = new DocumentEventListener() - vsCodeState.isRecommendationsActive = false - mockSessionManager = { - getActiveSession: getActiveSessionStub, - getActiveRecommendation: getActiveRecommendationStub, - clear: () => {}, - updateCodeReferenceAndImports: () => {}, - } as unknown as SessionManager - - getActiveSessionStub.returns({ - sessionId: 'test-session', - suggestions: mockSuggestions, - isRequestInProgress: false, - requestStartTime: Date.now(), - }) - getActiveRecommendationStub.returns(mockSuggestions) - getAllRecommendationsStub = sandbox.stub(recommendationService, 'getAllRecommendations') - getAllRecommendationsStub.resolves() - sandbox.stub(window, 'activeTextEditor').value(createMockTextEditor()) - - // TODO: can we use stub? - await setContext('aws.amazonq.editSuggestionActive', false) - }), - it('should call recommendation service to get new suggestions(matching typeahead) for new sessions', async () => { - provider = new AmazonQInlineCompletionItemProvider( - languageClient, - recommendationService, - mockSessionManager, - inlineTutorialAnnotation, - documentEventListener - ) - const items = await provider.provideInlineCompletionItems( - mockDocument, - mockPosition, - mockContext, - mockToken - ) - assert(getAllRecommendationsStub.calledOnce) - assert.deepStrictEqual(items, [mockSuggestions[1]]) - }), - it('should handle reference if there is any', async () => { - provider = new AmazonQInlineCompletionItemProvider( - languageClient, - recommendationService, - mockSessionManager, - inlineTutorialAnnotation, - documentEventListener - ) - await provider.provideInlineCompletionItems(mockDocument, mockPosition, mockContext, mockToken) - }), - it('should add a range to the completion item when missing', async function () { - provider = new AmazonQInlineCompletionItemProvider( - languageClient, - recommendationService, - mockSessionManager, - inlineTutorialAnnotation, - documentEventListener - ) - getActiveRecommendationStub.returns([ - { - insertText: 'testText', - itemId: 'itemId', - }, - { - insertText: 'testText2', - itemId: 'itemId2', - range: undefined, - }, - ]) - const cursorPosition = new Position(5, 6) - const result = await provider.provideInlineCompletionItems( - mockDocument, - cursorPosition, - mockContext, - mockToken - ) - - for (const item of result) { - assert.deepStrictEqual(item.range, new Range(cursorPosition, cursorPosition)) - } - }), - it('should handle StringValue instead of strings', async function () { - provider = new AmazonQInlineCompletionItemProvider( - languageClient, - recommendationService, - mockSessionManager, - inlineTutorialAnnotation, - documentEventListener - ) - const expectedText = `${mockSuggestions[1].insertText}this is my text` - getActiveRecommendationStub.returns([ - { - insertText: { - kind: 'snippet', - value: `${mockSuggestions[1].insertText}this is my text`, - } satisfies StringValue, - itemId: 'itemId', - }, - ]) - const result = await provider.provideInlineCompletionItems( - mockDocument, - mockPosition, - mockContext, - mockToken - ) - - assert.strictEqual(result[0].insertText, expectedText) - }), - it('shows message to user when manual invoke fails to produce results', async function () { - provider = new AmazonQInlineCompletionItemProvider( - languageClient, - recommendationService, - mockSessionManager, - inlineTutorialAnnotation, - documentEventListener - ) - getActiveRecommendationStub.returns([]) - const messageShown = new Promise((resolve) => - getTestWindow().onDidShowMessage((e) => { - assert.strictEqual(e.message, noInlineSuggestionsMsg) - resolve(true) - }) - ) - await provider.provideInlineCompletionItems( - mockDocument, - mockPosition, - { triggerKind: InlineCompletionTriggerKind.Invoke, selectedCompletionInfo: undefined }, - mockToken - ) - await messageShown - }) - describe.skip('debounce behavior', function () { - let clock: ReturnType - - beforeEach(function () { - clock = installFakeClock() - }) - - after(function () { - clock.uninstall() - }) - - it.skip('should only trigger once on rapid events', async () => { - provider = new AmazonQInlineCompletionItemProvider( - languageClient, - recommendationService, - mockSessionManager, - inlineTutorialAnnotation, - documentEventListener - ) - const p1 = provider.provideInlineCompletionItems(mockDocument, mockPosition, mockContext, mockToken) - const p2 = provider.provideInlineCompletionItems(mockDocument, mockPosition, mockContext, mockToken) - const p3 = provider.provideInlineCompletionItems( - mockDocument, - new Position(1, 26), - mockContext, - mockToken - ) - - await clock.tickAsync(1000) - - // All promises should be the same object when debounced properly. - assert.strictEqual(p1, p2) - assert.strictEqual(p1, p3) - await p1 - await p2 - const r3 = await p3 - - // calls the function with the latest provided args. - assert.deepStrictEqual((r3 as InlineCompletionItem[])[0].range?.end, new Position(1, 26)) - }) - }) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/apps/inline/inlineTracker.test.ts b/packages/amazonq/test/unit/amazonq/apps/inline/inlineTracker.test.ts deleted file mode 100644 index 6b9490c72a5..00000000000 --- a/packages/amazonq/test/unit/amazonq/apps/inline/inlineTracker.test.ts +++ /dev/null @@ -1,299 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { LineSelection, LineTracker, AuthUtil } from 'aws-core-vscode/codewhisperer' -import sinon from 'sinon' -import { Disposable, TextEditor, Position, Range, Selection } from 'vscode' -import { toTextEditor } from 'aws-core-vscode/test' -import assert from 'assert' -import { waitUntil } from 'aws-core-vscode/shared' - -describe('LineTracker class', function () { - let sut: LineTracker - let disposable: Disposable - let editor: TextEditor - let sandbox: sinon.SinonSandbox - let counts = { - editor: 0, - selection: 0, - content: 0, - } - - beforeEach(async function () { - sut = new LineTracker() - sandbox = sinon.createSandbox() - counts = { - editor: 0, - selection: 0, - content: 0, - } - disposable = sut.onDidChangeActiveLines((e) => { - if (e.reason === 'content') { - counts.content++ - } else if (e.reason === 'selection') { - counts.selection++ - } else if (e.reason === 'editor') { - counts.editor++ - } - }) - - sandbox.stub(AuthUtil.instance, 'isConnected').returns(true) - sandbox.stub(AuthUtil.instance, 'isConnectionExpired').returns(false) - }) - - afterEach(function () { - disposable.dispose() - sut.dispose() - sandbox.restore() - }) - - function assertEmptyCounts() { - assert.deepStrictEqual(counts, { - editor: 0, - selection: 0, - content: 0, - }) - } - - it('ready will emit onReady event', async function () { - let messageReceived = 0 - disposable = sut.onReady((_) => { - messageReceived++ - }) - - assert.strictEqual(sut.isReady, false) - sut.ready() - - await waitUntil( - async () => { - if (messageReceived !== 0) { - return - } - }, - { interval: 1000 } - ) - - assert.strictEqual(sut.isReady, true) - assert.strictEqual(messageReceived, 1) - }) - - describe('includes', function () { - // util function to help set up LineTracker.selections - async function setEditorSelection(selections: LineSelection[]): Promise { - const editor = await toTextEditor('\n\n\n\n\n\n\n\n\n\n', 'foo.py', undefined, { - preview: false, - }) - - const vscodeSelections = selections.map((s) => { - return new Selection(new Position(s.anchor, 0), new Position(s.active, 0)) - }) - - await sut.onTextEditorSelectionChanged({ - textEditor: editor, - selections: vscodeSelections, - kind: undefined, - }) - - assert.deepStrictEqual(sut.selections, selections) - return editor - } - - it('exact match when array of selections are provided', async function () { - const selections = [ - { - anchor: 1, - active: 1, - }, - { - anchor: 3, - active: 3, - }, - ] - - editor = await setEditorSelection(selections) - assert.deepStrictEqual(sut.selections, selections) - - let actual = sut.includes([ - { active: 1, anchor: 1 }, - { active: 3, anchor: 3 }, - ]) - assert.strictEqual(actual, true) - - actual = sut.includes([ - { active: 2, anchor: 2 }, - { active: 4, anchor: 4 }, - ]) - assert.strictEqual(actual, false) - - // both active && anchor have to be the same - actual = sut.includes([ - { active: 1, anchor: 0 }, - { active: 3, anchor: 0 }, - ]) - assert.strictEqual(actual, false) - - // different length would simply return false - actual = sut.includes([ - { active: 1, anchor: 1 }, - { active: 3, anchor: 3 }, - { active: 5, anchor: 5 }, - ]) - assert.strictEqual(actual, false) - }) - - it('match active line if line number and activeOnly option are provided', async function () { - const selections = [ - { - anchor: 1, - active: 1, - }, - { - anchor: 3, - active: 3, - }, - ] - - editor = await setEditorSelection(selections) - assert.deepStrictEqual(sut.selections, selections) - - let actual = sut.includes(1, { activeOnly: true }) - assert.strictEqual(actual, true) - - actual = sut.includes(2, { activeOnly: true }) - assert.strictEqual(actual, false) - }) - - it('range match if line number and activeOnly is set to false', async function () { - const selections = [ - { - anchor: 0, - active: 2, - }, - { - anchor: 4, - active: 6, - }, - ] - - editor = await setEditorSelection(selections) - assert.deepStrictEqual(sut.selections, selections) - - for (const line of [0, 1, 2]) { - const actual = sut.includes(line, { activeOnly: false }) - assert.strictEqual(actual, true) - } - - for (const line of [4, 5, 6]) { - const actual = sut.includes(line, { activeOnly: false }) - assert.strictEqual(actual, true) - } - - let actual = sut.includes(3, { activeOnly: false }) - assert.strictEqual(actual, false) - - actual = sut.includes(7, { activeOnly: false }) - assert.strictEqual(actual, false) - }) - }) - - describe('onContentChanged', function () { - it('should fire lineChangedEvent and set current line selection', async function () { - editor = await toTextEditor('\n\n\n\n\n', 'foo.py', undefined, { preview: false }) - editor.selection = new Selection(new Position(5, 0), new Position(5, 0)) - assertEmptyCounts() - - sut.onContentChanged({ - document: editor.document, - contentChanges: [{ text: 'a', range: new Range(0, 0, 0, 0), rangeOffset: 0, rangeLength: 0 }], - reason: undefined, - }) - - assert.deepStrictEqual(counts, { ...counts, content: 1 }) - assert.deepStrictEqual(sut.selections, [ - { - anchor: 5, - active: 5, - }, - ]) - }) - }) - - describe('onTextEditorSelectionChanged', function () { - it('should fire lineChangedEvent if selection changes and set current line selection', async function () { - editor = await toTextEditor('\n\n\n\n\n', 'foo.py', undefined, { preview: false }) - editor.selection = new Selection(new Position(3, 0), new Position(3, 0)) - assertEmptyCounts() - - await sut.onTextEditorSelectionChanged({ - textEditor: editor, - selections: [new Selection(new Position(3, 0), new Position(3, 0))], - kind: undefined, - }) - - assert.deepStrictEqual(counts, { ...counts, selection: 1 }) - assert.deepStrictEqual(sut.selections, [ - { - anchor: 3, - active: 3, - }, - ]) - - // if selection is included in the existing selections, won't emit an event - await sut.onTextEditorSelectionChanged({ - textEditor: editor, - selections: [new Selection(new Position(3, 0), new Position(3, 0))], - kind: undefined, - }) - - assert.deepStrictEqual(counts, { ...counts, selection: 1 }) - assert.deepStrictEqual(sut.selections, [ - { - anchor: 3, - active: 3, - }, - ]) - }) - - it('should not fire lineChangedEvent if uri scheme is debug || output', async function () { - // if the editor is not a text editor, won't emit an event and selection will be set to undefined - async function assertLineChanged(schema: string) { - const anotherEditor = await toTextEditor('', 'bar.log', undefined, { preview: false }) - const uri = anotherEditor.document.uri - sandbox.stub(uri, 'scheme').get(() => schema) - - await sut.onTextEditorSelectionChanged({ - textEditor: anotherEditor, - selections: [new Selection(new Position(3, 0), new Position(3, 0))], - kind: undefined, - }) - - assert.deepStrictEqual(counts, { ...counts }) - } - - await assertLineChanged('debug') - await assertLineChanged('output') - }) - }) - - describe('onActiveTextEditorChanged', function () { - it('shoudl fire lineChangedEvent', async function () { - const selections: Selection[] = [new Selection(0, 0, 1, 1)] - - editor = { selections: selections } as any - - assertEmptyCounts() - - await sut.onActiveTextEditorChanged(editor) - - assert.deepStrictEqual(counts, { ...counts, editor: 1 }) - assert.deepStrictEqual(sut.selections, [ - { - anchor: 0, - active: 1, - }, - ]) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/apps/inline/recommendationService.test.ts b/packages/amazonq/test/unit/amazonq/apps/inline/recommendationService.test.ts deleted file mode 100644 index c8473022118..00000000000 --- a/packages/amazonq/test/unit/amazonq/apps/inline/recommendationService.test.ts +++ /dev/null @@ -1,400 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import sinon from 'sinon' -import { BaseLanguageClient } from 'vscode-languageclient' -import { Position, CancellationToken, InlineCompletionItem, InlineCompletionTriggerKind } from 'vscode' -import assert from 'assert' -import { RecommendationService } from '../../../../../src/app/inline/recommendationService' -import { SessionManager } from '../../../../../src/app/inline/sessionManager' -import { createMockDocument } from 'aws-core-vscode/test' -// Import CursorUpdateManager directly instead of the interface -import { CursorUpdateManager } from '../../../../../src/app/inline/cursorUpdateManager' -import { CodeWhispererStatusBarManager } from 'aws-core-vscode/codewhisperer' -import { globals } from 'aws-core-vscode/shared' -import { DocumentEventListener } from '../../../../../src/app/inline/documentEventListener' -import { EditSuggestionState } from '../../../../../src/app/inline/editSuggestionState' - -const completionApi = 'aws/textDocument/inlineCompletionWithReferences' -const editApi = 'aws/textDocument/editCompletion' - -describe('RecommendationService', () => { - let languageClient: BaseLanguageClient - let sendRequestStub: sinon.SinonStub - let sandbox: sinon.SinonSandbox - let sessionManager: SessionManager - let service: RecommendationService - let cursorUpdateManager: CursorUpdateManager - let statusBarStub: any - let clockStub: sinon.SinonFakeTimers - const mockDocument = createMockDocument() - const mockPosition = { line: 0, character: 0 } as Position - const mockContext = { triggerKind: InlineCompletionTriggerKind.Automatic, selectedCompletionInfo: undefined } - const mockToken = { isCancellationRequested: false } as CancellationToken - const mockDocumentEventListener = { - isLastEventDeletion: (filepath: string) => false, - getLastDocumentChangeEvent: (filepath: string) => undefined, - } as DocumentEventListener - const mockInlineCompletionItemOne = { - insertText: 'ItemOne', - } as InlineCompletionItem - - const mockInlineCompletionItemTwo = { - insertText: 'ItemTwo', - } as InlineCompletionItem - const mockPartialResultToken = 'some-random-token' - - beforeEach(async () => { - sandbox = sinon.createSandbox() - - // Create a fake clock for testing time-based functionality - clockStub = sandbox.useFakeTimers({ - now: 1000, - shouldAdvanceTime: true, - }) - - // Stub globals.clock - sandbox.stub(globals, 'clock').value({ - Date: { - now: () => clockStub.now, - }, - setTimeout: clockStub.setTimeout.bind(clockStub), - clearTimeout: clockStub.clearTimeout.bind(clockStub), - setInterval: clockStub.setInterval.bind(clockStub), - clearInterval: clockStub.clearInterval.bind(clockStub), - }) - - sendRequestStub = sandbox.stub() - - languageClient = { - sendRequest: sendRequestStub, - warn: sandbox.stub(), - } as unknown as BaseLanguageClient - - sessionManager = new SessionManager() - - // Create cursor update manager mock - cursorUpdateManager = { - recordCompletionRequest: sandbox.stub(), - logger: { debug: sandbox.stub(), warn: sandbox.stub(), error: sandbox.stub() }, - updateIntervalMs: 250, - isActive: false, - lastRequestTime: 0, - dispose: sandbox.stub(), - start: sandbox.stub(), - stop: sandbox.stub(), - updatePosition: sandbox.stub(), - } as unknown as CursorUpdateManager - - // Create status bar stub - statusBarStub = { - setLoading: sandbox.stub().resolves(), - refreshStatusBar: sandbox.stub().resolves(), - } - - sandbox.stub(CodeWhispererStatusBarManager, 'instance').get(() => statusBarStub) - - // Create the service without cursor update recorder initially - service = new RecommendationService(sessionManager) - }) - - afterEach(() => { - sandbox.restore() - sessionManager.clear() - }) - - describe('constructor', () => { - it('should initialize with optional cursorUpdateRecorder', () => { - const serviceWithRecorder = new RecommendationService(sessionManager, cursorUpdateManager) - - // Verify the service was created with the recorder - assert.strictEqual(serviceWithRecorder['cursorUpdateRecorder'], cursorUpdateManager) - }) - }) - - describe('setCursorUpdateRecorder', () => { - it('should set the cursor update recorder', () => { - // Initially the recorder should be undefined - assert.strictEqual(service['cursorUpdateRecorder'], undefined) - - // Set the recorder - service.setCursorUpdateRecorder(cursorUpdateManager) - - // Verify it was set correctly - assert.strictEqual(service['cursorUpdateRecorder'], cursorUpdateManager) - }) - }) - - describe('getAllRecommendations', () => { - it('should handle single request with no partial result token', async () => { - // Mock EditSuggestionState to return false (no edit suggestion active) - sandbox.stub(EditSuggestionState, 'isEditSuggestionActive').returns(false) - - const mockFirstResult = { - sessionId: 'test-session', - items: [mockInlineCompletionItemOne], - partialResultToken: undefined, - } - - sendRequestStub.resolves(mockFirstResult) - - await service.getAllRecommendations( - languageClient, - mockDocument, - mockPosition, - mockContext, - mockToken, - true, - mockDocumentEventListener - ) - - // Verify sendRequest was called with correct parameters - const cs = sendRequestStub.getCalls() - const completionCalls = cs.filter((c) => c.firstArg === completionApi) - const editCalls = cs.filter((c) => c.firstArg === editApi) - assert.strictEqual(cs.length, 2) - assert.strictEqual(completionCalls.length, 1) - assert.strictEqual(editCalls.length, 1) - - const requestArgs = completionCalls[0].args[1] - assert.deepStrictEqual(requestArgs, { - textDocument: { - uri: 'file:///test.py', - }, - position: mockPosition, - context: mockContext, - documentChangeParams: undefined, - openTabFilepaths: [], - }) - - // Verify session management - const items = sessionManager.getActiveRecommendation() - assert.deepStrictEqual(items, [mockInlineCompletionItemOne]) - }) - - it('should handle multiple request with partial result token', async () => { - // Mock EditSuggestionState to return false (no edit suggestion active) - sandbox.stub(EditSuggestionState, 'isEditSuggestionActive').returns(false) - - const mockFirstResult = { - sessionId: 'test-session', - items: [mockInlineCompletionItemOne], - partialResultToken: mockPartialResultToken, - } - - const mockSecondResult = { - sessionId: 'test-session', - items: [mockInlineCompletionItemTwo], - partialResultToken: undefined, - } - - sendRequestStub.onFirstCall().resolves(mockFirstResult) - sendRequestStub.onSecondCall().resolves(mockSecondResult) - - await service.getAllRecommendations( - languageClient, - mockDocument, - mockPosition, - mockContext, - mockToken, - true, - mockDocumentEventListener - ) - - // Verify sendRequest was called with correct parameters - const cs = sendRequestStub.getCalls() - const completionCalls = cs.filter((c) => c.firstArg === completionApi) - const editCalls = cs.filter((c) => c.firstArg === editApi) - assert.strictEqual(cs.length, 3) - assert.strictEqual(completionCalls.length, 2) - assert.strictEqual(editCalls.length, 1) - - const firstRequestArgs = completionCalls[0].args[1] - const expectedRequestArgs = { - textDocument: { - uri: 'file:///test.py', - }, - position: mockPosition, - context: mockContext, - documentChangeParams: undefined, - openTabFilepaths: [], - } - const secondRequestArgs = completionCalls[1].args[1] - assert.deepStrictEqual(firstRequestArgs, expectedRequestArgs) - assert.deepStrictEqual(secondRequestArgs, { - ...expectedRequestArgs, - partialResultToken: mockPartialResultToken, - }) - }) - - it('should record completion request when cursorUpdateRecorder is set', async () => { - // Set the cursor update recorder - service.setCursorUpdateRecorder(cursorUpdateManager) - - const mockFirstResult = { - sessionId: 'test-session', - items: [mockInlineCompletionItemOne], - partialResultToken: undefined, - } - - sendRequestStub.resolves(mockFirstResult) - - await service.getAllRecommendations( - languageClient, - mockDocument, - mockPosition, - mockContext, - mockToken, - true, - mockDocumentEventListener - ) - - // Verify recordCompletionRequest was called - // eslint-disable-next-line @typescript-eslint/unbound-method - sinon.assert.calledOnce(cursorUpdateManager.recordCompletionRequest as sinon.SinonStub) - }) - - it('should not show UI indicators when showUi option is false', async () => { - // Call with showUi: false option - await service.getAllRecommendations( - languageClient, - mockDocument, - mockPosition, - mockContext, - mockToken, - true, - mockDocumentEventListener, - { - showUi: false, - emitTelemetry: true, - } - ) - - // Verify UI methods were not called - sinon.assert.notCalled(statusBarStub.setLoading) - sinon.assert.notCalled(statusBarStub.refreshStatusBar) - }) - - it('should show UI indicators when showUi option is true (default)', async () => { - // Call with default options (showUi: true) - await service.getAllRecommendations( - languageClient, - mockDocument, - mockPosition, - mockContext, - mockToken, - true, - mockDocumentEventListener - ) - - // Verify UI methods were called - sinon.assert.calledOnce(statusBarStub.setLoading) - sinon.assert.calledOnce(statusBarStub.refreshStatusBar) - }) - - it('should handle errors gracefully', async () => { - // Set the cursor update recorder - service.setCursorUpdateRecorder(cursorUpdateManager) - - // Make the request throw an error - const testError = new Error('Test error') - sendRequestStub.rejects(testError) - - // Set up UI options - const options = { showUi: true } - - // Temporarily replace console.error with a no-op function to prevent test failure - const originalConsoleError = console.error - console.error = () => {} - - try { - // Call the method and expect it to handle the error - const result = await service.getAllRecommendations( - languageClient, - mockDocument, - mockPosition, - mockContext, - mockToken, - true, - mockDocumentEventListener, - options - ) - - // Assert that error handling was done correctly - assert.deepStrictEqual(result, []) - - // Verify the UI indicators were hidden even when an error occurs - sinon.assert.calledOnce(statusBarStub.refreshStatusBar) - } finally { - // Restore the original console.error function - console.error = originalConsoleError - } - }) - - it('should not make completion request when edit suggestion is active', async () => { - // Mock EditSuggestionState to return true (edit suggestion is active) - sandbox.stub(EditSuggestionState, 'isEditSuggestionActive').returns(true) - - const mockResult = { - sessionId: 'test-session', - items: [mockInlineCompletionItemOne], - partialResultToken: undefined, - } - - sendRequestStub.resolves(mockResult) - - await service.getAllRecommendations( - languageClient, - mockDocument, - mockPosition, - mockContext, - mockToken, - true, - mockDocumentEventListener - ) - - // Verify sendRequest was called only for edit API, not completion API - const cs = sendRequestStub.getCalls() - const completionCalls = cs.filter((c) => c.firstArg === completionApi) - const editCalls = cs.filter((c) => c.firstArg === editApi) - - assert.strictEqual(cs.length, 1) // Only edit call - assert.strictEqual(completionCalls.length, 0) // No completion calls - assert.strictEqual(editCalls.length, 1) // One edit call - }) - - it('should make completion request when edit suggestion is not active', async () => { - // Mock EditSuggestionState to return false (no edit suggestion active) - sandbox.stub(EditSuggestionState, 'isEditSuggestionActive').returns(false) - - const mockResult = { - sessionId: 'test-session', - items: [mockInlineCompletionItemOne], - partialResultToken: undefined, - } - - sendRequestStub.resolves(mockResult) - - await service.getAllRecommendations( - languageClient, - mockDocument, - mockPosition, - mockContext, - mockToken, - true, - mockDocumentEventListener - ) - - // Verify sendRequest was called for both APIs - const cs = sendRequestStub.getCalls() - const completionCalls = cs.filter((c) => c.firstArg === completionApi) - const editCalls = cs.filter((c) => c.firstArg === editApi) - - assert.strictEqual(cs.length, 2) // Both calls - assert.strictEqual(completionCalls.length, 1) // One completion call - assert.strictEqual(editCalls.length, 1) // One edit call - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/auth/controller.test.ts b/packages/amazonq/test/unit/amazonq/auth/controller.test.ts deleted file mode 100644 index e18032d9424..00000000000 --- a/packages/amazonq/test/unit/amazonq/auth/controller.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import sinon from 'sinon' -import { AuthController } from 'aws-core-vscode/amazonq' -import { reconnect, amazonQChatSource } from 'aws-core-vscode/codewhisperer' -import assert from 'assert' -import { placeholder } from 'aws-core-vscode/shared' - -describe('AuthController', () => { - let authController: AuthController - let reconnectStub: any - - beforeEach(() => { - authController = new AuthController() - reconnectStub = sinon.stub(reconnect, 'execute') - }) - - afterEach(() => { - sinon.restore() - }) - - it('should call reconnect for "missing_scopes"', () => { - authController.handleAuth('missing_scopes') - - assert.strictEqual(reconnectStub.calledWith(placeholder, amazonQChatSource), true) - }) - - it('should call reconnect for "re-auth"', () => { - authController.handleAuth('re-auth') - - assert.strictEqual(reconnectStub.calledWith(placeholder, amazonQChatSource), true) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/lsp/auth.test.ts b/packages/amazonq/test/unit/amazonq/lsp/auth.test.ts deleted file mode 100644 index 835a19b65f1..00000000000 --- a/packages/amazonq/test/unit/amazonq/lsp/auth.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import assert from 'assert' -import { AmazonQLspAuth } from '../../../../src/lsp/auth' -import { BaseLanguageClient } from 'vscode-languageclient' - -describe('AmazonQLspAuth', function () { - describe('updateBearerToken', function () { - it('makes request to LSP when token changes', async function () { - // Note: this token will be encrypted - let lastSentToken = {} - const auth = new AmazonQLspAuth({ - sendRequest: (_method: string, param: any) => { - lastSentToken = param - }, - info: (_message: string, _data: any) => {}, - } as BaseLanguageClient) - - await auth.updateBearerToken('firstToken') - assert.notDeepStrictEqual(lastSentToken, {}) - const encryptedFirstToken = lastSentToken - - await auth.updateBearerToken('secondToken') - assert.notDeepStrictEqual(lastSentToken, encryptedFirstToken) - const encryptedSecondToken = lastSentToken - - await auth.updateBearerToken('secondToken') - assert.deepStrictEqual(lastSentToken, encryptedSecondToken) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/lsp/chat/error.test.ts b/packages/amazonq/test/unit/amazonq/lsp/chat/error.test.ts deleted file mode 100644 index 80bfe657cc1..00000000000 --- a/packages/amazonq/test/unit/amazonq/lsp/chat/error.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { isValidResponseError } from '../../../../../src/lsp/chat/error' -import { ResponseError } from '@aws/language-server-runtimes/protocol' -import * as assert from 'assert' - -describe('isValidResponseError', async function () { - it('requires the data field', function () { - assert.ok(isValidResponseError(new ResponseError(0, 'this one has data', {}))) - assert.ok(!isValidResponseError(new ResponseError(0, 'this one does not have data'))) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/lsp/chat/messages.test.ts b/packages/amazonq/test/unit/amazonq/lsp/chat/messages.test.ts deleted file mode 100644 index 4c412a17676..00000000000 --- a/packages/amazonq/test/unit/amazonq/lsp/chat/messages.test.ts +++ /dev/null @@ -1,163 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as sinon from 'sinon' -import { BaseLanguageClient } from 'vscode-languageclient' -import { AuthUtil } from 'aws-core-vscode/codewhisperer' -import { registerMessageListeners } from '../../../../../src/lsp/chat/messages' -import { AmazonQChatViewProvider } from '../../../../../src/lsp/chat/webviewProvider' -import { secondaryAuth, authConnection, AuthFollowUpType } from 'aws-core-vscode/amazonq' -import { messages } from 'aws-core-vscode/shared' - -describe('registerMessageListeners', () => { - let languageClient: BaseLanguageClient - let provider: AmazonQChatViewProvider - let sandbox: sinon.SinonSandbox - let messageHandler: (message: any) => void | Promise - let errorStub: sinon.SinonStub - - beforeEach(() => { - sandbox = sinon.createSandbox() - errorStub = sandbox.stub() - - languageClient = { - info: sandbox.stub(), - error: errorStub, - sendNotification: sandbox.stub(), - onRequest: sandbox.stub(), - onNotification: sandbox.stub(), - } as unknown as BaseLanguageClient - - provider = { - webview: { - onDidReceiveMessage: (callback: (message: any) => void | Promise) => { - messageHandler = callback - return { - dispose: (): void => {}, - } - }, - }, - } as any - - registerMessageListeners(languageClient, provider, Buffer.from('test-key')) - }) - - afterEach(() => { - sandbox.restore() - }) - - describe('AUTH_FOLLOW_UP_CLICKED', () => { - let mockAuthUtil: AuthUtil - let deleteConnectionStub: sinon.SinonStub - let reauthenticateStub: sinon.SinonStub - - const authFollowUpClickedCommand = 'authFollowUpClicked' - - interface TestCase { - authType: AuthFollowUpType - stubToReject: sinon.SinonStub - errorMessage: string - } - - const testFailure = async (testCase: TestCase) => { - testCase.stubToReject.rejects(new Error()) - - await messageHandler({ - command: authFollowUpClickedCommand, - params: { - authFollowupType: testCase.authType, - }, - }) - - sinon.assert.calledOnce(errorStub) - sinon.assert.calledWith(errorStub, sinon.match(testCase.errorMessage)) - } - - beforeEach(() => { - deleteConnectionStub = sandbox.stub().resolves() - reauthenticateStub = sandbox.stub().resolves() - - mockAuthUtil = { - reauthenticate: reauthenticateStub, - secondaryAuth: { - deleteConnection: deleteConnectionStub, - } as unknown as secondaryAuth.SecondaryAuth, - } as unknown as AuthUtil - - sandbox.replaceGetter(AuthUtil, 'instance', () => mockAuthUtil) - }) - - it('handles re-authentication request', async () => { - await messageHandler({ - command: authFollowUpClickedCommand, - params: { - authFollowupType: 're-auth', - }, - }) - - sinon.assert.calledOnce(reauthenticateStub) - sinon.assert.notCalled(deleteConnectionStub) - }) - - it('handles full authentication request', async () => { - await messageHandler({ - command: authFollowUpClickedCommand, - params: { - authFollowupType: 'full-auth', - }, - }) - - sinon.assert.notCalled(reauthenticateStub) - sinon.assert.calledOnce(deleteConnectionStub) - }) - - it('logs error if re-authentication fails', async () => { - await testFailure({ - authType: 're-auth', - stubToReject: reauthenticateStub, - errorMessage: 'Failed to re-authenticate', - }) - }) - - it('logs error if full authentication fails', async () => { - await testFailure({ - authType: 'full-auth', - stubToReject: deleteConnectionStub, - errorMessage: 'Failed to authenticate', - }) - }) - }) - - describe('COPY_TO_CLIPBOARD', () => { - let copyToClipboardStub: sinon.SinonStub - const testCode = 'test' - const copyMessage = { - command: 'copyToClipboard', - params: { - code: testCode, - }, - } - - beforeEach(() => { - copyToClipboardStub = sandbox.stub().resolves() - sandbox.stub(messages, 'copyToClipboard').get(() => copyToClipboardStub) - }) - - it('successfully copies code to clipboard', async () => { - await messageHandler(copyMessage) - - sinon.assert.calledWith(copyToClipboardStub, testCode) - }) - - it('handles clipboard copy failure', async () => { - const errorMessage = 'Failed to copy' - copyToClipboardStub.rejects(new Error(errorMessage)) - - await messageHandler(copyMessage) - - sinon.assert.calledWith(errorStub, `[VSCode Client] Failed to copy to clipboard: ${errorMessage}`) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/lsp/client.test.ts b/packages/amazonq/test/unit/amazonq/lsp/client.test.ts deleted file mode 100644 index 8f11c8eaa35..00000000000 --- a/packages/amazonq/test/unit/amazonq/lsp/client.test.ts +++ /dev/null @@ -1,268 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import sinon from 'sinon' -import { BaseLanguageClient } from 'vscode-languageclient' -import { AuthUtil } from 'aws-core-vscode/codewhisperer' -import { AmazonQLspAuth } from '../../../../src/lsp/auth' - -// These tests verify the behavior of the authentication functions -// Since the actual functions are module-level and use real dependencies, -// we test the expected behavior through mock implementations - -describe('Language Server Client Authentication', function () { - let sandbox: sinon.SinonSandbox - let mockClient: any - let mockAuth: any - let authUtilStub: sinon.SinonStub - let loggerStub: any - let getLoggerStub: sinon.SinonStub - let pushConfigUpdateStub: sinon.SinonStub - - beforeEach(() => { - sandbox = sinon.createSandbox() - - // Mock LanguageClient - mockClient = { - sendRequest: sandbox.stub().resolves(), - sendNotification: sandbox.stub(), - onDidChangeState: sandbox.stub(), - } - - // Mock AmazonQLspAuth - mockAuth = { - refreshConnection: sandbox.stub().resolves(), - } - - // Mock AuthUtil - authUtilStub = sandbox.stub(AuthUtil, 'instance').get(() => ({ - isConnectionValid: sandbox.stub().returns(true), - regionProfileManager: { - activeRegionProfile: { arn: 'test-profile-arn' }, - }, - auth: { - getConnectionState: sandbox.stub().returns('valid'), - activeConnection: { id: 'test-connection' }, - }, - })) - - // Create logger stub - loggerStub = { - info: sandbox.stub(), - debug: sandbox.stub(), - warn: sandbox.stub(), - error: sandbox.stub(), - } - - // Clear all relevant module caches - const sharedModuleId = require.resolve('aws-core-vscode/shared') - const configModuleId = require.resolve('../../../../src/lsp/config') - delete require.cache[sharedModuleId] - delete require.cache[configModuleId] - - // jscpd:ignore-start - // Create getLogger stub - getLoggerStub = sandbox.stub().returns(loggerStub) - - // Create a mock shared module with stubbed getLogger - const mockSharedModule = { - getLogger: getLoggerStub, - } - - // Override the require cache with our mock - require.cache[sharedModuleId] = { - id: sharedModuleId, - filename: sharedModuleId, - loaded: true, - parent: undefined, - children: [], - exports: mockSharedModule, - paths: [], - } as any - // jscpd:ignore-end - - // Mock pushConfigUpdate - pushConfigUpdateStub = sandbox.stub().resolves() - const mockConfigModule = { - pushConfigUpdate: pushConfigUpdateStub, - } - - require.cache[configModuleId] = { - id: configModuleId, - filename: configModuleId, - loaded: true, - parent: undefined, - children: [], - exports: mockConfigModule, - paths: [], - } as any - }) - - afterEach(() => { - sandbox.restore() - }) - - describe('initializeLanguageServerConfiguration behavior', function () { - it('should initialize configuration when connection is valid', async function () { - // Test the expected behavior of the function - const mockInitializeFunction = async (client: BaseLanguageClient, context: string) => { - const { getLogger } = require('aws-core-vscode/shared') - const { pushConfigUpdate } = require('../../../../src/lsp/config') - const logger = getLogger('amazonqLsp') - - if (AuthUtil.instance.isConnectionValid()) { - logger.info(`[${context}] Initializing language server configuration`) - - // Send profile configuration - logger.debug(`[${context}] Sending profile configuration to language server`) - await pushConfigUpdate(client, { - type: 'profile', - profileArn: AuthUtil.instance.regionProfileManager.activeRegionProfile?.arn, - }) - logger.debug(`[${context}] Profile configuration sent successfully`) - - // Send customization configuration - logger.debug(`[${context}] Sending customization configuration to language server`) - await pushConfigUpdate(client, { - type: 'customization', - customization: 'test-customization', - }) - logger.debug(`[${context}] Customization configuration sent successfully`) - - logger.info(`[${context}] Language server configuration completed successfully`) - } else { - logger.warn(`[${context}] Connection invalid, skipping configuration`) - } - } - - await mockInitializeFunction(mockClient as any, 'startup') - - // Verify logging - assert(loggerStub.info.calledWith('[startup] Initializing language server configuration')) - assert(loggerStub.debug.calledWith('[startup] Sending profile configuration to language server')) - assert(loggerStub.debug.calledWith('[startup] Profile configuration sent successfully')) - assert(loggerStub.debug.calledWith('[startup] Sending customization configuration to language server')) - assert(loggerStub.debug.calledWith('[startup] Customization configuration sent successfully')) - assert(loggerStub.info.calledWith('[startup] Language server configuration completed successfully')) - - // Verify pushConfigUpdate was called twice - assert.strictEqual(pushConfigUpdateStub.callCount, 2) - - // Verify profile configuration - assert( - pushConfigUpdateStub.calledWith(mockClient, { - type: 'profile', - profileArn: 'test-profile-arn', - }) - ) - - // Verify customization configuration - assert( - pushConfigUpdateStub.calledWith(mockClient, { - type: 'customization', - customization: 'test-customization', - }) - ) - }) - - it('should log warning when connection is invalid', async function () { - // Mock invalid connection - authUtilStub.get(() => ({ - isConnectionValid: sandbox.stub().returns(false), - auth: { - getConnectionState: sandbox.stub().returns('invalid'), - activeConnection: { id: 'test-connection' }, - }, - })) - - const mockInitializeFunction = async (client: BaseLanguageClient, context: string) => { - const { getLogger } = require('aws-core-vscode/shared') - const logger = getLogger('amazonqLsp') - - // jscpd:ignore-start - if (AuthUtil.instance.isConnectionValid()) { - // Should not reach here - } else { - logger.warn( - `[${context}] Connection invalid, skipping language server configuration - this will cause authentication failures` - ) - const activeConnection = AuthUtil.instance.auth.activeConnection - const connectionState = activeConnection - ? AuthUtil.instance.auth.getConnectionState(activeConnection) - : 'no-connection' - logger.warn(`[${context}] Connection state: ${connectionState}`) - // jscpd:ignore-end - } - } - - await mockInitializeFunction(mockClient as any, 'crash-recovery') - - // Verify warning logs - assert( - loggerStub.warn.calledWith( - '[crash-recovery] Connection invalid, skipping language server configuration - this will cause authentication failures' - ) - ) - assert(loggerStub.warn.calledWith('[crash-recovery] Connection state: invalid')) - - // Verify pushConfigUpdate was not called - assert.strictEqual(pushConfigUpdateStub.callCount, 0) - }) - }) - - describe('crash recovery handler behavior', function () { - it('should reinitialize authentication after crash', async function () { - const mockCrashHandler = async (client: BaseLanguageClient, auth: AmazonQLspAuth) => { - const { getLogger } = require('aws-core-vscode/shared') - const { pushConfigUpdate } = require('../../../../src/lsp/config') - const logger = getLogger('amazonqLsp') - - logger.info('[crash-recovery] Language server crash detected, reinitializing authentication') - - try { - logger.debug('[crash-recovery] Refreshing connection and sending bearer token') - await auth.refreshConnection(true) - logger.debug('[crash-recovery] Bearer token sent successfully') - - // Mock the configuration initialization - if (AuthUtil.instance.isConnectionValid()) { - await pushConfigUpdate(client, { - type: 'profile', - profileArn: AuthUtil.instance.regionProfileManager.activeRegionProfile?.arn, - }) - } - - logger.info('[crash-recovery] Authentication reinitialized successfully') - } catch (error) { - logger.error(`[crash-recovery] Failed to reinitialize after crash: ${error}`) - } - } - - await mockCrashHandler(mockClient as any, mockAuth as any) - - // Verify crash recovery logging - assert( - loggerStub.info.calledWith( - '[crash-recovery] Language server crash detected, reinitializing authentication' - ) - ) - assert(loggerStub.debug.calledWith('[crash-recovery] Refreshing connection and sending bearer token')) - assert(loggerStub.debug.calledWith('[crash-recovery] Bearer token sent successfully')) - assert(loggerStub.info.calledWith('[crash-recovery] Authentication reinitialized successfully')) - - // Verify auth.refreshConnection was called - assert(mockAuth.refreshConnection.calledWith(true)) - - // Verify profile configuration was sent - assert( - pushConfigUpdateStub.calledWith(mockClient, { - type: 'profile', - profileArn: 'test-profile-arn', - }) - ) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/lsp/config.test.ts b/packages/amazonq/test/unit/amazonq/lsp/config.test.ts deleted file mode 100644 index c31e873e181..00000000000 --- a/packages/amazonq/test/unit/amazonq/lsp/config.test.ts +++ /dev/null @@ -1,227 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import { DevSettings } from 'aws-core-vscode/shared' -import sinon from 'sinon' -import { defaultAmazonQLspConfig, ExtendedAmazonQLSPConfig, getAmazonQLspConfig } from '../../../../src/lsp/config' - -describe('getAmazonQLspConfig', () => { - let sandbox: sinon.SinonSandbox - let serviceConfigStub: sinon.SinonStub - const settingConfig: ExtendedAmazonQLSPConfig = { - manifestUrl: 'https://custom.url/manifest.json', - supportedVersions: '4.0.0', - id: 'AmazonQSetting', - suppressPromptPrefix: getAmazonQLspConfig().suppressPromptPrefix, - path: '/custom/path', - ui: '/chat/client/location', - } - - beforeEach(() => { - sandbox = sinon.createSandbox() - - serviceConfigStub = sandbox.stub() - sandbox.stub(DevSettings, 'instance').get(() => ({ - getServiceConfig: serviceConfigStub, - })) - }) - - afterEach(() => { - sandbox.restore() - resetEnv() - }) - - it('uses default config', () => { - serviceConfigStub.returns({}) - assert.deepStrictEqual(getAmazonQLspConfig(), defaultAmazonQLspConfig) - }) - - it('overrides path', () => { - const path = '/custom/path/to/lsp' - serviceConfigStub.returns({ path }) - - assert.deepStrictEqual(getAmazonQLspConfig(), { - ...defaultAmazonQLspConfig, - path, - }) - }) - - it('overrides default settings', () => { - serviceConfigStub.returns(settingConfig) - - assert.deepStrictEqual(getAmazonQLspConfig(), settingConfig) - }) - - it('environment variable takes precedence over settings', () => { - setEnv(settingConfig) - serviceConfigStub.returns({}) - assert.deepStrictEqual(getAmazonQLspConfig(), settingConfig) - }) - - function setEnv(envConfig: ExtendedAmazonQLSPConfig) { - process.env.__AMAZONQLSP_MANIFEST_URL = envConfig.manifestUrl - process.env.__AMAZONQLSP_SUPPORTED_VERSIONS = envConfig.supportedVersions - process.env.__AMAZONQLSP_ID = envConfig.id - process.env.__AMAZONQLSP_PATH = envConfig.path - process.env.__AMAZONQLSP_UI = envConfig.ui - } - - function resetEnv() { - delete process.env.__AMAZONQLSP_MANIFEST_URL - delete process.env.__AMAZONQLSP_SUPPORTED_VERSIONS - delete process.env.__AMAZONQLSP_ID - delete process.env.__AMAZONQLSP_PATH - delete process.env.__AMAZONQLSP_UI - } -}) - -describe('pushConfigUpdate', () => { - let sandbox: sinon.SinonSandbox - let mockClient: any - let loggerStub: any - let getLoggerStub: sinon.SinonStub - let pushConfigUpdate: any - - beforeEach(() => { - sandbox = sinon.createSandbox() - - // Mock LanguageClient - mockClient = { - sendRequest: sandbox.stub().resolves(), - sendNotification: sandbox.stub(), - } - - // Create logger stub - loggerStub = { - debug: sandbox.stub(), - } - - // Clear all relevant module caches - const configModuleId = require.resolve('../../../../src/lsp/config') - const sharedModuleId = require.resolve('aws-core-vscode/shared') - delete require.cache[configModuleId] - delete require.cache[sharedModuleId] - - // jscpd:ignore-start - // Create getLogger stub and store reference for test verification - getLoggerStub = sandbox.stub().returns(loggerStub) - - // Create a mock shared module with stubbed getLogger - const mockSharedModule = { - getLogger: getLoggerStub, - } - - // Override the require cache with our mock - require.cache[sharedModuleId] = { - id: sharedModuleId, - filename: sharedModuleId, - loaded: true, - parent: undefined, - children: [], - exports: mockSharedModule, - paths: [], - } as any - - // Now require the module - it should use our mocked getLogger - // jscpd:ignore-end - const configModule = require('../../../../src/lsp/config') - pushConfigUpdate = configModule.pushConfigUpdate - }) - - afterEach(() => { - sandbox.restore() - }) - - it('should send profile configuration with logging', async () => { - const config = { - type: 'profile' as const, - profileArn: 'test-profile-arn', - } - - await pushConfigUpdate(mockClient, config) - - // Verify logging - assert(loggerStub.debug.calledWith('Pushing profile configuration: test-profile-arn')) - assert(loggerStub.debug.calledWith('Profile configuration pushed successfully')) - - // Verify client call - assert(mockClient.sendRequest.calledOnce) - assert( - mockClient.sendRequest.calledWith(sinon.match.string, { - section: 'aws.q', - settings: { profileArn: 'test-profile-arn' }, - }) - ) - }) - - it('should send customization configuration with logging', async () => { - const config = { - type: 'customization' as const, - customization: 'test-customization-arn', - } - - await pushConfigUpdate(mockClient, config) - - // Verify logging - assert(loggerStub.debug.calledWith('Pushing customization configuration: test-customization-arn')) - assert(loggerStub.debug.calledWith('Customization configuration pushed successfully')) - - // Verify client call - assert(mockClient.sendNotification.calledOnce) - assert( - mockClient.sendNotification.calledWith(sinon.match.string, { - section: 'aws.q', - settings: { customization: 'test-customization-arn' }, - }) - ) - }) - - it('should handle undefined profile ARN', async () => { - const config = { - type: 'profile' as const, - profileArn: undefined, - } - - await pushConfigUpdate(mockClient, config) - - // Verify logging with undefined - assert(loggerStub.debug.calledWith('Pushing profile configuration: undefined')) - assert(loggerStub.debug.calledWith('Profile configuration pushed successfully')) - }) - - it('should handle undefined customization ARN', async () => { - const config = { - type: 'customization' as const, - customization: undefined, - } - - await pushConfigUpdate(mockClient, config) - - // Verify logging with undefined - assert(loggerStub.debug.calledWith('Pushing customization configuration: undefined')) - assert(loggerStub.debug.calledWith('Customization configuration pushed successfully')) - }) - - it('should send logLevel configuration with logging', async () => { - const config = { - type: 'logLevel' as const, - } - - await pushConfigUpdate(mockClient, config) - - // Verify logging - assert(loggerStub.debug.calledWith('Pushing log level configuration')) - assert(loggerStub.debug.calledWith('Log level configuration pushed successfully')) - - // Verify client call - assert(mockClient.sendNotification.calledOnce) - assert( - mockClient.sendNotification.calledWith(sinon.match.string, { - section: 'aws.logLevel', - }) - ) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/lsp/encryption.test.ts b/packages/amazonq/test/unit/amazonq/lsp/encryption.test.ts deleted file mode 100644 index 06a901edde6..00000000000 --- a/packages/amazonq/test/unit/amazonq/lsp/encryption.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as assert from 'assert' -import { decryptResponse, encryptRequest } from '../../../../src/lsp/encryption' -import { encryptionKey } from '../../../../src/lsp/auth' - -describe('LSP encryption', function () { - it('encrypt and decrypt invert eachother with same key', async function () { - const key = encryptionKey - const request = { - id: 0, - name: 'my Request', - isRealRequest: false, - metadata: { - tags: ['tag1', 'tag2'], - }, - } - const encryptedPayload = await encryptRequest(request, key) - const message = (encryptedPayload as { message: string }).message - const decrypted = await decryptResponse(message, key) - - assert.deepStrictEqual(decrypted, request) - }) -}) diff --git a/packages/amazonq/test/unit/amazonq/onboardingPage/walkthrough.test.ts b/packages/amazonq/test/unit/amazonq/onboardingPage/walkthrough.test.ts deleted file mode 100644 index 23be7643128..00000000000 --- a/packages/amazonq/test/unit/amazonq/onboardingPage/walkthrough.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert' -import { showAmazonQWalkthroughOnce } from 'aws-core-vscode/amazonq' -import sinon from 'sinon' - -describe('showAmazonQWalkthroughOnce', function () { - it('only shows once', async function () { - const showWalkthroughStub = sinon.stub() - assert.deepStrictEqual(showWalkthroughStub.callCount, 0) - await showAmazonQWalkthroughOnce(showWalkthroughStub) - // Show walkthrough since our state indicates we haven't shown before - assert.deepStrictEqual(showWalkthroughStub.callCount, 1) - - await showAmazonQWalkthroughOnce(showWalkthroughStub) - // On the second call we do not show again since we've shown before. - assert.deepStrictEqual(showWalkthroughStub.callCount, 1) - }) -}) diff --git a/packages/amazonq/test/unit/amazonqGumby/amazonQGumbyUtil.ts b/packages/amazonq/test/unit/amazonqGumby/amazonQGumbyUtil.ts deleted file mode 100644 index b6b6af3eaf9..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/amazonQGumbyUtil.ts +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import path from 'path' - -export const getTestResourceFilePath = (relativePathToFile: string) => { - return path.resolve(__dirname, relativePathToFile) -} - -export const stripStringWhitespace = (str: string) => str.replace(/\s+/g, '') diff --git a/packages/amazonq/test/unit/amazonqGumby/chat/controller/messenger/messengerUtils.test.ts b/packages/amazonq/test/unit/amazonqGumby/chat/controller/messenger/messengerUtils.test.ts deleted file mode 100644 index 8792510db79..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/chat/controller/messenger/messengerUtils.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as assert from 'assert' -import { DependencyVersions, MessengerUtils } from 'aws-core-vscode/amazonqGumby' - -const TestDependencyVersions = new DependencyVersions('4.2', ['3.8', '4.2', '2.4'], ['1.12', '1.09', '1.10'], '1.3') - -describe('MessengerUtils', () => { - describe('createAvailableDependencyVersionString', async () => { - it('returns a string containing the highest major version available', async () => { - const message = MessengerUtils.createAvailableDependencyVersionString(TestDependencyVersions) - assert.strictEqual( - message.includes('Latest major version:'), - true, - "'Latest major version' was not found in string" - ) - assert.strictEqual( - message.includes('4.2'), - true, - 'Expected the actual latest major version to be present in string' - ) - }) - - it('returns a string that does not contain a major version when major versions are not defined', async () => { - const testDependencyVersions = new DependencyVersions('4.2', [], ['1.9', '1.11', '1.10'], '1.3') - const message = MessengerUtils.createAvailableDependencyVersionString(testDependencyVersions) - assert.strictEqual(message.includes('Latest major version:'), false) - }) - - it('returns a string containing the highest minor version available', async () => { - const message = MessengerUtils.createAvailableDependencyVersionString(TestDependencyVersions) - assert.strictEqual(message.includes('Latest minor version:'), true) - assert.strictEqual(message.includes('1.12'), true) - }) - - it('returns a string that does not contain a minor version when minor versions are not defined', async () => { - const testDependencyVersions = new DependencyVersions('4.2', ['3.8', '4.2', '2.4'], [], '1.3') - const message = MessengerUtils.createAvailableDependencyVersionString(testDependencyVersions) - assert.strictEqual(message.includes('Latest minor version:'), false) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonqGumby/humanInTheLoopManager.test.ts b/packages/amazonq/test/unit/amazonqGumby/humanInTheLoopManager.test.ts deleted file mode 100644 index e94838ba3c2..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/humanInTheLoopManager.test.ts +++ /dev/null @@ -1,64 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import * as vscode from 'vscode' -import assert from 'assert' -import path from 'path' -import { HumanInTheLoopManager } from 'aws-core-vscode/codewhisperer/node' -import { getTestResourceFilePath, stripStringWhitespace } from './amazonQGumbyUtil' -import { fs } from 'aws-core-vscode/shared' -import { assertEqualPaths } from 'aws-core-vscode/test' - -describe('HumanInTheLoopManager', async function () { - it('will getUserDependencyUpdateDir()', async function () { - const updateDirPath = HumanInTheLoopManager.instance.getUserDependencyUpdateDir() - assert.ok(updateDirPath, 'q-pom-dependency-update') - }) - it('will getUploadFolderInfo()', async function () { - const uploadFolderInfo = HumanInTheLoopManager.instance.getUploadFolderInfo() - assert.strictEqual(uploadFolderInfo.name, 'q-pom-dependency-update') - assert.strictEqual(uploadFolderInfo.path, HumanInTheLoopManager.instance.getUserDependencyUpdateDir()) - }) - it('will getCompileDependencyListFolderInfo()', async function () { - const compileFolderInfo = HumanInTheLoopManager.instance.getCompileDependencyListFolderInfo() - assert.strictEqual(compileFolderInfo.name, 'q-pom-dependency-list') - assert.strictEqual(compileFolderInfo.path, HumanInTheLoopManager.instance.getTmpDependencyListDir()) - }) - it('will createPomFileCopy() and delete artifact', async function () { - const pomFileVirtualFileReference = vscode.Uri.file( - getTestResourceFilePath('resources/files/humanInTheLoop/downloadResults/pom.xml') - ) - const outputDirectoryPath = path.resolve(__dirname, 'testOutput') - const newPomFilePath = await HumanInTheLoopManager.instance.createPomFileCopy( - outputDirectoryPath, - pomFileVirtualFileReference - ) - const outputPathResult = path.join(outputDirectoryPath, 'pom.xml') - assertEqualPaths(newPomFilePath.fsPath, outputPathResult) - const newPomFileContents = await fs.readFileText(newPomFilePath.path) - assert.strictEqual( - stripStringWhitespace(newPomFileContents), - stripStringWhitespace(` - - 4.0.0 - GROUP_ID - ARTIFACT_ID - VERSION - - - - org.projectlombok - lombok - ***** - - - - `) - ) - await HumanInTheLoopManager.instance.cleanUpArtifacts() - const newPomFileDoesNotExistFlag = await fs.existsFile(newPomFilePath) - assert.equal(newPomFileDoesNotExistFlag, false) - }) -}) diff --git a/packages/amazonq/test/unit/amazonqGumby/models/dependencies.test.ts b/packages/amazonq/test/unit/amazonqGumby/models/dependencies.test.ts deleted file mode 100644 index e56ec1853c3..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/models/dependencies.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as assert from 'assert' -import { DependencyVersions } from 'aws-core-vscode/amazonqGumby' - -describe('DependencyVersions', () => { - describe('length', async () => { - it('returns the correct number of versions when empty arrays are passed in', async () => { - const testDependencyVersions = new DependencyVersions('', [], [], '1') - assert.strictEqual(testDependencyVersions.length, 0) - }) - - it('returns the correct number of versions when full arrays', async () => { - const testDependencyVersions = new DependencyVersions('1', ['1', '2', '3'], ['4', '5', '6'], '1') - assert.strictEqual(testDependencyVersions.length, 6) - }) - - it('ignores duplicates when calculating the length', async () => { - const testDependencyVersions = new DependencyVersions('1', ['1', '2'], ['1', '3', '4'], '1') - assert.strictEqual(testDependencyVersions.length, 4) - }) - }) - - describe('allVersions', async () => { - it('returns an empty array when constructed with empty arrays', async () => { - const testDependencyVersions = new DependencyVersions('1', [], [], '1') - assert.deepStrictEqual(Array.from(testDependencyVersions.allVersions), []) - }) - - it('returns a flat array containing all versions passed in the constructor', async () => { - const testDependencyVersions = new DependencyVersions('1', ['1', '2', '3'], ['4', '5', '6'], '1') - assert.deepStrictEqual(Array.from(testDependencyVersions.allVersions), ['1', '2', '3', '4', '5', '6']) - }) - - it('returns an array containing only unique members', async () => { - const testDependencyVersions = new DependencyVersions('1', ['1', '2'], ['1', '2', '3'], '1') - assert.deepStrictEqual(Array.from(testDependencyVersions.allVersions), ['1', '2', '3']) - }) - - it('returns an array where major versions are sorted in ascending order, followed by minor versions', async () => { - const testDependencyVersions = new DependencyVersions('4.4', ['4.4', '3.2'], ['1.1', '1.3', '1.2'], '1') - assert.deepStrictEqual(Array.from(testDependencyVersions.allVersions), ['3.2', '4.4', '1.1', '1.2', '1.3']) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonqGumby/resources/files/addedFile.diff b/packages/amazonq/test/unit/amazonqGumby/resources/files/addedFile.diff deleted file mode 100644 index 7eb35b5fa0e..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/resources/files/addedFile.diff +++ /dev/null @@ -1,6 +0,0 @@ -diff --git a/testfile.txt b/testfile.txt -index e69de29..9f4b6d8 100644 ---- a/testfile.txt -+++ b/testfile.txt -@@ -0,0 +1 @@ -+This is a test file diff --git a/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/dependency-updates-aggregate-report.xml b/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/dependency-updates-aggregate-report.xml deleted file mode 100644 index fd105d8e66c..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/dependency-updates-aggregate-report.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - 0 - 0 - 1 - 0 - 0 - - - - org.projectlombok - lombok - compile - jar - 0.11.4 - 1.18.32 - - 0.11.6 - 0.11.8 - - - 0.12.0 - - - 1.12.2 - 1.12.4 - 1.12.6 - - incremental available - - - diff --git a/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/downloadResults/manifest.json b/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/downloadResults/manifest.json deleted file mode 100644 index 048276f5237..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/downloadResults/manifest.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "hilCapability": "HIL_1pDependency_VersionUpgrade", - "pomFolderName": "pomFolder", - "pomGroupId": "org.projectlombok", - "pomArtifactId": "lombok", - "sourcePomVersion": "0.11.4" -} diff --git a/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/downloadResults/pom.xml b/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/downloadResults/pom.xml deleted file mode 100644 index c5cd78ac24d..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/resources/files/humanInTheLoop/downloadResults/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - 4.0.0 - GROUP_ID - ARTIFACT_ID - VERSION - - - - org.projectlombok - lombok - ***** - - - diff --git a/packages/amazonq/test/unit/amazonqGumby/resources/files/modifiedFile.diff b/packages/amazonq/test/unit/amazonqGumby/resources/files/modifiedFile.diff deleted file mode 100644 index ee3a0a44008..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/resources/files/modifiedFile.diff +++ /dev/null @@ -1,8 +0,0 @@ -diff --git a/README.md b/README.md -index 084f378..1705101 100644 ---- a/README.md -+++ b/README.md -@@ -1,3 +1,5 @@ -This guide walks you through using Gradle to build a simple Java project. -+This line is added. -\ No newline at end of file \ No newline at end of file diff --git a/packages/amazonq/test/unit/amazonqGumby/resources/mocks/transformFixtures.ts b/packages/amazonq/test/unit/amazonqGumby/resources/mocks/transformFixtures.ts deleted file mode 100644 index 60053108efb..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/resources/mocks/transformFixtures.ts +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import { TransformationStep } from 'aws-core-vscode/codewhisperer/node' - -export const downloadArtifactIdFixture = 'hil-test-artifact-id' -export const downloadArtifactTypeFixture = 'BuiltJars' -export const transformationStepsHumanInTheLoopFixture: TransformationStep[] = [ - { - id: 'fake-step-id-1', - name: 'Building Code', - description: 'Building dependencies', - status: 'COMPLETED', - progressUpdates: [ - { - name: 'Status step', - status: 'FAILED', - description: 'This step should be hil identifier', - startTime: new Date(), - endTime: new Date(), - downloadArtifacts: [ - { - downloadArtifactId: downloadArtifactIdFixture, - downloadArtifactType: downloadArtifactTypeFixture, - }, - ], - }, - ], - startTime: new Date(), - endTime: new Date(), - }, -] diff --git a/packages/amazonq/test/unit/amazonqGumby/transformApiHandler.test.ts b/packages/amazonq/test/unit/amazonqGumby/transformApiHandler.test.ts deleted file mode 100644 index 1441171bafc..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/transformApiHandler.test.ts +++ /dev/null @@ -1,150 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import assert from 'assert' -import { - TransformationProgressUpdate, - TransformationStep, - findDownloadArtifactProgressUpdate, - findDownloadArtifactStep, - getArtifactsFromProgressUpdate, -} from 'aws-core-vscode/codewhisperer/node' - -describe('Amazon Q Transform - transformApiHandler tests', function () { - describe('getArtifactIdentifiers', function () { - it('will return downloaded artifact values from transformationStep', function () { - const downloadArtifactId = 'hil-test-artifact-id' - const downloadArtifactType = 'BuiltJars' - const transformationStepsFixture: TransformationProgressUpdate = { - name: 'Status step', - status: 'FAILED', - description: 'This step should be hil identifier', - startTime: new Date(), - endTime: new Date(), - downloadArtifacts: [ - { - downloadArtifactId, - downloadArtifactType, - }, - ], - } - const { artifactId, artifactType } = getArtifactsFromProgressUpdate(transformationStepsFixture) - - assert.strictEqual(artifactId, downloadArtifactId) - assert.strictEqual(artifactType, downloadArtifactType) - }) - }) - describe('findDownloadArtifactStep', function () { - it('will return downloaded artifact values from transformationStep', function () { - const downloadArtifactId = 'hil-test-artifact-id' - const downloadArtifactType = 'BuiltJars' - const transformationStepsFixture: TransformationStep[] = [ - { - id: 'fake-step-id-1', - name: 'Building Code', - description: 'Building dependencies', - status: 'COMPLETED', - progressUpdates: [ - { - name: 'Status step', - status: 'FAILED', - description: 'This step should be hil identifier', - startTime: new Date(), - endTime: new Date(), - downloadArtifacts: [ - { - downloadArtifactId, - downloadArtifactType, - }, - ], - }, - ], - startTime: new Date(), - endTime: new Date(), - }, - ] - const { transformationStep, progressUpdate } = findDownloadArtifactStep(transformationStepsFixture) - - assert.strictEqual(transformationStep, transformationStepsFixture[0]) - assert.strictEqual(progressUpdate, transformationStepsFixture[0].progressUpdates?.[0]) - }) - it('will return undefined if no downloadArtifactId found', function () { - const transformationStepsFixture: TransformationStep[] = [ - { - id: 'fake-step-id-1', - name: 'Building Code', - description: 'Building dependencies', - status: 'COMPLETED', - progressUpdates: [ - { - name: 'Status step', - status: 'FAILED', - description: 'This step should be hil identifier', - startTime: new Date(), - endTime: new Date(), - downloadArtifacts: undefined, - }, - ], - startTime: new Date(), - endTime: new Date(), - }, - ] - const { transformationStep, progressUpdate } = findDownloadArtifactStep(transformationStepsFixture) - - assert.strictEqual(transformationStep, undefined) - assert.strictEqual(progressUpdate, undefined) - }) - }) - - describe('findDownloadArtifactProgressUpdate', function () { - it('will return correct progress update from transformationStep', function () { - const transformationStepsFixture: TransformationStep[] = [ - { - id: 'dummy-id', - name: 'Step name', - description: 'Step description', - status: 'TRANSFORMING', - progressUpdates: [ - { - name: 'Progress update name', - status: 'AWAITING_CLIENT_ACTION', - description: 'Client-side build happening now', - startTime: new Date(), - endTime: new Date(), - downloadArtifacts: [ - { - downloadArtifactId: 'some-download-artifact-id', - downloadArtifactType: 'some-download-artifact-type', - }, - ], - }, - ], - startTime: new Date(), - endTime: new Date(), - }, - ] - const progressUpdate = findDownloadArtifactProgressUpdate(transformationStepsFixture) - assert.strictEqual(progressUpdate, transformationStepsFixture[0].progressUpdates?.[0]) - }) - - it('will return undefined if step status is NOT AWAITING_CLIENT_ACTION', function () { - const transformationStepsFixture: TransformationStep[] = [ - { - id: 'random-id', - name: 'not-awaiting-client-action step name', - description: 'not-awaiting-client-action step description', - status: 'TRANSFORMING', - progressUpdates: [ - { - name: 'some progress update name', - status: 'SOMETHING-BESIDES-AWAITING_CLIENT_ACTION', - }, - ], - }, - ] - const progressUpdate = findDownloadArtifactProgressUpdate(transformationStepsFixture) - assert.strictEqual(progressUpdate, undefined) - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonqGumby/transformFileHandler.test.ts b/packages/amazonq/test/unit/amazonqGumby/transformFileHandler.test.ts deleted file mode 100644 index d89e97af7f0..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/transformFileHandler.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import assert from 'assert' -import { parseVersionsListFromPomFile } from 'aws-core-vscode/codewhisperer/node' - -describe('Amazon Q Transform - transformFileHandler tests', function () { - describe('parseXmlDependenciesReport', function () { - it('Will return parsed values', async function () { - const testXmlReport = ` - - - - 0 - 0 - 1 - 0 - 0 - - - - org.projectlombok - lombok - compile - jar - 0.11.4 - 1.18.32 - - 0.11.6 - 0.11.8 - - - 0.12.0 - - - 1.12.2 - 1.12.4 - 1.12.6 - - incremental available - - - - ` - const { latestVersion, majorVersions, minorVersions, status } = - await parseVersionsListFromPomFile(testXmlReport) - - assert.strictEqual(latestVersion, '1.18.32') - assert.strictEqual(minorVersions[0], '0.12.0') - assert.strictEqual(majorVersions[0], '1.12.2') - assert.strictEqual(status, 'incremental available') - }) - }) -}) diff --git a/packages/amazonq/test/unit/amazonqGumby/transformationResultsHandler.test.ts b/packages/amazonq/test/unit/amazonqGumby/transformationResultsHandler.test.ts deleted file mode 100644 index 143346674d9..00000000000 --- a/packages/amazonq/test/unit/amazonqGumby/transformationResultsHandler.test.ts +++ /dev/null @@ -1,66 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ -import assert from 'assert' -import sinon from 'sinon' -import { DiffModel, AddedChangeNode, ModifiedChangeNode } from 'aws-core-vscode/codewhisperer/node' -import path from 'path' -import { getTestResourceFilePath } from './amazonQGumbyUtil' -import { fs } from 'aws-core-vscode/shared' -import { createTestWorkspace } from 'aws-core-vscode/test' - -describe('DiffModel', function () { - afterEach(() => { - sinon.restore() - }) - - it('WHEN parsing a diff patch where a file was added THEN returns an array representing the added file', async function () { - const testDiffModel = new DiffModel() - - const workspacePath = 'workspace' - - sinon.replace(fs, 'exists', async (path) => { - const pathStr = path.toString() - if (pathStr.includes(workspacePath)) { - return false - } - - return true - }) - testDiffModel.parseDiff(getTestResourceFilePath('resources/files/addedFile.diff'), workspacePath) - - assert.strictEqual( - testDiffModel.patchFileNodes[0].patchFilePath, - getTestResourceFilePath('resources/files/addedFile.diff') - ) - const change = testDiffModel.patchFileNodes[0].children[0] - - assert.strictEqual(change instanceof AddedChangeNode, true) - }) - - it('WHEN parsing a diff patch where a file was modified THEN returns an array representing the modified file', async function () { - const testDiffModel = new DiffModel() - - const fileAmount = 1 - const workspaceFolder = await createTestWorkspace(fileAmount, { fileContent: '' }) - - await fs.writeFile( - path.join(workspaceFolder.uri.fsPath, 'README.md'), - 'This guide walks you through using Gradle to build a simple Java project.' - ) - - testDiffModel.parseDiff( - getTestResourceFilePath('resources/files/modifiedFile.diff'), - workspaceFolder.uri.fsPath - ) - - assert.strictEqual( - testDiffModel.patchFileNodes[0].patchFilePath, - getTestResourceFilePath('resources/files/modifiedFile.diff') - ) - const change = testDiffModel.patchFileNodes[0].children[0] - - assert.strictEqual(change instanceof ModifiedChangeNode, true) - }) -}) diff --git a/packages/amazonq/test/unit/app/inline/EditRendering/diffUtils.test.ts b/packages/amazonq/test/unit/app/inline/EditRendering/diffUtils.test.ts deleted file mode 100644 index dee096d7f57..00000000000 --- a/packages/amazonq/test/unit/app/inline/EditRendering/diffUtils.test.ts +++ /dev/null @@ -1,83 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as assert from 'assert' -import { applyUnifiedDiff } from '../../../../../src/app/inline/EditRendering/diffUtils' - -describe('diffUtils', function () { - describe('applyUnifiedDiff', function () { - it('should correctly apply a unified diff to original text', function () { - // Original code - const originalCode = 'function add(a, b) {\n return a + b;\n}' - - // Unified diff that adds a comment and modifies the return statement - const unifiedDiff = - '--- a/file.js\n' + - '+++ b/file.js\n' + - '@@ -1,3 +1,4 @@\n' + - ' function add(a, b) {\n' + - '+ // Add two numbers\n' + - '- return a + b;\n' + - '+ return a + b; // Return the sum\n' + - ' }' - - // Expected result after applying the diff - const expectedResult = 'function add(a, b) {\n // Add two numbers\n return a + b; // Return the sum\n}' - - // Apply the diff - const appliedCode = applyUnifiedDiff(originalCode, unifiedDiff) - - // Verify the result - assert.strictEqual(appliedCode, expectedResult) - }) - }) - - describe('applyUnifiedDiff with complex changes', function () { - it('should handle multiple hunks in a diff', function () { - // Original code with multiple functions - const originalCode = - 'function add(a, b) {\n' + - ' return a + b;\n' + - '}\n' + - '\n' + - 'function subtract(a, b) {\n' + - ' return a - b;\n' + - '}' - - // Unified diff that modifies both functions - const unifiedDiff = - '--- a/file.js\n' + - '+++ b/file.js\n' + - '@@ -1,3 +1,4 @@\n' + - ' function add(a, b) {\n' + - '+ // Addition function\n' + - ' return a + b;\n' + - ' }\n' + - '@@ -5,3 +6,4 @@\n' + - ' function subtract(a, b) {\n' + - '+ // Subtraction function\n' + - ' return a - b;\n' + - ' }' - - // Expected result after applying the diff - const expectedResult = - 'function add(a, b) {\n' + - ' // Addition function\n' + - ' return a + b;\n' + - '}\n' + - '\n' + - 'function subtract(a, b) {\n' + - ' // Subtraction function\n' + - ' return a - b;\n' + - '}' - - // Apply the diff - const appliedCode = applyUnifiedDiff(originalCode, unifiedDiff) - - // Verify the result - assert.strictEqual(appliedCode, expectedResult) - }) - }) -}) diff --git a/packages/amazonq/test/unit/app/inline/EditRendering/displayImage.test.ts b/packages/amazonq/test/unit/app/inline/EditRendering/displayImage.test.ts deleted file mode 100644 index e02c29dd72e..00000000000 --- a/packages/amazonq/test/unit/app/inline/EditRendering/displayImage.test.ts +++ /dev/null @@ -1,421 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import * as sinon from 'sinon' -import assert from 'assert' -import { EditDecorationManager, displaySvgDecoration } from '../../../../../src/app/inline/EditRendering/displayImage' -import { EditSuggestionState } from '../../../../../src/app/inline/editSuggestionState' - -// Shared helper function to create common stubs -function createCommonStubs(sandbox: sinon.SinonSandbox) { - const documentStub = { - getText: sandbox.stub().returns('Original code content'), - uri: vscode.Uri.file('/test/file.ts'), - lineAt: sandbox.stub().returns({ - text: 'Line text content', - range: new vscode.Range(0, 0, 0, 18), - rangeIncludingLineBreak: new vscode.Range(0, 0, 0, 19), - firstNonWhitespaceCharacterIndex: 0, - isEmptyOrWhitespace: false, - }), - } as unknown as sinon.SinonStubbedInstance - - const editorStub = { - document: documentStub, - setDecorations: sandbox.stub(), - } as unknown as sinon.SinonStubbedInstance - - return { documentStub, editorStub } -} - -describe('EditDecorationManager', function () { - let sandbox: sinon.SinonSandbox - let editorStub: sinon.SinonStubbedInstance - let documentStub: sinon.SinonStubbedInstance - let windowStub: sinon.SinonStubbedInstance - let commandsStub: sinon.SinonStubbedInstance - let decorationTypeStub: sinon.SinonStubbedInstance - let manager: EditDecorationManager - - beforeEach(function () { - sandbox = sinon.createSandbox() - - // Create stubs for vscode objects - decorationTypeStub = { - dispose: sandbox.stub(), - } as unknown as sinon.SinonStubbedInstance - - const commonStubs = createCommonStubs(sandbox) - documentStub = commonStubs.documentStub - editorStub = commonStubs.editorStub - - // Add additional properties needed for this test suite - extend the stub objects - Object.assign(documentStub, { lineCount: 5 }) - Object.assign(editorStub, { edit: sandbox.stub().resolves(true) }) - - windowStub = sandbox.stub(vscode.window) - windowStub.createTextEditorDecorationType.returns(decorationTypeStub as any) - - commandsStub = sandbox.stub(vscode.commands) - commandsStub.registerCommand.returns({ dispose: sandbox.stub() }) - - // Create a new instance of EditDecorationManager for each test - manager = new EditDecorationManager() - }) - - afterEach(function () { - sandbox.restore() - }) - - it('should display SVG decorations in the editor', async function () { - // Create a fake SVG image URI - const svgUri = vscode.Uri.parse('file:///path/to/image.svg') - - // Create accept and reject handlers - const acceptHandler = sandbox.stub() - const rejectHandler = sandbox.stub() - - // Reset the setDecorations stub to clear any previous calls - editorStub.setDecorations.reset() - - // Call displayEditSuggestion - await manager.displayEditSuggestion( - editorStub as unknown as vscode.TextEditor, - svgUri, - 0, - acceptHandler, - rejectHandler, - 'Original code', - 'New code', - [{ line: 0, start: 0, end: 0 }] - ) - - // Verify decorations were set (we expect 4 calls because clearDecorations is called first) - assert.strictEqual(editorStub.setDecorations.callCount, 4) - - // Verify the third call is for the image decoration (after clearDecorations) - const imageCall = editorStub.setDecorations.getCall(2) - assert.strictEqual(imageCall.args[0], manager['imageDecorationType']) - assert.strictEqual(imageCall.args[1].length, 1) - - // Verify the fourth call is for the removed code decoration - const removedCodeCall = editorStub.setDecorations.getCall(3) - assert.strictEqual(removedCodeCall.args[0], manager['removedCodeDecorationType']) - }) - - // Helper function to setup edit suggestion test - async function setupEditSuggestionTest() { - // Create a fake SVG image URI - const svgUri = vscode.Uri.parse('file:///path/to/image.svg') - - // Create accept and reject handlers - const acceptHandler = sandbox.stub() - const rejectHandler = sandbox.stub() - - // Display the edit suggestion - await manager.displayEditSuggestion( - editorStub as unknown as vscode.TextEditor, - svgUri, - 0, - acceptHandler, - rejectHandler, - 'Original code', - 'New code', - [{ line: 0, start: 0, end: 0 }] - ) - - return { acceptHandler, rejectHandler } - } - - it('should trigger accept handler when command is executed', async function () { - const { acceptHandler, rejectHandler } = await setupEditSuggestionTest() - - // Find the command handler that was registered for accept - const acceptCommandArgs = commandsStub.registerCommand.args.find( - (args) => args[0] === 'aws.amazonq.inline.acceptEdit' - ) - - // Execute the accept command handler if found - if (acceptCommandArgs && acceptCommandArgs[1]) { - const acceptCommandHandler = acceptCommandArgs[1] - acceptCommandHandler() - - // Verify the accept handler was called - sinon.assert.calledOnce(acceptHandler) - sinon.assert.notCalled(rejectHandler) - } else { - assert.fail('Accept command handler not found') - } - }) - - it('should trigger reject handler when command is executed', async function () { - const { acceptHandler, rejectHandler } = await setupEditSuggestionTest() - - // Find the command handler that was registered for reject - const rejectCommandArgs = commandsStub.registerCommand.args.find( - (args) => args[0] === 'aws.amazonq.inline.rejectEdit' - ) - - // Execute the reject command handler if found - if (rejectCommandArgs && rejectCommandArgs[1]) { - const rejectCommandHandler = rejectCommandArgs[1] - rejectCommandHandler() - - // Verify the reject handler was called - sinon.assert.calledOnce(rejectHandler) - sinon.assert.notCalled(acceptHandler) - } else { - assert.fail('Reject command handler not found') - } - }) - - it('should clear decorations when requested', async function () { - // Reset the setDecorations stub to clear any previous calls - editorStub.setDecorations.reset() - - // Call clearDecorations - await manager.clearDecorations(editorStub as unknown as vscode.TextEditor, []) - - // Verify decorations were cleared - assert.strictEqual(editorStub.setDecorations.callCount, 2) - - // Verify both decoration types were cleared - sinon.assert.calledWith(editorStub.setDecorations.firstCall, manager['imageDecorationType'], []) - sinon.assert.calledWith(editorStub.setDecorations.secondCall, manager['removedCodeDecorationType'], []) - }) -}) - -describe('displaySvgDecoration cursor distance auto-discard', function () { - let sandbox: sinon.SinonSandbox - let editorStub: sinon.SinonStubbedInstance - let languageClientStub: any - let sessionStub: any - let itemStub: any - - beforeEach(function () { - sandbox = sinon.createSandbox() - const commonStubs = createCommonStubs(sandbox) - editorStub = commonStubs.editorStub - - languageClientStub = { - sendNotification: sandbox.stub(), - } - - sessionStub = { - sessionId: 'test-session', - requestStartTime: Date.now(), - firstCompletionDisplayLatency: 100, - } - - itemStub = { - itemId: 'test-item', - insertText: 'test content', - } - }) - - afterEach(function () { - sandbox.restore() - }) - - it('should send discard telemetry and return early when edit is 10+ lines away from cursor', async function () { - // Set cursor at line 5 - editorStub.selection = { - active: new vscode.Position(5, 0), - } as any - // Try to display edit at line 20 (15 lines away) - await displaySvgDecoration( - editorStub as unknown as vscode.TextEditor, - vscode.Uri.parse('data:image/svg+xml;base64,test'), - 20, - 'new code', - [], - sessionStub, - languageClientStub, - itemStub, - [] - ) - - // Verify discard telemetry was sent - sinon.assert.calledOnce(languageClientStub.sendNotification) - const call = languageClientStub.sendNotification.getCall(0) - assert.strictEqual(call.args[0], 'aws/logInlineCompletionSessionResults') - assert.strictEqual(call.args[1].sessionId, 'test-session') - assert.strictEqual(call.args[1].completionSessionResult['test-item'].discarded, true) - }) - - it('should proceed normally when edit is within 10 lines of cursor', async function () { - // Set cursor at line 5 - editorStub.selection = { - active: new vscode.Position(5, 0), - } as any - // Mock required dependencies for normal flow - sandbox.stub(vscode.workspace, 'onDidChangeTextDocument').returns({ dispose: sandbox.stub() }) - sandbox.stub(vscode.window, 'onDidChangeTextEditorSelection').returns({ dispose: sandbox.stub() }) - - // Try to display edit at line 10 (5 lines away) - await displaySvgDecoration( - editorStub as unknown as vscode.TextEditor, - vscode.Uri.parse('data:image/svg+xml;base64,test'), - 10, - 'new code', - [], - sessionStub, - languageClientStub, - itemStub, - [] - ) - - // Verify no discard telemetry was sent (function should proceed normally) - sinon.assert.notCalled(languageClientStub.sendNotification) - }) -}) - -// TODO: reenable this test, need some updates after refactor -describe.skip('displaySvgDecoration cursor distance auto-reject', function () { - let sandbox: sinon.SinonSandbox - let editorStub: sinon.SinonStubbedInstance - let windowStub: sinon.SinonStub - let commandsStub: sinon.SinonStub - let editSuggestionStateStub: sinon.SinonStub - let onDidChangeTextEditorSelectionStub: sinon.SinonStub - let selectionChangeListener: (e: vscode.TextEditorSelectionChangeEvent) => void - - // Helper function to setup displaySvgDecoration - async function setupDisplaySvgDecoration(startLine: number) { - return await displaySvgDecoration( - editorStub as unknown as vscode.TextEditor, - vscode.Uri.parse('data:image/svg+xml;base64,test'), - startLine, - 'new code', - [], - {} as any, - {} as any, - { itemId: 'test', insertText: 'patch' } as any, - [] - ) - } - - // Helper function to create selection change event - function createSelectionChangeEvent(line: number): vscode.TextEditorSelectionChangeEvent { - const position = new vscode.Position(line, 0) - const selection = new vscode.Selection(position, position) - return { - textEditor: editorStub, - selections: [selection], - kind: vscode.TextEditorSelectionChangeKind.Mouse, - } as vscode.TextEditorSelectionChangeEvent - } - - beforeEach(function () { - sandbox = sinon.createSandbox() - - const commonStubs = createCommonStubs(sandbox) - editorStub = commonStubs.editorStub - - // Mock vscode.window.onDidChangeTextEditorSelection - onDidChangeTextEditorSelectionStub = sandbox.stub() - onDidChangeTextEditorSelectionStub.returns({ dispose: sandbox.stub() }) - windowStub = sandbox.stub(vscode.window, 'onDidChangeTextEditorSelection') - windowStub.callsFake((callback) => { - selectionChangeListener = callback - return { dispose: sandbox.stub() } - }) - - // Mock vscode.commands.executeCommand - commandsStub = sandbox.stub(vscode.commands, 'executeCommand') - - // Mock EditSuggestionState - editSuggestionStateStub = sandbox.stub(EditSuggestionState, 'isEditSuggestionActive') - editSuggestionStateStub.returns(true) - - // Mock other required dependencies - sandbox.stub(vscode.workspace, 'onDidChangeTextDocument').returns({ dispose: sandbox.stub() }) - }) - - afterEach(function () { - sandbox.restore() - }) - - it('should not reject when cursor moves less than 25 lines away', async function () { - // Set cursor at line 50 - editorStub.selection = { - active: new vscode.Position(50, 0), - } as any - const startLine = 50 - await setupDisplaySvgDecoration(startLine) - - selectionChangeListener(createSelectionChangeEvent(startLine + 24)) - - sinon.assert.notCalled(commandsStub) - }) - - it('should not reject when cursor moves exactly 25 lines away', async function () { - // Set cursor at line 50 - editorStub.selection = { - active: new vscode.Position(50, 0), - } as any - const startLine = 50 - await setupDisplaySvgDecoration(startLine) - - selectionChangeListener(createSelectionChangeEvent(startLine + 25)) - - sinon.assert.notCalled(commandsStub) - }) - - it('should reject when cursor moves more than 25 lines away', async function () { - // Set cursor at line 50 - editorStub.selection = { - active: new vscode.Position(50, 0), - } as any - const startLine = 50 - await setupDisplaySvgDecoration(startLine) - - selectionChangeListener(createSelectionChangeEvent(startLine + 26)) - - sinon.assert.calledOnceWithExactly(commandsStub, 'aws.amazonq.inline.rejectEdit') - }) - - it('should reject when cursor moves more than 25 lines before the edit', async function () { - // Set cursor at line 50 - editorStub.selection = { - active: new vscode.Position(50, 0), - } as any - const startLine = 50 - await setupDisplaySvgDecoration(startLine) - - selectionChangeListener(createSelectionChangeEvent(startLine - 26)) - - sinon.assert.calledOnceWithExactly(commandsStub, 'aws.amazonq.inline.rejectEdit') - }) - - it('should not reject when edit is near beginning of file and cursor cannot move far enough', async function () { - // Set cursor at line 10 - editorStub.selection = { - active: new vscode.Position(10, 0), - } as any - const startLine = 10 - await setupDisplaySvgDecoration(startLine) - - selectionChangeListener(createSelectionChangeEvent(0)) - - sinon.assert.notCalled(commandsStub) - }) - - it('should not reject when edit suggestion is not active', async function () { - // Set cursor at line 50 - editorStub.selection = { - active: new vscode.Position(50, 0), - } as any - editSuggestionStateStub.returns(false) - - const startLine = 50 - await setupDisplaySvgDecoration(startLine) - - selectionChangeListener(createSelectionChangeEvent(startLine + 100)) - - sinon.assert.notCalled(commandsStub) - }) -}) diff --git a/packages/amazonq/test/unit/app/inline/EditRendering/imageRenderer.test.ts b/packages/amazonq/test/unit/app/inline/EditRendering/imageRenderer.test.ts deleted file mode 100644 index dcc40a47ed3..00000000000 --- a/packages/amazonq/test/unit/app/inline/EditRendering/imageRenderer.test.ts +++ /dev/null @@ -1,270 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import * as sinon from 'sinon' -import assert from 'assert' -// Remove static import - we'll use dynamic import instead -// import { EditsSuggestionSvg } from '../../../../../src/app/inline/EditRendering/imageRenderer' -import { SvgGenerationService } from '../../../../../src/app/inline/EditRendering/svgGenerator' -import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes/protocol' - -describe('showEdits', function () { - let sandbox: sinon.SinonSandbox - let editorStub: sinon.SinonStubbedInstance - let documentStub: sinon.SinonStubbedInstance - let svgGenerationServiceStub: sinon.SinonStubbedInstance - let displaySvgDecorationStub: sinon.SinonStub - let loggerStub: sinon.SinonStubbedInstance - let getLoggerStub: sinon.SinonStub - let EditsSuggestionSvgClass: any // Will be dynamically imported - let languageClientStub: any - let sessionStub: any - let itemStub: InlineCompletionItemWithReferences - - // Helper function to create mock SVG result - function createMockSvgResult(overrides: Partial = {}) { - return { - svgImage: vscode.Uri.file('/path/to/generated.svg'), - startLine: 5, - newCode: 'console.log("Hello World");', - originalCodeHighlightRange: [{ line: 5, start: 0, end: 10 }], - ...overrides, - } - } - - beforeEach(function () { - sandbox = sinon.createSandbox() - - // Create logger stub - loggerStub = { - error: sandbox.stub(), - info: sandbox.stub(), - debug: sandbox.stub(), - warn: sandbox.stub(), - } - - // Clear all relevant module caches - const moduleId = require.resolve('../../../../../src/app/inline/EditRendering/imageRenderer') - const sharedModuleId = require.resolve('aws-core-vscode/shared') - delete require.cache[moduleId] - delete require.cache[sharedModuleId] - - // jscpd:ignore-start - // Create getLogger stub and store reference for test verification - getLoggerStub = sandbox.stub().returns(loggerStub) - - // Create a mock shared module with stubbed getLogger - const mockSharedModule = { - getLogger: getLoggerStub, - } - - // Override the require cache with our mock - require.cache[sharedModuleId] = { - id: sharedModuleId, - filename: sharedModuleId, - loaded: true, - parent: undefined, - children: [], - exports: mockSharedModule, - paths: [], - } as any - - // Now require the module - it should use our mocked getLogger - // jscpd:ignore-end - const imageRendererModule = require('../../../../../src/app/inline/EditRendering/imageRenderer') - EditsSuggestionSvgClass = imageRendererModule.EditsSuggestionSvg - - // Create document stub - documentStub = { - uri: { - fsPath: '/path/to/test/file.ts', - }, - getText: sandbox.stub().returns('Original code content'), - lineCount: 5, - } as unknown as sinon.SinonStubbedInstance - - // Create editor stub - editorStub = { - document: documentStub, - setDecorations: sandbox.stub(), - edit: sandbox.stub().resolves(true), - } as unknown as sinon.SinonStubbedInstance - - // Create SVG generation service stub - svgGenerationServiceStub = { - generateDiffSvg: sandbox.stub(), - } as unknown as sinon.SinonStubbedInstance - - // Stub the SvgGenerationService constructor - sandbox - .stub(SvgGenerationService.prototype, 'generateDiffSvg') - .callsFake(svgGenerationServiceStub.generateDiffSvg) - - // Create display SVG decoration stub - displaySvgDecorationStub = sandbox.stub() - sandbox.replace( - require('../../../../../src/app/inline/EditRendering/displayImage'), - 'displaySvgDecoration', - displaySvgDecorationStub - ) - - // Create language client stub - languageClientStub = {} as any - - // Create session stub - sessionStub = { - sessionId: 'test-session-id', - suggestions: [], - isRequestInProgress: false, - requestStartTime: Date.now(), - startPosition: new vscode.Position(0, 0), - } as any - - // Create item stub - itemStub = { - insertText: 'console.log("Hello World");', - range: new vscode.Range(0, 0, 0, 0), - itemId: 'test-item-id', - } as any - }) - - afterEach(function () { - sandbox.restore() - }) - - it('should return early when editor is undefined', async function () { - const sut = new EditsSuggestionSvgClass(itemStub, undefined as any, languageClientStub, sessionStub) - await sut.show() - // Verify that no SVG generation or display methods were called - sinon.assert.notCalled(svgGenerationServiceStub.generateDiffSvg) - sinon.assert.notCalled(displaySvgDecorationStub) - sinon.assert.calledOnce(loggerStub.error) - }) - - it('should successfully generate and display SVG when all parameters are valid', async function () { - // Setup successful SVG generation - const mockSvgResult = createMockSvgResult() - svgGenerationServiceStub.generateDiffSvg.resolves(mockSvgResult) - - const sut = new EditsSuggestionSvgClass(itemStub, editorStub, languageClientStub, sessionStub) - await sut.show() - // Verify SVG generation was called with correct parameters - sinon.assert.calledOnce(svgGenerationServiceStub.generateDiffSvg) - sinon.assert.calledWith( - svgGenerationServiceStub.generateDiffSvg, - '/path/to/test/file.ts', - 'console.log("Hello World");' - ) - - // Verify display decoration was called with correct parameters - sinon.assert.calledOnce(displaySvgDecorationStub) - const ca = displaySvgDecorationStub.getCall(0) - assert.strictEqual(ca.args[0], editorStub) - assert.strictEqual(ca.args[1], mockSvgResult.svgImage) - assert.strictEqual(ca.args[2], mockSvgResult.startLine) - assert.strictEqual(ca.args[3], mockSvgResult.newCode) - assert.strictEqual(ca.args[4], mockSvgResult.originalCodeHighlightRange) - assert.strictEqual(ca.args[5], sessionStub) - assert.strictEqual(ca.args[6], languageClientStub) - assert.strictEqual(ca.args[7], itemStub) - assert.ok(Array.isArray(ca.args[8])) - assert.strictEqual(ca.args[8].length, 2) - - // Verify no errors were logged - sinon.assert.notCalled(loggerStub.error) - }) - - it('should log error when SVG generation returns empty result', async function () { - // Setup SVG generation to return undefined svgImage - const mockSvgResult = createMockSvgResult({ svgImage: undefined as any }) - svgGenerationServiceStub.generateDiffSvg.resolves(mockSvgResult) - - const sut = new EditsSuggestionSvgClass(itemStub, editorStub, languageClientStub, sessionStub) - await sut.show() - - // Verify SVG generation was called - sinon.assert.calledOnce(svgGenerationServiceStub.generateDiffSvg) - - // Verify display decoration was NOT called - sinon.assert.notCalled(displaySvgDecorationStub) - - // Verify error was logged - sinon.assert.calledOnce(loggerStub.error) - sinon.assert.calledWith(loggerStub.error, 'SVG image generation returned an empty result.') - }) - - it('should catch and log error when SVG generation throws exception', async function () { - // Setup SVG generation to throw an error - const testError = new Error('SVG generation failed') - svgGenerationServiceStub.generateDiffSvg.rejects(testError) - - const sut = new EditsSuggestionSvgClass(itemStub, editorStub, languageClientStub, sessionStub) - await sut.show() - - // Verify SVG generation was called - sinon.assert.calledOnce(svgGenerationServiceStub.generateDiffSvg) - - // Verify display decoration was NOT called - sinon.assert.notCalled(displaySvgDecorationStub) - - // Verify error was logged with correct message - sinon.assert.calledOnce(loggerStub.error) - const errorCall = loggerStub.error.getCall(0) - assert.strictEqual(errorCall.args[0], `Error generating SVG image: ${testError}`) - }) - - it('should catch and log error when displaySvgDecoration throws exception', async function () { - // Setup successful SVG generation - const mockSvgResult = createMockSvgResult() - svgGenerationServiceStub.generateDiffSvg.resolves(mockSvgResult) - - // Setup displaySvgDecoration to throw an error - const testError = new Error('Display decoration failed') - displaySvgDecorationStub.rejects(testError) - - const sut = new EditsSuggestionSvgClass(itemStub, editorStub, languageClientStub, sessionStub) - await sut.show() - - // Verify SVG generation was called - sinon.assert.calledOnce(svgGenerationServiceStub.generateDiffSvg) - - // Verify display decoration was called - sinon.assert.calledOnce(displaySvgDecorationStub) - - // Verify error was logged with correct message - sinon.assert.calledOnce(loggerStub.error) - const errorCall = loggerStub.error.getCall(0) - assert.strictEqual(errorCall.args[0], `Error generating SVG image: ${testError}`) - }) - - it('should use correct logger name', async function () { - const sut = new EditsSuggestionSvgClass(itemStub, editorStub, languageClientStub, sessionStub) - await sut.show() - - // Verify getLogger was called with correct name - sinon.assert.calledOnce(getLoggerStub) - sinon.assert.calledWith(getLoggerStub, 'nextEditPrediction') - }) - - it('should handle item with undefined insertText', async function () { - // Create item with undefined insertText - const itemWithUndefinedText = { - ...itemStub, - insertText: undefined, - } as any - - // Setup successful SVG generation - const mockSvgResult = createMockSvgResult() - svgGenerationServiceStub.generateDiffSvg.resolves(mockSvgResult) - - const sut = new EditsSuggestionSvgClass(itemWithUndefinedText, editorStub, languageClientStub, sessionStub) - await sut.show() - - // Verify SVG generation was called with undefined as string - sinon.assert.calledOnce(svgGenerationServiceStub.generateDiffSvg) - sinon.assert.calledWith(svgGenerationServiceStub.generateDiffSvg, '/path/to/test/file.ts', undefined) - }) -}) diff --git a/packages/amazonq/test/unit/app/inline/EditRendering/svgGenerator.test.ts b/packages/amazonq/test/unit/app/inline/EditRendering/svgGenerator.test.ts deleted file mode 100644 index 657ff5c2915..00000000000 --- a/packages/amazonq/test/unit/app/inline/EditRendering/svgGenerator.test.ts +++ /dev/null @@ -1,252 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as vscode from 'vscode' -import * as sinon from 'sinon' -import assert from 'assert' -import { SvgGenerationService } from '../../../../../src/app/inline/EditRendering/svgGenerator' - -describe('SvgGenerationService', function () { - let sandbox: sinon.SinonSandbox - let service: SvgGenerationService - let documentStub: sinon.SinonStubbedInstance - let workspaceStub: sinon.SinonStubbedInstance - let editorConfigStub: any - - beforeEach(function () { - sandbox = sinon.createSandbox() - - // Create stubs for vscode objects and utilities - documentStub = { - getText: sandbox.stub().returns('function example() {\n return 42;\n}'), - lineCount: 3, - lineAt: sandbox.stub().returns({ - text: 'Line content', - range: new vscode.Range(0, 0, 0, 12), - }), - } as unknown as sinon.SinonStubbedInstance - - workspaceStub = sandbox.stub(vscode.workspace) - workspaceStub.openTextDocument.resolves(documentStub as unknown as vscode.TextDocument) - workspaceStub.getConfiguration = sandbox.stub() - - editorConfigStub = { - get: sandbox.stub(), - } - editorConfigStub.get.withArgs('fontSize').returns(14) - editorConfigStub.get.withArgs('lineHeight').returns(0) - - // Create the service instance - service = new SvgGenerationService() - }) - - afterEach(function () { - sandbox.restore() - }) - - describe('generateDiffSvg', function () { - it('should handle empty original code', async function () { - // Create a new document stub for this test with empty content - const emptyDocStub = { - getText: sandbox.stub().returns(''), - lineCount: 0, - lineAt: sandbox.stub().returns({ - text: '', - range: new vscode.Range(0, 0, 0, 0), - }), - } as unknown as vscode.TextDocument - - // Make openTextDocument return our empty document - workspaceStub.openTextDocument.resolves(emptyDocStub as unknown as vscode.TextDocument) - - // A simple unified diff - const udiff = '--- a/example.js\n+++ b/example.js\n@@ -0,0 +1,1 @@\n+function example() {}\n' - - // Expect an error to be thrown - try { - await service.generateDiffSvg('example.js', udiff) - assert.fail('Expected an error to be thrown') - } catch (error) { - assert.ok(error) - assert.strictEqual((error as Error).message, 'udiff format error') - } - }) - }) - - describe('theme handling', function () { - it('should generate correct styles for dark theme', function () { - // Configure for dark theme - workspaceStub.getConfiguration.withArgs('editor').returns(editorConfigStub) - workspaceStub.getConfiguration.withArgs('workbench').returns({ - get: sandbox.stub().withArgs('colorTheme', 'Default').returns('Dark+ (default dark)'), - } as any) - - const getEditorTheme = (service as any).getEditorTheme.bind(service) - const theme = getEditorTheme() - - assert.strictEqual(theme.fontSize, 14) - assert.strictEqual(theme.lingHeight, 21) // 1.5 * 14 - assert.strictEqual(theme.foreground, 'rgba(212, 212, 212, 1)') - assert.strictEqual(theme.background, 'rgba(30, 30, 30, 1)') - }) - - it('should generate correct styles for light theme', function () { - // Reconfigure for light theme - editorConfigStub.get.withArgs('fontSize', 12).returns(12) - - workspaceStub.getConfiguration.withArgs('editor').returns(editorConfigStub) - workspaceStub.getConfiguration.withArgs('workbench').returns({ - get: sandbox.stub().withArgs('colorTheme', 'Default').returns('Light+ (default light)'), - } as any) - - const getEditorTheme = (service as any).getEditorTheme.bind(service) - const theme = getEditorTheme() - - assert.strictEqual(theme.fontSize, 12) - assert.strictEqual(theme.lingHeight, 18) // 1.5 * 12 - assert.strictEqual(theme.foreground, 'rgba(0, 0, 0, 1)') - assert.strictEqual(theme.background, 'rgba(255, 255, 255, 1)') - }) - - it('should handle custom line height settings', function () { - // Reconfigure for custom line height - editorConfigStub.get.withArgs('fontSize').returns(16) - editorConfigStub.get.withArgs('lineHeight').returns(2.5) - - workspaceStub.getConfiguration.withArgs('editor').returns(editorConfigStub) - workspaceStub.getConfiguration.withArgs('workbench').returns({ - get: sandbox.stub().withArgs('colorTheme', 'Default').returns('Dark+ (default dark)'), - } as any) - - const getEditorTheme = (service as any).getEditorTheme.bind(service) - const theme = getEditorTheme() - - assert.strictEqual(theme.fontSize, 16) - assert.strictEqual(theme.lingHeight, 40) // 2.5 * 16 - }) - - it('should generate CSS styles correctly', function () { - const theme = { - fontSize: 14, - lingHeight: 21, - foreground: 'rgba(212, 212, 212, 1)', - background: 'rgba(30, 30, 30, 1)', - diffAdded: 'rgba(231, 245, 231, 0.2)', - diffRemoved: 'rgba(255, 0, 0, 0.2)', - } - - const generateStyles = (service as any).generateStyles.bind(service) - const styles = generateStyles(theme) - - assert.ok(styles.includes('font-size: 14px')) - assert.ok(styles.includes('line-height: 21px')) - assert.ok(styles.includes('color: rgba(212, 212, 212, 1)')) - assert.ok(styles.includes('background-color: rgba(30, 30, 30, 1)')) - assert.ok(styles.includes('.diff-changed')) - assert.ok(styles.includes('.diff-removed')) - }) - }) - - describe('highlight ranges', function () { - it('should generate highlight ranges for word-level changes', function () { - const originalCode = ['function test() {', ' return 42;', '}'] - const afterCode = ['function test() {', ' return 100;', '}'] - const modifiedLines = new Map([[' return 42;', ' return 100;']]) - - const generateHighlightRanges = (service as any).generateHighlightRanges.bind(service) - const result = generateHighlightRanges(originalCode, afterCode, modifiedLines) - - // Should have ranges for the changed characters - assert.ok(result.removedRanges.length > 0) - assert.ok(result.addedRanges.length > 0) - - // Check that ranges are properly formatted - const removedRange = result.removedRanges[0] - assert.ok(removedRange.line >= 0) - assert.ok(removedRange.start >= 0) - assert.ok(removedRange.end > removedRange.start) - - const addedRange = result.addedRanges[0] - assert.ok(addedRange.line >= 0) - assert.ok(addedRange.start >= 0) - assert.ok(addedRange.end > addedRange.start) - }) - - it('should handle HTML escaping in highlight edits', function () { - const newLines = ['function test() {', ' return "";', '}'] - const highlightRanges = [{ line: 1, start: 10, end: 35 }] - - const getHighlightEdit = (service as any).getHighlightEdit.bind(service) - const result = getHighlightEdit(newLines, highlightRanges) - - assert.ok(result[1].includes('<script>')) - assert.ok(result[1].includes('</script>')) - assert.ok(result[1].includes('diff-changed')) - }) - }) - - describe('dimensions and positioning', function () { - it('should calculate dimensions correctly', function () { - const newLines = ['function test() {', ' return 42;', '}'] - const theme = { - fontSize: 14, - lingHeight: 21, - foreground: 'rgba(212, 212, 212, 1)', - background: 'rgba(30, 30, 30, 1)', - } - - const calculateDimensions = (service as any).calculateDimensions.bind(service) - const result = calculateDimensions(newLines, theme) - - assert.strictEqual(result.width, 287) - assert.strictEqual(result.height, 109) - assert.ok(result.height >= (newLines.length + 1) * theme.lingHeight) - }) - - it('should calculate position offset correctly', function () { - const originalLines = ['function test() {', ' return 42;', '}'] - const newLines = ['function test() {', ' return 100;', '}'] - const diffLines = [' return 100;'] - const theme = { - fontSize: 14, - lingHeight: 21, - foreground: 'rgba(212, 212, 212, 1)', - background: 'rgba(30, 30, 30, 1)', - } - - const calculatePosition = (service as any).calculatePosition.bind(service) - const result = calculatePosition(originalLines, newLines, diffLines, theme) - - assert.strictEqual(result.offset, 10) - assert.strictEqual(result.editStartLine, 1) - }) - }) - - describe('HTML content generation', function () { - it('should generate HTML content with proper structure', function () { - const diffLines = ['function test() {', ' return 42;', '}'] - const styles = '.code-container { color: white; }' - const offset = 20 - - const generateHtmlContent = (service as any).generateHtmlContent.bind(service) - const result = generateHtmlContent(diffLines, styles, offset) - - assert.ok(result.includes('
')) - assert.ok(result.includes('